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
向量,就像 y1
和 y2
.
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
我想在 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
向量,就像 y1
和 y2
.
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