Matlab interp1 函数的基本用法简介

这篇博客介绍了Matlab中的一维内插函数interp1,用于在一维数据中进行线性、三次方程和spline函数内插。通过实例展示了在不同数据变化情况下,如何使用interp1计算内插点,并通过绘图对比了线性、三次方程和spline内插的效果。spline内插在数据变化较大时提供更平滑的曲线,适合复杂的函数逼近。
摘要由CSDN通过智能技术生成

线性内插是假设在二个已知数据中的变化为线性关系,因此可由已知二点的座标(a, b)去计算通过这二点的 斜线,公式如下:

其中 a<b<c 在上式的 b 点即是代表要内插的点,f(b) 则是要计算的内插函数值。下图即是一个以二种内插 法的比较

\pcxfile[12cm,5cm]{fig9_1.pcx}

\caption{线性式与 spline 函数的曲线契合}

线性内插是最简单的内插方法,但其适用范围很小;如果原来数据的函数f有极大的变化,假设其数据点之 间为线性变化并不合理。所以我们可以用二次、三次方程式或是另一种称为spline函数来近似原来数据的函 数。MATLAB的一维内插函数是interp1,其语法为interp1(x,y,xi),interp1(x,y,xi,'method');其中的x,y是原已知的 数据的x,y值,而xi则是要内插的数据点,另外method可以设定内插方法有 linear,cubic,spline,分别是一次、三 次方程式和spline函数,其中预设方法是linear。如果数据的变化较大,以 spline函数内插所形成的曲线最平滑 ,所以效果最好。而三次方程式所得到的内插曲线平滑度,则介于线性与spline函数之间。

我们以下面的例子说明。假设有一个汽车引擎在定转速下,温度与时间(单位为sec)的三次量测值如下

time
temp1
这段代码主要是演示了 MATLAB 中插值函数 interp1 的不同插值方法及其结果的可视化展示。下面逐行解释该代码的含义和思路: 1. `x=[1,3,5,7,9,11,13,15,17,19]; y=[5.9,6.4,7.8,7.6,6.9,5.2,3.4,1.5,-0.7,-2];` 定义了两个数组 x 和 y,分别存储了离散的数据点坐标。 2. `x1=0:0.1:20;` 定义了一个新的数组 x1,用于存储线性插值后的新数据点坐标,0 到 20 之间每隔 0.1 个单位取一个数。 3. `y1=interp1(x,y,x1,'linear');` 使用 interp1 函数进行线性插值,得到新的 y 坐标数组 y1。 4. `subplot(2,2,1)` 创建一个 2 行 2 列的图形窗口,并定位到第 1 个子图。 5. `a=find(x1==10);` 找出 x1 中等于 10 的元素的索引。 6. `y1(a)` 输出 y1 中对应索引 a 的元素,即线性插值后 x=10 时的 y 坐标。 7. `plot(x1,y1,x1(a),y1(a),'rp')` 将线性插值后的数据点用直线连接,并在 x=10 处标注一个红色圆点。 8. `y2=interp1(x,y,x1,'nearest');` 使用最近点插值方法,得到新的 y 坐标数组 y2。 9. `subplot(2,2,2)` 定位到第 2 个子图。 10. `b=find(x1==10);` 找出 x1 中等于 10 的元素的索引。 11. `y2(b)` 输出 y2 中对应索引 b 的元素,即最近点插值后 x=10 时的 y 坐标。 12. `plot(x1,y2,x1(b),y2(b),'rp')` 将最近点插值后的数据点用直线连接,并在 x=10 处标注一个红色圆点。 13. `y3=interp1(x,y,x1,'pchip');` 使用分段三次埃尔米特插值方法,得到新的 y 坐标数组 y3。 14. `subplot(2,2,3)` 定位到第 3 个子图。 15. `c=find(x1==10);` 找出 x1 中等于 10 的元素的索引。 16. `y3(c)` 输出 y3 中对应索引 c 的元素,即分段三次埃尔米特插值后 x=10 时的 y 坐标。 17. `plot(x1,y3,x1(c),y3(c),'rp')` 将分段三次埃尔米特插值后的数据点用直线连接,并在 x=10 处标注一个红色圆点。 18. `y4=interp1(x,y,x1,'spline');` 使用三次样条插值方法,得到新的 y 坐标数组 y4。 19. `subplot(2,2,4)` 定位到第 4 个子图。 20. `d=find(x1==10);` 找出 x1 中等于 10 的元素的索引。 21. `y4(d)` 输出 y4 中对应索引 d 的元素,即三次样条插值后 x=10 时的 y 坐标。 22. `plot(x1,y4,x1(d),y4(d),'rp')` 将三次样条插值后的数据点用直线连接,并在 x=10 处标注一个红色圆点。 最后,该代码通过在 2x2 的子图中展示四种不同的插值方法得到的新数据点,以及标注了 x=10 时的 y 坐标,让人直观地比较了这些插值方法的差异和优缺点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ncst

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

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

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

打赏作者

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

抵扣说明:

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

余额充值