我在matlab中找不到一个函数来实现正态分布的均值和标准差,并绘制其PDF和CDF。
我担心我实现的两个函数缺少某些东西,因为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')
答案 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