有关scilab的基本问题
我正在学习数学微积分课程,除了非常基本的课程外,我们不需要知道任何scilab编程,因为课程大部分都是理论课。我正在阅读小册子,并发现这个scilab代码旨在通过bissection方法找到一个函数的根。 问题是,我无法找到使其工作的方法。我试图用bissecao(x,-1,1,0.1,40)
来调用它,但它不起作用。 我得到的错误是:有关scilab的基本问题
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是函数(I猜),a和b是在其中我们将迭代的间隔的限制,TOL在公差在其程序终止接近零,N是最大迭代次数。
任何帮助如何使这个运行非常感谢。
错误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
在x(t)的定义中,它不应该是't'而不是'x'吗? – luispauloml
@luispauloml忘记了。修复。 – PTRK
错误日志不符合我的:您的通话'涉及bissecao''x'作为第一个参数,这是不是在你的问题中定义。请明确定义:你的意思是身份功能吗? – PTRK