随笔 - 1762  文章 - 0  评论 - 109  阅读 - 431万

matlab自带的插值函数interp1的四种插值方法

 

 

 

复制代码
x=0:2*pi;
y=sin(x);
xx=0:0.5:2*pi;

%interp1对sin函数进行分段线性插值,调用interp1的时候,默认的是分段线性插值
y1=interp1(x,y,xx);
figure
plot(x,y,'o',xx,y1,'r')
title('分段线性插值')

%临近插值
y2=interp1(x,y,xx,'nearest');
figure
plot(x,y,'o',xx,y2,'r');
title('临近插值')

%球面线性插值
y3=interp1(x,y,xx,'spline');
figure
plot(x,y,'o',xx,y3,'r')
title('球面插值')

%三次多项式插值法
y4=interp1(x,y,xx,'cubic');
figure
plot(x,y,'o',xx,y4,'r');
title('三次多项式插值')
复制代码

 

 

 

 

 

 

 

 

(1) Nearest方法速度最快,占用内存最小,但一般来说误差最大,插值结果最不光滑。

(2) Spline三次样条插值是所有插值方法中运行耗时最长的,插值函数及其一二阶导函数都连续,是最光滑的插值方法。占用内存比cubic方法小,但是已知数据分布不均匀的时候可能出现异常结果。

(3) Cubic三次多项式插值法中,插值函数及其一阶导数都是连续的,所以插值结果比较光滑,速度比Spline快,但是占用内存最多。

 

 

 

 

 

 

 

 

更新日志2020-11-3

有个小老弟问我,怎么把这个插值函数获取到,后续调用,然后去看了一眼官方文档,有一句话

pp = interp1(x,v,method,'pp')

 


分段多项式,以可传递到 ppval 函数进行计算的结构体的形式返回。

也就是说这个插值函数可以使用上述代码获取到函数,然后使用ppval执行这个函数在某个特定位置的插值结果,比如

复制代码
%test interpolate
clear;clc;close all
N=1200;
x = 1:0.5:6;
y = sin(x);
pp = interp1(x,y,'pchip','pp');
 
xq= 1:0.1:6;
result = ppval(pp,xq);
plot(x,y,'o',xq,result,'-.')
复制代码

 


上述代码就是将函数以`pp`变量返回,然后使用ppval调用此函数,获取在xq处的值

 

 

 


————————————————
版权声明:本文为CSDN博主「风翼冰舟」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zb1165048017/article/details/48343507

posted on   一杯明月  阅读(1939)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
历史上的今天:
2021-02-22 P2 矩阵消元
2021-02-22 利用matlab绘制向量
2021-02-22 bow键盘失灵的解决办法
2021-02-22 matlab代码画平面
2021-02-22 P1 方程组的几何解释
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示