【數值分析】二元函數二階混合偏導數的近似計算式與誤差階推導

二元函數二階混合偏導數的近似計算式與誤差階推導

問題

假設f(x,y)f(x,y)在全平面內存在且足夠的光滑,求fxy(x0,y0)f_{xy}(x_0,y_0)的計算式與誤差階

引理一:

fxy(x0,y0),fyx(x0,y0)f_{xy}(x_0,y_0),f_{yx}(x_0,y_0)均在(x0,y0)(x_0,y_0)處存在且連續,則fxy(x0,y0)=fyx(x0,y0)f_{xy}(x_0,y_0)=f_{yx}(x_0,y_0)

引理二:

DR2D \subset R^2爲一區域,函數f(x,y)C2(D)f(x,y)\in C^{2}(D),且(x0,y0)D,(x0+h,y0+k)D(x_0,y_0)\in D,(x_0+h,y_0+k) \in D,則有二元函數帶皮亞諾餘項的泰勒公式
f(x0+h,y0+k)=f(x0,y0)+hfx(x0,y0)+kfy(x0,y0)+h2fxx(x0,y0)+2hkfxy(x0,y0)+k2fyy(x0,y0)2+o(ρ2)f(x_0+h,y_0+k)=f(x_0,y_0)+hf_x(x_0,y_0)+kf_y(x_0,y_0)+\frac{h^2f_{xx}(x_0,y_0)+2hkf_{xy}(x_0,y_0)+k^2f_{yy}(x_0,y_0)}{2}+o(\rho^2)
其中,ρ=h2+k2\rho=\sqrt{h^2+k^2}

引理三:

