9.1按函数名称调用函数

这个feval函数允许您从包含函数名称的字符串中调用函数。这在编写需要调用用户提供的函数的函数时非常有用。这个feval函数将要调用的函数的名称作为其第一个参数,剩余的参数将提供给该函数。

以下示例是一个简单的函数,使用feval它使用牛顿方法找到一个变量的用户提供函数的根。

function result = newtroot (fname, x)

# usage: newtroot (fname, x)
#
#   fname : a string naming a function f(x).
#   x     : initial guess

  delta = tol = sqrt (eps);
  maxit = 200;
  fx = feval (fname, x);
  for i = 1:maxit
    if (abs (fx) < tol)
      result = x;
      return;
    else
      fx_new = feval (fname, x + delta);
      deriv = (fx_new - fx) / delta;
      x = x - fx / deriv;
      fx = fx_new;
    endif
  endfor

  result = x;

endfunction

请注意,这只是调用用户提供的函数的一个示例,不应过于重视。除了使用更健壮的算法外,任何严肃的代码都会检查所有参数的数量和类型,确保提供的函数真的是函数,等等。详见数字对象的判断函数,有关数字对象的判断函数列表,详见变量的状态,用于的描述exist作用

 
: retval = feval (name, …)

评估名为的函数name.

第一个参数之后的任何参数都作为输入传递给命名函数。例如

feval ("acos", -1)
     ⇒ 3.1416

调用函数acos带有参数-1’.

函数feval也可以与任何类型的函数句柄一起使用(详见函数句柄). 从历史上看,feval是在字符串中调用用户提供的函数的唯一方法,但从于函数句柄提供了更干净的语法,因此现在更倾向于使用它们。例如

f = @exp;
feval (f, 1)
    ⇒ 2.7183
f (1)
    ⇒ 2.7183

是调用所引用函数的等效方法f.如果事先无法预测f是函数句柄、字符串中的函数名或内联函数,则feval可以使用。

广告

类似的函数run存在,用于调用用户脚本文件,这些文件不一定在用户路径中

 
: run script
: run ("script")

script在当前工作空间中。

驻留在Octave的加载路径中指定的目录中,并以扩展名结尾的脚本.m,只需输入其名称即可运行。对于不位于加载路径中的脚本,请使用run.

文件名script可以是裸文件名、完全限定文件名或相对文件名,也可以带有或不带有文件扩展名。如果没有指定扩展名,Octave将首先搜索具有.m扩展名,然后返回到没有扩展名的脚本名称。

支持说明:如果script包括路径组件,然后run首先将工作目录更改为script找到。接下来,执行脚本。最后run返回到原始工作目录除非 script已指定更改目录。

详见: path, addpath, source.

广告

版权所有 © 2024-2025 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-2