我正在使用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);
有什么想法吗?
谢谢!
答案 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);