主要介紹在三種插值方法:拉格朗日插值、分段線性插值、三次樣條插值,以及這三種方法在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