[Matlab]拉格朗日插值:求过n个点的多项式曲线

一、原理

以3个点为例,设A(x1,y1),B(x2,y2),C(x3,y3)。那么需要一个二次曲线才能通过这三点。

为得到这个二次曲线,我们可以通过三根二次曲线相加来求得。

 第一根曲线f1{\color{Red} }(x),在x1处取1,在x2,x3处取0。

f_{1}(x)=\frac{(x-x_2{})(x-x_3{})}{(x_1{}-x_2{})(x_1{}-x_3{})}(可以验算)

 第二根曲线f2(x),在x2处取1,在x1,x3处取0。

f_{2}(x)=\frac{(x-x_1{})(x-x_3{})}{(x_2{}-x_1{})(x_2{}-x_3{})}

 第三根曲线f3(x),在x3处取1,在x1,x2处取0。

f_{3}(x)=\frac{(x-x_1{})(x-x_2{})}{(x_3{}-x_1{})(x_3{}-x_2{})}

  y_{1^{}}f_{_1{}}(x)可以保证在x1处,取得y1,在x2,x3处,取0。

  y_{2}f_{2}(x)可以保证在x2处,取得y2,在x1,x3处,取0。

  y_{3}f_{3}(x)可以保证在x3处,取得y3,在x1,x2处,取0。 

那么f(x)=y_{1}f_{1}(x)+y_{2}f_{2}(x)+y_{3}f_{3}(x) 

可以保证在x1处,取得y1,x2处,取得y2,x3处,取得y3.

 推广到n个点,有

二、代码

%% 拉格朗日插值 过n个点
x=(1:12);%横坐标
y=[1 3 2 0 7 4 0 5 11 0 13 7 ];%纵坐标

n=length(x);%x的长度
t=zeros(1,n);
syms a f0 f1
f=sym('f',[1 n]);
f0=0;
for i=1:n
    f(i)=1;
    for j=[1:i-1,i+1:n]
        f(i)=f(i)*(a-x(j))/(x(i)-x(j));
    end
    f0=f0+y(i)*f(i);
end
f1=expand(f0);%多项式展开
pretty(f1)
p=sym2poly(f1);%多项式系数
for i=1:n
    t(i)=subs(f1,a,i);%验证
end
%画图
x1 = min(x):0.02:max(x);
y1 = polyval(p,x1);
plot(x,y,'*',x1,y1,'k'); 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值