本篇主要介紹在三種插值方法:拉格朗日插值、分段線性插值、三次樣條插值,以及這三種方法在matlab中如何實現。
令上式稱為
matlab沒有現成的lagrange函式,需要手動寫,如下:
x0,y0為原始座標點,維度必須相同。
x為待插值的點。
y是返回值,是最終插值結果。
將每兩個相鄰的節點用直線連起來,如此形成的一條折線就是分段線性插值函式。計算用matlab實現分段線性插值不需要自己手動編寫函式,matlab有現成的一維插值函式interp1function y=lagrange(x0,y0,x) %x0,y0為初始座標,x為需要插值的點,返回的y為插值結果
n=length(x0);m=length(x);
for i=1:m
z=x(i);
s=0;
for j=1:n
p=1;
for k=1:n
if k~=j
p=p*((z-x0(j))/(x0(k)-x0(j)));
endend
s=p*y0(k)+s;
endy(i)=s;
end
y=interp1(x0,y0,x,'method')
method指定插值方法,其值可為:
linear:線性插值(預設)
nearest:最近項插值
spline:逐次3次樣條插值
cubic:保凹凸性 3 次插值
所有插值方法都要求x0單調。
使用三次樣條插值有兩種方法:其中一種就是第二種插值方式(分段線性插值),只需要將method修改為spline即可實現。
還有一種實現方式如下:
pp=csape(x0,y0);
y=ppval(pp,x);
其中x0,y0,x與前面含義相同,返回值y即插值結果。
表1給出的 x, y 資料位於機翼斷面的下輪廓線上,假設需要得到 x 座標每改變0.1 時的 y 座標。試完成加工所需資料,畫出曲線。要求用 lagrange、分段線性和三次樣條三種插值方法計算。
表1x 0 3 5 7 9 11 12 13 14 15
y 0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6
解:編寫**如下:
由圖可知:拉格朗日插值誤差較大,插值大量點的時候不建議使用。分段線性插值結果最好,使用的是method是linear(預設)。三次樣條插值有點誤差,但不是很大,得到的曲線比較光滑。clear,clc
x0=[0,3,5,7,9,11,12,13,14,15];
y0=[0,1.2,1.7,2.0,2.1,2.0,1.8,1.2,1.0,1.6];
x1=[0:0.1:15];
%拉格朗日插值
y1=lagrange(x0,y0,x1);
figure
plot(x0,y0,x1,y1,'.')
title('拉格朗日插值')
%分段線性插值
y2=interp1(x0,y0,x1);
figure
plot(x0,y0,x1,y2,'.')
title('分段線性插值')
%三次樣條插值
y3=interp1(x0,y0,x1,'spline');
figure
plot(x0,y0,x1,y3,'.')
title('三次樣條插值')
學習插值函式時的一點小心得,希望能幫到大家!
拉格朗日插值
拉格朗日插值基函式 li x x x 0 x xi 1 x xi 1 x x n x i x0 xi xi 1 xi xi 1 xi xn 拉格朗日差值函式 ln x i 0 nyil i x 其中,x為缺失值對應的下表序號,ln x 為缺失值的插值結果,xi 為缺失值yi 的下表序號。對全部缺失值...
拉格朗日插值
function s larg1 x,y,xi m length x 求出插值節點向量長度 n length y if m n error 向量x與y的長度必須一致 這裡肯定一致,只是為了消除直接選取x,y資料的時候出錯而設定的 end s 0 for i 1 n z ones 1,length x...
拉格朗日插值
存在性和唯一性的證明以後再補。拉格朗日插值,emmmm,名字挺高階的 joy 它有什麼應用呢?我們在fft中講到過 設 n 1 次多項式為 y sum a i x i 有乙個顯然的結論 如果給定 n 個互不相同的點 x,y 則該 n 1 次多項式被唯一確定 那麼如果給定了這互不相同的 n 個點,利用...