2017-09-19 11 views
0

Je prends un cours de calcul numérique et nous n'avons pas besoin de connaître la programmation de scilab, sauf la très basique, qui est enseignée dans un livret, puisque la classe est principalement théorique. Je lisais le livret et j'ai trouvé ce code Scilab destiné à trouver la racine d'une fonction par la méthode de la bissection. Le problème est, je ne peux pas trouver un moyen de le faire fonctionner. J'ai essayé de l'appeler avec bissecao(x,-1,1,0.1,40) mais cela n'a pas fonctionné. L'erreur que je suis arrivé était:Questions de base sur scilab

at line  3 of function bissecao (E:\Downloads\bisseccao3.sce line 3) 

Invalid index. 

Comme je doute fortement que le code lui-même ne fonctionne pas, et j'ai essayé de chercher tout ce que je pouvais apercevoir qui semblait mal, en vain, je suppose que je suis probablement l'appeler mal, en quelque sorte.

Le code est le suivant:

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 

où f est une fonction (je suppose), a et b sont les limites de l'intervalle dans lequel nous serons itération, TOL est la tolérance à laquelle la le programme se termine près d'un zéro, et N est le nombre maximum d'itérations.

Toute aide sur la façon de faire cette course est grandement appréciée.

+0

Votre journal d'erreur ne correspond pas à moi: l'appel de '' bissecao' impliquent x' comme premier paramètre, non défini dans votre question.Veuillez le définir clairement: vouliez-vous dire la fonction d'identité? – PTRK

Répondre

1

Erreur dans bissecao

La seule erreur de votre fonction bissecao ont est l'appel à return:

En fonction return arrête l'exécution de la fonction, [x1,..,xn]=return(a1,..,an) arrête l'exécution de la fonction et mettre les variables locales ai dans l'environnement appelant sous les noms xi.

Vous devriez donc l'appeler sans aucun argument (entrer notre sortie) et la fonction quittera et retournera p. Ou vous pouvez appeler y1 = return(p) et la fonction va quitter et p seront stockés dans y1.

Il est préférable d'utiliser le formulaire non-arguments return dans les fonctions pour éviter de changer les valeurs des variables dans le script/fonctions appelant/parent (effet de bord possible).

La forme d'argument est plus utile lors du débogage de manière interactive avec pause:

En mode pause, il permet de revenir au niveau inférieur. [x1,..,xn]=return(a1,..,an) retourne au niveau inférieur et placez les variables locales dans l'environnement appelant sous les noms xi.

Erreur dans l'appel bissecao

Le problème peut venir par votre appel: bissecao(x,-1,1,0.1,40) parce que vous ne l'avez pas défini x. Il suffit de fixer cela en créant une fonction permet de résoudre le problème:

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

Ne devrait-il pas être 't' au lieu de' x'dans la définition de 'x (t)'? – luispauloml

+0

@luispauloml Je l'ai oublié. Je l'ai réparé. – PTRK