張雨濃, 鄧健豪, 劉錦榮, 仇 堯, 金 龍
(1.中山大學(xué)信息科學(xué)與技術(shù)學(xué)院,廣東廣州510006; 2.中山大學(xué)軟件學(xué)院,廣東廣州510006)
數(shù)值微分是數(shù)值分析中的基本問(wèn)題,同時(shí)也是應(yīng)用科學(xué)中非常有用的一個(gè)工具[1-3]. 通過(guò)使用鄰近的離散數(shù)據(jù)點(diǎn),有限差分法可有效地近似一個(gè)函數(shù)在目標(biāo)點(diǎn)的導(dǎo)數(shù)值[4]. 根據(jù)目標(biāo)點(diǎn)在采樣區(qū)間中的位置,有限差分公式可以被劃分為前向差分、后向差分和中心差分公式. 目標(biāo)點(diǎn)是所用數(shù)據(jù)點(diǎn)的最左點(diǎn)即為前向差分,最右點(diǎn)為后向差分,中間點(diǎn)為中心差分.
使用多點(diǎn)中心差分公式時(shí),要求目標(biāo)點(diǎn)兩側(cè)有相同數(shù)量的離散數(shù)據(jù)點(diǎn). 因此,當(dāng)目標(biāo)點(diǎn)靠近邊界時(shí),單邊數(shù)據(jù)點(diǎn)不足,多點(diǎn)中心差分公式往往不能被應(yīng)用. 當(dāng)未知函數(shù)在目標(biāo)點(diǎn)的導(dǎo)數(shù)值發(fā)生加速變化時(shí),由于前(后)向差分公式只應(yīng)用單邊的數(shù)據(jù)點(diǎn),可能無(wú)法適應(yīng)該變化,使得近似導(dǎo)數(shù)值的誤差較大.
為了解決以上問(wèn)題,一點(diǎn)超前差分公式被提出[5]. 該公式綜合了三種傳統(tǒng)的差分公式,在后向差分公式的形式上“前移”一點(diǎn),解決了因單邊數(shù)據(jù)點(diǎn)不足造成的問(wèn)題,同時(shí)適應(yīng)了目標(biāo)點(diǎn)的導(dǎo)數(shù)值可能發(fā)生的加速變化[5]. 該公式由拉格朗日插值多項(xiàng)式推導(dǎo)而來(lái). 利用采集的等間距數(shù)據(jù)點(diǎn),可以構(gòu)造近似未知函數(shù)的拉格朗日插值多項(xiàng)式;對(duì)該式子求導(dǎo),即可得到近似的未知函數(shù)的一階數(shù)值差分公式[6],由此可以得出求一階導(dǎo)數(shù)的一點(diǎn)超前公式.
不同于文獻(xiàn)[5]和[6]中利用拉格朗日插值多項(xiàng)式來(lái)推導(dǎo)一階數(shù)值差分公式的方法,本文提出了基于泰勒級(jí)數(shù)展開(kāi)[7]的對(duì)一點(diǎn)超前差分公式的推導(dǎo). 由給出的未知函數(shù)在指定區(qū)間上的N+1個(gè)等間距點(diǎn)的函數(shù)值,即可列出N個(gè)關(guān)于目標(biāo)點(diǎn)的1到N階導(dǎo)數(shù)的泰勒級(jí)數(shù)展開(kāi)式. 將N個(gè)式子代入一點(diǎn)超前差分公式中,即可得出關(guān)于N+1個(gè)系數(shù)的方程組. 求解該方程組即可得到N+1個(gè)數(shù)據(jù)點(diǎn)的一點(diǎn)超前公式. 使用基于泰勒級(jí)數(shù)展開(kāi)的推導(dǎo)方法所得到的二至十六個(gè)數(shù)據(jù)點(diǎn)的一點(diǎn)超前公式以及截?cái)嗾`差與文獻(xiàn)[5]中給出的一致,這使得一點(diǎn)超前公式的理論基礎(chǔ)更加完善.
另外,計(jì)算機(jī)數(shù)值實(shí)驗(yàn)表明,一點(diǎn)超前公式可以取得較好的一階導(dǎo)數(shù)估計(jì)精度[5]. 附錄中給出了利用一點(diǎn)超前差分公式來(lái)近似目標(biāo)點(diǎn)的一階導(dǎo)數(shù)的Matlab程序代碼. 只要給出N+1個(gè)等間距數(shù)據(jù)點(diǎn)的函數(shù)值及間距,即可求出第N個(gè)點(diǎn)的一階導(dǎo)數(shù)近似值.
若x0,x1,…,xn為采樣區(qū)間[a,b]上n+1個(gè)互不相同的等間距數(shù)據(jù)點(diǎn),即xi+1-xi=h,i=0,1,…,n-1,其中h為采樣間隔常數(shù),則未知目標(biāo)函數(shù)f(x)的一階導(dǎo)數(shù)的一點(diǎn)超前差分公式為[5]
表1 二至八個(gè)數(shù)據(jù)點(diǎn)的等間距一點(diǎn)超前數(shù)值差分公式
定理1一階導(dǎo)數(shù)的等間距一點(diǎn)超前差分公式的形式為
f′(xn-1)≈a0f(x0)+a1f(x1)+…+an-1f(xn-1)+anf(xn),
(1)
系數(shù)a0,a1,…,an可以由泰勒級(jí)數(shù)展開(kāi)來(lái)推導(dǎo)并求解線性方程組得出.
證f(x)在點(diǎn)xn-1的泰勒展開(kāi)式為
(2)
其中c介于xn-1與x之間.
對(duì)于0≤k≤n(k≠n-1),將xk=xn-1+(k+1-n)h代入(2)中,可以得出n個(gè)等式
其中ck介于xn-1與xk之間.
將以上n個(gè)等式代入(1)中,可得
f′(xn-1)≈ (a0+a1+…+an-1+an)f(xn-1)
+(1-n)ha0+(2-n)ha1+…+(-1)han-2+hanf′(xn-1)
(3)
令(3)右邊的f′(xn-1)的系數(shù)等于1,f(xn-1),f″(xn-1),…,f(n)(xn-1)的系數(shù)于0,可得出關(guān)于a0,a1,…,an的線性方程組
由此可以求出一階導(dǎo)數(shù)的等間距一點(diǎn)超前差分公式中的系數(shù). 通過(guò)觀察可知,該公式的截?cái)嗾`差為
(4)
當(dāng)n=1時(shí),一點(diǎn)超前差分公式的形式為f′(x0)≈a0f(x0)+a1f(x1),此時(shí)關(guān)于a0,a1的方程組及其解為
因此f′(x0)≈f(x1)-f(x0)/h. 由(4)可知截?cái)嗾`差為
當(dāng)n=2時(shí),一點(diǎn)超前差分公式的形式為f′(x1)≈a0f(x0)+a1f(x1)+a2f(x2),此時(shí)關(guān)于a0,a1,a2的方程組及其解為
因此f′(x1)≈f(x2)+0f(x1)-f(x0)/(2h),截?cái)嗾`差為
當(dāng)n=3時(shí),一點(diǎn)超前差分公式的形式為
f′(x2)≈a0f(x0)+a1f(x1)+a2f(x2)+a3f(x3),
此時(shí)關(guān)于a0,a1,a2,a3的方程組及其解為
因此f′(x2)≈2f(x3)+3f(x2)-6f(x1)+f(x0)/(6h),截?cái)嗾`差項(xiàng)為
可以看出,基于泰勒級(jí)數(shù)展開(kāi)推導(dǎo)出來(lái)的一點(diǎn)超前差分公式及其截?cái)嗾`差,與表1給出的完全一致. 對(duì)于n>3的情況,可使用附錄中給出的Matlab程序來(lái)驗(yàn)證. 另外,八至十六個(gè)數(shù)據(jù)點(diǎn)的等間距一點(diǎn)超前差分公式可參考文獻(xiàn)[5].
這樣,我們就從另一個(gè)方面證明了一點(diǎn)超前公式的正確性.
傳統(tǒng)的有限差分公式包括前向差分、后向差分和中間差分公式. 使用這些公式可以有效地近似未知函數(shù)在目標(biāo)點(diǎn)的近似值. 但是,對(duì)于靠近邊界的目標(biāo)點(diǎn),單邊數(shù)據(jù)點(diǎn)不足,無(wú)法應(yīng)用多點(diǎn)的中間差分公式. 另外,前(后)向差分公式無(wú)法適應(yīng)未知函數(shù)在目標(biāo)點(diǎn)的導(dǎo)數(shù)的加速變化. 一點(diǎn)超前數(shù)值差分公式可以有效地解決上述問(wèn)題,其準(zhǔn)確性也已經(jīng)得到了驗(yàn)證.
本文給出了基于泰勒級(jí)數(shù)展開(kāi)的對(duì)一點(diǎn)超前差分公式的推導(dǎo)過(guò)程. 通過(guò)對(duì)采樣點(diǎn)應(yīng)用泰勒級(jí)數(shù)展開(kāi)式,我們得出了關(guān)于一點(diǎn)超前公式中的系數(shù)的線性方程組. 最后,我們還給出了自動(dòng)列出并求解該方程組的Matlab程序. 總而言之,本文從另一個(gè)角度,進(jìn)一步證實(shí)了一點(diǎn)超前差分公式的有效性和正確性.
以下給出求一點(diǎn)超前公式系數(shù)及目標(biāo)點(diǎn)的一階導(dǎo)數(shù)近似值的Matlab程序.
%輸入:
% F: 包含n+1個(gè)采樣函數(shù)值的向量,即[f(0),f(1),...,f(n)]′
% h: 采樣間隔常數(shù)
%輸出:
% d: 第n-1個(gè)點(diǎn)的一階導(dǎo)數(shù)近似值,即f′(n-1)
% A: 包含n+1個(gè)系數(shù)的向量,即[a0,a1,...,an]′
function [d,A]=oneNodeAhead(F,h)
n=size(F,1)-1;
Y=zeros(n+1,1);
Y(2,1)=1/h;
B=ones(n+1,n+1);
for j=1∶(n+1)
b=1;
for i=2∶(n+1)
if j==n
B(i,j)=0;
else
b=b*(j-n);
B(i,j)=b;
end
end
end
A=BY;
d=A'*F;
end
[參 考 文 獻(xiàn)]
[1] Li Jian-ping. General explicit difference formulas for numerical differentiation[J]. Journal of Computational and Applied Mathematics,2005,183(1):29-52.
[2] John H M,Kurtis D F. 數(shù)值方法(MATLAB 版)[M] .4 版.周璐,陳渝,錢(qián)方,等譯. 北京:電子工業(yè)出版社,2009.
[3] 李建良,蔣勇,汪光先. 計(jì)算機(jī)數(shù)值方法[M]. 南京:東南大學(xué)出版社,2000.
[4] Ishtiaq R K,Ryoji O. Taylor series based finite difference approximations of higher-degree derivatives[J]. Journal of Computational and Applied Mathematics,2003,154(1):115-124.
[5] 張雨濃,陳宇曦,陳錦浩,殷勇華. 一點(diǎn)超前數(shù)值差分公式的提出、研究與實(shí)踐[J]. 中山大學(xué)學(xué)報(bào)(自然科學(xué)版),2012,51(2):1-5.
[6] 張雨濃,郭東生,徐思洪,李海林. 未知目標(biāo)函數(shù)之一階數(shù)值微分公式驗(yàn)證與實(shí)踐[J].甘肅科學(xué)學(xué)報(bào),2009,21(1):13-18.
[7] 白曉東. Taylor公式逼近精度的研究[J]. 大學(xué)數(shù)學(xué),2004,20(4):108-110.