matlab:畫二維正態分布密度函數圖


首先,把二維正態分布密度函數的公式貼這里

這只圖好大啊~~

但是上面的那個是多維正態分布的密度函數的通式,那個n階是對稱正定方陣叫做協方差矩陣,其中的x,pi,u都是向量形式。雖然這個式子很酷,但是用在matlab里畫圖不太方面,下面換一個

這個公式與上面的等價,只不過把向量和矩陣展開,計算出來。我們可以用這個式子畫圖。

因為二維函數的形式是:z=f(x,y)

所以必須先選擇一些點,然后計算出f(x,y)。這些點分布在一個平面上,而z則在三維空間。

如何選擇平面上的點陣?

[x,y]=meshgrid(a,b)

meshgrid就是這樣一個生成點陣的函數,這個meshgrid理解起來有點繞,不過舉個例子就馬上能力明白了。下面是matlab里面的一段截圖:

 

我們可以看到meshgrid生成了兩個同樣大小的矩陣,第一個矩陣是通過把第一個參數[1:3]順着行的方向復制了4次,4是第二個參數的長度,同樣第二個矩陣是第二個參數順着列的方向復制了三次,3是第一個參數向量的長度。而這個點陣就是:

(1,2)   (2,2)   (3,2)

(1,3)   (2,3)   (3,3)

...

看出什么意思了吧?就這個意思。

至於這兩個參數到底怎么選,這樣根據你的正態分布的均值,盡量使點陣的中心與分布的均值靠近。

好了,有了平面上的點,就來算這些點對應的函數值。往函數里套就行,下面是代碼:

function Z=drawGaussian(u,v,x,y)
% u,vector,expactation;v,covariance matrix
%x=150:0.5:190;   
%y=35:110;       
[X,Y]=meshgrid(x,y);
DX=v(1,1);     %X的方差
dx=sqrt(DX);
DY=v(2,2);     %Y的方差
dy=sqrt(DY);
COV=v(1,2);     %X Y的協方差
r=COV/(dx*dy);
part1=1/(2*pi*dx*dy*sqrt(1-r^2));
p1=-1/(2*(1-r^2));
px=(X-u(1)).^2./DX;
py=(Y-u(2)).^2./DY;
pxy=2*r.*(X-u(1)).*(Y-u(2))./(dx*dy);
Z=part1*exp(p1*(px-pxy+py));
mesh(x,y,Z);

  最后一句mesh(x,y,Z) 是畫圖函數,畫出的圖行大概是下面這個樣子:

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM