有关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是最大迭代次数。

任何帮助如何使这个运行非常感谢。

+0

错误日志不符合我的:您的通话'涉及bissecao''x'作为第一个参数,这是不是在你的问题中定义。请明确定义:你的意思是身份功能吗? – PTRK

错误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 
+0

在x(t)的定义中,它不应该是't'而不是'x'吗? – luispauloml

+0

@luispauloml忘记了。修复。 – PTRK