我正在使用Matlab的distfit函数来将概率分布拟合到我的数据中。有时会出现以下警告消息:
最大似然估计没有收敛。迭代限制 超过
在这种情况下,拟合分布(负对数似然不复杂或无穷大)但拟合非常差(高AIC)。
如果出现此警告,我如何检查Matlab?如果出现这样的警告,我想抛出一个错误(并抓住它)。
目前,我正在调查neagtive log似然是复杂还是无限,如果是这样,我就会抛出一个错误。我还应该做其他检查吗?
答案 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。