3

有什么方法可以获取在 Mathematica 中评估表达式期间生成的实际消息?假设我在数值上求解一个 ODE 并且它爆炸了,就像这样

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标准附加包之一中的函数来获取该信息,但如果我能以某种方式将其从消息中提取出来,那将非常有帮助。

4

2 回答 2

3

您也许可以使用 $MessagePrePrint 设置一个函数,该函数将存储每条消息以供以后检索。

于 2010-01-05T16:09:35.143 回答
1

我不知道这是否可行,但是如果您只想知道错误点处特定参数的值,那么获取它们的一种笨拙方法就是在全局范围内使用虚拟值定义这些变量。这适用于循环计数器,但我不知道它是否适用于内部NDSolve。另一个组合是使 t动态并具有一个具有 t 的评估单元。

更优雅(并且可能是正确)的方法是使用ReapSow

于 2010-01-06T07:16:26.287 回答