如何获得积分的上限?

Posted

技术标签:

【中文标题】如何获得积分的上限?【英文标题】:How to get the upper limit of a integration? 【发布时间】:2021-08-02 02:30:20 【问题描述】:

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

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 的标准 ODE 求解器对其进行数值积分。试试ode45。如果分布函数太僵硬而无法集成,请尝试ode23。无论 ODE 求解器返回积分的离散值,您都必须制作自己的逻辑结构来逼近相等的质量点。 【参考方案1】:

如果您不担心最终效率,简单的二等分搜索将很容易找到分裂点。例如,一分为二:

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。上半部分也是如此。

【讨论】:

以上是关于如何获得积分的上限?的主要内容,如果未能解决你的问题,请参考以下文章

已获得接口

优化数据库结构

如何通过C ++中的数据获得向量的索引

通过 Java API 获得 ACH 积分 [关闭]

APP开发者如何获得收入?

php 此代码会将消息隐藏到无法获得积分的所有用户。