Loren谈MATLAB的艺术

将想法转化为MATLAB

请注意

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

1997年的模式:使用feval

在20世纪90年代初,避免 eval 和它所有的怪癖(如果你不知道这个,不要查它-它完全不鼓励),我们推荐使用 函数宏指令 用于计算在运行代码的用户提供之前可能不知道的函数。例如,我们用它来求数值积分。我们想让被积函数完全灵活,由用户决定。然而,积分器必须能够计算用户函数,这在创建积分器时是未知的。
函数我= integ (fcn fmin fmax, tol)
如果~ ischar (fcn)
错误(...
结束
找出一些要评估的初始点
PTS = linspace(fmin, fmax, 20);
阵线=函数宏指令(fcn,分);
我=...
结束
这样做的好处是不要求MATLAB将任何变量“噗”地放入工作空间。它还有助于避免函数和变量的名称相同的情况,从而可能无法提供您所期望的名称版本。你用的方式 函数宏指令 当时一般是通过一个字符数组来标识要调用的函数。
我只考虑使用 函数宏指令 在MATLAB中的字符或字符串的上下文中,而不是一些更专门的版本,如使用gpu。
你可以这样调用积分函数。
面积= integ (“myfun”, 0,π);
今天,有了函数句柄,我们可以绕过使用 函数宏指令 并直接使用函数句柄。
函数我= integ (fcn fmin fmax, tol)
如果~ isa (fcn“function_handle”
%可能仍然很好,允许字符向后兼容-但不允许新的“字符串”。
if ~isa(fcn, 'function_handle') || ~ischar(fcn)
错误(...
结束
找出一些要评估的初始点
PTS = linspace(fmin, fmax, 20);
阵线= fcn (pts);
我=...
结束
这样叫它。
Area = integ(@myfun, 0, pi);
这是有用的,至少有几个原因:
  • 它通常更快,即使只有一点点,因为它少了一个函数调用的间接方式。
  • 它为您提供的句柄计算函数—并且不会因此而混淆其他可能的名称冲突。在积分器内部,我们可以完全控制函数的名称(称为fcn),因为它是一个函数句柄,所以它不能与函数或环境中可能存在的其他任何东西冲突。

的想法

我知道我们用 函数宏指令 在某些情况下使用gpu,但我想不出任何典型的MATLAB情况,我仍然需要使用 函数宏指令 而不是直接应用函数。你还在用吗 函数宏指令 ,也许不再需要它了?让我们知道 在这里
The MathWorks, Inc.版权所有
|
Baidu
map