问题提出
研究最佳平方逼近多项式的收敛性质
实验内容及要求
取函数f(x)=ex,在[-1,1]上以勒让德多项式为基函数,对于n=0,1,…,10构造最佳平方逼近多项式Pn(x),令,将的曲线画在一个图上。
令,画出的曲线。做出之间的最小二乘曲线,能否提出关于收敛性的猜测。
实验步骤
1.编制程序,计算出n=0,1,2,…,10阶的勒让德多项式基函数。然后构造不同次数的最佳平方多项式Pn(x),并计算,然后将各阶误差的曲线画在不同的子图上。
2.计算各阶的最大误差,然后画出最大误差曲线。并预测收敛性。
实验结果及讨论
1.计算各阶勒让德多项式:
①各阶勒让德多项式如下:
P0(x)=1;
P1(x)=x;
P2(x)=(3*x^2)/2 - 1/2;
P3(x) =(x*(5*x^2 - 3))/2;
P4(x) =(35*x^4)/8 - (15*x^2)/4 + 3/8;
P5(x) =(x*(63*x^4 - 70*x^2 + 15))/8;
P6(x) =(231*x^6)/16 - (315*x^4)/16 + (105*x^2)/16 - 5/16;
P7(x) =(x*(429*x^6 - 693*x^4 + 315*x^2 - 35))/16;
P8(x) =(6435*x^8)/128 - (3003*x^6)/32 + (3465*x^4)/64 - (315*x^2)/32 + 35/128;
P9(x) =(x*(12155*x^8 - 25740*x^6 + 18018*x^4 - 4620*x^2 + 315))/128;
P10(x) =(46189*x^10)/256 - (109395*x^8)/256 + (45045*x^6)/128 - (15015*x^4)/128 + (3465*x^2)/256 - 63/256
② 随着n的增加最佳平方多项式与原函数的误差分布图像:
③最大误差的最小二乘曲线
预测:有上图可以看出,随着n的增大,最大误差越来越小,所以最佳平方逼近是收敛的。
分析:
有以上的多项式和图形我们可以得出:
1.由勒让德多项式可以看出,随着n的增加,多项式系数也在增加,而且可以看出勒让德多项式的奇偶性为:当阶数n为偶数时,Pn(x)为偶函数;当阶数n为奇数时,Pn(x)为奇函数。
2.由随n的增加最佳平方多项式与原函数的误差分布图像可以得出:随着n的增加,拟合函数与原函数之间的误差越来越小,这说明最佳平方逼近正交多项式随次数n的增大是收敛的。
3.随着次数n的增加,在拟合区间中间部分区域误差在不断减小,而且基本是趋向于平均的,所以中间部分整体上来说,误差随着次数n的增大而减小。在拟合区间的两端,误差还是相对较大,所以其最大误差分布在区间两端。
4.在n较小时(n=1,2)最大误差很大,但随着n的增大最大误差迅速减小并趋于稳定,可以看出最佳平方逼近是收敛的。
程序源码:
test3_3_1.m文件:
syms x; S=sym(zeros(11)); p=sym(zeros(11)); f=exp(x); %原函数 p(1)=1; %1阶勒让德函数 p(2)=x; %2阶勒让德函数 for i=3:11 %3~11阶勒让德函数 p(i)=((2*i-3)*x*p(i-1)-(i-2)*p(i-2))/(i-1); end for j=1:11 %计算正交多项式系数 a(j)=(2*j-1)/2*(int(f*p(j),-1,1)); end s(1)=a(1)*p(1); e(1)=abs(f-S(1)); for j=1:10 %求各项最佳平方逼近多项式 S(j+1)=S(j)+a(j+1)*p(j+1); e(j+1)=abs(f-S(j+1)); end for i=1:11 subplot(3,4,i); x=-1:0.1:1; e1=subs(e(i),x); plot(x,e1,'r-');title(['次数为n=',int2str(i-1),'的误差分布图像']);legend('误差分布');grid on; E(i)=max(double(e1)); end n=1:11; a0=[2 -1 1 1]; for i=1:100 a=lsqcurvefit('Modelfun',a0,n,E); a0=a; end y1=a(1)*exp(a(2)*n)+a(3)*n+a(4); subplot(3,4,12); plot(n,E,'o',n,y1);title('最大误差随次数的分布');xlabel('n');ylabel('E');legend('最大误差');grid on; simple(p) simple(S)
Modelfun.m文件:
function f=Modelfun(a,xdata) f=a(1)*exp(a(2)*xdata)+a(3)*xdata+a(4);