24小时热门版块排行榜    

查看: 608  |  回复: 0

wowo315

铜虫 (初入文坛)

[交流] 【求助】关于函数逼近中的Legendre多项式展开,高阶反而比低阶差

最终目标:我想找到一种最好是解析的、精确的函数逼近方法来对sqrt(r^2+x^2)关于x进行多项式展开,该展开要比泰勒展开精确。

目前问题:论文上看到有人采用Legendre多项式对上述函数进行展开。我实现的时候,采用Legendre多项式解析求出每一阶系数,得到解析的展开结果。取不同的r,当r=100时,Legendre 3阶展开最大误差数量级是10^(-8)。但是采用4阶展开,得到的结果误差数量级却有10^(-4)。如果r比较小,比如小于50,同样的展开,4阶展开误差就比3阶小。

另外,书上讲Legendre多项式展开其实是基于最小二乘意义的正交多项式逼近,采用多项式展开的目的其实就是求解病态的最小二乘范德蒙德方程。但是同样的函数,我采用matlab函数中的polyfit(该函数是基于最小二乘的多项式拟合) 进行4阶最小二乘拟合,得到的结果就与预期的相符,即阶数越高,展开结果越好,并且采用polyfit进行拟合得到的结果比同样阶数泰勒展开得到的结果精确。我看了一下该函数的源代码,它就是直接求解的范德蒙德方程。

我想问的是:(1)出现上述r=100时,4阶展开比3阶展开误差大的原因是什么?是正常的吗?Legendre展开是不是可能存在展开误差不随阶数增大而减小的情况?
(2)我用Legendre展开得到的结果与用最小二乘逼近得到的结果为什么差别很大?
(3)是否存在其他比较好的多项式逼近方法来对上述函数进行展开?

Matlab代码如下:
x=-1:0.01:1;
r=100;
s=sqrt(x.^2+r^2);

%计算s与Legendre多项式的积分
Le0=1/2*sqrt(r^2+1)+1/2*r^2*log(1+sqrt(r^2+1))+1/2*sqrt(r^2+1)-1/2*r^2*log(-1+sqrt(r^2+1));
Le1=0;
Le2=1/16*(sqrt(r^2+1)*(2+3*r^2)-r^2*(4+3*r^2)*log(1+sqrt(r^2+1)))-1/16*(-sqrt(r^2+1)*(2+3*r^2)-r^2*(4+3*r^2)*log(-1+sqrt(r^2+1)));
Le3=0;
Le4=1/384*(sqrt(r^2+1)*(-105*r^4-110*r^2-8)+3*r^2*(24+60*r^2+35*r^4)*log(1+sqrt(r^2+1)))-1/384*(-sqrt(r^2+1)*(-105*r^4-110*r^2-8)+3*r^2*(24+60*r^2+35*r^4)*log(-1+sqrt(r^2+1)));

%Legendre多项式

P1=x;
P2=3/2*x.^2-1/2;
P3=5/2*x.^3-3/2*x;
P4=35/8*x.^4-30/8*x.^2+3/8;

%展开结果
temp=1/2*Le0+3/2*P1.*Le1+5/2*P2.*Le2+7/2*P3.*Le3+9/2*P4.*Le4;
plot(s-temp)




三阶展开误差如下:

四阶展开误差如下:


[ Last edited by wowo315 on 2010-9-29 at 14:55 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

智能机器人

Robot (super robot)

我们都爱小木虫

相关版块跳转 我要订阅楼主 wowo315 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见