捕获Mathematica警告/错误而不显示它们

时间:2011-03-15 09:57:02

标签: warnings wolfram-mathematica try-catch

我在Mathematica中遇到涉及NDSolve的问题,我使用不同的参数值多次运行。对于其中一些值,解决方案会产生奇点,NDSolve会对NDSolve :: ndsz或其他相关警告发出警告。

我只想捕捉这些警告,抑制它们的显示,并且只是跟踪这些特定参数值出现问题的事实。我想到了以下几个选项(两者都没有真正的诀窍):

  1. 我知道我可以使用Check确定命令是否导致警告或错误。但是,这仍然会显示警告。如果我使用Off将其关闭,Check也无法报告警告。
  2. 可以使用EventLocator方法停止NDSolve,因此我可以检查函数或其派生的非常大的值,并在这种情况下停止评估。但是,在实践中,这仍然会不时发出警告,大概是因为步长有时会太大而NDSolve警告会在Event发生之前触发。
  3. 还有其他建议吗?

3 个答案:

答案 0 :(得分:11)

如果你用Check包裹Quiet,那么我相信一切都应该按你的意愿运作。例如,您可以取消特定邮件Power::indet

In[1]:= Quiet[Check[0^0,err,Power::indet],Power::indet]
Out[1]= err

但仍会显示其他消息

In[2]:= Quiet[Check[Sin[x,y],err,Power::indet],Power::indet]
During evaluation of In[2]:= Sin::argx: Sin called with 2 arguments; 1 argument is expected. >>
Out[2]= Sin[x,y]

答案 1 :(得分:5)

使用Quiet和Check一起工作:

Quiet[Check[Table[1/Sin[x], {x, 0, \[Pi], \[Pi]}], $Failed]]

答案 2 :(得分:3)

也许您希望redirect messages?这几乎是从该页面逐字复制的。

stream = OpenWrite["msgtemp.txt"];

$Messages = {stream};

1/0

FilePrint["msgtemp.txt"]