如何在Matlab中找到两个分布的交集

How to find intersection of two distribution in Matlab

正如标题,我试图找到两个概率密度函数的交集,以找到决策误差最小的最优决策点。

就我而言, 一种分布是瑞利分布,另一种是莱斯分布 分布.

(你可以把Rayleigh和Rician看成是Gaussian分布,因为我说的问题在Gaussian情况下也会出现。)

生成每个pdf对应的两个向量。

Fs=1000;
x=linspace(0,20,Fs*20)
Ray=pdf('Rayleigh',x,1);
Ric=pdf('rician',x,3,1);

凭直觉,找到这两个pdf的交点

我设定了一定的门槛,比如说

epsilon=0.001;

并遍历两个向量的所有向量元素

如果两个向量之间的元素之差小于该阈值,则记录索引。

如果交叉点发生在

附近
index=350, 

那么我可以预期这些指数的价值差异

347, 348, 349, 350, 351, 352, 353, 

将小于 epsilon ,然后我选择中位数 ,即 index=350 ,来表示两个分布的交点。

现在的问题是,由于这些 pdf 的性质,其值在开头和结尾都非常接近于零。

因此,无论我如何选择 epsilon ,记录的索引都将类似于

1,2,347, 348, 349, 350, 351, 352, 353, 6000,6001,6002,6003,6004,6005,6006.....

我该如何解决这个问题? ,或者有什么可靠的方法可以在 Matlab 中找到两个 pdf 的交集? (我认为这个功能应该是非常基础的。)

我会修改你的方法如下:

  • 使用pdf比率,没有区别。这样你就可以避免检测除交叉点之外的尾巴。
  • 最小化,而不是应用阈值。
  • 矢量化:一次计算所有点的比率(然后最小化)。

换句话说:

[~, index] = min(abs(Ray./Ric-1));

在您的示例中,这给出了

>> index
index =
    2107

作为 x 索引函数的 pdf 如下。发现相交指数是正确的(从图中略高于2000):