如何在matlab中绘制正态分布的概率密度函数和累积分布函数

3

我在matlab中找不到一个能够获取正态分布均值和标准差并绘制其概率密度函数累积分布函数的函数。

我担心我下面实现的这两个函数有所遗漏,因为我得到了pdfNormal的最大值大于1的结果。

function plotNormPDF(u,s,color)
    mu = u; 
    sigma = s; 
    x = (mu - 5 * sigma) : (sigma / 100) : (mu + 5 * sigma); 
    pdfNormal = normpdf(x, mu, sigma);
    string = 'the maximal pdfNormal is';
    string = sprintf('%s :%d', string,max(pdfNormal));
    disp(string)
    plot(x, pdfNormal/max(pdfNormal),color); 
end

对于CDF规范

function plotNormCDF(u,s,color)
    mu = u; 
    sigma = s; 
    x = (mu -  5*sigma) : (sigma / 100) : (mu + 5*sigma); 
    pdfNormal = normpdf(x, mu, sigma);
    plot(x,cumsum(pdfNormal)./max(cumsum(pdfNormal)),color)
end

以下是同时使用它们的示例:

plotNormCDF(0.2, 0.1,'r')
plotNormPDF(0.2, 0.1,'r')

enter image description here

enter image description here


5
如果概率密度函数的最大值大于1,也没关系:曲线下的面积必须等于1。考虑这样一个例子:在概率密度函数上选取一个点并将其值设置为1000000,该点下的面积仍然是0,因此概率密度函数的总面积不受影响。另一方面,考虑一个在[0,.5]范围内的均匀分布:为了使积分为1,概率密度函数在支撑集上的值都应该是2。更多信息请参考whuber的评论以及提供的链接:http://stats.stackexchange.com/questions/47714/how-to-explain-what-density-is-and-the-interpretation-of-the-curves-height-to-n - David Marx
请参见http://stats.stackexchange.com/questions/4220/a-probability-distribution-value-exceeding-1-is-ok - Glen_b
1
“与概率不同,概率密度函数可以取大于一的值”在您所参考的维基百科页面中。 - A. Donda
2个回答

5

您不需要那么多代码,看看这个更简单:

mu = 0.2; sigma = 0.1;
x = linspace (mu-4*sigma, mu+4*sigma);
plot(x, normpdf (x,mu,sigma))
plot(x, normcdf (x,mu,sigma))

2
只需向 linspace 添加第三个参数即可实现对 x 轴更精细的采样。 - Luis Mendo
1
linspace(mu-4*sigma, mu+4*sigma, 10000) - 0x90

3

您的函数plotNormPDF是正确的,除了您不应该除以最大值。正如David Marx所写的那样,概率密度函数可以达到的值没有上限,只有在可能值的范围内积分的约束。

function plotNormPDF(u,s,color)
mu = u;
sigma = s;
x = (mu - 5 * sigma) : (sigma / 100) : (mu + 5 * sigma);
pdfNormal = normpdf(x, mu, sigma);
string = 'the maximal pdfNormal is';
string = sprintf('%s :%d', string,max(pdfNormal));
disp(string)
plot(x, pdfNormal,color);
end

你的函数plotNormCDF在原则上是正确的,但可能不太精确,因为它通过累积和近似积分。最好使用normcdf函数。这里将最大值归一化到1既不必要,也没有影响。
function plotNormCDF(u,s,color)
mu = u;
sigma = s;
x = (mu -  5*sigma) : (sigma / 100) : (mu + 5*sigma);
cdfNormal = normcdf(x, mu, sigma);
plot(x,cdfNormal,color)
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接