Как поймать предупреждение в Matlab?
Я использую функцию distfit Matlab для подгонки распределения вероятностей к моим данным. Иногда появляется следующее предупреждение:
Оценка максимального правдоподобия не сходилась. Предел итерации превышено
В этом случае распределение подогнано (отрицательное логарифмическое правдоподобие не является сложным или бесконечным), но подогнано очень плохо (высокий AIC).
Как я могу проверить в Matlab, если появится это предупреждение? Если такое предупреждение появится я хочу бросьте ошибку (и поймайте ее).
В настоящее время я исследую, является ли неагтивная логарифмическая вероятность сложной или бесконечной, и если да, то я выдаю ошибку. Есть ли другие проверки, которые я должен сделать?
2 ответа:
Вы не можете непосредственно поймать предупреждение, но можете подделать его, отключив предупреждающее сообщение, используя следующую конструкцию
% 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'
.
С помощью недокументированного синтаксиса
warning('error', 'mycomponent:myMessageID')
попросит MATLAB преобразовать предупреждение в ошибку, которую затем можно поймать с помощью блокаtry-catch
и обработать соответствующим образом:Вы можете найти идентификатор сообщения для вашего предупреждения, используя
lastwarn
сразу после его появления.