資源描述:
《連續(xù)函數(shù)最佳平方逼近的算法程序》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、一.任務(wù):用MATLAB語言編寫連續(xù)函數(shù)最佳平方逼近的算法程序(函數(shù)式M文件)。并用此程序進(jìn)行數(shù)值試驗(yàn),寫出計(jì)算實(shí)習(xí)報(bào)告。二.程序功能要求:在書中Page355或Page345的程序leastp.m(見附一)的基礎(chǔ)上進(jìn)行修改,使其更加完善。要求算法程序可以適應(yīng)不同的具體函數(shù),具有一定的通用性。所編程序具有以下功能:1.用Lengendre多項(xiàng)式做基,并適合于構(gòu)造任意次數(shù)的最佳平方逼近多項(xiàng)式。可利用遞推關(guān)系2.被逼近函數(shù)f(x)不用內(nèi)聯(lián)函數(shù)構(gòu)造,而改用M文件建立數(shù)學(xué)函數(shù)。這樣,此程序可通過修改建立數(shù)學(xué)函數(shù)的M文件以適用不同的被逼近函數(shù)(要學(xué)會(huì)用函數(shù)句柄)。3.要考慮一般的情況。因此,
2、程序中要有變量代換的功能。4.計(jì)算組合系數(shù)時(shí),計(jì)算函數(shù)的積分采用變步長復(fù)化梯形求積法(見附三)。5.程序中應(yīng)包括幫助文本和必要的注釋語句。另外,程序中也要有必要的反饋信息。6.程序輸入:(1)待求的被逼近函數(shù)值的數(shù)據(jù)點(diǎn)(可以是一個(gè)數(shù)值或向量)(2)區(qū)間端點(diǎn):a,b。7.程序輸出:(1)擬合系數(shù):(2)待求的被逼近函數(shù)值三:數(shù)值試驗(yàn)要求:1.試驗(yàn)函數(shù):;也可自選其它的試驗(yàn)函數(shù)。2.用所編程序直接進(jìn)行計(jì)算,檢測程序的正確性,并理解算法。3.分別求二次、三次、。。。最佳平方逼近函數(shù)。4.分別作出逼近函數(shù)和被逼近函數(shù)的曲線圖進(jìn)行比較。(分別用繪圖函數(shù)plot(,s())和fplot(‘xc
3、osx’,[x1x2,y1,y2]))1.本次實(shí)驗(yàn)程序如下:一、Lengendre多項(xiàng)式的自動(dòng)生成M文件functionP=legendre(N)%evaluatelegendrepolynomialuptonthordersymstx;forn=1:NPP(n)=diff((t^2-1)^(n-1),n-1);Q(n)=2^(n-1)*prod([1:n-1]);endPP(1)=1;Q=sym(Q);P=PP*(inv(diag(Q)));二、被逼近函數(shù)用M文件建立functionF=creat_fun(x)%creatfunctionuseM-filen=length(x);
4、F=x.*cos(x(1:n));三、區(qū)間變換functionf=convert_interval(a,b,F)%conversioninterval[a,b]between[-1,1],andexpressionoffunctionsymsxt;s=2((b-a)*t+a+b);%區(qū)間轉(zhuǎn)換f=subs(F,x,s);%符號(hào)替換四、變步長復(fù)化梯形求積公式的算法functionI=Rctrap(g)%求積分的變步長梯形算法%f為被積函數(shù);%積分的上下限為【-1,1】;%n為復(fù)花區(qū)間個(gè)數(shù)%T為輸出的變步長梯形公式計(jì)算值;m=1;h=1-(-1);%所有積分都區(qū)間都已轉(zhuǎn)化為【-1,1】
5、;T=zeros(1,100);T(1)=h*(feval(g,-1)+feval(g,1))/2;i=1;%進(jìn)行變步長計(jì)算whilei<100m=2*m;h=h/2;s=0;fork=1:m/2x=-1+h*(2*k-1);s=s+feval(g,x);endT(i+1)=T(i)/2+h*s;ifabs(T(i+1)-T(i))<0.00001%滿足條件輸出停機(jī)I=T(i+1);%把終值返回break;endi=i+1;end五、主程序function[cs]=least_square(a,b,N)%leastsquarefitusingLegendrepolynomials,
6、s(x)=c1p1(x)+c2p2(x)+c3p3(x)+...;%[a,b]initialinterval;%ciscoefficient;%Nisthedegreeofpolynomial%sisthewantedfunctionsymstx;%sub-functiontocreatefunctionF=creat_fun(x);%sub-functiontoevaluatelegendrepolynomialuptonthorderP=legendre(N);%sub-function:conversioninterval[a,b]between[-1,1],andexpre
7、ssionoffunctionf=convert_interval(a,b,F);%togetcoefficentofc(i)f=P*diag(f);fori=1:Ng=inline(f(i));%sub-function:求積分的變步長梯形算法I=Rctrap(g);u(i)=I;Q(i)=2(2*(i-1)+1);endQ=sym(Q);c=double(u*diag(Q));%optimalsquareapproximationpolynomialS=c*P'