Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Другие языки > [Mathematica] Некорректная работа Integrate


Автор: alyxis 24.11.2009, 21:31
Некорректная работа Integrate при интегрировании функции мат ожидания от нормального логарифмического распределения:
user posted image
В Математике 5.2:
(1/Sqrt[2*π*s^2])*Integrate[Exp[(-(Log[x]-m)^2)/(2*s^2)],{x,0,+∞}]
При s=0.834 и m=8.272 Integrate выдает неверный удвоенный результат.
Удвоенный результат Integrate дает и для многих других s и m, хотя для остальных работает правильно. Зато NIntegrate всегда выдает правильный ответ. Кстати, если интегрировать не до +∞, а ло большого числа, то Integrate работает правильно (правильный ответ: примерно 5540.16)
Я вынужден в этом разобраться.
Кто-нибудь знает, почему так происходит?

Автор: kemiisto 3.12.2009, 02:29
alyxis, если посмотреть http://reference.wolfram.com/mathematica/ref/Integrate.html, то видим в Possible Issues, Definite Integrals, пункт первый:
Цитата
Substituting limits into an indefinite integral may not give the correct result for a definite integral

Вольный перевод: подстановка пределов интегрирования в неопределённый интеграл может привести к неверному результату вычисления интеграла определённого.
Далее рассмотрен пример и в конце написана причина происходящего:
Цитата
The presence of a discontinuity in the expression for the indefinite integral leads to the anomaly

Нарушение непрерывности функции - подинтегрального выражения - приводит к аномальным результатам.

Теперь взглянем на Вашу функцию. На скорую руку выглядит как-то так:
user posted image
Только это для m = 0. Для больших значений m функция "вытягивается вдоль x и сплюшивается по y". smile Нафиг терминологию. Видно, что непрерывность нарушается. Хотя это и без графика понятно. smile У ln(x) в x = 0 - точка разрыва второго(?) рода.

Цитата(alyxis @  24.11.2009,  22:31 Найти цитируемый пост)
Кстати, если интегрировать не до +∞, а ло большого числа, то Integrate работает правильно

Ну, как раз "аномальное" поведение. smile 

P.S. Mathematica ни разу в глаза не видел... Так "от общих начал". smile 

Автор: alyxis 3.12.2009, 22:25
Цитата

Видно, что непрерывность нарушается. Хотя это и без графика понятно.  У ln(x) в x = 0 - точка разрыва второго(?) рода.

Но если интегрировать с Integrate от какого-то числа > 0 (например, 5000) до +∞, то ответ тоже удвоенный, хотя с 5000 и до +∞ нет точек разрыва. Или Математику шокирует сам факт того, что в какой-то точке есть разрыв?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)