问题提出

研究最佳平方逼近多项式的收敛性质

实验内容及要求

取函数f(x)=ex,在[-1,1]上以勒让德多项式为基函数,对于n=0,1,…,10构造最佳平方逼近多项式Pn(x),令blob.png,将blob.png的曲线画在一个图上。

blob.png,画出blob.png的曲线。做出blob.png之间的最小二乘曲线,能否提出关于收敛性的猜测。

实验步骤

1.编制程序,计算出n=012,…,10阶的勒让德多项式基函数。然后构造不同次数的最佳平方多项式Pn(x)并计算blob.png,然后将各阶误差blob.png的曲线画在不同的子图上。

2.计算各阶的最大误差blob.png,然后画出最大误差blob.png曲线。并预测收敛性。

实验结果及讨论

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的增加最佳平方多项式与原函数的误差分布图像:

blob.png

最大误差blob.png的最小二乘曲线

blob.png

预测:有上图可以看出,随着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);