2015-03-23 3 views
0

J'essaie d'implémenter la méthode de Newton-Raphson dans Scilab où l'entrée doit être un point racine de l'équation déjà établie dans la fonction. Cependant après avoir fait la dérivée de la fonction et entré la racine, j'obtiens la division par zéro. Une idée de la raison pour laquelle la dérivée est égale à zéro lors de l'entrée de 2 comme point racine?Division par zéro dans la méthode de Newton-Raphson

function y = fun(x) 
    y = -0.01 + (1/1+ x^2); 
endfunction 
function y= dfun(x) 
    y = (-2.00*x)/(1+x^2)^2 
endfunction 
No = 0; 
x1 = 0; 
x0 = input('Diga el valor inicial: '); 
error = 1e^-10; 
while (abs(fun(x0)) > error) 
    x1 = x0 - fun (x0)/dfun(x0); 
    x0 = x1; 
    No = No + 1; 
end; 
disp(x1, "Valor: "); 
disp(No, "Numero de iteraciones: ") 


ERROR HERE 
Diga el valor inicial: 2 
    x1 = x0 - fun (x0)/dfun(x0); 
            !--error 27 
Division by zero... 
at line  12 of exec file called by :  
exec('C:\Users\Silvestrini\Documents\Raphson.sci', -1) 

Répondre

1

Le problème ne se produit pas à x = 2. Pour voir ce qui se passe, insérez disp(x0); au début de la boucle:

2. 
33.1875 
20184679. 
1.675D+36 
6.59D+180 

et c'est lorsque la valeur des dérivés sousverses à zéro.

La division par zéro est un symptôme d'un problème différent: la méthode diverge de manière catastrophique. La raison est simple: votre formule en fun est vide parenthèses, ce qui entraîne une fonction qui n'a pas de zéros. Utilisez

y = -0.01 + (1/(1+ x^2)) 

Il y a aussi une autre faute de frappe: 1e^-10; devrait être 1e-10

Et un mot d'avertissement: error est un nom d'une fonction intégrée dans Scilab, afin de l'utiliser comme un nom d'une variable n'est pas recommandé.

+0

Merci beaucoup pour votre aide. Cela a tout arrangé. – Silvestrini