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