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

我正在尝试将泊松函数拟合到 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)

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

图片应该是这样的

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

【问题讨论】:

    标签: matlab histogram normalization poisson


    【解决方案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 = 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))
    

    结果:

    【讨论】:

    • 这确实有效,感谢您的帮助!也很巧妙,这个独特的功能存在,谢谢你把它介绍给我!
    猜你喜欢
    • 2019-05-23
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    相关资源
    最近更新 更多