2

我正在使用 Scilab,我正在尝试制作如下函数:

function p = binary_search(myf,a,b)

目标是让 abinary_search找到这样的 p:myf(p) = 0在 [a,b] 中。

我想做这样的事情:

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

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

我发现的唯一方法是定义一个名为x3

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

然后,在里面binary_search,做类似的事情:

fa = x3(a);

有任何想法吗?

谢谢你!

4

3 回答 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 undefined"。为避免这种情况,您必须@ 在 f 前面输入 an:

--->  binary_search( @f, 1, 2)   %% in MATLAB/octave
于 2018-03-22T06:55:51.857 回答
1

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

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

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

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

def 只是一种快速定义函数的方法——通常是在解释器上内联。

或者,您也可以将表达式作为字符串传递给函数,并使用 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)
于 2010-05-15T19:34:37.917 回答
0

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

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

然后,我打电话

 bi(square,0,2)

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

function [x] = bi(f,a,b)
    fa = f(a);
于 2010-05-10T09:34:15.003 回答