Самоанализ сообщений, сгенерированных в Mathematica - PullRequest
3 голосов
/ 05 января 2010

Есть ли способ получить фактические сообщения, сгенерированные во время вычисления выражения в Mathematica? Скажем, я численно решаю ОДУ, и она взрывается, вот так

In[1] := sol = NDSolve[{x'[t] == -15 x[t], x[0] == 1}, x, {t, 0, 1}, 
                       Method -> "ExplicitEuler"];

В этом случае я получу ошибку NDSolve::mxst, сообщающую мне, что максимальное число 10000 шагов было достигнуто при t == 0.08671962566152185. Теперь, если я посмотрю на переменную $MessageList, я получу только имя сообщения; в частности, информация о значении t, где NDSolve решил выйти, была потеряна.

Теперь я всегда могу получить эту информацию из sol, используя функцию InterpolatingFunctionDomain из одного из стандартных пакетов дополнений, но если я смогу каким-то образом извлечь ее из сообщения, это будет весьма полезно.

Ответы [ 2 ]

3 голосов
/ 05 января 2010

Вы можете использовать $ MessagePrePrint для настройки функции, которая будет хранить каждое из сообщений для последующего извлечения.

1 голос
/ 06 января 2010

Я не знаю, сработает ли это, но если единственное, что вы хотите знать, это значения конкретных параметров в точке ошибки, то хитрым способом их получения будет определение этих переменных с фиктивными значениями глобально. , Это работает со счетчиками циклов, но я не знаю, работает ли оно из NDSolve. Другим клуджем было бы сделать t Dynamic и иметь оцененную ячейку с t.

Более элегантным (и, вероятно, правильным) подходом будет использование Reap и Sow .

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