一維插值
yi=interp1(x,y,xi,』method』)
其中method指定的方法為nearest,linear,spline,cubic,pchip (分段三次 hermite 插值),
所有的插值方法都要求 x 是單調的。
x 與 y 是具有相同大小 的向量,
求在 xi 點處的插值函式值 yi
yi = interp1(x,y,xi,method,『extrap』) %對於超出x 範圍的xi 中的分量將執行特殊的外 插值法 extrap。
例1:在一 天 24 小時內,從零點開始每間隔 2 小時測得的環境溫度資料分別為 12,9,9,10,18 ,24,28,27,25,20,18,15,13,推測中午 12 點(即 13 點)時的溫度
x=0:2:24;
y=[12 9 9 10 18 24 28 27 25 20 18 15 13];
a=13;
y1=interp1(x,y,a,'spline');
plot(x,y,'o',a,y1,'*')
xi=0:1/3600:24; %繪製一天內的溫度變化曲線
yi=interp1(x,y,xi, 'spline');
plot(x,y,'o' ,xi,yi)
x=0:0.12:1;
y=(x.^2-3*x+5).*exp(-5*x).*sin(x);
plot(x,y,'ro',x,y);
x1=0:0.02:1; %要插值點
y1=(x1.^2-3*x1+5).*exp(-5*x1).*sin(x1);
y2=interp1(x,y,x1);
y3=interp1(x,y,x1,'spline');
y4=interp1(x,y,x1,'nearest');
y5=interp1(x,y,x1,'cubic');
plot(x1,[y2' y3' y4' y5'],':',x,y,'ro',x1,y1);
legend('linear','spline','nearest','cubic','樣本點','原函式');
%計算各插值的最大誤差
[max(abs(y1-y2)),max(abs(y1-y3)),max(abs(y1-y4)),max(abs(y1-y5))];
二維插值
zi = interp2(x,y,z,xi,yi,』method』)
例1:
years = 1950:10:1990;
service = 10:10:30;
wage = [150.697 199.592 187.625 179.323 195.072 250.287 203.212 179.092 322.767 226.505 153.706 426.730 249.633 120.281 598.243];
w = interp2(service,years,wage,15,1975) %計算在 1975 年工作了 15 年的員工的工
clear;
[x,y]=meshgrid(-3:0.6:3,-2:0.4:2);
z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);
surf(x,y,z);
figure 開闢乙個新的
[x1,y1]=meshgrid(-3:0.2:3,-2:0.2:2);
z1=interp2(x,y,z,x1,y1);
z2=interp2(x,y,z,x1,y1,'cubic');
z3=interp2(x,y,z,x1,y1,'spline');
surf(x1,y1,z1);
figure
%比較誤差
z0=(x1.^2-2*x1).*exp(-x1.^2-y1.^2-x1.*y1);
surf(x1,y1,abs(z0-z2));
axis([-3,3,-2,2,0,0.08])
figure;
surf(x1,y1,abs(z0-z3));
axis([-3,3,-2,2,0,0.08]) %座標值設定
interp2 函式能夠較好的進行二維插值運算,但是它只能處理以網格形式給出的資料,
注:如果資料是隨機給出的,此時可以使用 griddata 函式。
其呼叫格式為: 格式:z=griddata(x0,y0,z0,x,y,』method』)
』 v4 』:matlab4.0 提供的插值演算法,公認效果較好;
』linear』:雙線性插值演算法(預設演算法);
』nearest』:最臨近插值;
』cubic』:雙三次插值
clear
x=-3+6*rand(199,1);
y=-2+4*rand(199,1);
z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);
plot(x,y,'*');
figure;
plot3(x,y,z,'*');
figure;
[x1,y1]=meshgrid(-3:0.2:3,-2:0.2:2);
z1=griddata(x,y,z,x1,y1,'cubic');
surf(x1,y1,z1);
figure;
z2=griddata(x,y,z,x1,y1,'v4');
surf(x1,y1,z2); %誤差比較
z0=(x1.^2-2*x1).*exp(-x1.^2-y1.^2-x1.*y1);
surf(x1,y1,abs(z0-z1));
axis([-3,3,-2,2,0,0.15])
figure;
surf(x1,y1,abs(z0-z2));
axis([-3,3,-2,2,0,0.15])
三維插值
注:
三維插值運算函式interp3,n維網格插值interpn,其調 用格式同interp1和interp2
對應的三維網格生成函式為
[x,y,z]=meshgrid(x1,y1,z1)
和非網格生成函式
griddata3(),griddatan()
他們同 griddata 呼叫格式相同
[x,y,z]=meshgrid(-1:0.2:1);
[x0,y0,z0]=meshgrid(-1:0.05:1);
v=exp(x.^2.*z+y.^2.*x+z.^2.*y).*cos(x.^2.*y.*z+z.^2.*y.*x);
v0=exp(x0.^2.*z0+y0.^2.*x0+z0.^2.*y0).*cos(x0.^2.*y0.*z0+z0.^2.*y0.*x0);
v1=interp3(x,y,z,v,x0,y0,z0,'spline');
err=v1-v0;
max(err(:))
slice(x0,y0,z0,v1,[-0.5,0.3, 0.9],[0.6,-0.1],[-1,-0.5,0.5,1]) %確定超立體在三個座標軸上的若干點
title('slives for four dim figures');
三次樣條插值
x0=-3:.6:3;
y0=-2:.4:2;
[x,y]=ndgrid(x0,y0);
z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);
sp=csapi(,z);
fnplt(sp);
例2:對離散分布在 y=exp(x)sin(x)函式曲線上的資料點進行樣條插值計算
x = [0 2 4 5 8 12 12.8 17.2 19.9 20];
y = exp(x).*sin(x);
xx = 0:.25:20;
yy = spline(x,y,xx);
plot(x,y,'o',xx,yy)
pp=csape(x,y,conds);
pp=csape(x,y,conds,valconds);
y=ppval(pp,x),求插值點的函式值必須呼叫ppval函式
conds 是邊界條件選項,可以取以下值:
『complete』,給定邊界一階導數.
『not-a-knot』,非扭結條件,不用給邊界值.
『periodic』,週期性邊界條件,不用給邊界值.
『second』,給定邊界二階導數.
『variational』,自然樣條(邊界二階導數為 0)
例3:給定資料 x=[1 2 4 5],y=[1 3 4 2],邊界條件 s」(1)=2.5,s」(5)=-3,計算插 值。
x=[1 2 4 5];
y=[1 3 4 2];
pp=csape(x,y,'second',[2.5,-3]);
pp.coefs %顯示每個區間上三次多項式的係數 x
i=1:0.1:5;
yi=ppval(pp,xi); %計算插值點對應的函式值
plot(x,y,』o』,xi,yi)
matlab 插值函式
matlab中的插值函式為interp1,其呼叫格式為 yi interp1 x,y,xi,method 其中x,y為插值點,yi為在被插值點xi處的插值結果 x,y為向量,method 表示採用的插值方法,matlab提供的插值方法有幾種 method 是最鄰近插值,linear 線性插值 spl...
matlab 資料插值
對資料進行加密 疏密程度 滿足繪圖要求 yi interp1 x,y,xi,method yi為插值結果,x,y為插值節點,xi為被插值點 method 插值方法 nearest 最臨近插值 linear 線性插值 spline 三次樣條插值 cubic 立方插值 預設 分段線性插值 tips x必...
MATLAB資料插值
yi interp1 x,y,xi,method 其中,x y為已知的資料點,xi為想要插值資料點的橫座標,返回對應的縱座標yi。method為插值方法,總共有四種。nearest 最近鄰點插值,即若x ix i xi 離x xx最近,則yi yy i y yi y linear 線性插值,即插值的...