拉格朗日插值 分段線性插值 三次樣條插值

2021-08-26 12:19:03 字數 1773 閱讀 4484

本篇主要介紹在三種插值方法:拉格朗日插值、分段線性插值、三次樣條插值,以及這三種方法在matlab中如何實現。

令上式稱為

matlab沒有現成的lagrange函式,需要手動寫,如下:

x0,y0為原始座標點,維度必須相同。

x為待插值的點。

y是返回值,是最終插值結果。

function 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

將每兩個相鄰的節點用直線連起來,如此形成的一條折線就是分段線性插值函式。計算用matlab實現分段線性插值不需要自己手動編寫函式,matlab有現成的一維插值函式interp1

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

解:編寫**如下:

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('三次樣條插值')

由圖可知:拉格朗日插值誤差較大,插值大量點的時候不建議使用。分段線性插值結果最好,使用的是method是linear(預設)。三次樣條插值有點誤差,但不是很大,得到的曲線比較光滑。

學習插值函式時的一點小心得,希望能幫到大家!

拉格朗日插值

拉格朗日插值基函式 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 個點,利用...