代码之家  ›  专栏  ›  技术社区  ›  Pillsy

对Mathematica中生成的消息的反思

  •  3
  • Pillsy  · 技术社区  · 16 年前

    有没有任何方法来获取在数学表达式的评估过程中生成的实际消息?比如说我在用数字解一首颂歌,它就会爆炸,就像这样。

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

    在这种情况下,我会得到 NDSolve::mxst 错误,告诉我在 t == 0.08671962566152185 .现在,如果我看 $MessageList 变量,我只接收消息名;特别是有关 t 在哪里? NDSolve 决定辞职已经失败了。

    现在,我总能从 sol 使用 InterpolatingFunctionDomain 功能来自一个标准的附加包,但是如果我能以某种方式将其从消息中提取出来,它将非常有用。

    2 回复  |  直到 16 年前
        1
  •  3
  •   ragfield    16 年前

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

        2
  •  1
  •   Timo    16 年前

    我不知道这是否可行,但是如果你想知道的唯一一件事就是在错误点上特定参数的值,那么获取它们的一个笨拙的方法就是用全局虚拟值定义这些变量。这和循环计数器一起工作,但我不知道它是否从内部工作 NDSolve . 另一个错误是 Dynamic 并用T来评价细胞。

    一个更优雅(可能是正确的)的方法是 Reap Sow .