popkov
Advanced Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Вот ещё парочка действительно опасных багов Mathematica: 1.) Integrate[Sin[(m*Pi*x)/L]*Sin[(n*Pi*x)/L], {x, 0, L}]/.m->n даёт Indeterminate, хотя Integrate[Sin[(n*Pi*x)/L]*Sin[(n*Pi*x)/L], {x, 0, L}] даёт корректный ответ (L*(2 - Sin[2*n*Pi]/(n*Pi)))/4. То есть, в первом случае потерян ответ для случая m=n. 2.) Регрессионный баг (появился в Mathematica 6.00 - 6.02, в 5.2 его не было): Integrate[Exp[a*x]*Cos[b*x], {x, 0, Infinity}] даёт в Mathematica 6.02 ответ If[b \[Element] Reals, -(a/(a^2 + b^2)), Integrate[E^(a*x)*Cos[b*x], {x, 0, Infinity}, Assumptions -> Im[b] < 0 || Im[b] > 0]] (потеряно условие Re[a] < 0) Для сравнения, при указании, что a и b - действительные числа, ответ правильный, и содержит условие a < 0: Integrate[Exp[a*x]*Cos[b*x], {x, 0, Infinity}, Assumptions -> {a \[Element] Reals, b \[Element] Reals}] приводит к ответу If[a < 0, -(a/(a^2 + b^2)), Integrate[E^(a*x)*Cos[b*x], {x, 0, Infinity}, Assumptions -> Element[b, Reals] && a >= 0]] Ещё стоит привести результат Mathematica 5.2 для общего случая (без указания, что a и b - действительные числа): If[b \[Element] Reals && Re[a] < 0, -(a/(a^2 + b^2)), Integrate[E^(a*x)*Cos[b*x], {x, 0, Infinity}, Assumptions -> Re[a] >= 0 || b \[NotElement] Reals]] Легко видеть, что Mathematica 5.2 даёт ответ, содержащий все необходимые условия, а версия 6 важнейшее из них опускает... Добавлено: Alex_B Цитата: В таких вычислениях как бесконечное суммирование или взятие интеграла в ошибку метода вносит вклад делаемые этим методом приблизительные оценки. Эти оценки ошибки метода являются лишь оценками ошибки сверху. Поэтому в некоторых случаях невозможно в принципе дать величину ошибки метода. В таких случаях мы можем говорить не о точности метода, а лишь об оценке точности метода. | Всё-таки я считаю, что в ситуации, когда Mathematica не способна сама надёжно оценивать точность получаемого результата, она должна как минимум выдавать предупреждение об этом! Подобных ситуаций не так уж и много, как я понимаю. В конкретном случае NSum[(Cos[n]/n)^2, {n, 1, Infinity}] неточность возникает потому, что Mathematica неправильно выбирает метод суммирования, как вы сами показали выше. Так что это вполне можно считать багом: в первую очередь Mathematica должна искать возможность применить надёжные методы, которые быстро дают результат с контролируемой точностью. Если же таких методов нет, она может использовать менее надёжный метод, точность которого контролировать не может, и при этом обязательно выдавать предупреждение! То, что она этого не делает, действительно способно наносить моральный и материальный ущерб пользователю! Пользователь не обязан глубоко разбираться в математических методах проверки точности результата (которых в других случаях может не быть или они могут быть труднодоступны для изучения по самым разным причинам, хотя бы из-за отсутствия времени). Он платит хорошие деньги за то, чтобы получить ожидаемый им красивый и правильный результат, используя простые команды! Необходимость перепроверять каждый результат несколькими способами, порой трудными для изучения, сводит на нет преимущества такой системы для огромного большинства пользователей, и низводит её до языка программирования высокого уровня, а не пакета символьной математики! Фактически, наличие функций, выдающих без предупреждения результат непредсказуемой точности (а уж тем более, просто неверный) вводит в заблуждение пользователя относительно возможностей пакета! Я даже больше скажу: лучше, чтобы Mathematica вообще не выдавала ответ в тех случаях, когда она не может дать его точно, чем выдавать ответ с неизвестной ошибкой! Цитата: f1[x_] := Cos[1] - (Sin[1 + x] - Sin[1 - x])/(2 x); f1[10^-12] // N 0.0000122709 f2[x_] := (Cos[1] (x - Sin[x]))/x; f2[10^-12] // N 0. N[f1[10^-12],$MachinePrecision] 9.005038431135662*10^-26 | Спасибо Вам большое за то, что документировали "логику точности по умолчанию": стандартная документация уделяет вопросам точности явно недостаточно внимания! По-хорошему, в документации должен присутствовать где-то на видном месте специальный раздел об этом! | Всего записей: 1837 | Зарегистр. 22-03-2003 | Отправлено: 11:32 11-04-2008 | Исправлено: popkov, 13:39 11-04-2008 |
|