如何在Matlab中捕获警告?

时间:2016-03-06 12:59:22

标签: matlab probability distribution

我正在使用Matlab的distfit函数来将概率分布拟合到我的数据中。有时会出现以下警告消息:

  

最大似然估计没有收敛。迭代限制   超过

在这种情况下,拟合分布(负对数似然不复杂或无穷大)但拟合非常差(高AIC)。

如果出现此警告,我如何检查Matlab?如果出现这样的警告,我想抛出一个错误(并抓住它)。

目前,我正在调查neagtive log似然是复杂还是无限,如果是这样,我就会抛出一个错误。我还应该做其他检查吗?

2 个答案:

答案 0 :(得分:4)

您无法直接捕获警告,但可以通过使用以下构造键入警告消息来伪造

% reset warnings
lastwarn('');

% Do your fitting
<your code here>

% Check which warning occured (if any)
[msgstr, msgid] = lastwarn;
switch msgid
   case 'ThisParticularMessageID'
      % In your case you say you want to throw an error
      error(msgstr); % or your custom error message
   %case 'SomeOtherMessageIDIfYouWantToCheckForSomethingElse'

end

棘手的是找到正确的msgid。最简单的方法是使用现有代码,在看到警告消息后,在命令行输入

[msgstr,msgid] = lastwarn

这将告诉您要用于'ThisParticularMessageID'的内容。

答案 1 :(得分:1)

使用未记录的语法warning('error', 'mycomponent:myMessageID')将告诉MATLAB将警告转换为错误,然后您可以使用try-catch块捕获并正确处理:

您可以在发生警告后立即使用lastwarn找到警告的消息ID。