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

Я выполняю некоторую работу по обработке данных в MATLAB, а solver использует оператор обратной косой черты. Иногда я получаю предупреждение:

Warning: Rank deficient, rank = 1390, tol = 1.335195e-010.
Warning: Rank deficient, rank = 1386, tol = 1.333217e-010.

Я хотел бы поймать эти предупреждения. Я пытаюсь преобразовать предупреждение в ошибку, а затем поймать его, как описано здесь в разделе " предупреждения захвата": http://undocumentedmatlab.com/blog/trapping-warnings-efficiently В этом примере следующая строка используется для преобразования предупреждения в ошибка:

s = warning('error', 'MATLAB:DELETE:Permission');
, Я не уверен, какую строку использовать для моего случая. Я пробовал использовать
s = warning('error', 'Warning: Rank deficient’);

но это не сработало. Любая помощь будет оценена.

С уважением, DK

2 ответов


необходимо указать предупреждение идентификатор, а не текст предупреждения. Вы можете найти идентификатор, используя форму с двумя выходами lastwarn:

[msgstr, msgid] = lastwarn

в вашем случае, я думаю идентификатор, который вы хотите, это 'MATLAB:rankDeficientMatrix'.


вы можете попробовать использовать lastwarn в качестве альтернативы. После вашего деления назовите его и сравните с strcmp к обычному предупреждающему сообщению, и если его тот, который вы wnat вы можете вручную бросить ошибку, которую вы хотите с error.

как вы предложили: вы можете сбросить lastwarn бросая пустое предупреждение warning('')