Catch Mathematica предупреждения/ошибки, не отображая их
У меня есть проблема с NDSolve в Mathematica, которую я запускаю несколько раз с разными значениями параметров. Для некоторых из этих значений решение приводит к особенностям, и NDSolve предупреждает с помощью NDSolve:: ndsz или других связанных предупреждений.
Я просто хотел бы поймать эти предупреждения, подавить их отображение и просто следить за тем, что возникла проблема для этих конкретных значений параметров. Я думал о следующих вариантах (ни один из которых действительно не трюк):
- Я знаю, что могу определить, вызвала ли команда предупреждение или ошибку, используя
Check
. Тем не менее, это все равно отобразит предупреждение. Если я отключу его с помощью Off
, Check
не сообщит об этом также.
- Можно остановить NDSolve с помощью метода
EventLocator
, поэтому я мог бы проверить очень большие значения функции или ее производных и прекратить оценку в этом случае. Однако на практике это по-прежнему вызывает предупреждения время от времени, по-видимому, потому, что размер шага иногда может быть настолько большим, что предупреждение NDSolve запускается до моего Event
.
Любые другие предложения?
Ответы
Ответ 1
Если вы завернете 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]
Ответ 2
Использование Quiet и Check together работает:
Quiet[Check[Table[1/Sin[x], {x, 0, \[Pi], \[Pi]}], $Failed]]
Ответ 3
Возможно, вы хотите перенаправить сообщения? Это скопировано почти дословно на этой странице.
stream = OpenWrite["msgtemp.txt"];
$Messages = {stream};
1/0
FilePrint["msgtemp.txt"]