Matlab数学实验报告三.docx
Matlab数学实验报告三实验目的:用Matlab语言实现Lagrange插值、Newton基本插值算法,会用Matlab中关于数值微分的函数。用Matlab语言实现最佳平方逼近及最小二乘算法,会用Matlab中的polyfit、isqnonlin函数进行数据拟和。实验内容:1Lagrange插值:functionf=Language(x,y,x0)%求已知数据点的拉格朗日插值多项式%已知数据点的x坐标向量:x%已知数据点的y坐标向量:y%插值点的x坐标:x0%求得的拉格朗日插值多项式或在x0处的插值:fx=0.00.40.81.21.6;%inputxdata(可替换为本人的数据)y=00.4283920.7421010.9103140.970348;%inputydata(可替换为本人的数据)x0=0.30.5;%inputx0data(可替换为本人的数据)symstl;if(length(x)=length(y)n=length(x);elsedisp('x和y的维数不相等!');return;%检错endp=sym(0);for(i=1:n)l=sym(y(i);for(k=1:i-1)l=l*(t-x(k)/(x(i)-x(k);end;for(k=i+1:n)l=l*(t-x(k)/(x(i)-x(k);end;p=p+l;endsimplify(p);%简化多项式f=subs(p,'t',x0);%计算插值点的函数值f=vpa(f,6);%将插值多项式的值化成6位精度的小数end2Newton基本插值算法functionvarargout=newtonliu(varargin)clear,clcx=0.400.550.650.800.901.05;fx=0.410750.578150.696750.888111.026521.25382;newtonchzh(x,fx);functionnewtonchzh(x,fx)%由此函数可得差分表n=length(x);fprintf('*差分表*n');FF=ones(n,n);FF(:,1)=fx'fori=2:nforj=i:nFF(j,i)=(FF(j,i-1)-FF(j-1,i-1)/(x(j)-x(j-i+1);endendfori=1:nfprintf('%4.2f',x(i);forj=1:ifprintf('%10.5f',FF(i,j);endfprintf('n');end结果*差分表*0.400.410750.550.578151.116000.650.696751.186000.280000.800.888111.275730.358930.197330.901.026521.384100.433470.212950.031241.051.253821.515330.524930.228670.031430.000293数值微分函数二数据拟合1最佳平方逼近及最小二乘算法functionvarargout=Gaussnewton(varargin)clear;clct=0.2123571116;y=5.058.8811.6312.9314.1514.7315.3015.60;x0=11,-1,4'v0=40;KN=100;Lep=1e-5;KL=0;fprintf('x(%2d)=%9.7f,%8.7f,%8.7fn',KL,x0(1),x0(2),x0(3);while(norm(fj(t,x0)'*fr(t,y,x0)>Lep)d=(fj(t,x0)'*fj(t,x0)+v0*eye(3)(-fj(t,x0)'*fr(t,y,x0);xk=x0;x0=x0+d;sL=(fj(t,xk)'*fr(t,y,xk)'*d+0.5*d'*fj(t,x0)'*fj(t,xk)*d;rk=(ff(t,y,x0)-ff(t,y,xk)/sL;ifrk0.75v0=v0/2;endKL=KL+1;fprintf('x(%2d)=%9.7f,%8.7f,%8.7fn',KL,x0(1),x0(2),x0(3);ifKL>KNbreakendendfunctionR=fr(t,y,x)R=x(1)*exp(x(2)./t)+x(3)-y;R=R'functionG=fj(t,x)n=length(t);G=zeros(n,3);fori=1:nG(i,1)=exp(x(2)/t(i);G(i,2)=x(1)*exp(x(2)/t(i)/t(i);G(i,3)=1;endfunctionF=ff(t,y,x)R=fr(t,y,x);F=0.5*R'*R;x(0)=11.0000000,-1.0000000,4.0000000x(1)=11.0866956,-0.8433719,4.1220212x(2)=11.1813520,-0.7960477,4.2442432x(3)=11.2904746,-0.8391795,4.3875974x(4)=11.4015888,-0.9175589,4.5547072x(5)=11.4743906,-0.9922929,4.7122732x(6)=11.4794657,-1.0397861,4.8309296x(7)=11.4339382,-1.0609857,4.9121252x(8)=11.3832407,-1.0690935,4.9640406x(9)=11.3554605,-1.0720668,4.9889167x(10)=11.3471610,-1.0728680,4.9961421x(11)=11.3458361,-1.0729926,4.9972891x(12)=11.3457261,-1.0730029,4.99738422运用polyfit、isqnonlin函数进行数据拟合运用polyfit函数进行数据拟合x=1,2,3,4,5,6,7,8,9,10,11,12y=96.31,135.44,79.5,56.54,256.21,350.68,105.62,185.03,493.08,1031.17,860.06,746.78z=polyfit(x,y,4)运用isqnonlin函数进行数据拟合functionf2=f01(x,Data);Data=43582.42207;48612.40374;54612.40126;58932.39352;65632.37776;66782.37684;r=Data(:,1);n=Data(:,2);z2=x(1)+x(2)./r.2-x(3)-x(4)./x(5)-r.2;f2=z2-n.2;>>Data=43582.42207;48612.40374;54612.40126;58932.39352;65632.37776;66782.37684;>>r=Data(:,1);>>n=Data(:,2);x0=10111'x=lsqnonlin('f01',x0)Optimizationterminatedsuccessfully:First-orderoptimalitylessthanOPTIONS.TolFun,andnonegative/zerocurvaturedetectedx=5.74046.22611.00007.22611.0000实验结果:>>1Lagrange插值:ans=.329345,.5199392Newton基本插值算法*差分表*0.400.410750.550.578151.116000.650.696751.186000.280000.800.888111.275730.358930.197330.901.026521.384100.433470.212950.031241.051.253821.515330.524930.228670.031430.000293数值微分函数二数据拟合1最佳平方逼近及最小二乘算法x(0)=11.0000000,-1.0000000,4.0000000x(1)=11.0866956,-0.8433719,4.1220212x(2)=11.1813520,-0.7960477,4.2442432x(3)=11.2904746,-0.8391795,4.3875974x(4)=11.4015888,-0.9175589,4.5547072x(5)=11.4743906,-0.9922929,4.7122732x(6)=11.4794657,-1.0397861,4.8309296x(7)=11.4339382,-1.0609857,4.9121252x(8)=11.3832407,-1.0690935,4.9640406x(9)=11.3554605,-1.0720668,4.9889167x(10)=11.3471610,-1.0728680,4.9961421x(11)=11.3458361,-1.0729926,4.9972891x(12)=11.3457261,-1.0730029,4.99738422运用polyfit、isqnonlin函数进行数据拟合运用polyfit函数进行数据拟合运用isqnonlin函数进行数据拟合x=5.74046.22611.00007.22611.0000