Wolfram mathematica 使用Mathematica查找2个PDF函数的第一个交点

Wolfram mathematica 使用Mathematica查找2个PDF函数的第一个交点,wolfram-mathematica,Wolfram Mathematica,在Mathematica 8.0.1.0中,我使用了FindRoot[]来识别两个2 pdf函数的交集 但是如果pdf函数在多个点相交,并且x轴范围的上限超出第二个交点,FindRoot[]只返回第二个交点 pdf1 = 1/x 0.5795367855565214` (E^( 11.170058830053032` (-1.525439351903338` - Log[x])) Erfc[1.6962452696714152` (-0.5548887795964352` - Log[

在Mathematica 8.0.1.0中,我使用了
FindRoot[]
来识别两个2 pdf函数的交集

但是如果pdf函数在多个点相交,并且x轴范围的上限超出第二个交点,
FindRoot[]
只返回第二个交点

pdf1 = 1/x 0.5795367855565214` (E^(
  11.170058830053032` (-1.525439351903338` - Log[x]))
   Erfc[1.6962452696714152` (-0.5548887795964352` - Log[x])] + 
 E^(1.2932713057519` (2.60836043407439` + Log[x]))
   Erfc[1.6962452696714152` (2.720730943938539` + Log[x])]);

pdf2 = 1/x 0.4648445097126269` (E^(
  5.17560914275408` (-2.5500941338198615` - Log[x]))
   Erfc[1.7747318880142482` (-2.139288893723375` - Log[x])] + 
 E^(1.1332542415053757` (3.050849516581922` + Log[x]))
   Erfc[1.7747318880142482` (3.1407996592474956` + Log[x])]);

Plot[{pdf1, pdf2}, {x, 0, 0.5}, PlotRange -> All]   (* Shows 1st intersection *)
Plot[{pdf1, pdf2}, {x, 0.4, 0.5}, PlotRange -> All] (* Shows 2nd intersection *)

{x /. FindRoot[pdf1 == pdf2, {x, 0.00001, 0.5}],
x /. FindRoot[pdf1 == pdf2, {x, 0.00001, 0.4}]}

上面的图显示了这个问题。打印时,它们在两点相交:

{0.464719, 0.0452777}
分别

由于我之前不知道是否会有第二个交叉点,而且我也不知道如果我有第二个交叉点,它可能会落在x轴上的什么位置,有谁能建议一种方法让
FindRoot[]
只返回第一个交叉点而不是第二个交叉点


如果没有,有人能建议另一种方法吗?

下面的方法如何:

首先,你必须一步找到所有的根。我这样做是因为

roots=Reduce[pdf1==pdf2&&0.000001<x<0.5,x]

那么以下内容如何:

首先,你必须一步找到所有的根。我这样做是因为

roots=Reduce[pdf1==pdf2&&0.000001<x<0.5,x]

使用
FindRoot[]
,您只能获得给定起点的单个根。迭代不同的选项是很麻烦的,对于某些边缘情况,您甚至可能无法获得所需的结果,除非您选择了正确的起点

在这种情况下,类似于
NSolve
Reduce
的内容可能是更好的选择。如果您知道表达式会衰减,那么可以使用合理的上限值
x
,您可以使用下面的方法,这非常快,可以为您提供所有根

NSolve[{pdf1==pdf2,00.0452777},{x->0.464719}

使用
FindRoot[]
,您只能获得给定起点的单个根。迭代不同的选项是很麻烦的,对于某些边缘情况,您甚至可能无法获得所需的结果,除非您选择了正确的起点

在这种情况下,类似于
NSolve
Reduce
的内容可能是更好的选择。如果您知道表达式会衰减,那么可以使用合理的上限值
x
,您可以使用下面的方法,这非常快,可以为您提供所有根

NSolve[{pdf1==pdf2,00.0452777},{x->0.464719}

提供的两种解决方案(您的和yoda的)都有效。非常感谢您的建议,看起来yoda的在我的应用程序中效果最好。您和yoda提供的两种解决方案都有效。非常感谢你的建议,看起来尤达的软件在我的应用程序中效果最好。我有两种方法来解决这个问题。非常感谢。我有两种方法来解决这个问题。非常感谢。
NSolve[{pdf1 == pdf2, 0 < x < 1}, x] // Timing
Out[1]= {0.073495, {{x -> 0.0452777}, {x -> 0.464719}}}