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

Posted

技术标签:

【中文标题】Matlab将泊松函数拟合到直方图【英文标题】:Matlab fit poisson function to histogram 【发布时间】:2018-08-22 13:19:59 【问题描述】:

我正在尝试将泊松函数拟合到 Matlab 中的直方图:该示例要求使用 hist()(已弃用)所以我想改用 histogram(),尤其是因为您似乎无法标准化 hist( )。然后我想使用 poisspdf() 或任何其他标准函数(最好没有工具箱!)对其应用泊松函数。直方图是概率缩放的,这就是泊松函数的问题来自 AFAIK。

clear
clc

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

randomData = pois-s-rnd(lambda, 1, range);
histoFigure = histogram(randomData, 'Normalization', 'probability');
hold on

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

plot(poissonFunction)
plot(poissonFunction2)

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

图片应该是这样的

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

【问题讨论】:

【参考方案1】:

您没有指定曲线的 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 = pois-s-rnd(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))

结果:

【讨论】:

这确实有效,感谢您的帮助!也很巧妙,这个独特的功能存在,谢谢你把它介绍给我!

以上是关于Matlab将泊松函数拟合到直方图的主要内容,如果未能解决你的问题,请参考以下文章

将密度曲线拟合到R中的直方图

创建归一化的直方图并在 Matlab 上使用伽马分布对其进行拟合

在 seaborn displot/histplot 函数中绘制高斯拟合直方图(不是 distplot)

MATLAB——生成归一化直方图

Matlab使用 MapReduce 创建直方图

如何用matlab作正态分布的检验?