Mathematica: ожидание против ожиданий - противоречивые результаты - PullRequest
5 голосов
/ 19 декабря 2011

Следующий код возвращает разные значения для 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

Ответы [ 2 ]

6 голосов
/ 19 декабря 2011

Я думаю, что это может быть ошибка Integrate.

Давайте определим ваш

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. Это явно ошибка.

Числовой интеграл с использованием 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, а аналитический результат соответствует числовому результату. Так что эта ошибка (которая также присутствует в Wolfram | Alpha) является регрессией.

2 голосов
/ 19 декабря 2011

Если вы измените аргумент своей функции 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]];
{% === %% === %%%, %}

с результатом {True, 0,796449}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...