MATLAB - 计算两个分布的重叠面积f

MATLAB - Calculate overlapping area of two distributionsf

我想在 MATLAB 中找到两个分布之间的重叠区域。我在 Python (Calculate overlap area of two functions) 中找到了解决方案,但不幸的是我无法使用 MATLAB 来解决这个问题。

这是两个简单正态分布 (y1, y2) 的示例。我想计算这些分布之间的重叠面积。

        x = linspace(-15, 15); 
        y1 = normpdf(x, -5, 2.7)*5000;     
        y2 = normpdf(x, +5, 2.9)*5500;
        
        % PLOT
        plot(x, y1)
        hold on
        plot(x, y2) 

Image of overlapping distributions

如您所见,如 this answer 所示,您要计算的面积是 min(y1,y2)

的积分

所以首先创建向量 y,它是一个 1x100 double 向量,就像 y1y2.

y=min(y1,y2)

那么根据Riemann sum的概念,计算向量y的每个元素下的区间长度。由于代码第一行中的 linspace 函数 linspace(-15, 15) 将长度为 30 的区间划分为 100 部分,因此区间为:

IntevalLength = (15-(-15))/size(y,2)

所以 Riemann integral 中每个矩形的面积将计算为:

AreaOfRectangles = IntevalLength * y;

加上AreaOfRectangles就是照片中绿色部分的面积。

>> sum(AreaOfRectangles)

ans =

  385.6763