对Mathematica中生成的消息进行反思

时间:2010-01-05 15:52:12

标签: wolfram-mathematica

有没有办法获得在Mathematica中评估表达式时生成的实际消息?说我在数字上解决了一个ODE并且它会爆炸,就像这样

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

在这种情况下,我会收到NDSolve::mxst错误,告诉我在t == 0.08671962566152185达到的最大10000步数。现在,如果我查看$MessageList变量,我只会收到消息名称;特别是,t决定退出的NDSolve的价值信息已丢失。

现在,我总是可以使用标准附加软件包中的sol函数从InterpolatingFunctionDomain获取该信息,但如果我能以某种方式将其从消息中删除,那么它将是非常有帮助。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

我不知道这是否会起作用,但如果您想知道的唯一事情是错误点处特定参数的值,那么获取它们的一种方法就是全局定义具有虚拟值的变量。这适用于循环计数器,但我不知道它是否在NDSolve内起作用。另一个问题是制作t Dynamic并使用t评估单元格。

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