2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2  След.
 
 Численное дифференцирование непериодической функции
Сообщение22.07.2015, 19:01 
Аватара пользователя
Здравствуйте!
Дана функция одной переменной.
Как известно, формула для вычисления производной функции на равномерной сетке по двум соседним точкам обладает весьма большой погрешностью:
$y'\left( {x_0 } \right) = \frac{{y\left( {x_1 } \right) - y\left( {x_0 } \right)}}{{\Delta x}}$
Если организуется какой-то итерационный процесс, внутри которого приходится вычислять производные, то лучше (с целью обеспечения сходимости) пользоваться другими формулами, например:
$y'\left( {x_1 } \right) = \frac{{y\left( {x_2 } \right) - y\left( {x_0 } \right)}}{{2\Delta x}}$
или т.н. первой формулой Рунге:
$y'\left( {x_2 } \right) = \frac{4}{3}\frac{{y\left( {x_3 } \right) - y\left( {x_1 } \right)}}{{2\Delta x}} - \frac{1}{3}\frac{{y\left( {x_4 } \right) - y\left( {x_0 } \right)}}{{4\Delta x}}$
Но эти формулы напрямую не позволяют вычислять производные в крайних узлах сетки.
Если процесс периодический (допустим переменная, по которой берётся производная - это время), то проблема при вычислении производной в крайних узлах отпадает.
Если процесс непериодический, то в крайних узлах можно вычислять производные по двум соседним точкам, а в остальных узлах - по более точным формулам. Но как показывает опыт, этот способ неэффективен.
Посоветуйте, как лучше решить эту проблему

 
 
 
 Re: Численное дифференцирование непериодической функции
Сообщение23.07.2015, 10:10 
Аватара пользователя
Fgolm в сообщении #1039552 писал(а):
Если процесс непериодический, то в крайних узлах можно вычислять производные по двум соседним точкам, а в остальных узлах - по более точным формулам. Но как показывает опыт, этот способ неэффективен.
Посоветуйте, как лучше решить эту проблему
В крайних узлах можно вычислять производные по 3 соседним точкам. По 4 соседним точкам. Все точнее и точнее.

 
 
 
 Re: Численное дифференцирование непериодической функции
Сообщение23.07.2015, 20:56 
Аватара пользователя
TOTAL в сообщении #1039723 писал(а):
В крайних узлах можно вычислять производные по 3 соседним точкам. По 4 соседним точкам. Все точнее и точнее.

Тогда производная вычисленная в крайнем узле будет равна производной, вычисленной в соседнем узле.

 
 
 
 Re: Численное дифференцирование непериодической функции
Сообщение23.07.2015, 21:58 
Fgolm в сообщении #1039934 писал(а):
Тогда производная вычисленная в крайнем узле будет равна производной, вычисленной в соседнем узле.

Не будет.

Нет вообще никаких "формул Рунге" -- есть лишь тупо результаты дифференцирования интерполяционного многочлена с последующей подстановкой. Чем больше брать узлов интерполирования, тем выше точность и выйдет.

 
 
 
 Re: Численное дифференцирование непериодической функции
Сообщение24.07.2015, 10:21 
Аватара пользователя
Пусть имеется $n + 1$ узлов.
Вычислим производную в узле под номером 1 по трём точкам:
$y'_1  = \frac{{y_2  - y_0 }}{{2\Delta x}}$
Как будет выглядеть производная в узле под номером 0, если значение в узле -1 неизвестно, поскольку функция непериодическая?

 
 
 
 Re: Численное дифференцирование непериодической функции
Сообщение24.07.2015, 10:35 
Аватара пользователя
Интерполируйте (или, если известно, что функция с погрешностью, аппроксимируйте) Вашу функцию сплайном третьей степени, например. И от него берите производную, хоть вторую.

 
 
 
 Re: Численное дифференцирование непериодической функции
Сообщение24.07.2015, 11:48 
Fgolm в сообщении #1040060 писал(а):
Как будет выглядеть производная в узле под номером 0,

$y'_0 = \frac{{-y_2+4y_1 - 3y_0 }}{{2\Delta x}}$

 
 
 
 Re: Численное дифференцирование непериодической функции
Сообщение24.07.2015, 11:55 
Аватара пользователя
ewert, поясните

 
 
 
 Re: Численное дифференцирование непериодической функции
