2.一些插值算法的应用

本文介绍了插值的概念,包括拉格朗日插值、分段线性插值、三次样条插值以及分段三次埃尔米特插值。通过实例展示了在不同插值方法下对水深数据进行处理的效果,得出三次样条插值在平滑性和准确性上的优势。

1.定义:
在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点。插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值。插值:用来填充图像变换时像素之间的空隙。
(百度百科)

(注:本文没有相关公式算法的推导,想要搞清楚原理的同学可以自行查阅相关资料)

2.一维插值(主要包括拉格朗日插值,分段线性插值与三次样条插值)
原理:假设有n+1个点(x,y),求一个插值点x的插值y,我们可以构造一个函数曲线,使其经过所有点,这样就通过函数表达式计算出了y*。
在这里插入图片描述
拉格朗日插值是利用了拉格朗日多项式,当节点为n+1时,插值多项式的次数为n。
注:
一般来说节点的数目较多,使用拉格朗日插值时就一定会出现高次的情况,这会导致龙格现象,即两端的波动极大,产生很大的误差。
所以,为了提高插值的精度,我们可以将节点分组,然后分别对每组的节点插值。这就是分段低次插值的思想。
但上述两种插值仅仅满足了多项式在节点处与被插函数有相等的函数值,但却不能反映被插值函数的性态,因此,埃尔米特(Hermite)在此基础上增加了新的限制条件,即节点处对应的导数甚至高阶导数值也相等,这就是埃尔米特插值多项式
三次样条插值:通过添加边界条件,显得更加光滑。

3.分段三次埃尔米特插值(调用pchip函数)

clear,clc
x=-pi:pi; 
y=sin(x);
x1=-pi:0.1:pi;
p=pchip(x,y,x1);
plot(x,y,'o',x1,p,'r-')

运行结果:
在这里插入图片描述
三次样条插值:

x =-pi:pi;
y = sin(x);
new_x =-pi:0.1:pi;
p1 = pchip(x,y,new_x); %分段三次埃尔米特插值
p2 = spline(x,y,new_x); %三次样条插值
plot(x,y,'o',new_x,p1,'r-',new_x,p2,'b-')
legend('样本点','三次埃尔米特插值','三次样条插值','Location','SouthEast') %标注显示在东南方向

运行结果:
在这里插入图片描述
显然三次样条插值更顺滑,效果更好。

4.例题:
在某海域测得一些点(x,y)处的水深z由下表给出,船的吃水深度为5英尺,估计在矩形区域(75,200)*(-50,150)里的哪些地方船要避免进入

x129140103.588185.5195105157.5107.57781162162117.5
y7.5141.52314722.5137.585.5-6.5-81356.5-66.584-33.5
z48686889988949

代码:

clear,clc
x=[129 140 103.5 88 185.5 195 105 157.5 107.5 77 81 162 162 117.5];
y=[7.5 141.5 23 147 22.5 137.5 85.5 -6.5 -81 3 56.5 -66.5 84 -33.5];
z=-[4 8 6 8 6 8 8 9 9 8 8 9 4 9];%此处z为水深,为了让图像更直观,这里取负号
cx=70:5:200;
cy=-100:5:150;
figure(1)
z1=griddata(x,y,z,cx,cy','nearest');
surfc(cx,cy,z1)
figure(2)
z2=griddata(x,y,z,cx,cy','linear');
surfc(cx,cy,z2)
figure(3)
z3=griddata(x,y,z,cx,cy','cubic');
surfc(cx,cy,z3)
figure(4)
subplot(1,3,1),contour(cx,cy,z1,4,'b')
subplot(1,3,2),contour(cx,cy,z2,4,'y')
subplot(1,3,3),contour(cx,cy,z3,4,'r')
figure(5)%选取三次样条的插值图像,画出-5米处的等高线
contour(cx,cy,z3,[-5,-5]);

运行结果:
在这里插入图片描述
(nearest)
在这里插入图片描述
(linear)
在这里插入图片描述
(cubic)
在这里插入图片描述
选取四条等高线时三种方法的运行结果,结合前面的图像,显然cubic效果更好
在这里插入图片描述
在cubic插值的基础上绘制出水深5米处的等高线,即船需要避开的区域

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值