2012-08-06 356 views
5

我有100個樣本數,我需要在matlab中繪製它們的正態分佈曲線。在Matlab中繪製樣本的正態分佈圖

這些採樣數據的平均值和標準偏差可以很容易地計算出來,但是有沒有任何函數繪製正態分佈?

回答

7

如果你有機會獲得統計工具箱,功能histfit做什麼,我想你需要:

>> x = randn(10000,1); 
>> histfit(x) 

Normal distribution plot

就像與hist命令還可以指定垃圾箱的數量,並且您還可以指定使用哪個分配(默認情況下是正態分佈)。

如果您沒有統計工具箱,可以使用@Gunther和@learnvst的答案的組合來重現相似的效果。

+2

+1不錯,正是OP正在尋找的 – 2012-08-06 16:11:37

+0

woow。我正在尋找這個。謝謝 :) – ManiAm 2012-08-06 16:42:58

5

使用hist

hist(data) 

它吸引你的數據的直方圖:

enter image description here

您還可以指定頻段的數目得出,如:

hist(data,5) 

如果你只想繪製結果pdf,用自己創建它:

mu=mean(data); 
sg=std(data); 
x=linspace(mu-4*sg,mu+4*sg,200); 
pdfx=1/sqrt(2*pi)/sg*exp(-(x-mu).^2/(2*sg^2)); 
plot(x,pdfx); 

你大概可以覆蓋這在以前hist圖(我想你需要先然而,規模的東西,PDF格式是範圍在0-1之間,和直方圖是範圍:每個容器的元素數量)。

4

如果要爲數據繪製高斯分佈,可以使用以下代碼,將平均值和標準偏差值替換爲從數據集中計算出的值。

STD = 1; 
MEAN = 2; 
x = -4:0.1:4; 
f = ( 1/(STD*sqrt(2*pi)) ) * exp(-0.5*((x-MEAN)/STD).^2 ); 

hold on; plot (x,f); 

在這個例子中,數組x是你的發行版x軸,因此改變對你有什麼範圍和採樣密度。

如果您希望在沒有信號處理工具箱的幫助下繪製高斯擬合數據,以下代碼將繪製出正確縮放比例的繪圖。只需用您自己的數據替換y即可。

y = randn(1000,1) + 2; 
x = -4:0.1:6; 

n = hist(y,x); 

bar (x,n); 

MEAN = mean(y); 
STD = sqrt(mean((y - MEAN).^2)); 


f = ( 1/(STD*sqrt(2*pi)) ) * exp(-0.5*((x-MEAN)/STD).^2 ); 
f = f*sum(n)/sum(f); 

hold on; plot (x,f, 'r', 'LineWidth', 2); 

enter image description here