如何获得积分上限?

问题描述 投票:0回答:1

我有一个概率分布函数如下:

f = @(x) h0 * (1/sqrt(2*pi*sig2)) .* exp(-(x-mh0).^2 / (2*sig2))+ (1-h0) * (1/sqrt(2*pi*sig2)) .* exp(-(x-mh1).^2 / (2*sig2)); 

我正在做这个Matlab。除了 x 之外,一切都是恒定的。

该函数的范围是(-4 , 8)。我想将这个区域分成相等的质量,即 1/10(10 个间隔,每个间隔的质量为 1/10)。

我正在考虑整合它并检查上限以了解整合的结果。但我没有找到办法做到这一点?

matlab numerical-integration
1个回答
0
投票

如果您不担心最终效率,简单的二分搜索将轻松找到分裂点。例如,分成两部分:

sig2 = rand;
mh0 = rand;
h0 = rand;
mh1 = rand;
f = @(x) h0 * (1/sqrt(2*pi*sig2)) .* exp(-(x-mh0).^2 / (2*sig2))+ (1-h0) * (1/sqrt(2*pi*sig2)) .* exp(-(x-mh1).^2 / (2*sig2));
l = -4;
u = 8;
fprintf('total integral = %e\n', quad(f, l, u));
l0 = l;
u0 = u;
while u0 - l0 > 0.0001
  m = 0.5 * (l0 + u0);
  w = quad(f, l, m);
  if w > 0.5
    u0 = m;
  else
    l0 = m;
  end
end
m = 0.5 * (l0 + u0);
fprintf('integral to %e = %e\n', m, quad(f, l, m));

要拆分为 10 个部分,请对子部分进行递归。首先在0.5处分割,然后在0.2处分割低部分,然后在0.1处分割低部分,在0.3处分割上部部分,然后0.3/0.5间隔得到0.4。上部部分也是如此。

© www.soinside.com 2019 - 2024. All rights reserved.