关于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
我正在学习数值微积分 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 variablesai
in calling environment under namesxi
.
所以你应该在没有任何参数的情况下调用它(输入我们的输出)并且函数将退出并且 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 variablesai
in calling environment under namesxi
.
调用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