Matlab:如何捕捉警告

Gar*_*ngh 10 matlab warnings

我在MATLAB中运行一些数据处理工作,求解器使用BACKSLASH运算符.有时,我得到这样的警告:

Warning: Rank deficient, rank = 1390, tol = 1.335195e-010.
Warning: Rank deficient, rank = 1386, tol = 1.333217e-010.
Run Code Online (Sandbox Code Playgroud)

我想抓住那些警告.我正在尝试将警告转换为错误,然后按照标题"陷阱警告"中所述捕获它:http: //undocumentedmatlab.com/blog/trapping-warnings-efficiently 在示例中,以下字符串已用于将警告转换为错误:

s = warning('error', 'MATLAB:DELETE:Permission');
Run Code Online (Sandbox Code Playgroud)

但是,我不确定我的案例使用什么字符串.我试过用

s = warning('error', 'Warning: Rank deficient’);
Run Code Online (Sandbox Code Playgroud)

但是,它没有用.任何帮助,将不胜感激.

问候,DK

Edr*_*ric 10

您需要指定警告标识符,而不是警告文本.您可以使用以下两种输出形式查找标识符lastwarn:

[msgstr, msgid] = lastwarn
Run Code Online (Sandbox Code Playgroud)

在您的情况下,我认为您想要的标识符是'MATLAB:rankDeficientMatrix'.


And*_*uri 6

您可以尝试使用lastwarn替代方案.在你的分裂之后,调用它并将其与strcmp通常的警告消息进行比较,如果是你的那个,你可以手动抛出你想要的错误error.

正如你的建议:你可以重置lastwarn一个空的警告warning('')