Вычисление второй производной по разным переменным
Материал из MachineLearning.
(→Изложение метода) |
(викификация, категория) |
||
| (8 промежуточных версий не показаны.) | |||
| Строка 4: | Строка 4: | ||
== Изложение метода == | == Изложение метода == | ||
Рассмотрим формулу <tex>\frac{\partial^2 f(x,y)}{\partial x\ \partial y} </tex>=<tex>(f_x')_y'</tex>. Сведем задачу нахождения смешанной производной по двум разным переменным к задачам нахождения производной по одной переменной. Производную по одной переменной будем находить следующим образом - <tex>f'(x)</tex>=<tex>\frac{f(x+h) - f(x-h)}{2h}</tex>. | Рассмотрим формулу <tex>\frac{\partial^2 f(x,y)}{\partial x\ \partial y} </tex>=<tex>(f_x')_y'</tex>. Сведем задачу нахождения смешанной производной по двум разным переменным к задачам нахождения производной по одной переменной. Производную по одной переменной будем находить следующим образом - <tex>f'(x)</tex>=<tex>\frac{f(x+h) - f(x-h)}{2h}</tex>. | ||
| - | Получается что для нахождения смешанной производной достаточно найти три одномерные производные и вычислить значение исходной функции в | + | Получается что для нахождения смешанной производной достаточно найти три одномерные производные и вычислить значение исходной функции в четырёх точках. |
| - | Для начала найдем две производные по y в точках <tex>M( | + | ::Для начала найдем две производные по y в точках <tex>M(x_0+h_x,Y_0)</tex> и <tex>N(x_0-h_x,y_0)</tex> |
| - | ::<tex>f( | + | ::<tex>f(x_0+h_x,y_0)_y' = \frac{f(x_0+h_x,y_0+h_y)-f(x_0+h_x,y_0-h_y)}{2h_y}</tex> |
| - | ::<tex>f( | + | ::<tex>f(x_0-h_x,y_0)_y' = \frac{f(x_0-h_x,y_0+h_y)-f(x_0-h_x,y_0-h_y)}{2h_y}</tex> |
| - | Затем найдем искомую производную по формуле <tex>f'( | + | Затем найдем искомую производную по формуле <tex>f'(x_0)</tex>=<tex>\frac{f(x_0+h_x) - f(x_0-h_x)}{2h_x}</tex>=<tex>\frac{f(M)-f(N)}{2h_x}</tex> |
| + | == Примеры работы метода == | ||
| + | <tex>f(x)</tex>=<tex>sin(x)sin(y)</tex>. | ||
| + | Результаты для точки M(0,0), где значение второй смешанной производной ,подсчитанной аналитически, равно 1, для <tex>h_x=h_y</tex>приведены в таблице. | ||
| + | ::{| border=1 | ||
| + | ! Значение <tex>h_x</tex>|| Абсолютная ошибка || Относительная ошибка || | ||
| + | |- | ||
| + | | 1e-1 || 3.3e-3 || 3.3e-3 | ||
| + | |- | ||
| + | | 1e-3 || 3.3e-7 || 3.3e-7 | ||
| + | |- | ||
| + | | 1e-5 || 3.3e-11 || 3.3e-11 | ||
| + | |- | ||
| + | | 1e-7 || 0 || 0 | ||
| + | |- | ||
| + | | 1e-9 || 0 || 0 | ||
| + | |} | ||
| + | Вычисления проводились в стандартном типе [http://en.wikipedia.org/wiki/Double_precision double] (позволяет хранить 15 значащих десятичных цифр) языка [http://ru.wikipedia.org/wiki/C%2B%2B C++]. | ||
| + | |||
| + | == Рекомендации программисту == | ||
| + | Пример кода на [http://ru.wikipedia.org/wiki/C%2B%2B C++] | ||
| + | <pre> | ||
| + | typedef double func(double ,double); | ||
| + | |||
| + | double SecondDerivative(func f,double x,double y,double hx,double hy) | ||
| + | { | ||
| + | return (f(x+hx,y+hy)-f(x+hx,y-hy)-f(x-hx,y+hy)+f(x-hx,y-hy))/(4*hx*hy); | ||
| + | } | ||
| + | </pre> | ||
| + | == Заключение == | ||
| + | Погрешность найденной смешанной производной будет зависеть от погрешности нахождения производной одномерного случая. | ||
| + | == Список использованной литературы == | ||
| + | * ''А.А.Самарский, А.В.Гулин.'' Численные методы. Москва «Наука», 1989. | ||
| + | |||
| + | == См. также == | ||
| + | * [[Практикум ММП ВМК, 4й курс, осень 2008]] | ||
| + | |||
| + | {{stub}} | ||
| + | [[Категория:Численное дифференцирование]] | ||
| + | [[Категория:Учебные задачи]] | ||
Текущая версия
Содержание |
Введение
Постановка математической задачи
Допустим, что в некоторой точке у функции
существует производная 2-го порядка
, которую точно вычислить либо не удаётся, либо слишком сложно. В этом случае для приближенного нахождения производной функции требуется использовать методы численного дифференцирования.
Изложение метода
Рассмотрим формулу =
. Сведем задачу нахождения смешанной производной по двум разным переменным к задачам нахождения производной по одной переменной. Производную по одной переменной будем находить следующим образом -
=
.
Получается что для нахождения смешанной производной достаточно найти три одномерные производные и вычислить значение исходной функции в четырёх точках.
- Для начала найдем две производные по y в точках
и
- Для начала найдем две производные по y в точках
Затем найдем искомую производную по формуле =
=
Примеры работы метода
=
.
Результаты для точки M(0,0), где значение второй смешанной производной ,подсчитанной аналитически, равно 1, для
приведены в таблице.
Значение Абсолютная ошибка Относительная ошибка 1e-1 3.3e-3 3.3e-3 1e-3 3.3e-7 3.3e-7 1e-5 3.3e-11 3.3e-11 1e-7 0 0 1e-9 0 0
Вычисления проводились в стандартном типе double (позволяет хранить 15 значащих десятичных цифр) языка C++.
Рекомендации программисту
Пример кода на C++
typedef double func(double ,double);
double SecondDerivative(func f,double x,double y,double hx,double hy)
{
return (f(x+hx,y+hy)-f(x+hx,y-hy)-f(x-hx,y+hy)+f(x-hx,y-hy))/(4*hx*hy);
}
Заключение
Погрешность найденной смешанной производной будет зависеть от погрешности нахождения производной одномерного случая.
Список использованной литературы
- А.А.Самарский, А.В.Гулин. Численные методы. Москва «Наука», 1989.