Сообщение24.07.2015, 12:45 
Аватара пользователя
$y_0=y_0, y_1=y_0+y`_0 \Delta +0.5 y``_0 \Delta ^2, y_2=y_0+2 y`_0 \Delta +2 y``__0  \Delta ^2$. Будем искать производную в нуле в виде линейной комбинации $y`_0=c_0 y_0+ c_1 y_1+ c_2 y_2$. Дальше подсказки требуются?

Метод обобщается на приближения более высокой точности, с большим количеством точек.

 
 
 
 Re: Численное дифференцирование непериодической функции
Сообщение24.07.2015, 14:40 
Аватара пользователя
Fgolm в сообщении #1039552 писал(а):
Если процесс непериодический, то в крайних узлах можно вычислять производные по двум соседним точкам, а в остальных узлах - по более точным формулам. Но как показывает опыт, этот способ неэффективен.
Посоветуйте, как лучше решить эту проблему
Собственно, один совет Вам уже дали: построить интерполяционный полином и дифференцировать его. Единственное, к чему надо относиться осторожно — это к увеличению числа узлов. Вот пример с интерполяцией функции $f(x)=\frac 1{1+100x^2}$ на отрезке $[0;2]$ по 11 точкам (с шагом $0{,}2$) полиномом 10 степени
Вложение:
Poly10.gif

и по 21 точке (с шагом $0{,}1$) полиномом 20 степени
Вложение:
Poly20.gif

Сверху — графики функции и интерполяционного многочлена (на отрезке $[1{,}5;2]$), снизу — графики их производных.
Наглядно видно, что вблизи правого конца отрезка с увеличением числа узлов погрешность интерполяции и самой функции, и её производной увеличилась, несмотря на двукратное уменьшение шага.

Другой совет тоже дали: использовать формулу Тейлора. Только лучше это сделать аккуратнее. Я буду писать $y_i$ вместо $f(x_i)$ и $h$ вместо $\Delta x$.
Пусть у нас есть три равноотстоящие точки $x_0,x_1,x_2$ с шагом $h$. Записывая формулу Тейлора в этих точках, получим $$f(x)=f(x_i)+\frac{f'(x_i)}{1!}(x-x_i)+\frac{f''(x_i)}{2!}(x-x_i)^2+o\left((x-x_i)^2\right),\quad i=0,1,2,$$ то есть, $$f(x)=y_i+y'_i(x-x_i)+\frac{y''_i}2(x-x_i)^2+o\left((x-x_i)^2\right),\quad i=0,1,2.$$
Далее, например, для $i=0$, подставляем $x=x_0,x_1,x_2$ и получаем систему равенств $$\begin{cases}y_0=y_0,\\y_1=y_0+y'_0h+\frac{y''_0}2h^2+o(h^2),\\y_2=y_0+2y'_0h+2y''_0h^2+o(h^2).\end{cases}$$ Первое равенство тривиальное, а из двух других нужно исключить $y''_0$. Для этого второе равенство умножаем на $4$ и вычитаем третье: $4y_1-y_2=3y_0+2y'_ih+o(h^2)$, откуда $$y'_0=\frac{-3y_0+4y_1-y_2}{2h}+o(h),$$ что согласуется с тем, что написал ewert.

Аналогично получаются формулы для $y'_1$ и $y'_2$, а также формулы при большем числе точек.


У вас нет доступа для просмотра вложений в этом сообщении.

 
 
 
 Re: Численное дифференцирование непериодической функции
Сообщение24.07.2015, 15:06 
Fgolm в сообщении #1040096 писал(а):
ewert, поясните

Смысл? Откройте же наконец любую книжку по численным методам.

Someone в сообщении #1040144 писал(а):
$$y'_0=\frac{-3y_0+4y_1-y_2}{2h}+o(h),$$

Запись плохая: надо не $o(h)$, а $O(h^2)$. Поскольку речь не об анализе, а о вычислительной математике -- разница довольно принципиальна.

 
 
 
 Re: Численное дифференцирование непериодической функции
Сообщение24.07.2015, 16:42 
Аватара пользователя
Someone, спасибо!

 
 
 
 Re: Численное дифференцирование непериодической функции
Сообщение24.07.2015, 18:06 
Аватара пользователя
ewert в сообщении #1040148 писал(а):
Запись плохая: надо не $o(h)$, а $O(h^2)$.
Если функция имеет непрерывную третью производную.

 
 
 
 Re: Численное дифференцирование непериодической функции
Сообщение24.07.2015, 18:16 
Someone в сообщении #1040204 писал(а):
Если функция имеет непрерывную третью производную.

Достаточно ограниченности, но не в этом дело. Это в анализе достаточно абы каких оценок -- лишь бы давали качественный результат. Здесь же результаты нужны количественные, потому и оценки требуются квалифицированные.

 
 
 
 Re: Численное дифференцирование непериодической функции
Сообщение24.07.2015, 19:27 
Аватара пользователя
ewert в сообщении #1040207 писал(а):
Достаточно ограниченности
Да.

ewert в сообщении #1040207 писал(а):
Здесь же результаты нужны количественные, потому и оценки требуются квалифицированные.
Если гладкость функции недостаточная, погрешность формулы растёт. В том числе и вместо $O(h^2)$ легко может получиться $o(h)$. А если и второй производной нет, то ещё хуже. А я не помню, чтобы гладкость функции где-то в теме указывалась.

Но если нужны количественные оценки погрешности, то с самого начала вместо $o(h^2)$ нужно писать остаточный член в соответствующей форме. Или получать оценки каким-то другим способом.

 
 
 [ Сообщений: 17 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group