如何将函数作为参数传递

3

我正在使用Scilab,并尝试创建一个类似以下函数的函数:

function p = binary_search(myf,a,b)

目标是实现二分查找以找到使得myf(p) = 0在[a,b]内成立的p。

我想要做类似以下的操作:

root = binary_search("x^3 - 10",1,2)

第一个字符串是函数的定义。

我找到的唯一方法是定义一个名为x3的函数:

function x = x3(p)
x = p^3 - 10;
endfunction

然后,在 binary_search 函数内部,做如下操作:

fa = x3(a);

有什么想法吗?

谢谢!

3个回答

2

如果您已经定义了函数 f(x) = x^3 - 10,可以使用deff('y=f(x)','y=x^3-10')或常规的"function ... endfunction"语法。然后,您可以将f作为参数传递:define

function r = binary_search(f,a,b)
  % do the binary search here and store the result in r
endfunction

然后你可以调用。
--->  binary_search(f, 1, 2)

在SciLab中运行良好。

在MATLAB/octave中,解释器将 " f " 视为等同于 f(),即它会执行没有参数的函数f,这将导致错误 "x未定义"。为了避免这种情况,您需要在f前面输入一个 @

--->  binary_search( @f, 1, 2)   %% in MATLAB/octave

1

Scilab中的函数可以作为参数传递给其他函数。因此,如果您有一个函数f:

function y=f(x)  
  y = x^3 - 10     
endfunction  

你可以自由地将它传递给另一个函数,

root = binary_search("x^3 - 10",1,2)

deff 只是一种快速定义函数的方式-通常内联于解释器中。

此外,您还可以将表达式作为字符串传递给一个函数,并使用 evstr 命令对其进行评估:

function p = binary_search(expression, a, b)
    evstr expression
    //Rest of your code
endfunction

你可以在解释器上实现这个:

expression = "a^3 - 10"

root = binary_search(expression, 1, 2)

0
我找到了一个解决方案: 在主窗口(解释器)中,我定义函数如下:
deff('[y] = square(x)','y=x^2')

接着,我调用

 bi(square,0,2)

在这个函数中,我只是执行了'f(x)'操作:
function [x] = bi(f,a,b)
    fa = f(a);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接