數(shù)值計算day7-數(shù)值微分

上一節(jié)課主要介紹了曲線擬合與插值,曲線擬合主要包括線性擬合(單特征線性回歸和非線性擬合(非線性方程特征變換、高階多項式擬合)旬陡,插值包括多項式插值(拉格朗日形式、牛頓形式)语婴、樣條插值(線性插值季惩、二次樣條插值录粱、三次樣條插值),其中三次樣條插值還有一個便于求解的拉格朗日形式画拾。這里的曲線擬合與機器學(xué)習(xí)中的回歸問題非常相似啥繁,具有很大的參考意義。本節(jié)課主要介紹幾種求解微分的數(shù)值方法青抛。

1. 有限差分法

給定一個函數(shù)f(x)旗闽,f(x)x=a處的微分f'(x)定義為:\frac{df(x)}{dx}|_{x=a}=f'(a)=\lim_{x\rightarrow} \frac{f(x)-f(a)}{x-a} 圖上的解釋是f(x)x=a處的斜率:

image.png

前向、后向以及中心差分法是最簡單的有限差分法:

  • 前向差分:\frac{df}{dx}|_{x=x_i}=\frac{f(x_{i+1})-f(x_i)}{x_{i+1}-x_i}

  • 后向差分:\frac{df}{dx}|_{x=x_i}=\frac{f(x_{i})-f(x_{i-1})}{x_{i}-x_{i-1}}

  • 中心差分:\frac{df}{dx}|_{x=x_i}=\frac{f(x_{i+1})-f(x_{i-1})}{x_{i+1}-x_{i-1}}

image.png

例:f(x)=x^3蜜另,計算f(x)x=3處的微分
(a) x=2,x=3,x=4
真實值:f'(x)=3x^2,f'(3)=27
前向差分:f'(3)=\frac{f(4)-f(3)}{4-3}=64-27=37
后向差分:f'(3)=\frac{f(3)-f(2)}{3-2}=27-8=19
中心差分:f'(3)=\frac{f(4)-f(2)}{4-2}=\frac{64-8}{2}=28
(b) x=2.75,x=3,x=3.25
前向差分:f'(3)=\frac{f(3.25)-f(3)}{0.25}=29.3125
后向差分:f'(3)=\frac{f(3)-f(2.75)}{0.25}=24.8125
中心差分:f'(3)=27.0625

可以看到中心差分最為準(zhǔn)確适室,且兩點間距變小時,差分計算會更為準(zhǔn)確举瑰。
MATLAB實現(xiàn):

function dx = derivative(x,y)
% derivative calculates the derivative of a function that is given by a set
% of points. The derivative at the first and last points are calculated by
% using the forward and backward finite difference formula, respectively.
% The derivative at all the other points is calculated by the central
% finite difference formula.
% Input variables:
% x  A vector with the coordinates x of the data points.
% y  A vector with the coordinates y of the data points.
% Output variable:
% dx  A vector with the value of the derivative at each point.

n = length(x);
dx(1)=(y(2)-y(1))/(x(2)-x(1));
for i=2:n-1
    dx(i)=(y(i+1)-y(i-1))/(x(i+1)-x(i-1));
end
dx(n)=(y(n)-y(n-1))/(x(n)-x(n-1));

2. 泰勒公式有限差分法

2.1 一階微分(兩點法)
  • 前向展開:
    f(x)在點x_{i+1}處的值可以使用如下泰勒公式來逼近:f(x_{i+1})=f(x_i)+f'(x_i)h+\frac{1}{2!}f''(x_i)h^2+\frac{1}{3!}f'''(\xi_1)h^3 其中h=x_{i+1}-x_i,\xi_1x_{i+1}x_i之間的數(shù)捣辆。求解該公式,有:f'(x_i)=\frac{f(x_{i+1})-f(x_i)}{h}-\frac{1}{2!}f''(x_i)h-\frac{1}{3!}f'''(\xi_1)h^2=\frac{f(x_{i+1})-f(x_i)}{h}+O(h) 等同于之前的前向差分汽畴,具有一階準(zhǔn)確度

  • 后向展開:
    f(x)在點x_{i-1}處的值可以使用如下泰勒公式來逼近:f(x_{i-1})=f(x_i)-f'(x_i)h+\frac{1}{2!}f''(x_i)h^2-\frac{1}{3!}f'''(\xi_2)h^3 其中h=x_{i}-x_{i-1},\xi_1x_{i-1}x_i之間的數(shù)。求解該公式忍些,有:f'(x_i)=\frac{f(x_{i})-f(x_{i-1})}{h}+\frac{1}{2!}f''(x_i)h-\frac{1}{3!}f'''(\xi_2)h^2=\frac{f(x_{i})-f(x_{i-1})}{h}+O(h) 等同于之前的后向差分坎怪,具有一階準(zhǔn)確度

  • 中心展開(假設(shè)間距相同)
    結(jié)合上述兩種展開,可以得到:f(x_{i+1})-f(x_{i-1})=2hf'(x_i)+\frac{1}{3!}(f'''(\xi_1)+f'''(\xi_2))h^3 因此有 f'(x_i)=\frac{f(x_{i+1})-f(x_{i-1})}{2h}+O(h^2) 等同于之前的中心差分搅窿,可以看到,具有二階準(zhǔn)確度

2.2 一階微分(三點法)

分別寫出x_{i-2},x_{i-1},x_{i+1},x_{i+2}四點的泰勒展開:

  • f(x_{i+1})=f(x_i)+f'(x_i)h+\frac{1}{2!}f''(x_i)h^2+\frac{1}{3!}f'''(\xi_1)h^3

  • f(x_{i-1})=f(x_i)-f'(x_i)h+\frac{1}{2!}f''(x_i)h^2-\frac{1}{3!}f'''(\xi_2)h^3

  • f(x_{i+2})=f(x_i)+f'(x_i)2h+\frac{1}{2!}f''(x_i)(2h)^2+\frac{1}{3!}f'''(\xi_3)(2h)^3

  • f(x_{i-2})=f(x_i)-f'(x_i)2h+\frac{1}{2!}f''(x_i)(2h)^2-\frac{1}{3!}f'''(\xi_4)(2h)^3

可以看到:f(x_{i+2})-4f(x_{i+1})=-3f(x_i)-2f'(x_i)h+\frac{f'''(\xi_3)}{3!}(2h)^3-\frac{4}{3!}f'''(\xi_1)h^3 進一步得:f'(x_i)=\frac{-3f(x_i)+4f(x_{i+1})-f(x_{i+2})}{2h}+O(h^2) 這是一階微分的三點前向公式男应,具有二階準(zhǔn)確度痹仙,類似地,可以得到如下具有二階準(zhǔn)確度的三點后向公式f'(x_i)=\frac{f(x_{i-2})-4f(x_{i-1})+3f(x_i)}{2h}+O(h^2)

2.3 二階微分(三點法)

注意:

  • f(x_{i+1})=f(x_i)+f'(x_i)h+\frac{1}{2!}f''(x_i)h^2+\frac{1}{3!}f'''(x_i)h^3+\frac{1}{4!}f^{(4)}(\xi_1)h^4

  • f(x_{i-1})=f(x_i)-f'(x_i)h+\frac{1}{2!}f''(x_i)h^2-\frac{1}{3!}f'''(x_i)h^3+\frac{1}{4!}f^{(4)}(\xi_2)h^4

  • f(x_{i+2})=f(x_i)+f'(x_i)2h+\frac{1}{2!}f''(x_i)(2h)^2+\frac{1}{3!}f'''(x_i)(2h)^3+\frac{1}{4!}f^{(4)}(\xi_3)(2h)^4

  • f(x_{i-2})=f(x_i)-f'(x_i)2h+\frac{1}{2!}f''(x_i)(2h)^2-\frac{1}{3!}f'''(x_i)(2h)^3+\frac{1}{4!}f^{(4)}(\xi_4)(2h)^4

