Вычисление второй производной по разным переменным

Материал из MachineLearning.

(Различия между версиями)
Перейти к: навигация, поиск
(Постановка математической задачи)
(викификация, категория)
 
(13 промежуточных версий не показаны.)
Строка 3: Строка 3:
Допустим, что в некоторой точке <tex>x</tex> у функции <tex>f(x,y)</tex> существует производная 2-го порядка <tex>\frac{\partial^2 f(x,y)}{\partial x\ \partial y} </tex>, которую точно вычислить либо не удаётся, либо слишком сложно. В этом случае для приближенного нахождения производной функции требуется использовать методы численного дифференцирования.
Допустим, что в некоторой точке <tex>x</tex> у функции <tex>f(x,y)</tex> существует производная 2-го порядка <tex>\frac{\partial^2 f(x,y)}{\partial x\ \partial y} </tex>, которую точно вычислить либо не удаётся, либо слишком сложно. В этом случае для приближенного нахождения производной функции требуется использовать методы численного дифференцирования.
== Изложение метода ==
== Изложение метода ==
-
Сведем задачу нахождения смешанной производной по двум разным переменным к двум задачам нахождения производной по одной переменной.Рассмотрим формулу <tex>f_xy''</tex>= <tex>\frac{\partial^2 f(x,y)}{\partial x\ \partial y} </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(x_0+h_x,Y_0)</tex> и <tex>N(x_0-h_x,y_0)</tex>
 +
::<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(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'(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>
 +
== Заключение ==
 +
Погрешность найденной смешанной производной будет зависеть от погрешности нахождения производной одномерного случая.
 +
== Список использованной литературы ==
 +
* ''А.А.Самарский, А.В.Гулин.''&nbsp; Численные методы. Москва «Наука», 1989.
 +
 
 +
== См. также ==
 +
* [[Практикум ММП ВМК, 4й курс, осень 2008]]
 +
 
 +
{{stub}}
 +
[[Категория:Численное дифференцирование]]
 +
[[Категория:Учебные задачи]]

Текущая версия

Содержание

Введение

Постановка математической задачи

Допустим, что в некоторой точке x у функции f(x,y) существует производная 2-го порядка \frac{\partial^2 f(x,y)}{\partial x\ \partial y} , которую точно вычислить либо не удаётся, либо слишком сложно. В этом случае для приближенного нахождения производной функции требуется использовать методы численного дифференцирования.

Изложение метода

Рассмотрим формулу \frac{\partial^2 f(x,y)}{\partial x\ \partial y} =(f_x')_y'. Сведем задачу нахождения смешанной производной по двум разным переменным к задачам нахождения производной по одной переменной. Производную по одной переменной будем находить следующим образом - f'(x)=\frac{f(x+h) - f(x-h)}{2h}. Получается что для нахождения смешанной производной достаточно найти три одномерные производные и вычислить значение исходной функции в четырёх точках.

Для начала найдем две производные по y в точках M(x_0+h_x,Y_0) и N(x_0-h_x,y_0)
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}
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}

Затем найдем искомую производную по формуле f'(x_0)=\frac{f(x_0+h_x) - f(x_0-h_x)}{2h_x}=\frac{f(M)-f(N)}{2h_x}

Примеры работы метода

f(x)=sin(x)sin(y). Результаты для точки M(0,0), где значение второй смешанной производной ,подсчитанной аналитически, равно 1, для h_x=h_yприведены в таблице.

Значение h_x Абсолютная ошибка Относительная ошибка
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.

См. также

Личные инструменты