以下代码为NExpectation
和Expectation
返回不同的值。如果我对NormalDistribution[]
进行同样的尝试,我会得到NExpectation
的收敛误差(但最终结果仍然是所有0
)。是什么导致了这个问题?
U[x_] := If[x >= 0, Sqrt[x], -Sqrt[-x]]
N[Expectation[U[x], x [Distributed] NormalDistribution[1, 1]]]
NExpectation[U[x], x [Distributed] NormalDistribution[1, 1]]
输出: -0.104154
0.796449
我认为这实际上可能是Integrate
的bug。
让我们定义你的
U[x_] := If[x >= 0, Sqrt[x], -Sqrt[-x]]
和等价的
V[x_] := Piecewise[{{Sqrt[x], x >= 0}, {-Sqrt[-x], x < 0}}]
在实数
上等价FullSimplify[U[x] - V[x], x [Element] Reals] (* Returns 0 *)
对于U
和V
,解析的Expectation
命令使用Method
选项"Integrate"
,这可以通过运行
Table[Expectation[U[x], x [Distributed] NormalDistribution[1, 1],
Method -> m], {m, {"Integrate", "Moment", "Sum", "Quantile"}}]
因此,它实际上做的是积分
Integrate[U[x] PDF[NormalDistribution[1, 1], x], {x, -Infinity, Infinity}]
返回
(Sqrt[Pi] (BesselI[-(1/4), 1/4] - 3 BesselI[1/4, 1/4] +
BesselI[3/4, 1/4] - BesselI[5/4, 1/4]))/(4 Sqrt[2] E^(1/4))
V
Integrate[V[x] PDF[NormalDistribution[1, 1], x], {x, -Infinity, Infinity}]
给出了相同的答案,但乘以了一个因子1 + I
。这显然是一个bug。
使用U
或V
的数值积分返回期望值0.796449:
NIntegrate[U[x] PDF[NormalDistribution[1, 1], x], {x, -Infinity, Infinity}]
这大概是正确的解决方案。
编辑: kguler的答案在所有版本中返回相同值的原因是因为u[x_?NumericQ]
的定义阻止了解析积分的执行,所以Expectation
不被计算,当被要求其数值时,返回到使用NExpectation
.
编辑2:进一步分解这个问题,你会发现
In[1]:= N@Integrate[E^(-(1/2) (-1 + x)^2) Sqrt[x] , {x, 0, Infinity}]
NIntegrate[E^(-(1/2) (-1 + x)^2) Sqrt[x] , {x, 0, Infinity}]
Out[1]= 0. - 0.261075 I
Out[2]= 2.25748
In[3]:= N@Integrate[Sqrt[-x] E^(-(1/2) (-1 + x)^2) , {x, -Infinity, 0}]
NIntegrate[Sqrt[-x] E^(-(1/2) (-1 + x)^2) , {x, -Infinity, 0}]
Out[3]= 0.261075
Out[4]= 0.261075
在这两个范围内,被积函数都是实数的,具有指数衰减的非振荡函数。不应该有任何虚数/复数结果的需要。
最后请注意,上述结果适用于Mathematica 8.0.3版本。在版本7中,积分返回1F1超几何函数,解析结果与数值结果匹配。所以这个bug(目前也存在于Wolfram|Alpha)是一个回归。
如果您更改函数u
的参数以避免对非数值求值,则所有三个方法都会给出相同的结果:
u[x_?NumericQ] := If[x >= 0, Sqrt[x], -Sqrt[-x]] ;
Expectation[u[x], x [Distributed] NormalDistribution[1, 1]] // N;
N[Expectation[u[x], x [Distributed] NormalDistribution[1, 1]]] ;
NExpectation[u[x], x [Distributed] NormalDistribution[1, 1]];
{% === %% === %%%, %}
显示结果{真的,0.796449}