我正在上一门数学微积分课,除了非常基本的,通过小册子教授,我们不需要知道任何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。
非常感谢任何有关如何进行此项运行的帮助。
答案 0 :(得分:0)
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(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