数值分析-Legendre正交多项式 实现函数逼近

                          数值分析-Legendre正交多项式 实现函数逼近

一个定义在区间[-1  1]上的连续函数,我们可以把他展开成勒让德级数,也就是说我们可以通过勒让德级数来逼近一个函数。本文参考用书为丁丽娟 程杞元编著的 《数值计算方法》第二版,北京理工大学出版社,具体用到的公式见下图。下面还给出matlab相应代码,matlab2016a可以运行,matlab2012也测试成功,matlab2008绿色版测试失败。



%名称:Legendre正交多项式函数逼近
%版本:V2.0C
%日期:2016.11.20
%说明:
%       y:  已知函数            (x^2) (二次函数)
%       k: 逼近已知函数所需项数 (6)   (6次逼近)  
%       x0: 逼近点的x坐标
%备注:解决V1.0T中精度问题(公式6-9)
%作者:冰三点水


function f=Legendre(y,k,x0)

syms t ;        %系统变量
P(1:k+1)=t;     %Legendre函数初始化
P(1)=1;         %第一级初始化    P152-(6-7)
P(2)=t;         %第二级初始化    P152-(6-7)
c(1:k+1)=0.0;   %正则方程组解初始化
c(1)=int(subs(y,findsym(sym(y)),sym( 't' )) *P(1), t, -1, 1)/2;     %正则方程组解1    P157-(6-35)
c(2)=3*int(subs(y,findsym(sym(y)),sym( 't' )) *P(2), t, -1, 1)/2;   %正则方程组解2    P157-(6-35)

f=c(1)+c(2)*t;  %逼近多项式初始化    P157-(6-36)

%递推求解
for i=3:k+1
    P(i)=((2*i-3)*P(i-1)*t-(i-2)*P(i-2))/(i-1);                     %递推公式       P153-(6-20)
    c(i)=(2*i-1)*int(subs(y,findsym(sym(y)),t)*P(i),t,-1,1)/2;      %正则方程组解   P157-(6-35)
    f=f+c(i)*P(i);              %更新逼近多项式                
    if (i==k+1)
        if (nargin==3)          %输入参数个数为三
            f=subs(f, 't' ,x0); %输出多项式在x0的值
        else
            f=vpa(f,4);         %对逼近值f 取六位有效数字
        end
    end
end

% 测试命令1
% f=Legendre('3*x^2+2*x+1',6)
% f=Legendre('3*x^2+2*x+1',6, 0.5)

% 测试命令2
% f=Legendre('x^3-1',6)
% f=Legendre('x^3-1',6, 0.5)



冰三点水

16年12月18于天津

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值