我在MATLAB中运行一些数据处理工作,求解器使用了SLASH运算符。有时候,我会收到这样的警告:
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在示例中,以下字符串用于将warning转换为error:
s = warning('error', 'MATLAB:DELETE:Permission');
但是,我不确定我的情况下使用什么字符串。我尝试使用
s = warning('error', 'Warning: Rank deficient’);
但是,它没有工作。如果你能帮忙的话,我将不胜感激。
问候,DK
3条答案
按热度按时间mfuanj7w1#
您需要指定警告 * 标识符 *,而不是警告文本。您可以使用
lastwarn
的双输出形式找到标识符:在你的例子中,我认为你想要的标识符是
'MATLAB:rankDeficientMatrix'
。igetnqfo2#
您可以尝试使用
lastwarn
作为替代方案。除法之后,调用它并将其与strcmp
和通常的警告消息进行比较,如果是您想要的,您可以手动抛出error
所需的错误。正如你所建议的:你可以重置
lastwarn
抛出一个空的警告warning('')
ig9co6j13#
下面的代码紧密地实现了Python的
它执行
fn()
两次,确保警告状态被恢复,并可选地抑制其打印语句(例如,disp
)。要求warning()
语句使用警告ID,即warning('a:b', msg)
语法。示例
分步骤
1.存储
warning
状态以便以后恢复1.将
warning('off', warn_id)
设置为允许执行而不显示警告1.执行
fn()
以获取其输出1.设置
warning('error', warn_id)
,以便下次执行fn()
时触发警告,但不打印它1.再次执行
fn()
1.通过
e.message
(catch e
)消除警告1.恢复警告状态
1.以
out = {fn_out, warn_out}
的形式返回fn()
的输出和警告消息更多的事情发生了(例如)。
try
-catch
)但这是想法。fn_out
可以是可选的(例如,添加另一个arg,并使用if get_outputs
Package 代码)。代码
抑制打印:将
fn()
替换为evalc('fn()')
。* (通常不鼓励使用eval,但docs中的任何内容都不适用)。*