并行的Matlab:停止ode-在警告上集成'无法满足集成容差'

时间:2015-06-16 21:07:56

标签: matlab parallel-processing integration

我正在并行运行优化,意味着使用parpool的不同工作人员。

为确定成本函数值,必须对函数进行数值积分,这由ode15s完成。

优化的目标是找到最佳参数,这些参数在这个数值积分函数中使用。

不幸的是,优化器必须评估(并因此集成)参数,这可能会导致以下警告:

  

警告:t = 8.190397e + 01时失败。在时间t不能将步长减小到允许的最小值(2.273737e-13)以下时,无法满足积分公差。

每当出现此警告时,我想停止集成(因为它需要很长时间),并为成本函数分配一个非常高的值。

我试图通过使用OutputFcn(每次成功的集成步骤后Matlab调用)来实现这一点。在这个OutputFcn中,我检查最后一个警告(通过Matlabs函数lastwarn),并将其与上面的警告进行比较。

现在的问题是,我观察到,有时候很少会在没有发出警告的情况下取消整合。

我认为,情况确实如此,因为我并行运行,并且lastwarn有时会抓一个警告,发生在另一个工人身上。

有没有人知道如何实现正确的行为?

例如,如果我在用lastwarn检查最后一个警告时能以某种方式获取工作者ID,那会有所帮助,但它不在那里......但是我对任何建议如何正确中止集成是开放的

提前致谢

编辑:如果matlabs函数lastwarn抓住已经抛给其他工作人员的警告,我用不同的skript进行了几次测试以进行调查 - 似乎情况并非如此。因此,意外堕胎的原因必须是别的,因此这个问题似乎已经过时了。

0 个答案:

没有答案