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('')