关于scilab的基本问题

时间:2017-09-19 04:06:02

标签: scilab

我正在上一门数学微积分课,除了非常基本的,通过小册子教授,我们不需要知道任何scilab编程,因为课程主要是理论上的。我正在阅读这本小册子,发现这个scilab代码意味着通过bissection方法找到函数的根。 问题是,我找不到让它工作的方法。我试着用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是最大值iteractions。

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

1 个答案:

答案 0 :(得分:0)

bissecao

出错

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

  

在函数return中停止执行函数,   [x1,..,xn]=return(a1,..,an)停止执行函数和   将局部变量ai放在名为xi的调用环境中。

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

最好在函数中使用非参数形式return来避免更改父/调用脚本/函数中的变量值(可能的副作用)。

使用pause进行交互式调试时,参数表单更有用:

  

在暂停模式下,它允许返回到较低级别。   [x1,..,xn]=return(a1,..,an)返回较低级别并放入本地   名称为ai的调用环境中的变量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