Octave 调用一个函数作为另一个函数的变量

Fai*_*sis 3 octave

我在 Octave 中编写了一个二分方法,但它不能使用另一个函数。

我的二分方法代码如下:

function[x,b] = bisection(f,a,b)

  t = 10e-8

  while abs(b-a) > t;
    c = (a+b)/2;

    if f(a) * f(b) <= 0
       a = a;
       b = c;
    else 
       b = b;
       a = c
    endif
  endwhile

  x = (a+b)/2
endfunction
Run Code Online (Sandbox Code Playgroud)

我已经有一个文件 f1.m:

function y = f1(x)
  y = x^2 - 4;
endfunction
Run Code Online (Sandbox Code Playgroud)

但是当我打电话时[x,v] = bisection[f1,0,5],我得到:

>> [t,v] = bisection(f1,0,5)
   error: 'x' undefined near line 2 column 5
   error: called from
          f1 at line 2 column 3
   error: evaluating argument list element number 1
Run Code Online (Sandbox Code Playgroud)

And*_*ndy 5

你想要的是将一个指针传递f1给你的函数bisection,这样正确的调用就是

[t,v] = bisection(@f1,0,5)
Run Code Online (Sandbox Code Playgroud)

其输出:

t =    1.0000e-07
a =  0.62500
a =  0.93750
a =  1.0938
a =  1.1719
a =  1.2109
a =  1.2305
a =  1.2402
a =  1.2451
a =  1.2476
a =  1.2488
a =  1.2494
a =  1.2497
a =  1.2498
a =  1.2499
a =  1.2500
a =  1.2500
a =  1.2500
a =  1.2500
a =  1.2500
a =  1.2500
a =  1.2500
a =  1.2500
a =  1.2500
a =  1.2500
x =  1.2500
t =  1.2500
v =  1.2500
Run Code Online (Sandbox Code Playgroud)