使用Mathematica找到两个曲线的交点和曲线右侧的面积

3

以下是使用Mathematica代码生成的2个曲线图:

Show[Plot[PDF[NormalDistribution[0.044, 0.040], x], {x, 0, 0.5}, PlotStyle -> Red],
 Plot[PDF[NormalDistribution[0.138, 0.097], x], {x, 0, 0.5}]]

Mathematica图形

我需要做两件事:

  1. 找到两个曲线相交的x和y坐标
  2. 找到红色曲线在上述交点右侧的面积。

我以前没有在Mathematica中做过这种类型的问题,也没有在文档中找到解决方法。不确定该搜索什么。

1个回答

10

可以使用 Solve(或者可以使用 FindRoot)找到它们相交的位置。

intersect = 
 x /. First[
   Solve[PDF[NormalDistribution[0.044, 0.040], x] == 
     PDF[NormalDistribution[0.138, 0.097], x] && 0 <= x <= 2, x]]

输出结果为0.0995521。

现在将累积分布函数(CDF)计算到该点。

CDF[NormalDistribution[0.044, 0.040], intersect]

Out[5]= 0.917554

我不确定你是想从x=0开始还是负无穷开始;我的版本是从负无穷开始的。如果是从x=0开始,那么只需减去在x=0处评估的CDF。

FindRoot用法如下:

intersect = 
 x /. FindRoot[
   PDF[NormalDistribution[0.044, 0.040], x] == 
    PDF[NormalDistribution[0.138, 0.097], x], {x, 0, 2}]

输出[6]= 0.0995521

如果您正在处理的不是概率分布,您可以一直积分到交集值。使用CDF是一个有用的快捷方式,因为我们有一个PDF要积分。

Daniel Lichtblau 沃尔夫勒姆研究公司


谢谢。有趣的是(至少在我的机器上),FindRoot的使用比Solve运行得快得多。 - Jagra
1
FindRoot是一个本地的根查找器。Solve将在由不等式给出的指定区域中找到所有根,并以“精确”形式找到它们。由于我输入的是近似值,因此它会将其数值化以获得最终结果。(精确结果对于输入的有理化形式是正确的)。无论如何,由于Solve使用全局和精确方法,所以FindRoot更快并不足为奇。但是,作为一组数值方法,FindRoot可能会在实际存在根的情况下失败。 - Daniel Lichtblau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接