MATLAB-常見插值方法及常見知識

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

拉格朗日插值:

基本原理:先構造一組基函數:

是次多項式,滿足

上式稱爲次Lagrange插值多項式。

 

用Matlab作Lagrange插值:

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

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

x爲待插值的點。

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

function Lagrange(X,Y,x0)
Len_y=length(Y);
Len_x=length(X);
if Len_y~=Len_x
    errorlog('維數不等');
else
    syms x;
    p=0;
    for i=1:Len_y
        q=1;
        for j=1:Len_x
            if j~=i
                q=q*(x-X(j))/(X(i)-X(j));
            end
        end
        p=p+q*Y(i);
    end
    
    simplify(p);
    
    if nargin==3
        sprintf('給定點處的函數值得近似值爲: %f',subs(p,'x',x0))
    else 
        sprintf('所求的拉格朗日的插值函數爲: ')
        p=collect(p);
        p=vpa(p,6),
    end
end
end


分段線性插值:

基本原理:
將每兩個相鄰的節點用直線連起來,如此形成的一條折線就是分段線性插值函數。計算點的插值時,只用到左右的兩個節點,計算量與節點個數n(初始值x0,y0的長度,n=length(x0))無關,而拉格朗日插值與n值有關。分段線性插值中n越大,分段越多,插值誤差越小。

Matlab實現分段線性插值:

用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、分段線性和三次樣條三種插值方法計算。

表1

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

lighting 調用語法:

lighting options   %設置照明模式

該指令只有在light指令執行執行後在起作用,此外options有以下四種取值:

flat:入射光均勻灑落在圖形上的每個面上,主要與facted配用,他是默認模式。

gouraud:先對頂點顏色插補,再對頂點勾劃的面色進行插補,用於曲面表現。

phong:對定點出法線插值,在計算各個像素的反光,表現效果最好。

none:使所有光源關閉。

matlab中x.^2與x^2有什麼區別?

.^2是矩陣中的每個元素都求平方,^2是求矩陣的平方或兩個相同的矩陣相乘,因此要求矩陣爲方陣,且看下面的例子
x=1:4
x =

1 2 3 4

x.^2

ans =

1 4 9 16

x^2

Error using ^
Inputs must be a scalar and a square matrix.
To compute elementwise POWER, use POWER (.^) instead.
x=[1 2;3 4]

x =

1 2

3 4
x^2

ans =

7 10

15 22
x.^2
ans =

1 4

9 16

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章