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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM