Matlab将泊松函数拟合到直方图

时间:2018-03-14 05:48:08

标签: matlab histogram normalization poisson

我正在尝试将泊松函数拟合到Matlab中的直方图:示例调用使用hist()(不推荐使用),所以我想使用histogram()代替,尤其是因为你似乎无法规范化hist( )。然后,我想使用poisspdf()或任何其他标准函数(最好不使用工具箱!)对其应用泊松函数。直方图是概率缩放的,这是泊松函数的问题来自AFAIK。

clear
clc

lambda = 5;
range = 1000;
rangeVec = 1:range;

randomData = poissrnd(lambda, 1, range);
histoFigure = histogram(randomData, 'Normalization', 'probability');
hold on

poissonFunction = poisspdf(randomData, lambda);
poissonFunction2 = poisspdf(histoFigure, lambda);

plot(poissonFunction)
plot(poissonFunction2)

我尝试过多种不同的方法来创建泊松函数+绘图,但它们似乎都不起作用:此函数中的值与直方图值不一致,因为它们相差几位小数。

这就是图像的样子

Example

但是目前我只能正确显示条形图。

1 个答案:

答案 0 :(得分:2)

你没有指定你的曲线的x数据。然后使用样本编号,因为你有1000个样本,你得到了丑陋的情节。您使用的x数据是randomData。使用

plot(randomData, poissonFunction)

会导致不同样本之间的线条,因为样本会随机相互跟随。要仅为每个样本拍摄一次,您可以使用unique。重要的是x和y值保持相互连接,因此最好将randomDatapoissonFunction放在1个矩阵中,然后使用unique

d = [randomData;poissonFunction].';     % make 1000x2 matrix to find unique among rows
d = unique(d,'rows');

您可以使用d绘制数据。

完整代码:

clear
clc

lambda = 5;
range = 1000;
rangeVec = 1:range;

randomData = poissrnd(lambda, 1, range);
histoFigure = histogram(randomData, 'Normalization', 'probability');
hold on

poissonFunction = poisspdf(randomData, lambda);

d = [randomData; poissonFunction].';
d = unique(d, 'rows');
plot(d(:,1), d(:,2))

结果:

enter image description here