这里的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作用
[y1, y2, …] = feval ('fcn', x1, x2, …) ¶[y1, y2, …] = feval (@fcn, x1, x2, …) ¶评估名为的函数name,并传入参数x1, x2, ...
函数fcn可以是字符串表示的函数名,也可以是函数句柄。任何在第一个参数之后的参数都被视为是函数的入参。例如
feval ("acos", -1)
⇒ 3.1416
调用函数acos带有参数-1’.
函数feval也可以与任何类型的函数句柄一起使用(详见函数句柄). 从历史上看,feval是在字符串中调用用户提供的函数的唯一方法,但因为函数句柄提供了更干净的语法,因此现在更倾向于使用它们。例如
f = @exp;
feval (f, 1)
⇒ 2.7183
f (1)
⇒ 2.7183
是调用所引用函数的等效方法f.如果事先无法预测f是函数句柄、字符串中的函数名或内联函数,则feval可以使用。
类似的函数run存在,用于调用用户脚本文件,这些文件不一定在用户路径中
版权所有 © 2024-2025 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2