Поймать исключение в Mathematica, не выполняя вычисления дважды
Я должен запустить ряд NMinimize
команды в разных случаях. Некоторые из этих трасс не смогли сходиться.
Я хочу определить, какие из них не смогли сойтись, и получить текущее решение, найденное Mathematica.
Поиск в других сообщениях, предлагаемых с помощью Check[]
, но это не возвращает результат, как только он выходит из ошибки.
В настоящее время у меня есть неэффективная реализация следующим образом:
allfit1 = ConstantArray[0,16];
For[i = 1, i <= 16, i++, (
allfit1[[i]] = Check[
{0, NMinimize[f[x,data[[i]]], x]},
{1, NMinimize[f[x,data[[i]]], x]}
]
)]
Как вы видите, я должен выполнить NMinimize
дважды, что расточительно и отнимает много времени.
Есть ли способ лучше?
2 ответа
Решение
Как незначительное изменение: вы можете сохранить результат в переменной:
Block[{res},
Check[{0, res = NMinimize[...]}, {1, res}]
]
Вы могли бы сделать
Table[Reap@Quiet@Check[Sow@NMinimize[f[x, d], x]; 1, 0]~
Extract~{{1}, {2, 1, 1}}, {d, data}]