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

Matlab fit poisson function to histogram

我正在尝试将泊松函数拟合到 Matlab 中的直方图:该示例要求使用 hist()(已弃用),因此我想改用 histogram(),尤其是当您似乎无法标准化 a历史()。然后我想使用 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)

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

图片应该是这样的

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

您没有指定 x-data 您的曲线。然后使用样本编号,因为你有 1000 个样本,所以你得到了丑陋的情节。您使用的 x-data 是 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))

结果为: