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

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

(Различия между версиями)
Перейти к: навигация, поиск
(Изложение метода)
(Примеры работы метода)
Строка 11: Строка 11:
== Примеры работы метода ==
== Примеры работы метода ==
1)<tex>f(x)</tex>=<tex>sin(x)sin(y)</tex>.
1)<tex>f(x)</tex>=<tex>sin(x)sin(y)</tex>.
-
Результаты приведены в таблице.
+
Результаты для точки M(0,0), где значение второй смешанной производной ,подсчитанной аналитически, равно 1, для <tex>h_x=h_y</tex>приведены в таблице.
::{| border=1
::{| border=1
-
! Значение <tex>h_x</tex>|| Значение <tex>h_y</tex>|| Относительная ошибка ||
+
! Значение <tex>h_x</tex>|| Абсолютная ошибка || Относительная ошибка ||
|-
|-
-
| 1e-2 || 1.7e-5 || 2e-15
+
| 1e-1 || 0.003328892062 || 0.003328892062
|-
|-
-
| 1e-4 || 1.7e-9 || 4e-11
+
| 1e-3 || 3.33333e-7 || 3.33333e-7
|-
|-
-
| 1e-6 || 2.2e-5 || 5e-5
+
| 1e-5 || 3.3e-11 || 3.3e-11
|-
|-
-
| 1e-8 || 0.8 || 1.6
+
| 1e-7 || 0 || 0
|-
|-
-
| 1e-9 || 0.97 || 0.98
+
| 1e-9 || 0 || 0
|}
|}
Вычисления проводились в стандартном типе [http://en.wikipedia.org/wiki/Double_precision double] (позволяет хранить 15 значащих десятичных цифр) языка [http://ru.wikipedia.org/wiki/C%2B%2B C++].
Вычисления проводились в стандартном типе [http://en.wikipedia.org/wiki/Double_precision double] (позволяет хранить 15 значащих десятичных цифр) языка [http://ru.wikipedia.org/wiki/C%2B%2B C++].
Видно, что при слишком малом шаге полученные значения неадекватны.
Видно, что при слишком малом шаге полученные значения неадекватны.

Версия 19:45, 20 октября 2008

Содержание

Введение

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

Допустим, что в некоторой точке 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}

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

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

Значение h_x Абсолютная ошибка Относительная ошибка
1e-1 0.003328892062 0.003328892062
1e-3 3.33333e-7 3.33333e-7
1e-5 3.3e-11 3.3e-11
1e-7 0 0
1e-9 0 0

Вычисления проводились в стандартном типе double (позволяет хранить 15 значащих десятичных цифр) языка C++.

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