Loren谈MATLAB的艺术

将想法转化为MATLAB

请注意

Loren谈MATLAB的艺术已存档,不会更新。

如何抑制功能输出

您可能已经注意到,有些函数如果没有请求输出,则不返回任何输出,而有些函数即使没有请求也总是返回一些内容。用MATLAB实现这个的好方法是什么?

我想指出的是,虽然我们过去经常使用这种编程模式,但最近我们倾向于放弃它。例如,你可能会注意到我们有两个直方图函数,柱状图而且histcounts;一个用于图形,一个用于计算。

内容

例子

这个函数楼梯就是一个最好的例子。

比较

数组= randperm (50);楼梯(数组)

用这个

s =楼梯(数组)你可以看到,在每一种情况下,我们得到一个图。。只有当我们明确要求的时候%的输出,我们收到一个。
s =带有属性的Stair: Color: [0 0.4470 0.7410] LineStyle: '-' LineWidth: 0.5000 Marker: 'none' MarkerSize: 6 MarkerFaceColor: 'none' XData: [1×50 double] YData: [1×50 double]使用GET显示所有属性

编码一个可能性

在这个例子中,你会看到用我们过去(也许现在还在用)在MATLAB中编写的代码,当我们希望在没有任何输出参数的情况下调用时不返回任何输出,即当nargout= = 0

函数y = attempt1(x) yy = sin(x);if nargout > 0 % OR if nargout y = yy;结束结束

在这种情况下,非常简单。如果需要输出,最后只需将输出复制到具有正确输出名称的变量。如果我们有许多可能的输出变量,我们仍然需要专门处理第一个输出变量。

函数[y,z1,z2,z3] = attempt1a(x) yy = sin(x);z1 = yy * 17;z2 = yy + 17;z3 = yy ^ 17;if nargout > 0 % OR if nargout y = yy;结束结束

编码两个可能性

在第二种方案中,我们用所需的变量名编写代码,然后clearvars要么是整个本地工作区,或者,如果我们喜欢,就像上面那样,只是第一个工作区。

函数y = attempt2(x) y = sin(x);如果~nargout %如果nargout == 0 clearvars %或简单地clearvars y结束结束

虽然我讨厌使用函数或命令清晰的在函数代码中,我认为在这个用例中,它是可以的。“NOT ok”是指您试图强迫操作系统放弃内存。由于MATLAB调用操作系统来管理内存,所以当它释放的内存在MATLAB外部再次可用时,MATLAB无法控制时间。清除不再需要的内存的另一种技巧是设置你想要将其内存缩减为空数组的变量,例如,myvar# = []

你有偏好吗?您喜欢哪种代码模式?为什么?让我们知道在这里




已与MATLAB®R2019a发布

|
  • 打印
  • 发送电子邮件