MATLAB在函数中禁止将disp()实例放入命令行

时间:2014-07-03 06:35:01

标签: matlab

在一个函数中,我有一些disp()实例来帮助跟踪长计算过程的进度。

例如,

function myfun(inputs)
    ...
    disp('Step i finished')
    ...
end

myfun的其他一些用法中,没有disp()消息会更方便。有没有办法压制消息' Step i finished'在命令行中没有添加新代码或使用eval()函数?

注意:已知eval()对于任何严重的计算都太慢了。

2 个答案:

答案 0 :(得分:5)

没有机制可以重定向" stdout"在MATLAB中。您可以使用evalc捕获它,然后忽略它,但这也会捕获(并因此抑制)所有警告。此外,使用eval的所有常见异议都适用。

如果你坚持那么你可以使用这个糟糕的不好 BAD hack:

disp = @(~) display([]);  %# at the start of the function

或者,如果您确实想要更改功能中的单个字母,请填写

function disp(~)

在MATLAB路径上的单独M文件中,并在完成后从MATLAB路径中删除其路径(或删除/重命名文件)。

但实际上,最好的方法是重写你的功能,使显示是可选的,和/或显示水平可调。例如,就像几乎所有MATLAB自己的函数一样:

options = optimset('Display', 'iter-detailed');
[~] = fminsearch(@cos, 3, options);


spparms('spumoni', 2); 
sparse(rand(4)) \ rand(4,1)

答案 1 :(得分:2)

实现打开/关闭这样的诊断消息的一种非常简单的方法是使用效用函数vfprintf

function vfprintf(verbose, varargin)

if verbose
    fprintf(varargin{:})
else
    % Do nothing
end

然后您可以将verbose设置为true或false,否则就像使用fprintf一样使用该函数。你也可以做一个非常类似的事情来创建一个vdisp函数。