matlab 使用PCG时跳过警告消息

zf2sa74q  于 2022-11-15  发布在  Matlab
关注(0)|答案(3)|浏览(347)

我使用PCG迭代法求解方程Ax=b如下:

x = pcg(A,b,tol,maxit);

每次计算后,命令窗口中都会显示一条消息,说明已达到或尚未达到收敛。我试图禁用这条消息,因为我在运行时打印了一些关于代码的其他重要信息,而这些信息在PCG警告消息之间丢失了!
通过FLAG选项,我试图解决这个问题,但我做不到。如果有人知道如何禁用这些消息,我将不胜感激。

u7up0aaq

u7up0aaq1#

实际上,pcg不发出警告,它使用sprintf将“正常”文本输出到命令窗口。按照SCMG的建议,禁用所有警告将无济于事(+请不要关闭所有警告...很容易找出是哪种警告,并在这种情况下仅禁用该类型警告)。
通过查看pcg(edit pcg)的源代码或在MATLAB中快速尝试它,您会发现调用x = pcg(...)将创建此输出消息,而调用[x, fl, rr, it, rv] = pcg(...)将不会创建该输出。其原因可能是,如果只使用输出x,您可能会对此收敛信息感兴趣,而如果将它们保存在变量中,则可能会执行一些智能检查以确保收敛,因此不需要控制台中的值。

优雅方式:调用pcg并将该诊断信息保存到变量中

[x, fl, rr, it, rv] = pcg(A,b,tol,maxit);

并在MatLab中*检查收敛!否则抛出警告或错误!

Quick‘n’脏:如果您只是假设一切在所有条件下都可以工作,只需忽略这些值,并且根本不将它们保存到变量中:

[x,~,~,~,~] = pcg(A,b,tol,maxit);
h5qlskok

h5qlskok2#

您只需通过以下方式禁用所有警告:

warning('off','all')

其他用于抑制警告的选项可以在here中找到。

kninwzqo

kninwzqo3#

您可以使用以下命令禁用特定警告:

warning('off', 'MATLAB:pcg:tooSmallTolerance');

然后使用以下命令重新启用它:

warning('on', 'MATLAB:pcg:tooSmallTolerance');

**编辑:**下面的选项不太好,见末尾备注。

或者,我们可能希望使用Try/Catch块。然而,Try/Catch不适用于警告:它只适用于错误。undocumented Matlab feature允许我们将警告转换为错误:

warning('error', 'MATLAB:pcg:tooSmallTolerance');  % call this once

现在,我们可以这样做:

try
    x = pcg(inputs);
catch me
    disp(me); % me is an MException: look inside to see how to use it
end

我们甚至不需要包含“Catch”语句:只需运行try pcg(...) end就可以有效地抑制这里的警告(不是很好,但有时很有用)。

**EDIT:**实际上,当我们将警告转化为错误时,函数PCG没有机会终止,因此它不会返回输出。因此,在TRY/CATCH块之后未定义x

相关问题