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 值保持相互连接很重要,因此最好将 randomData
和 poissonFunction
放在 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将泊松函数拟合到直方图的主要内容,如果未能解决你的问题,请参考以下文章
创建归一化的直方图并在 Matlab 上使用伽马分布对其进行拟合