在一个函数中,我有一些disp()实例来帮助跟踪长计算过程的进度。
例如,
function myfun(inputs)
...
disp('Step i finished')
...
end
在myfun
的其他一些用法中,没有disp()
消息会更方便。有没有办法压制消息' Step i finished'在命令行中没有添加新代码或使用eval()
函数?
注意:已知eval()
对于任何严重的计算都太慢了。
答案 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
函数。