如何在matlab中为PDF和CDF绘制正态分布图

时间:2013-11-30 13:13:25

标签: matlab normal-distribution cdf

我在matlab中找不到一个函数来实现正态分布的均值和标准差,并绘制其PDFCDF

我担心我实现的两个函数缺少某些东西,因为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

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分:3)

您的函数plotNormPDF是正确的,除非您不应除以最大值。正如大卫马克思写的那样,概率密度函数可以达到的值没有上限,只有关于其在可能值范围内的积分的约束。

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