(一元函數帶拉格朗日餘項的泰勒公式)設函數f(x)在包含點x0x_0的區間(a,b)內具有指導n+1階的導數,則對任意x(a,b)x\in(a,b)都有
f(x)=f(x0)+f(x0)(xx0)+12!f(x0)(xx0)2+...+1n!f(n)(x0)(xx0)n+Rn(x)f(x)=f(x_0)+f^{'}(x_0)(x-x_0)+\frac{1}{2!}f^{''}(x_0)(x-x_0)^2+...+\frac{1}{n!}f^{(n)}(x_0)(x-x_0)^n+R_n(x)
其中,Rn(x)=1(n+1)!f(n+1)(ξ)(xx0)(n+1)R_n(x)=\frac{1}{(n+1)!}f^{(n+1)}(\xi)(x-x_0)^{(n+1)},ξ\xix0x_0xx之間

引理四

(二元函數帶拉格朗日餘項的泰勒公式)設DR3D \subset R^3爲一區域,函數f(x,y)C3(D)f(x,y)\in C^{3}(D),且(x0,y0)D,(x0+h,y0+k)D(x_0,y_0)\in D,(x_0+h,y_0+k) \in D,則有
f(x0+h,y0+k)=f(x0,y0)+hfx(x0,y0)+kfy(x0,y0)+h2fxx(x0,y0)+2hkfxy(x0,y0)+k2fyy(x0,y0)2!f(x_0+h,y_0+k)=f(x_0,y_0)+hf_x(x_0,y_0)+kf_y(x_0,y_0)+\frac{h^2f_{xx}(x_0,y_0)+2hkf_{xy}(x_0,y_0)+k^2f_{yy}(x_0,y_0)}{2!}

+h3fxxx(x0+θh,y0+θk)+3h2kfxxy(x0+θh,y0+θk)+3hk2fxyy(x0+θh,y0+θk)+k3fyyy(x0+θh,y0+θk)3!,θ(0,1)+\frac{h^3f_{xxx}(x_0+\theta h,y_0+\theta k)+3h^2kf_{xxy}(x_0+\theta h,y_0+\theta k)+3hk^2f_{xyy}(x_0+\theta h,y_0+\theta k)+k^3f_{yyy}(x_0+\theta h,y_0+\theta k)}{3!},\theta \in (0,1)

命題

fxy(x0,y0)=f(x0+h,y0+k)f(x0h,y0+k)f(x0+h,y0k)+f(x0h,y0k)4hkf_{xy}(x_0,y_0)=\frac{f(x_0+h,y_0+k)-f(x_0-h,y_0+k)-f(x_0+h,y_0-k)+f(x_0-h,y_0-k)}{4hk}

證明:
由引理四得到

f(x0+h,y0+k)=f(x0,y0)+hfx(x0,y0)+kfy(x0,y0)+h2fxx(x0,y0)+2hkfxy(x0,y0)+k2fyy(x0,y0)2!f(x_0+h,y_0+k)=f(x_0,y_0)+hf_x(x_0,y_0)+kf_y(x_0,y_0)+\frac{h^2f_{xx}(x_0,y_0)+2hkf_{xy}(x_0,y_0)+k^2f_{yy}(x_0,y_0)}{2!}

+h3fxxx(x0+θ1h,y0+θ1k)+3h2kfxxy(x0+θ1h,y0+θ1k)+3hk2fxyy(x0+θ1h,y0+θ1k)+k3fyyy(x0+θ1h,y0+θ1k)3!+\frac{h^3f_{xxx}(x_0+\theta_1 h,y_0+\theta_1 k)+3h^2kf_{xxy}(x_0+\theta_1 h,y_0+\theta_1 k)+3hk^2f_{xyy}(x_0+\theta_1 h,y_0+\theta_1 k)+k^3f_{yyy}(x_0+\theta_1 h,y_0+\theta_1 k)}{3!}

f(x0h,y0+k)=f(x0,y0)hfx(x0,y0)+kfy(x0,y0)+h2fxx(x0,y0)2hkfxy(x0,y0)+k2fyy(x0,y0)2!f(x_0-h,y_0+k)=f(x_0,y_0)-hf_x(x_0,y_0)+kf_y(x_0,y_0)+\frac{h^2f_{xx}(x_0,y_0)-2hkf_{xy}(x_0,y_0)+k^2f_{yy}(x_0,y_0)}{2!}

+h3fxxx(x0θ2h,y0+θ2k)+3h2kfxxy(x0θ2h,y0+θ2k)3hk2fxyy(x0θ2h,y0+θ2k)+k3fyyy(x0θ2h,y0+θ2k)3!+\frac{-h^3f_{xxx}(x_0-\theta_2 h,y_0+\theta_2 k)+3h^2kf_{xxy}(x_0-\theta_2 h,y_0+\theta_2 k)-3hk^2f_{xyy}(x_0-\theta_2 h,y_0+\theta_2 k)+k^3f_{yyy}(x_0-\theta_2 h,y_0+\theta_2 k)}{3!}

f(x0+h,y0k)=f(x0,y0)+hfx(x0,y0)kfy(x0,y0)+h2fxx(x0,y0)2hkfxy(x0,y0)+k2fyy(x0,y0)2!f(x_0+h,y_0-k)=f(x_0,y_0)+hf_x(x_0,y_0)-kf_y(x_0,y_0)+\frac{h^2f_{xx}(x_0,y_0)-2hkf_{xy}(x_0,y_0)+k^2f_{yy}(x_0,y_0)}{2!}

+h3fxxx(x0+θ3h,y0θ3k)3h2kfxxy(x0+θ3h,y0θ3k)+3hk2fxyy(x0+θ3h,y0θ3k)k3fyyy(x0+θ3h,y0θ3k)3!+\frac{h^3f_{xxx}(x_0+\theta_3 h,y_0-\theta_3 k)-3h^2kf_{xxy}(x_0+\theta_3 h,y_0-\theta_3 k)+3hk^2f_{xyy}(x_0+\theta_3 h,y_0-\theta_3 k)-k^3f_{yyy}(x_0+\theta_3 h,y_0-\theta_3 k)}{3!}

f(x0h,y0k)=f(x0,y0)hfx(x0,y0)kfy(x0,y0)+h2fxx(x0,y0)+2hkfxy(x0,y0)+k2fyy(x0,y0)2!f(x_0-h,y_0-k)=f(x_0,y_0)-hf_x(x_0,y_0)-kf_y(x_0,y_0)+\frac{h^2f_{xx}(x_0,y_0)+2hkf_{xy}(x_0,y_0)+k^2f_{yy}(x_0,y_0)}{2!}

+h3fxxx(x0θ4h,y0θ4k)3h2kfxxy(x0θ4h,y0θ4k)3hk2fxyy(x0θ4h,y0θ4k)k3fyyy(x0θ4h,y0θ4k)3!+\frac{-h^3f_{xxx}(x_0-\theta_4 h,y_0-\theta_4 k)-3h^2kf_{xxy}(x_0-\theta_4 h,y_0-\theta_4 k)-3hk^2f_{xyy}(x_0-\theta_4 h,y_0-\theta_4 k)-k^3f_{yyy}(x_0-\theta_4 h,y_0-\theta_4 k)}{3!}

所以,誤差等於
f(x0+h,y0+k)f(x0+h,y0k)f(x0h,y0+k)+f(x0h,y0k)4hkfyx(x0,y0)\frac{f(x_0+h,y_0+k)-f(x_0+h,y_0-k)-f(x_0-h,y_0+k)+f(x_0-h,y_0-k)}{4hk}-f_{yx}(x_0,y_0)

=124hk((h3fxxx(x0+θ1h,y0+θ1k)+3h2kfxxy(x0+θ1h,y0+θ1k)+3hk2fxyy(x0+θ1h,y0+θ1k)+k3fyyy(x0+θ1h,y0+θ1k))=\frac{1}{24hk}((h^3f_{xxx}(x_0+\theta_1 h,y_0+\theta_1 k)+3h^2kf_{xxy}(x_0+\theta_1 h,y_0+\theta_1 k)+3hk^2f_{xyy}(x_0+\theta_1 h,y_0+\theta_1 k)+k^3f_{yyy}(x_0+\theta_1 h,y_0+\theta_1 k))

(h3fxxx(x0θ2h,y0+θ2k)+3h2kfxxy(x0θ2h,y0+θ2k)3hk2fxyy(x0θ2h,y0+θ2k)+k3fyyy(x0θ2h,y0+θ2k))-(-h^3f_{xxx}(x_0-\theta_2 h,y_0+\theta_2 k)+3h^2kf_{xxy}(x_0-\theta_2 h,y_0+\theta_2 k)-3hk^2f_{xyy}(x_0-\theta_2 h,y_0+\theta_2 k)+k^3f_{yyy}(x_0-\theta_2 h,y_0+\theta_2 k))

(h3fxxx(x0+θ3h,y0θ3k)3h2kfxxy(x0+θ3h,y0θ3k)+3hk2fxyy(x0+θ3h,y0θ3k)k3fyyy(x0+θ3h,y0θ3k))-(h^3f_{xxx}(x_0+\theta_3 h,y_0-\theta_3 k)-3h^2kf_{xxy}(x_0+\theta_3 h,y_0-\theta_3 k)+3hk^2f_{xyy}(x_0+\theta_3 h,y_0-\theta_3 k)-k^3f_{yyy}(x_0+\theta_3 h,y_0-\theta_3 k))

+(h3fxxx(x0θ4h,y0θ4k)3h2kfxxy(x0θ4h,y0θ4k)3hk2fxyy(x0θ4h,y0θ4k)k3fyyy(x0θ4h,y0θ4k)))+(-h^3f_{xxx}(x_0-\theta_4 h,y_0-\theta_4 k)-3h^2kf_{xxy}(x_0-\theta_4 h,y_0-\theta_4 k)-3hk^2f_{xyy}(x_0-\theta_4 h,y_0-\theta_4 k)-k^3f_{yyy}(x_0-\theta_4 h,y_0-\theta_4 k)))

將等式右邊合併同類項按照h3,h2k,hk2,k3h^3,h^2k,hk^2,k^3分成四類考慮

h3h^3的幾項爲

h324hk(fxxx(x0+θ1h,y0+θ1k)+fxxx(x0θ2h,y0+θ2k)fxxx(x0+θ3h,y0θ3k)fxxx(x0θ4h,y0θ4k))\frac{h^3}{24hk}(f_{xxx}(x_0+\theta_1 h,y_0+\theta_1 k)+f_{xxx}(x_0-\theta_2 h,y_0+\theta_2 k)-f_{xxx}(x_0+\theta_3 h,y_0-\theta_3 k)-f_{xxx}(x_0-\theta_4 h,y_0-\theta_4 k))

G(θ)=fxxx(x0+θh,y0+θk),H(θ)=fxxx(x0θh,y0+θk)G(\theta)=f_{xxx}(x_0+\theta h,y_0+\theta k),H(\theta)=f_{xxx}(x_0-\theta h,y_0+\theta k)

則上面幾項可以化爲h224k((G(θ1)G(θ4)+(H(θ2)H(θ3)))\frac{h^2}{24k}((G(\theta_1)-G(-\theta_4)+(H(\theta_2)-H(-\theta_3)))

=h224k((θ1+θ4)G(ξ1)+(θ2+θ3)H(ξ2))=\frac{h^2}{24k}((\theta_1+\theta_4)G^{'}(\xi_1)+(\theta_2+\theta_3)H^{'}(\xi_2))

而用鏈式法則對G,HG,H求導,得到

G(θ)=hfxxxx(x0+θh,y0+θk)+kfxxxy(x0+θh,y0+θk)G^{'}(\theta)=hf_{xxxx}(x_0+\theta h,y_0+\theta k)+kf_{xxxy}(x_0+\theta h,y_0+\theta k)

H(θ)=hfxxxx(x0θh,y0+θk)+kfxxxy(x0θh,y0+θk)H^{'}(\theta)=-hf_{xxxx}(x_0-\theta h,y_0+\theta k)+kf_{xxxy}(x_0-\theta h,y_0+\theta k)

因此,原來幾項可以化爲

h224k((θ1+θ4)(hfxxxx(x0+ξ1h,y0+ξ1k)+kfxxxy(x0+ξ1h,y0+ξ1k))\frac{h^2}{24k}((\theta_1+\theta_4)(hf_{xxxx}(x_0+\xi_1 h,y_0+\xi_1 k)+kf_{xxxy}(x_0+\xi_1 h,y_0+\xi_1 k))

+(θ2+θ3)(hfxxxx(x0ξ2h,y0+ξ2k)+kfxxxy(x0ξ2h,y0+ξ2k)))+(\theta_2+\theta_3)(-hf_{xxxx}(x_0-\xi_2 h,y_0+\xi_2 k)+kf_{xxxy}(x_0-\xi_2 h,y_0+\xi_2 k)))

由於θ1+θ4\theta_1+\theta_4θ2+θ3\theta_2+\theta_3一般不相等,所以無法用拉格朗日中值定理進一步化簡

因此當h,kh,k大小接近的時候,若假設上面的四階偏導數均有界,則有誤差階數爲O(h2)O(h^2)

類似地對h2k,hk2,k3h^2k,hk^2,k^3討論,得到在h與k同階的時候,誤差階數爲O(h2)O(h^2)

數值實驗

函數一

f(x,y)=x2sin(y)+exy2f(x,y)=x^2sin(y)+e^{xy^2}

fx(x,y)=2xsin(y)+y2exy2f_{x}(x,y)=2xsin(y)+y^2e^{xy^2}

fy(x,y)=x2cos(y)+2xyexy2f_{y}(x,y)=x^2cos(y)+2xye^{xy^2}

fxy(x,y)=2xcos(y)+2yexy2+2xy3exy2f_{xy}(x,y)=2xcos(y)+2ye^{xy^2}+2xy^3e^{xy^2}

import numpy as np
def f1(x,y):
    return x*x*np.sin(y)+np.exp(x*y*y)
def f1xy(x,y):
    return 2*x*np.cos(y)+2*y*np.exp(x*y*y)+2*x*y*y*y*np.exp(x*y*y)
x=2.5
y=1.8
h=0.1
k=0.1
print("(%.4f,%.4f)二階混合偏導數真實值:%.10f"%(x,y,f2xy(x,y)))
print("序號\th,k\t\t近似公式計算值\t\t誤差\t\t誤差衰減倍數")
for i in range(20):
    now=(f1(x+h,y+k)-f1(x-h,y+k)-f1(x+h,y-k)+f1(x-h,y-k))*0.25/h/k
    print("%d\t%.7f\t%.10f\t%.10f"%(i+1,h,now,now-f1xy(x,y)),end='')
    if i>0:
        print("\t%.6f"%(las/(now-f1xy(x,y))))
    else:
        print()
    las=now-f1xy(x,y)
    h*=0.5
    k*=0.5

(2.5000,1.8000)二階混合偏導數真實值:2.6708851424
序號 h,k 近似公式計算值 誤差 誤差衰減倍數
1 0.1000000 133118.5135877089 25192.8754518838
2 0.0500000 113820.5496154785 5894.9114796533 4.273665
3 0.0250000 109375.4104465985 1449.7723107733 4.066095
4 0.0125000 108286.6028087446 360.9646729195 4.016383
5 0.0062500 108015.7871949166 90.1490590915 4.004087
6 0.0031250 107948.1696480652 22.5315122401 4.001021
7 0.0015625 107931.2706538942 5.6325180690 4.000256
8 0.0007813 107927.0462427288 1.4081069037 4.000064
9 0.0003906 107925.9901575744 0.3520217493 4.000057
10 0.0001953 107925.7261663675 0.0880305424 3.998859
11 0.0000977 107925.6601095200 0.0219736948 4.006178
12 0.0000488 107925.6436347961 0.0054989710 3.995965
13 0.0000244 107925.6391525269 0.0010167017 5.408637
14 0.0000122 107925.6431579590 0.0050221338 0.202444
15 0.0000061 107925.5615234375 -0.0766123876 -0.065553
16 0.0000031 107925.3906250000 -0.2475108251 0.309531
17 0.0000015 107925.4882812500 -0.1498545751 1.651673
18 0.0000008 107926.7578125000 1.1196766749 -0.133837
19 0.0000004 107917.9687500000 -7.6693858251 -0.145993
20 0.0000002 107887.5000000000 -38.1381358251 0.201095

函數二

f(x,y)=x32sin(x+y)f(x,y)=x^{\frac{3}{2}}sin(x+y)

fx(x,y)=x32cos(x+y)+32x12sin(x+y)f_{x}(x,y)=x^{\frac{3}{2}}cos(x+y)+\frac{3}{2}x^{\frac{1}{2}}sin(x+y)

fy(x,y)=x32cos(x+y)f_{y}(x,y)=x^{\frac{3}{2}}cos(x+y)

fxy(x,y)=x32sin(x+y)+32x12cos(x+y)f_{xy}(x,y)=-x^{\frac{3}{2}}sin(x+y)+\frac{3}{2}x^{\frac{1}{2}}cos(x+y)

import numpy as np
def f2(x,y):
    return x**1.5*np.sin(x+y)
def f2xy(x,y):
    return 1.5*(x**0.5)*np.cos(x+y)-x**1.5*np.sin(x+y)
x=5
y=5
h=0.1
k=0.1
print("(%.4f,%.4f)二階混合偏導數真實值:%.10f"%(x,y,f2xy(x,y)))
print("序號\th,k\t\t近似公式計算值\t\t誤差\t\t誤差衰減倍數")
for i in range(15):
    now=(f2(x+h,y+k)-f2(x-h,y+k)-f2(x+h,y-k)+f2(x-h,y-k))*0.25/h/k
    print("%d\t%.7f\t%.10f\t%.10f"%(i+1,h,now,now-f2xy(x,y)),end='')
    if i>0:
        print("\t%.6f"%(las/(now-f2xy(x,y))))
    else:
        print()
    las=now-f2xy(x,y)
    h*=0.5
    k*=0.5

(5.0000,5.0000)二階混合偏導數真實值:3.2680094602
序號 h,k 近似公式計算值 誤差 誤差衰減倍數
1 0.1000000 3.2674426586 -0.0005668017
2 0.0500000 3.2678703460 -0.0001391142 4.074362
3 0.0250000 3.2679748435 -0.0000346167 4.018704
4 0.0125000 3.2680008162 -0.0000086441 4.004682
5 0.0062500 3.2680072998 -0.0000021604 4.001154
6 0.0031250 3.2680089201 -0.0000005401 4.000008
7 0.0015625 3.2680093253 -0.0000001350 4.001843
8 0.0007813 3.2680094264 -0.0000000338 3.989878
9 0.0003906 3.2680094504 -0.0000000098 3.446221
10 0.0001953 3.2680094533 -0.0000000069 1.421488
11 0.0000977 3.2680094242 -0.0000000360 0.191759
12 0.0000488 3.2680093311 -0.0000001291 0.278833
13 0.0000244 3.2680094242 -0.0000000360 3.586371
14 0.0000122 3.2680064440 -0.0000030162 0.011938
15 0.0000061 3.2679975033 -0.0000119569 0.252259

由上面幾個函數的例子可以看出,h和k減小爲原來一半時,誤差減小爲原來的四分之一,因此驗證了誤差的階數爲平方級別

結論

對於足夠光滑的函數f(x,y)f(x,y),有二階混合偏導數計算式:

fxy(x0,y0)=f(x0+h,y0+k)f(x0h,y0+k)f(x0+h,y0k)+f(x0h,y0k)4hkf_{xy}(x_0,y_0)=\frac{f(x_0+h,y_0+k)-f(x_0-h,y_0+k)-f(x_0+h,y_0-k)+f(x_0-h,y_0-k)}{4hk}

該計算式的誤差階上界數爲二階

由於作者水平有限,如果推導過程中有錯誤或考慮不周之處,還望不吝指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章