matlab中二維插值函數(shù)interp2的使用詳解
下面是一段產(chǎn)生log-normal分布的代碼,以此進行說明。
clear all; clc; for t=1:100 Traffic(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:Nx forj=1:Ny Mu = 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的原理和用法。簡單地說,就是產(chǎn)生Oxy平面的網(wǎng)格坐標。
在進行3-D繪圖操作時,涉及到x、y、z三組數(shù)據(jù),而x、y這兩組數(shù)據(jù)可以看做是在Oxy平面內(nèi)對坐標進行采樣得到的坐標對(x,y)。例如,要在“3<=x<=5,6<=y<=9,z不限制區(qū)間”這個區(qū)域內(nèi)繪制一個3-D圖形,如果只需要整數(shù)坐標為采樣點的話。
我們可能需要下面這樣一個坐標構(gòu)成的矩陣:
(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結(jié)合,便表示了上面的坐標矩陣。meshgrid就是產(chǎn)生這樣兩個矩陣,來簡化我們的操作。然后根據(jù)(x,y)計算獲得z,并繪制出三維圖形。
(2)理解interp2的參數(shù)含義和用法,如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)%這里已經(jīng)不再是(x,y),而是(xi,yi)。
(3)上述的代碼效果
插值前:
插值后:
補充知識:Matlab 二維插值,求面積
先將表中數(shù)據(jù)復制到EXCEL中,再導入到MATLAB中
這里只做了前兩問,第三位實在不會,等學會了再補
第二問本來想著用差分求出來導數(shù),再用面積公式,結(jié)果發(fā)現(xiàn)連z=f(x,y)我都不會表示。。。。。。
直接用的海倫公式,每一個方塊內(nèi)分成兩個三角形,分開求面積
x=0:100:1200; y=0:100:1000; [x y]=meshgrid(x,y); z=mydata1; x1=0:10:1200; y1=0:10:1000; [x1 y1]=meshgrid(x1,y1); z1=interp2(x,y,z,x1,y1) surf(x1,y1,z1) shading flat square=0; [r c]=size(z1) for n=1:c-1 for m=1:r-1 a=x1(m,n+1)-x1(m,n); b=y1(m+1,n)-y1(m,n); temp=z1(m+1,n+1)-z1(m,n); c=sqrt(a*a+b*b+temp*temp); temp=z1(m,n+1)-z1(m,n); a1=sqrt(temp*temp+a*a); temp=z1(m+1,n+1)-z1(m,n+1); b1=sqrt(temp*temp+b*b); p=(a1+b1+c)/2; square=square+sqrt(p*(p-a1)*(p-b1)*(p-c)); temp=z1(m+1,n)-z1(m,n); b2=sqrt(b*b+temp*temp); temp=z1(m+1,n+1)-z1(m+1,n); a2=sqrt(temp*temp+a*a); p=(a2+b2+c)/2; square=square+sqrt(p*(p-a2)*(p-b2)*(p-c)); end end square
square =
1.2210e+06
以上這篇matlab中二維插值函數(shù)interp2的使用詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
python實現(xiàn)巡檢系統(tǒng)(solaris)示例
這篇文章主要介紹了python實現(xiàn)巡檢系統(tǒng)(solaris)示例,需要的朋友可以參考下2014-04-04Python實現(xiàn)將n個點均勻地分布在球面上的方法
這篇文章主要介紹了Python實現(xiàn)將n個點均勻地分布在球面上的方法,涉及Python繪圖的技巧與相關(guān)數(shù)學函數(shù)的調(diào)用,具有一定參考借鑒價值,需要的朋友可以參考下2015-03-03Python配置文件解析模塊ConfigParser使用實例
這篇文章主要介紹了Python配置文件解析模塊ConfigParser使用實例,本文講解了figParser簡介、ConfigParser 初始工作、ConfigParser 常用方法、ConfigParser使用實例等內(nèi)容,需要的朋友可以參考下2015-04-04Python中requests.session()的用法小結(jié)
這篇文章主要介紹了Python中requests.session()的用法小結(jié),可能大家對?session?已經(jīng)比較熟悉了,也大概了解了session的機制和原理,但是我們在做爬蟲時如何會運用到session呢,接下來要講到會話保持,需要的朋友可以參考下2022-11-11