matlab中二维插值函数interp2的使用
下面是一段產生log-normal分布的代碼,以此進行說明。?
clear all; clc; for t=1:100Traffic(t) =curve(t); end MaxTraffic = max(Traffic); w = 0.2; Wmax = 2*pi*w/3000; x=[0:10:300]; y=[0:10:300]; Nx=length(x); Ny=length(y); Sigma = 0.53; t = 0; M = 10*curve(t)/MaxTraffic; sum = 0; for i=1:Nxforj=1:NyMu = log(M)-0.5*Sigma^2;Rho(i,j) = RhoFromCoordination(x(i),y(j),Wmax,Sigma,Mu);Lognrnd(i,j) = round(exp(Sigma*Rho(i,j)+Mu));sum = Lognrnd(i,j)+sum;end end sum [xi,yi]=meshgrid(0:2:300,0:2:300); z1=interp2(x,y,Lognrnd,xi,yi,'spline');%三次樣條插值 surf(xi,yi,z1)
(1)首先理解meshgrid的原理和用法。簡單地說,就是產生Oxy平面的網格坐標。
? ? ? ?在進行3-D繪圖操作時,涉及到x、y、z三組數據,而x、y這兩組數據可以看做是在Oxy平面內對坐標進行采樣得到的坐標對(x,y)。例如,要在“3<=x<=5,6<=y<=9,z不限制區間”這個區域內繪制一個3-D圖形,如果只需要整數坐標為采樣點的話。我們可能需要下面這樣一個坐標構成的矩陣:
? ? ? (3,9),(4,9),(5,9);
? ? ? (3,8),(4,8),(5,8);
? ? ? (3,7),(4,7),(5,7);
? ? ? (3,6),(4,6),(5,6);
? 在matlab中我們可以這樣描述這個坐標矩陣
? 把各個點的x坐標獨立出來,得:
? ? ? ? ? ?3,4,5;
? ? ? ? ? ?3,4,5;
? ? ? ? ? ?3,4,5;
? ? ? ? ? ?3,4,5;
??????再把各個點的y坐標也獨立出來:
? ? ? ? ? ?9,9,9;
? ? ? ? ? ?8,8,8;
? ? ? ? ? ?7,7,7;
? ? ? ? ? ?6,6,6;
??????這樣對應的x、y結合,便表示了上面的坐標矩陣。meshgrid就是產生這樣兩個矩陣,來簡化我們的操作。然后根據(x,y)計算獲得z,并繪制出三維圖形。
?
(2)理解interp2的參數含義和用法,如ZI= interp2(X,Y,Z,XI,YI,'spline')
A、返回矩陣ZI,ZI的元素包含對應于參量XI與YI(可以是向量、或同型矩陣)的元素, 即ZI(i,j)←(XI(i),YI(j))
B、用戶可以輸入行向量和列向量XI與YI。
C、若XI與YI中有在X與Y范圍之外的點,則相應地返回nan(Not a Number)。
D、用指定的算法method計算二維插值:
???????????’linear’??:雙線性插值算法(缺省算法);
???????????’nearest'??:最臨近插值;
???????????’spline’??:三次樣條插值;
???????????’cubic’???:雙三次插值。
E、如以下的運用:
??????[xi,yi] = meshgrid(0:2:300,0:2:300);
??????ZI = interp2(x,y,Lognrnd,xi,yi,'spline');%三次樣條插值
??????surf(xi,yi,ZI)%這里已經不再是(x,y),而是(xi,yi)。
?
(3)上述的代碼效果
插值前:
插值后:
?
總結
以上是生活随笔為你收集整理的matlab中二维插值函数interp2的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ABAQUS常用量纲
- 下一篇: matlab中关于@的作用(函数表达式句