Как поймать предупреждение в Matlab?


Я использую функцию distfit Matlab для подгонки распределения вероятностей к моим данным. Иногда появляется следующее предупреждение:

Оценка максимального правдоподобия не сходилась. Предел итерации превышено

В этом случае распределение подогнано (отрицательное логарифмическое правдоподобие не является сложным или бесконечным), но подогнано очень плохо (высокий AIC).

Как я могу проверить в Matlab, если появится это предупреждение? Если такое предупреждение появится я хочу бросьте ошибку (и поймайте ее).

В настоящее время я исследую, является ли неагтивная логарифмическая вероятность сложной или бесконечной, и если да, то я выдаю ошибку. Есть ли другие проверки, которые я должен сделать?

2 2

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 сразу после его появления.