我在Mathematica中遇到涉及NDSolve的问题,我使用不同的参数值多次运行。对于其中一些值,解决方案会产生奇点,NDSolve会对NDSolve :: ndsz或其他相关警告发出警告。
我只想捕捉这些警告,抑制它们的显示,并且只是跟踪这些特定参数值出现问题的事实。我想到了以下几个选项(两者都没有真正的诀窍):
Check
确定命令是否导致警告或错误。但是,这仍然会显示警告。如果我使用Off
将其关闭,Check
也无法报告警告。EventLocator
方法停止NDSolve,因此我可以检查函数或其派生的非常大的值,并在这种情况下停止评估。但是,在实践中,这仍然会不时发出警告,大概是因为步长有时会太大而NDSolve警告会在Event
发生之前触发。还有其他建议吗?
答案 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"]