5

我有100个采样数,我需要在matlab中绘制它们的正态分布曲线。

这些采样数据的均值和标准差可以很容易地计算出来,但是有没有绘制正态分布的函数呢?

4

3 回答 3

7

如果您有权访问 Statistics Toolbox,则该功能可以满足您的histfit需求:

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

正态分布图

就像使用hist命令一样,您还可以指定 bin 的数量,还可以指定使用哪种分布(默认情况下,它是正态分布)。

如果您没有统计工具箱,您可以使用@Gunther 和@learnvst 的答案组合来重现类似的效果。

于 2012-08-06T16:10:10.000 回答
5

使用hist

hist(data)

它绘制数据的直方图:

在此处输入图像描述

您还可以指定要绘制的箱数,例如:

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 范围内,直方图在范围内:每个 bin 的元素数)。

于 2012-08-06T16:01:32.817 回答
5

如果要为数据绘制高斯分布,可以使用以下代码,将均值和标准差值替换为从数据集中计算得出的值。

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);

在此处输入图像描述

于 2012-08-06T16:06:03.797 回答