前面兩式相加殉了,得 f(x_{i+1})+f(x_{i-1})=2f(x_i)+f''(x_i)h^2+\frac{1}{4!}f^{(4)}(\xi_1)h^4+\frac{1}{4!}f^{(4)}(\xi_2)h^4 可得f''(x_i)=\frac{f(x_{i+1})-2f(x_i)+f(x_{i-1})}{h^2}+O(h^2) 此即為三點中心差分公式开仰,具有二階準(zhǔn)確度。類似地薪铜,推導(dǎo)可得如下五點中心差分公式f''(x_i)=\frac{-f(x_{i-2})+16f(x_{i-1})-30f(x_i)+16f(x_{i+1})-f(x_{i+2})}{12h^2}+O(h^4) 具有四階準(zhǔn)確度众弓。

另一方面:f(x_{i+2})-2f(x_{i+1})=-f(x_i)+f''(x_i)h^2+\frac{6f'''(x_i)}{3!}h^3+\frac{1}{4!}f^{(4)}(\xi_3)(2h)^4-\frac{2}{4!}f^{(4)}(\xi_1)h^4 可得 f''(x_i)=\frac{f(x_i)-2f(x_{i+1})+f(x_{i+2})}{h^2}+O(h) 此即為三點前向差分公式,具有一階準(zhǔn)確度隔箍,類似可得如下具有一階準(zhǔn)確度三點后向差分公式f''(x_i)=\frac{f(x_{i-2})-2f(x_{i-1})+f(x_{i})}{h^2}+O(h)

MATLAB實現(xiàn):

function [yd,ydd] = FirstScndDerivPt(x,y)
n = length(x);
h = x(2)-x(1);
%  首個數(shù)據(jù)谓娃,一階導(dǎo)數(shù)使用三點前向差分,二階導(dǎo)數(shù)使用4點前向差分
yd(1) = (-3*y(1)+4*y(2)-y(3))/(2*h);
ydd(1) = (2*y(1)-5*y(2)+4*y(3)-y(4))/(h^2);

% 中間數(shù)據(jù),一階導(dǎo)數(shù)使用兩點中心差分蜒滩,二階導(dǎo)數(shù)使用三點中心差分
for i=2:n-1
    yd(i)=(y(i+1)-y(i-1))/(2*h);
    ydd(i)=(y(i-1)-2*y(i)+y(i+1))/(h^2);
end

% 末尾數(shù)據(jù)滨达,一階導(dǎo)數(shù)使用三點后向差分奶稠,二階導(dǎo)數(shù)使用4點后向差分
yd(n) = (y(n-2)-4*y(n-1)+3*y(n))/(2*h);
ydd(n) = (-y(n-3)+4*y(n-2)-5*y(n-1)+2*y(n))/(h^2);
figure
subplot(3,1,1)
plot(x,y)
subplot(3,1,2)
plot(x,yd)
subplot(3,1,3)
plot(x,ydd)
end

3. 拉格朗日多項式求導(dǎo)公式

對點(x_i,y_i),(x_{i+1},y_{i+1}),(x_{i+2},y_{i+2})進行拉格朗日多項式插值,有 f(x)=\frac{(x-x_{i+1})(x-x_{i+2})}{(x_i-x_{i+1})(x_i-x_{i+2})}y_i+\frac{(x-x_{i})(x-x_{i+2})}{(x_{i+1}-x_{i})(x_{i+1}-x_{i+2})}y_{i+1} +\frac{(x-x_{i})(x-x_{i+1})}{(x_{i+2}-x_{i})(x_{i+2}-x_{i+1})}y_{i+2}
此時 f'(x)=\frac{2x-x_{i+1}-x_{i+2}}{(x_i-x_{i+1})(x_i-x_{i+2})}y_i+\frac{2x-x_{i}-x_{i+2}}{(x_{i+1}-x_{i})(x_{i+1}-x_{i+2})}y_{i+1} +\frac{2x-x_{i}-x_{i+1}}{(x_{i+2}-x_{i})(x_{i+2}-x_{i+1})}y_{i+2} 因此f'(x_i)=\frac{2x_i-x_{i+1}-x_{i+2}}{(x_i-x_{i+1})(x_i-x_{i+2})}y_i+\frac{x_{i}-x_{i+2}}{(x_{i+1}-x_{i})(x_{i+1}-x_{i+2})}y_{i+1} +\frac{x_{i}-x_{i+1}}{(x_{i+2}-x_{i})(x_{i+2}-x_{i+1})}y_{i+2} 當(dāng)x_{i+1}-x_i=x_{i+2}-x_{i+1}=h時捡遍,有 f'(x_i)=\frac{-3y_i+4y_{i+1}-y_{i+2}}{2h} 此式與三點前向差分公式一致锌订。

4. 數(shù)值偏微分

image.png

對二元函數(shù) ,其在點處的偏微分定義為: 對一階偏微分画株,辆飘,兩點前向公式為: 兩點后向公式為:
兩點中心差分公式: 對二階偏微分,三點中心差分公式為: 對二階偏微分谓传,逐步計算即可:
MATLAB實現(xiàn):

function [dfdx,dfdy] = ParDer(x,y,f)
n = length(x);
m = length(y);
hx = x(2)-x(1);
hy = y(2)-y(1);

% 首位數(shù)據(jù)使用三點前向
for j = 1:m
    dfdx(1,j) = (-3*f(1,j)+4*f(2,j)-f(3,j))/(2*hx);
end 
for i = 1:n
    dfdy(i,1) = (-3*f(i,1)+4*f(i,2)-f(i,3))/(2*hy);
end

% 兩點中心差分
for i = 2:n-1
    for j = 1:m
        dfdx(i,j) = (f(i+1,j)-f(i-1,j))/(2*hx);
    end
end

for j = 2:m-1
    for i = 1:n
        dfdy(i,j) = (f(i,j+1)-f(i,j-1))/(2*hy);
    end
end

% 末尾數(shù)據(jù)使用三點后向
for j = 1:m
dfdx(n,j) = (f(n-2,j)-4*f(n-1,j)+3*f(n,j))/(2*hx);
end

for i = 1:n
    dfdy(i,m) = (f(i,m-2)-4*f(i,m-1)+3*f(i,m))/(2*hy);
end

end

5. Richardson外推加速算法

Richardson外推加速算法能夠把兩個低精度的方法組合成一個高精度的計算方法蜈项,假設(shè)D=D(h)+k_2h^2+k_4h^4是一種數(shù)值微分計算方法,D(h)是估計的微分续挟,k_2h^2k_4h^4是估計誤差紧卒,可以看到,具有二階精度诗祸,如果把間距調(diào)整為\frac{h}{2},則D=D(\frac{h}{2})+k_2(\frac{h}{2})^2+k_4(\frac{h}{2})^4 其精度仍是二階的贬媒。但是有:4D-D=4D(\frac{h}{2})-D(h)-\frac{3}{4}k_4h^4 因此肘习,D=\frac{1}{3}(4D(\frac{h}{2})-D(h))+O(h^4) 可以看到,具有四階精度脖含。

舉個例子投蝉,考慮一階微分的兩點中心差分法(二階精度):f'(x_i)=\frac{f(x_{i+1})-f(x_{i-1})}{2h}+\frac{1}{3!}f'''(x_i)h^2+O(h^4) =\frac{f(x_{i}+h)-f(x_{i}-h)}{2h}+\frac{1}{3!}f'''(x_i)h^2+O(h^4) 縮短間距瘩缆,有 f'(x_i)=\frac{f(x_{i+1})-f(x_{i-1})}{h}+\frac{1}{3!}f'''(x_i)(\frac{h}{2})^2+O(h^4) =\frac{f(x_{i}+\frac{h}{2})-f(x_{i}-\frac{h}{2})}{h}+\frac{1}{3!}f'''(x_i)(\frac{h}{2})^2+O(h^4) 按照Richardson外推加速算法,有 4f'(x_i)=4\frac{f(x_{i}+\frac{h}{2})-f(x_{i}-\frac{h}{2})}{h}+\frac{4}{3!}f'''(x_i)(\frac{h}{2})^2+4O(h^4) 進一步 3f'(x_i)=[4\frac{f(x_{i}+\frac{h}{2})-f(x_{i}-\frac{h}{2})}{h}-\frac{f(x_{i}+h)-f(x_{i}-h)}{2h}]+3O(h^4) 因此 f'(x_i)=\frac{1}{3}[4\frac{f(x_{i}+\frac{h}{2})-f(x_{i}-\frac{h}{2})}{h}-\frac{f(x_{i}+h)-f(x_{i}-h)}{2h}]+O(h^4) 可以看到着绊,精度提高到了四階归露。

6. 總結(jié)

本節(jié)課主要介紹了一些數(shù)值微分算法斤儿,對于一階微分恐锦,最常用的有兩點前向差分(精度為O(h))一铅、兩點后向差分(精度為O(h))以及兩點中心差分算法(精度為O(h^2))枚粘,其表達式均可以通過處理泰勒展開式來得到。通過處理泰勒展開式還可以得到一階微分的三點前向差分和三點后向差分算法福也,精度與兩點中心差分一致攀圈。對于二階微分,同樣可以利用泰勒展開赘来,得到三點前向差分、三點后向差分以及三點中心差分算法嗦篱。另一方面幌缝,還可以通過拉格朗日插值公式,得到相應(yīng)的微分計算公式浴栽。這些公式又都可以很容易推廣到多元函數(shù)的數(shù)值微分中去轿偎。最后,對于兩個精度不高的微分算法萝玷,可以通過Richardson外推加速算法得到一個精度更高的算法,在實際問題中具有很廣泛的應(yīng)用球碉。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挖诸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子痴突,更是在濱河造成了極大的恐慌,老刑警劉巖辽装,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異殉挽,居然都是意外死亡拓巧,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門傻唾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來承耿,“玉大人冠骄,你說我怎么就攤上這事凛辣≈吧眨” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵跋理,是天一觀的道長恬总。 經(jīng)常有香客問我肚邢,道長,這世上最難降的妖魔是什么骡湖? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任响蕴,我火速辦了婚禮,結(jié)果婚禮上辖试,老公的妹妹穿的比我還像新娘。我一直安慰自己罐孝,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布汹来。 她就那樣靜靜地躺著改艇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪闺阱。 梳的紋絲不亂的頭發(fā)上舵变,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天纪隙,我揣著相機與錄音,去河邊找鬼绵咱。 笑死,一個胖子當(dāng)著我的面吹牛艾恼,可吹牛的內(nèi)容都是我干的麸锉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼柳爽,長吁一口氣:“原來是場噩夢啊……” “哼磷脯!你這毒婦竟也來了娩脾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤俩功,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后展辞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體万牺,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡罗珍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年覆旱,在試婚紗的時候發(fā)現(xiàn)自己被綠了核无。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡噪沙,死狀恐怖正歼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情局义,我是刑警寧澤冗疮,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站术幔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏特愿。R本人自食惡果不足惜勾缭,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望毒嫡。 院中可真熱鬧,春花似錦努释、人聲如沸咬摇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽在扰。三九已至,卻和暖如春芒珠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背裹芝。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工局雄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留存炮,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓宫盔,卻偏偏與公主長得像享完,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子般又,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 何謂數(shù)值分析茴迁? 眾所周知現(xiàn)實生活中科學(xué)技術(shù)上面的問題大多數(shù)都能夠通過建立對應(yīng)的數(shù)學(xué)模型把實際問題轉(zhuǎn)化成一個數(shù)學(xué)問題...
    羅澤坤閱讀 8,778評論 0 14
  • 計算機配色發(fā)展了許多年堕义,但仍不能滿足使用需求,歸根結(jié)底是由于其理論存在一些問題洒擦,使得其應(yīng)用受到一定限制。如果可以找...
    申申申申申申閱讀 1,807評論 0 2
  • 最近一段時間在復(fù)習(xí)數(shù)值計算相關(guān)內(nèi)容秦踪,也恰逢簡書斷更了掸茅,不用每天督促著自己非要更出點什么東西才好,有更多的空間來打磨...
    抄書俠閱讀 1,238評論 0 6
  • 寫在前面:關(guān)于為何要寫這個筆記希坚? 關(guān)于學(xué)習(xí)與遺忘,在考完這門課后裁僧,我還能記得些什么呢慕购?引用mbinary的文章:h...
    冬風(fēng)十里Y閱讀 1,399評論 0 1
  • 概率論與數(shù)理統(tǒng)計 無窮小階數(shù) 無窮小量表述:線性逼近 相當(dāng)于利用切線和斜率來理解誤差和逼近沪悲。 泰勒級數(shù):線性逼近 ...
    Babus閱讀 808評論 0 1