鄭敏玲, 歐陽(yáng)成
(湖州師范學(xué)院 理學(xué)院, 浙江 湖州 313000)
Matlab在課堂教學(xué)中的應(yīng)用
——Newton插值淺析
鄭敏玲, 歐陽(yáng)成
(湖州師范學(xué)院 理學(xué)院, 浙江 湖州 313000)
Matlab是一個(gè)很重要的數(shù)學(xué)處理軟件,特別是在數(shù)值計(jì)算領(lǐng)域里,它的重要性更是非常明顯.通過(guò)分析Newton插值的基本思想、實(shí)現(xiàn)和應(yīng)用,對(duì)如何利用Matlab編程提高人們對(duì)這些知識(shí)的掌握和理解做了新的探索和嘗試,并對(duì)插值余項(xiàng)定理進(jìn)行了實(shí)例驗(yàn)證.
課堂教學(xué); 數(shù)值分析;Matlab
數(shù)值分析是為計(jì)算數(shù)學(xué)、物理及工科類專業(yè)開設(shè)的專業(yè)基礎(chǔ)課,不僅具有很高的理論性,還與實(shí)際結(jié)合較緊密.由于數(shù)值分析著重研究求解問(wèn)題的數(shù)值方法以及與此相關(guān)的理論,因此算法推導(dǎo)是這門課程的重要特點(diǎn).然而,大量的算法和公式增加了它的難度,降低了它的吸引力.為了提高學(xué)生的學(xué)習(xí)興趣,在教學(xué)中可以通過(guò)Matlab實(shí)例演示增加學(xué)生對(duì)教學(xué)內(nèi)容的理解,提高學(xué)生的數(shù)學(xué)應(yīng)用能力[1-2].本文將以插值為例,介紹在課堂上如何利用Matlab幫助理解數(shù)值分析中的一些重點(diǎn)、難點(diǎn)內(nèi)容,為師生提供參考.
插值方法主要有Lagrange插值和Newton插值兩種,這兩種方法各有優(yōu)勢(shì)與不足.在一般的數(shù)值分析教材中,往往以Lagrange插值為主,而Newton插值沒有受到足夠的重視.實(shí)際上,Newton插值中包含豐富的理論和數(shù)值思想方法.本文將對(duì)它進(jìn)行深入探討,并利用Matlab討論它的實(shí)現(xiàn)與應(yīng)用.
為得到Lagrange插值LN(x),首先求各插值節(jié)點(diǎn)a≤x0,x1,…,xN≤b對(duì)應(yīng)的Lagrange基函數(shù)li(x):
然后通過(guò)線性組合得到插值函數(shù):
(x).
注意到基函數(shù)與節(jié)點(diǎn)的函數(shù)值無(wú)關(guān),因此Lagrange插值方法簡(jiǎn)單,容易實(shí)現(xiàn),這是它的優(yōu)點(diǎn);但是由于基函數(shù)依賴所有節(jié)點(diǎn),若想增加一個(gè)節(jié)點(diǎn),得到更高一次的插值多項(xiàng)式,則所有基函數(shù)都將隨之改變,在這種情況下,利用Lagrange插值則不方便.
在Lagrange插值中,計(jì)算li(x)需要2N次加法、N-1次乘法、N次除法運(yùn)算,因此計(jì)算所有的基函數(shù)共需要(4N-1)(N+1)次算術(shù)運(yùn)算.此外,利用Lagrange插值求導(dǎo)數(shù)的運(yùn)算更復(fù)雜.相比之下,Newton插值的計(jì)算簡(jiǎn)單得多.
為了便于討論Newton插值的特征,本文引入差商的另一種定義[3]:設(shè)Pk(x)是函數(shù)f(x)在節(jié)點(diǎn)xi,xi+1,…,xi+k上的k次插值多項(xiàng)式,則稱多項(xiàng)式Pk(x)中xk的系數(shù)為函數(shù)f(x)在節(jié)點(diǎn)xi,xi+1,…,xi+k上的k階差商,記作f[xi,xi+1,…,xi+k].
按照上述定義,若Pk(x)和Pk+1(x)分別是基于節(jié)點(diǎn)xi,xi+1,…,xi+k(i分別取k和k+1)的插值多項(xiàng)式,則
Pk+1(x)-Pk(x)=C(x-x0)…(x-xk),
根據(jù)定義,xk+1的系數(shù)C應(yīng)為k+1階差商,即
C=f[x0,x1,…,xk+1].
于是
Pk+1(x)=Pk(x)+f[x0,x1,…,xk+1](x-x0)…(x-xk)
成立.由上面的表達(dá)式,可以得到Newton插值多項(xiàng)式Pn(x):
Pn(x)=P0(x)+(P1(x)-P0(x))+(P2(x)-P1(x))+…+(Pn(x)-Pn-1(x))=
f(x0)+(x-x0)f[x0,x1]+(x-x0)(x-x1)f[x0,x1,x2]+…+
(x-x0)(x-x1)…(x-xn-1)f[x0,x1,…,xn].
下面考慮差商的幾個(gè)重要性質(zhì).利用上面的定義可以更好地理解差商與導(dǎo)數(shù)的關(guān)系:
以多項(xiàng)式為例,設(shè)
f(x)=7x6+5x5-20x4+3x3+2x2+1,
那么,它的6次插值多項(xiàng)式就是它本身f(x),x6項(xiàng)的系數(shù)就是函數(shù)f(x)的6階差商;它的7階差商就是x7的系數(shù),即為0.
接下來(lái)考查差商的對(duì)稱性和表示公式.首先,由插值多項(xiàng)式的唯一性及差商的定義,我們很容易得到差商的對(duì)稱性:
f[x0,…,xi,…,xj,…,xk]=f[x0,…,xj,…,xi,…,xk].
再利用Lagrange插值公式,以x0,x1,…,xk為節(jié)點(diǎn)的插值多項(xiàng)式的最高次項(xiàng)xk的系數(shù)為:
于是由上面引入的差商的定義,即得:
計(jì)算Newton插值可以分兩步進(jìn)行:首先計(jì)算各階差商,然后計(jì)算插值多項(xiàng)式.
利用秦九韶算法計(jì)算Newton插值多項(xiàng)式可以使計(jì)算量大大減少[4].
Pn(x)=c0+(x-x0)(c1+(x-x1)(c2+…(x-xn-2)(cn-1+(x-xn-1)cn…))),
其中:ck(k=0,1,…,n)為函數(shù)的k階差商.那么,計(jì)算Pn(x)的計(jì)算量為2n次加法及n次乘法.算法如下:
(1) 計(jì)算各階差商c0,c1,…,cn.
① 輸入f(x0),f(x1),…,f(xn),c=[c0,c1,…,cn];
② 賦值ci=f(xi);
③ Forj=1:n,i=j:n,
End;
④ 輸出a.
(2) 計(jì)算Newton插值多項(xiàng)式的值.
① 輸入節(jié)點(diǎn)x0,x1,…,xn和x,各階差商c=[c0,c1,…,cn],b=c;
②bn=cn;
③ Fork=n-1 to 0,
bk=ck+ (x-xk)bk+1,
End;
④ 輸出b.
為了便于Newton插值的其它方面的應(yīng)用,下面的程序稍做了些修改,用求多項(xiàng)式替代了求多項(xiàng)式的值:
function [n,c]=newtonp(x,y)
%Input: x= [x0 x1 … xN],y = [y0 y1 … yN]
%Output: n = Newton polynomial coefficients of degree N
N = length(x)-1; c=y;
for j = 2:N + 1
for i= k:N + 1
c(i)=(y(i) - y(i-1))/(x(i) - x(i-j+1));
end
y=c;
end
n = c(N+1);
for k = N:-1:1
n = [n c(k)] - [0 n*x(k)];
end
設(shè)f(x)函數(shù)的插值多項(xiàng)式為Pn(x),按照多項(xiàng)式插值余項(xiàng)定理,
其中:
w(n+1)(x)=(x-x0)(x-x1)…(x-xn),x0≤ξ≤xn.
根據(jù)插值余項(xiàng)表達(dá)式,
(x)|}.
下面通過(guò)兩個(gè)函數(shù)(全純函數(shù)和亞純函數(shù))說(shuō)明插值誤差與函數(shù),以及插值節(jié)點(diǎn)之間的關(guān)系.
首先把區(qū)間[-5,5]八等分,分別得到它們的8次插值多項(xiàng)式;然后提高插值節(jié)點(diǎn)個(gè)數(shù),把區(qū)間10等分,得到它們的10次插值多項(xiàng)式.利用前面Matlab函數(shù)newtonp,編程如下:
% Newton interpolation for y=xsinx and y=1/(1+x^2);
N=8; h=10/N;
x=-5:h:5;
y1=x.*sin(x); y2=1./(1+x.^2);
n1=newtonp(x,y1);
n2=newtonp(x,y2);
xx=[-5:0.1:5];
yv1=xx.*sin(xx); yv2=1./(1+xx.^2);
yy1=polyval(n1,xx);
yy2=polyval(n2,xx);
subplot(1,2,1), plot(xx,yv1,'-',xx,yy1,'-.g')
subplot(1,2,2), plot(xx,yv2,'-',xx,yy2,'-.g')
只需把N的值換成其他值,便可得到其他的插值多項(xiàng)式.插值結(jié)果見圖1.
從圖1可以看出,這兩個(gè)函數(shù)的插值結(jié)果是不同的.對(duì)于全純函數(shù)y=xsinx來(lái)說(shuō),提高插值多項(xiàng)式的次數(shù)可以減少誤差,但對(duì)于亞純函數(shù)來(lái)說(shuō),利用等距節(jié)點(diǎn)插值,提高多項(xiàng)式的次數(shù)不僅不能減少插值誤差,反而誤差變得更大,這種現(xiàn)象稱為Runge現(xiàn)象.
若利用Chebyshev零點(diǎn)為節(jié)點(diǎn)做插值,修改上面編寫的程序?yàn)椋?/p>
% Newton interpolation for y=xsinx and y=1/(1+x^2);
N=8; k=0:N;
x=-5*cos((2*k+1).*pi/(2*N+2));
y1=x.*sin(x); y2=1./(1+x.^2);
n1=newtonp(x,y1); n2=newtonp(x,y2);
xx=[-5:0.1:5];
yv1=xx.*sin(xx); yv2=1./(1+xx.^2);
yy1=polyval(n1,xx); yy2=polyval(n2,xx);
subplot(1,2,1), plot(xx,yv1,'-',xx,yy1,'-.g')
subplot(1,2,2), plot(xx,yv2,'-',xx,yy2,'-.g')
得到的結(jié)果見圖2.
從圖2可以看出,利用Chebyshev多項(xiàng)式的零點(diǎn)為節(jié)點(diǎn),可以顯著減少插值誤差,尤其對(duì)亞純函數(shù),這種效果更明顯.
利用Matlab實(shí)現(xiàn)對(duì)數(shù)值分析課程中重點(diǎn)、難點(diǎn)內(nèi)容的教學(xué),可以使抽象的數(shù)學(xué)公式直觀化,使晦澀的教學(xué)內(nèi)容生動(dòng)化;可以培養(yǎng)學(xué)生的求知欲,提高學(xué)生的科研能力;可以提高學(xué)生利用數(shù)學(xué)知識(shí)解決實(shí)際問(wèn)題的能力.
[1] 趙景軍,吳勃英.關(guān)于數(shù)值分析教學(xué)的幾點(diǎn)探討[J].大學(xué)數(shù)學(xué),2005,21(3):28-30.
[2] 曾繁慧,高雷阜,胡引華.基于Matlab的《數(shù)值分析》教學(xué)改革研究[J].高教論壇,2008(3):60-61.
[3] KINCAID D R,CHENEY E W.Numerical Analysis: Mathematics of Scientific Computing[M].California:Wadsworth, Inc,1991.
[4] YANG W Y,CAO W,CHUNG T S,et al.Applied Numerical Methods Using Matlab[M].New Jersey:John Wiley & Sons Inc,2015.
APracticalApplicationofMatlabforTeaching:NewtonInterpolation
ZHENG Minling, OUYANG Cheng
(School of Science, Huzhou University, Huzhou 313000, China)
Matlab is an important mathematical software especially in dealing with problems in numerical computation fields. By analyzing the fundamental idea, performance and application of the Newton interpolation, we investigate how to improve the comprehension of the knowledge by using Matlab. Finally, we illustrate the correctness of the interpolation error theorem by numerical examples.
classroom teaching; numerical analysis; Matlab
2017-08-15
湖州師范學(xué)院教改項(xiàng)目(JGB16021).
鄭敏玲,博士,副教授,研究方向:復(fù)雜系統(tǒng)動(dòng)力學(xué)行為的理論、數(shù)值模型與應(yīng)用.E-mailzhengml@zjhu.edu.cn
O17
A
1009-1734(2017)10-0019-06
MSC2010:65D05
MSC2010:65D05
[責(zé)任編輯高俊娥]