張光輝
宿州學(xué)院 1.數(shù)學(xué)與統(tǒng)計學(xué)院;2.科學(xué)與工程計算研究中心,安徽宿州,234000
代數(shù)多項式插值是應(yīng)用非常廣泛的插值方法。在一個區(qū)間上插值逼近一個函數(shù),Lagrange插值中使用的點越多,插值多項式的次數(shù)就越高。Runge現(xiàn)象是在等距高次多項式插值中出現(xiàn)的振蕩不收斂現(xiàn)象,20世紀(jì)初德國數(shù)學(xué)家Runge給出Runge現(xiàn)象實例[1-2]。深刻認(rèn)識Runge現(xiàn)象并理解Runge現(xiàn)象產(chǎn)生的原因,以及在插值逼近理論和應(yīng)用中如何有效避免Runge現(xiàn)象是數(shù)值分析和數(shù)值逼近方向關(guān)注的重要課題。林永從課程教學(xué)角度對高次插值Runge現(xiàn)象的可視化進(jìn)行探討[3],朱琪對某個函數(shù)的高次插值是否會產(chǎn)生Runge現(xiàn)象的測試進(jìn)行了研究和程序設(shè)計[4],壽媛等討論了利用 MQ 擬插值解決龍格現(xiàn)象的問題[5],但以上研究均未從理論角度綜合系統(tǒng)地闡述分析Runge現(xiàn)象產(chǎn)生的原因。本文首先從勢能定理的角度,對Runge現(xiàn)象出現(xiàn)的原因進(jìn)行理論分析,其次基于MATLAB GUI,設(shè)計了用于課程教學(xué)的Runge現(xiàn)象交互實驗軟件包,并進(jìn)行相關(guān)交互實驗。
定義1[6]Chebyshev點:切比雪夫多項式Tn(x)=cos(narccosx)在區(qū)間[-1,1]上的n+1個極值點(包含端點)xk=cos(kx/n),k=0,1,…,n,稱為(第二類)Chebyshev點。
(2)當(dāng)x0,x1,…,xn為Chebyshev網(wǎng)格點時,則勢能函數(shù)φ(x)=-log2,x∈[-1,1],從而|P(x)|≈eNφ(x)=2-N,x∈[-1,1]
易見φ(0)=1,φ(±1)=-1-log2。
則有
φ(x)=-log2,x∈[-1,1]
定理1表明:以[-1,1]區(qū)間上等距均勻分布的N+1個節(jié)點為根的多項式,在x=±1附近的取值約為在x=0附近取值的2N倍,即在區(qū)間邊界嚴(yán)重振蕩,如圖1所示(N=16);而以[-1,1]區(qū)間上的N+1個Chebyshev點為根的多項式取值在[-2-N,2-N]內(nèi)振蕩,振蕩能得到有效控制,如圖2所示(N=16)。
圖1 以等距節(jié)點為根的多項式振蕩圖
圖2 以Chebyshev點為根的多項式振蕩圖
本軟件包的設(shè)計系統(tǒng)基于 MATLAB(R2016a) GUI平臺,通過“figure()”“Uimenu()”“uicontrol()”和“callback”等函數(shù)進(jìn)行圖形、菜單、控件和回應(yīng)的屬性和功能設(shè)計,編寫對應(yīng)代碼,實現(xiàn)程序包內(nèi)控件的交互調(diào)用。
該Runge現(xiàn)象交互實驗軟件包基于MATLAB 簡潔的語言結(jié)構(gòu),GUI高度智能化的調(diào)試技術(shù)[8-9],以理工類具有插值計算和數(shù)值逼近基礎(chǔ)的學(xué)生為用戶主體,以方便快捷地完成實驗?zāi)康臑樽谥?,遵循整體風(fēng)格一致性、標(biāo)志選取習(xí)常性和交互操作簡單性的基本原則[10],呈現(xiàn)給用戶一個操作便捷可預(yù)告,并且可反復(fù)使用的專用工具。
打開GUI設(shè)計工具,選擇空白模板,將主界面分為由菜單欄、繪圖區(qū)和功能區(qū)三個主要部分。通過GUI界面組件布局編輯器在圖形用戶界面中完成對象添加。繪圖區(qū)由2個坐標(biāo)軸(axes)和2個靜態(tài)文本框(static text)構(gòu)成;功能區(qū)布置有4個按鈕(pushbutton)、1個可編輯文本框(edit text)、7個靜待文本框(static text)和一個滑動條(slider);在主界面頂端菜單欄并列4個功能平行的菜單。各區(qū)域各控件的功能如表1所示。利用排列工具,對各對象的相對次序進(jìn)行排列;雙擊控件,打開屬性編輯器,進(jìn)行屬性值檢查和設(shè)置;點擊菜單編輯器,進(jìn)行圖形窗口預(yù)設(shè)菜單創(chuàng)建。該交互實驗軟件包的主界面如圖3所示。主界面的底色采用灰白色(RGB=[0.94,0.94,0.94]),用戶可以根據(jù)需要,更改RGB三元組進(jìn)行顏色的重新設(shè)置和調(diào)整;繪圖區(qū)和功能區(qū)的靜態(tài)文本框和按鈕的ForegroundColor 值分別設(shè)置為“藍(lán)色”和“紅色”,F(xiàn)ontSize值設(shè)置為“15”,滑動條的BackgroundColor值設(shè)置為“綠色”,F(xiàn)oregroundColor設(shè)置為“黃色”;為了更清楚的呈現(xiàn)插值取樣點函數(shù)的表達(dá)式,將可編輯文本框的FontSize值設(shè)置為“18”。打開菜單編輯器,對4個菜單的Text屬性分別賦值為“等距節(jié)點插值”“chebyshev點插值”“Clustered grids 類點插值”和“退出系統(tǒng)”;Tag屬性依次記為“menu1”“menu2”“menu3”和“menu4”。依次雙擊4個按鈕控件,對其“string”屬性和“Tag”屬性依次進(jìn)行類似設(shè)置。
表1 主界面各控件功能
圖3 Runge現(xiàn)象交互實驗包主界面
以主界面的生成和“等距節(jié)點插值”按鈕為例進(jìn)行功能設(shè)計說明。
首先,建新Blank GUI,另存為“Runge_1”,MATLAB自動生成函數(shù)文件Runge_1.m和圖形文件Runge_1.fig。
雙擊“等距節(jié)點插值”按鈕,打開屬性檢查器,該按鈕的string屬性值和Tag屬性值分別為“等距節(jié)點插值”和“pushbutton1”,該按鈕的預(yù)設(shè)功能為點擊按鈕進(jìn)行等距節(jié)點插值計算和在第一個坐標(biāo)軸中進(jìn)行可視化演示。
打開Runge_1.m文件,編寫pushbutton1控件的Callback程序代碼。主要代碼和功能如下:
f=str2sym(get(handles.edit2,′string′));%從可編輯文本框獲取取樣點函數(shù)的符號表達(dá)式
f = matlabfunction(f);%將獲取的符號表達(dá)式轉(zhuǎn)化為匿名句柄函數(shù)
n=ceil(get(handles.slider1,′value′));%從滑動條獲取插值取樣點/插值節(jié)點個數(shù)
ch=-5:10/(n-1):5;fch=f(ch);%獲取等距節(jié)點,并計算取樣點函數(shù)等距節(jié)點處的值
Pch=polyfit(ch,fch,n-1);x1=-5:0.05:5;fchn=polyval(Pch,x1);% 完成等距節(jié)點插值,求插值多項式在加密點處的值
axes(handles.axes1);% 將axes1設(shè)置為當(dāng)前坐標(biāo)軸窗口
fx1=f(x1);plot(x1,fx1,′r′);hold on;plot(x1,fchn,′b--′) ;%等距節(jié)點插值Runge現(xiàn)象效果圖
當(dāng)用戶輸入插值取樣點函數(shù)“1/(1+x^2)”,滑動條的取值“n=15”時,各參數(shù)如圖4所示,點擊“等距節(jié)點插值”按鈕,可得[-5,5]區(qū)間上插值可視化結(jié)果,如圖5所示。
圖4 Runge現(xiàn)象應(yīng)用實例輸入?yún)?shù)
圖5 等距節(jié)點插值Runge現(xiàn)象
對pushbutton2控件可類似編制Callback程序代碼,完成“chebyshev(clustered grids類)點插值”,可調(diào)用MATLAB 庫函數(shù)chebpts(n)實現(xiàn)n個chebyshev點的獲取。圖6顯示,chebyshev點插值可有效避免高次插值的Runge現(xiàn)象。
雙擊滑動條,打開屬性檢查器,將其Min和Max屬性值分別設(shè)置為“1”和“99”,將插值節(jié)點個數(shù)n控制在[1,99]內(nèi)的整數(shù)上。用鼠標(biāo)指向滑動條控件指示器,移動指示器,可實現(xiàn)插值取樣節(jié)點個數(shù)n的調(diào)整。 各菜單的功能設(shè)置,類似于對應(yīng)功能的控件設(shè)置,這里略去詳細(xì)代碼。
圖6 Chebyshev點插值(未出現(xiàn)Runge現(xiàn)象)
Runge現(xiàn)象交互實驗軟件包主要研究當(dāng)插值節(jié)點個數(shù)n增加時,Lagrange等距節(jié)點插值多項式是否收斂到被插值函數(shù),對被插值函數(shù)的近似是否越來越好。通過不斷調(diào)節(jié)n的取值,發(fā)現(xiàn)隨著插值節(jié)點個數(shù)n的增加,等距高次插值多項式在插值區(qū)間兩端附近振蕩越來越嚴(yán)重,逼近效果嚴(yán)重失真。由定理1結(jié)論可知,將等距節(jié)點插值調(diào)整為Chebyshev(clustered grids類)點插值,可有效避免Runge現(xiàn)象的出現(xiàn),保證插值逼近的實用性和有效性。