罗兰谈MATLAB的艺术

将想法转化为MATLAB

请注意

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

1997年的模式:使用feval

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

的想法

我知道我们用 函数宏指令 对于一些使用gpu的案例,但我想不出任何典型的MATLAB案例,我仍然需要使用 函数宏指令 而不是直接应用这个函数。你还在用吗 函数宏指令 ,也许在不再需要它的地方?让我们知道 在这里
The MathWorks, Inc.版权所有

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。