插值与多项式逼近 | 拉格朗日插值多项式

目录

一、拉格朗日插值多项式的推导

二、拉格朗日多项式逼近

三、拉格朗日插值多项式的MATLAB代码

四、拉格朗日插值多项式的Python代码


一、拉格朗日插值多项式的推导

已知插值节点x_{1},x_{2},...,x_{n}以及对应的函数值f(x_{1}),f(x_{2}),...,f(x_{n})。令插值多项式为P_{n}(x_{i})l_{n}(x)为拉格朗日插值多项式的基函数。

P_{n}(x_{i})=f(x_{i})=y_{i} \ (i=0,1,2,...,n)

P_{n}(x)=f(x_{0})l_{0}(x)+f(x_{1})l_{1}(x)+...+f(x_{n})l_{n}(x)

由于

P_{n}(x_{0})=f(x_{0})l_{0}(x_{0})+f(x_{1})l_{1}(x_{0})+...+f(x_{n})l_{n}(x_{0})=f(x_{0})

P_{n}(x_{1})=f(x_{0})l_{0}(x_{1})+f(x_{1})l_{1}(x_{1})+...+f(x_{n})l_{n}(x_{1})=f(x_{1})

......

P_{n}(x_{n})=f(x_{0})l_{0}(x_{n})+f(x_{1})l_{1}(x_{n})+...+f(x_{n})l_{n}(x_{n})=f(x_{n})

 可以得到:

l_{i}(x_{j})=\left\{\begin{matrix} 1,i=j & \\ 0,i\neq j& \end{matrix}\right.

进一步可以推得拉格朗日基函数:

l_{i}(x)=\frac{(x-x_{0})...(x-x_{i-1})(x-x_{i+1})...(x-x_{n})}{(x_{i}-x_{0})...(x_{i}-x_{i-1})(x_{i}-x_{i+1})...(x_{i}-x_{n})}  

 若有:

\pi (x)=\prod_{i=0}^{n}(x-x_{i})=(x-x_{0})(x-x_{1})...(x-x_{n})

则:

l_{i}(x)=\frac{\pi (x)}{(x-x_{i})\pi ^{'}(x_{i})}  

二、拉格朗日多项式逼近

 f(x)=P_{N}(x)+E_{N}(x)

f(x)\approx P_{N}(x)=\sum_{k=0}^{N}f(x_{k})L_{N,k}(x)

误差项为:

E_{N}(x)=\frac{(x-x_{0})(x-x_{1})...(x-x_{N})f^{(N+1)}(c)}{(N+1)!}

三、拉格朗日插值多项式的MATLAB代码

function lagrange(X,Y)
%输入  X代表插值节点
%      Y代表插值节点所对应的函数值
n=length(X);
L=zeros(n,n);
for i=1:n
    V=1;
    for j=1:n
        if j~=i
            V=conv(V,poly(X(j)))/(X(i)-X(j));
        end
    end
    L(i,:)=V;
end
C=Y*L; 
LAG=poly2sym(C);
fprintf('拉格朗日多项式为:\nP(x)=%s\n',LAG);

 通过在命令行窗口中输入:
>> X=[1 2 3 4 5 6];
>> Y=[66 66 65 64 63 63];
>> lagrange(X,Y)

可以得到拉格朗日插值函数为:
P(x)=(599*x)/60 - (161*x^2)/24 + 2*x^3 - (10262108525909*x^4)/35184372088832 + (37529996894755*x^5)/2251799813685248 + 61

四、拉格朗日插值多项式的Python代码

from scipy.interpolate import lagrange
x=[1,2,3,4,5,6]
y=[66,66,65,64,63,63]
a=lagrange(x,y)
print(a)

 最后得到的结果如下:
         5          4     3         2
0.01667 x - 0.2917 x + 2 x - 6.708 x + 9.983 x + 61

0.01667x^{5}-0.2917x^{4}+2x^{3}-6.708x^{2}+9.983x+61

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天下弈星~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值