資源描述:
《三次樣條插值》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、三次樣條插值1.算法原理由于在許多實際問題中,要求函數(shù)的二階導(dǎo)數(shù)連續(xù),人們便提出了三次樣條插值函數(shù),三次樣條插值函數(shù)是由分段三次函數(shù)拼接而成的,在連接點處二階導(dǎo)數(shù)連續(xù)。設(shè)S(x)在節(jié)點處的二階導(dǎo)數(shù),其中為待定參數(shù)。由S(x)是分段三次多項式可知,是分段線性函數(shù),在子區(qū)間上可以表示為其中,對S(x)兩端積分兩次得其中和為積分常數(shù)。由插值條件得由此解得代入得:求導(dǎo)得:令得在處的左導(dǎo)數(shù)又令得在處右導(dǎo)數(shù),從而有,由在節(jié)點處一階導(dǎo)數(shù)的連續(xù)性知,即兩端同乘得,記,,則關(guān)于的方程組寫成。三種邊界條件的三彎矩方程:(1)第一種邊界條件:已知。取,這時方程組減少了兩個未知量,變成只含n-1個未知量的n-1個方程
2、的方程組,用矩陣表示為可用追趕法求解出后,即得三條樣條插值函數(shù)。(2)第二種邊界條件,已知,記,則有,得,即,其中,得到方程組,用矩陣表示為,該方程組的系數(shù)矩陣是嚴格三對角占優(yōu)矩陣,可用追趕法求解。(3)第三種邊界條件:周期型邊界條件。已知是以為周期的周期函數(shù),則由周期性可知,,這時將點看成是內(nèi)節(jié)點,則有,也即,其中,方程組第1個方程為:,所以方程組為,用矩陣表示為,顯然系數(shù)矩陣為嚴格對角占優(yōu)矩陣,可用LU分解法求解。1.程序框圖2.源程序functionx=mchase(A,d)%追趕法n=length(d);u=zeros(n,1);u(1)=A(1,1);fork=2:nl(k)=A(k
3、,k-1)/u(k-1);u(k)=A(k,k)-l(k)*A(k-1,k);endy=zeros(n,1);y(1)=d(1);fori=2:ny(i)=d(i)-l(i)*y(i-1);endx=zeros(n,1);x(n)=y(n)/u(n);fori=n-1:-1:1x(i)=(y(i)-A(i,i+1)*x(i+1))/u(i);endxendfunctionT=mspline1(x0,y0,f21,f22,xx)%三次樣條插值函數(shù)第一種邊界條件%x0、y0分別為節(jié)點的橫坐標和縱坐標;%f21為左端點的二階導(dǎo)數(shù)值,f22為右端點的二階導(dǎo)數(shù)值;xx為由插值點組成的向量n=length
4、(x0)-1;%計算小區(qū)間數(shù)fori=1:nh(i)=x0(i+1)-x0(i);endfori=1:n-1mu(i)=h(i)/(h(i)+h(i+1));lamda(i)=1-mu(i);d(i)=6*((y0(i+2)-y0(i+1))/h(i+1)-(y0(i+1)-y0(i))/h(i))/(h(i)+h(i+1));endA=zeros(n-1);fori=1:n-2A(i+1,i)=mu(i+1);%次下對角線A(i,i+1)=lamda(i);%次上對角線A(i,i)=2;%主對角線endA(n-1,n-1)=2;dd=zeros(n-1,1);%右端列向量fori=2:n-2
5、dd(i)=d(i);enddd(1)=d(1)-mu(1)*f21;dd(n-1)=d(n-1)-lamda(n-1)*f22;M=mchase(A,dd);%追趕法求解M值hmulamdaAddM=[f21,M',f22]'t=sym('t');a=zeros(n,1);b=zeros(n,1);c=zeros(n,1);e=zeros(n,1);fori=1:na(i)=M(i)./(6*h(i));b(i)=M(i+1)./(6*h(i));W1(i)=b(i)-a(i);W2(i)=3*(a(i).*x0(i+1)-b(i).*x0(i));c(i)=y0(i)./h(i)-h(i)
6、.*M(i)/6;e(i)=y0(i+1)./h(i)-h(i).*M(i+1)/6;W3(i)=3*b(i).*x0(i).^2-3*a(i).*x0(i+1).^2+e(i)-c(i);W4(i)=a(i).*x0(i+1).^3-b(i).*x0(i).^3+c(i).*x0(i+1)-e(i).*x0(i);Si(t)=W1(i).*t^3+W2(i).*t^2+W3(i).*t+W4(i)%每個小區(qū)間的三次樣條差值函數(shù)表達式endm=length(xx);T=zeros(m,1);fork=1:mforj=1:nif((xx(k)>=x0(j))&(xx(k)7、k)=W1(j).*(xx(k).^3)+W2(j).*(xx(k).^2)+W3(j).*xx(k)+W4(j);endendendTEndfunctionT=mspline2(x0,y0,f11,f12,xx)%三次樣條插值函數(shù)第二種邊界條件%x0、y0分別為節(jié)點的橫坐標和縱坐標;%f11為左端點的二階導(dǎo)數(shù)值,f12為右端點的二階導(dǎo)數(shù)值;xx為由插值點組成的向量n=length(x0)-1;%