我正在尝试将泊松函数拟合到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)
我尝试过多种不同的方法来创建泊松函数+绘图,但它们似乎都不起作用:此函数中的值与直方图值不一致,因为它们相差几位小数。
这就是图像的样子
但是目前我只能正确显示条形图。
答案 0 :(得分:2)
你没有指定你的曲线的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 = 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))
结果: