【Matlab】实现线性插值,抛物插值,高阶插值法

从例题出发

1. 用线性插值,抛物插值,高阶插值法解f(0.6), f(0.8),f(1.0)

其中已知正弦函数表:

xk

0.5

0.7

0.9

1.1

1.3

1.5

1.7

1.9

sinxk

0.4794

0..6442

0.7833

0.8912

0.9636

0.9975

0.9917

0.9463

2. 用线性插值,抛物插值,高阶插值法解f(0.78),并根据5阶差分估计4阶公式的误差

其中已知:

x

0.4

0.5

0.6

0.7

0.8

0.9

lnx

-0.916291

-0.693147

-0.510826

-0.357765

-0.223144

-0.105361

介绍算法

使用线性插值是指插值函数为一次多项式的插值方式,其在插值节点上的插值误差为零。线性插值相比其他插值方式,如抛物线插值,具有简单、方便的特点。线性插值的几何意义即为利用过两个已知点的直线来近似表示原函数。线性插值可以分为单线性插值和双线性插值,前者是在一维方向上进行插值,后者是在二维方向上进行插值。线性插值的计算公式为:

其中,(x0​,y0​)(x1​,y1​)是已知的两个插值节点,x是待求的插值点的横坐标,y是待求的插值点的纵坐标。

抛物插值是指插值函数为二次多项式的插值方式,其在插值节点上的插值误差为零。抛物插值相比线性插值,具有更高的精度和平滑性。抛物插值的几何意义即为利用过三个已知点的抛物线来近似表示原函数。抛物插值的计算公式为:

其中,(x0​,y0​)(x1​,y1​)(x2​,y2​)是已知的三个插值节点,x是待求的插值点的横坐标,y待求的插值点的纵坐标。

高阶插值是指插值函数为高次多项式的插值方式,其在插值节点上的插值误差为零。高阶插值相比抛物插值,具有更高的精度和灵活性,但也可能产生Runge现象,即在插值区间的边缘处出现较大的振荡。高阶插值的几何意义即为利用过多个已知点的高次曲线来近似表示原函数。高阶插值的计算公式为:

其中,(xi​,yi​)是已知的n+1个插值节点,x是待求的插值点的横坐标,y是待求的插值点的纵坐标,li​(x)是拉格朗日基函数

由递推公式得到插值误差的近似值:

代码的实现

x1 = [0.5 0.7 0.9 1.1 1.3 1.5 1.7 1.9];
y1 = [0.4794 0.6442	0.7833 0.8912 0.9636 0.9975 0.9917 0.9463];
x2 = [0.4 0.5 0.6 0.7 0.8 0.9];
y2 = [-0.916291 -0.693147 -0.510826 -0.357765 -0.223144 -0.105361];

f11 = interp1(x1,y1,0.6,"linear")
f12 = interp1(x1,y1,0.8,"linear")
f13 = interp1(x1,y1,1.0,"linear")
f21 = polyval(polyfit(x1,y1,2),0.6)
f22 = polyval(polyfit(x1,y1,2),0.8)
f23 = polyval(polyfit(x1,y1,2),1.0)
f31 = lagra(x1,y1,0.6)
f32 = lagra(x1,y1,0.8)
f33 = lagra(x1,y1,1.0)

f_1 = interp1(x2,y2,0.78,"linear")
f_2 = polyval(polyfit(x2,y2,2),0.78)
f_3 = lagra(x2,y2,0.78) 

%拉格朗日插值 高阶插值
function y = lagra(x0,y0,x)
n = length(x0);
m = length(x);
for i = 1 : m
    z = x(i);
    s = 0;
    for k = 1 : n
        p = 1;
        for j = 1 : n
            if j ~= k
                p = p * (z-x0(j))/(x0(k)-x0(j));
            end
        end
        s = p * y0(k) + s;
    end
    y(i) = s;
end
end

输出的结果

小小的总结

线性插值是最简单和方便的插值方法,但其精度和平滑性较低,只适用于数据变化较缓和的情况;抛物插值是一种较高精度和平滑性的插值方法,但其需要三个插值节点,且可能出现过拟合的现象,只适用于数据变化较平滑的情况;高阶插值是一种最高精度和灵活性的插值方法,但其需要多个插值节点,且可能出现Runge现象,即在插值区间的边缘处出现较大的振荡,只适用于数据变化较复杂的情况。

插值方法的选择应该根据数据的特点和要求进行,不同的插值方法有不同的适用范围和局限性,没有一种插值方法是万能的。插值误差的大小受到多方面的影响,如插值函数的形式,插值节点的分布,插值点的位置,原函数的性质等。插值误差的改善措施有多种,如增加插值节点的数量,改变插值节点的分布,采用分段插值或样条插值等。

  • 22
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值