关于用正交多项式做最小二乘拟合的实验报告1.实验目的:用正交多项式做最小二乘拟合及拟合图形2.实验内容:编写用正交多项式做最小二乘拟合的程序,并用于求解一个任意给定的数的3次多项式最小二乘拟合问题,在这里给出数据如下:X11.31.61.92.22.52.83.13.43.74Y2.7183.6694.956.6869.02512.18216.44522.19829.96440.44754.598对表格中数据用正交多项式做最小二乘拟合在拟合完后作出拟合曲线的图形,计算平方误差,最后对它们进行分析。程序如下:1).构建的正交多项式最高项次数为3时的程序:x=1:0.3:4;y=[2.7183.6694.956.6869.02512.18216.44522.19829.96440.44754.598];n=3;构建的正交多项式最高项次数为3result=inputdlg({'请输入权向量w:'},'charpt-3',1,{'[11111111111]'});w=str2num(char(result));利用str2num函数将数值型转化为符号型m=length(x)-1;s1=0;s2=ones(1,m+1);v2=sum(w);d(1)=y*w';c(1)=d(1)/v2;fork=1:nxs=x.*s2.^2*w';a(k)=xs/v2;if(k==1)b(k)=0;elseb(k)=v2/v1;ends3=(x-a(k)).*s2-b(k)*s1;v3=s3.^2*w';d(k+1)=y.*s3*w';c(k+1)=d(k+1)/v3;s1=s2;s2=s3;v1=v2;v2=v3;endr=y.*y*w'-c*d'r=0.8918alph=zeros(1,n+1)alph=0000T=zeros(n+1,n+2);T(:,2)=ones(n+1,1);T(2,3)=-a(1);if(n=2)fork=3:n+1fori=3:k+1T(k,i)=T(k-1,i)-a(k-1)*T(k-1,i-1)-b(k-1)*T(k-2,i-2);endendendfori=1:n+1fork=i:n+1alph(n+2-i)=alph(n+2-i)+c(k)*T(k,k+2-i);endendxmin=min(x);xmax=max(x);dx=(xmax-xmin)/(25*m);t=(xmin-dx):dx:(xmax+dx);s=alph(1);fork=2:n+1s=s.*t+alph(k);endplot(x,y,'x',t,s,'-');gridon;disp(alph);disp(r)2).构建的正交多项式最高项次数为4时,将上述程序中的n改为4即可3).构建的正交多项式最高项次数为8时,将上述程序中的n改为8即可3.实验结果:1).n=3plot(x,y,'x',t,s,'-')disp(alph);2.3365-10.205019.2296-8.9441disp(r)0.89182).n=4r=0.0185alph=000000.5685-3.34859.8348-9.90635.60010.01852).n=8r=9.9721e-007alph=000000000Columns1through6-0.00490.1028-0.90374.4386-13.110724.3727Columns7through9-26.404417.4675-3.23989.9721e-0074.实验结论:从上面的图像可以看出利用正交多项式做最小二乘拟合的效果很不错,误差很小,且正交多项式的最高次数项次数越高,误差越小。用正交多项式做最小二乘拟合的这种方法的编程不用解线性方程组,只用递推公式,并且当逼近次数增加一次时,只要把程序中循环数加1即可,其余项都不用改变。它是就目前来说用多项式做曲线拟合最好的计算方法。