在Mathematica中捕获异常,而不必运行两次计算

时间:2012-11-21 17:29:53

标签: exception-handling wolfram-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 个答案:

答案 0 :(得分:0)

作为一个小改动:您可以将结果存储在变量中:

Block[{res}, 
      Check[{0, res = NMinimize[...]}, {1, res}]
]

答案 1 :(得分:0)

你可以做到

Table[Reap@Quiet@Check[Sow@NMinimize[f[x, d], x]; 1, 0]~
  Extract~{{1}, {2, 1, 1}}, {d, data}]