如何将函数作为参数传递

时间:2010-05-08 22:39:08

标签: function scilab

我正在使用Scilab而我正在尝试创建如下函数:

function p = binary_search(myf,a,b)

目标是使binary_search找到这样的p:[a,b]中的myf(p)= 0.

我想做这样的事情:

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

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

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

函数x = x3(p)

x = p^3 - 10;

endfunction可写

然后,在binary_search中,执行以下操作:

fa = x3(a);

有什么想法吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

如果已定义函数f(x)= x ^ 3 - 10,则使用deff('y = f(x)','y = x ^ 3-10')或常规“函数.. .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 undefined”。为避免这种情况,您必须在f:

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

答案 1 :(得分: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)

答案 2 :(得分:0)

我找到了一个解决方案: 在主窗口(解释器)中,我定义了如下函数:

deff('[y] = square(x)','y=x^2')

然后,我打电话给

 bi(square,0,2)

在函数中,我只是做'f(x)':

function [x] = bi(f,a,b)
    fa = f(a);