关于scilab的基本问题

Basic questions about scilab

我正在学习数值微积分 class,我们不需要知道任何 scilab 编程,除了非常基础的,这是通过小册子教授的,因为 class 主要是理论性的。我正在阅读这本小册子,发现这个 scilab 代码旨在通过二分法找到函数的根。 问题是,我找不到让它工作的方法。我试图用 bissecao(x,-1,1,0.1,40) 调用它,但它没有用。 我得到的错误是:

at line     3 of function bissecao ( E:\Downloads\bisseccao3.sce line 3 )

Invalid index.

由于我非常怀疑代码本身无法正常工作,并且我试图搜索任何我能发现的似乎错误的东西,但无济于事,我想我可能以某种方式称它为错误。

代码如下:

function p = bissecao(f, a, b, TOL, N)
i = 1
fa = f(a)
while (i <= N)
  //iteraction of the bissection
  p = a + (b-a)/2
  fp = f(p)
  //stop condition
  if ((fp == 0) | ((b-a)/2 < TOL)) then
    return p
    end
  //bissects the interval
  i = i+1
  if (fa * fp > 0) then
    a = p
    fa = fp
    else
    b = p
    end
  end
error ('Max number iter. exceded!')
endfunction

其中 f 是一个函数(我猜),a 和 b 是我们将迭代的区间的限制,TOL 是程序在接近零时终止的容差,N 是最大值迭代次数。

非常感谢任何有关如何制作此 运行 的帮助。

bissecao 出错

您的 bissecao 函数唯一的错误是对 return 的调用:

In a function return stops the execution of the function, [x1,..,xn]=return(a1,..,an) stops the execution of the function and put the local variables ai in calling environment under names xi.

所以你应该在没有任何参数的情况下调用它(输入我们的输出)并且函数将退出并且 return p。 或者您可以调用 y1 = return(p) 函数将退出并且 p 将存储在 y1.

最好在函数中使用非参数形式 return 以避免在 parent/calling script/functions 中更改变量值(可能的副作用)。

在使用 pause:

进行交互式调试时,参数形式更有用

In pause mode, it allows to return to lower level. [x1,..,xn]=return(a1,..,an) returns to lower level and put the local variables ai in calling environment under names xi.

调用bissecao时出错

问题可能出自您的电话:bissecao(x,-1,1,0.1,40) 因为您没有定义 x。只需通过创建一个函数来解决这个问题即可解决问题:

function y=x(t)
  y=t+0.3
enfunction
x0=bissecao(x,-1,1,0.1,40) // changed 'return p' to 'return'
disp(x0) // gives -0.3 as expected