2015-03-23 1 views
0

Я пытаюсь реализовать метод Ньютона-Рафсона в Scilab, где вход должен быть корневой точкой уравнения, уже установленного внутри функции. Однако после выполнения производной функции и ввода корня я получаю деление на ноль. Любая идея, почему производная равна нулю при вводе 2 в качестве корневой точки?Деление на ноль в методе Ньютона-Рафсона

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) 

ответ

1

Проблема не возникает при x = 2. Чтобы понять, что происходит, вставить disp(x0); в начале цикла:

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

и это, когда значение производной потери значимости к нулю.

Деление на ноль является симптомом другой проблемы: метод катастрофически расходится. Причина проста: ваша формула в fun отсутствует круглые скобки, что приводит к функции, которая не имеет нулей. Используйте

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

Существует еще одна опечатка: 1e^-10; должен быть 1e-10

И слово предостережения: error это имя встроенной функции в Scilab, поэтому использовать его в качестве имени переменной не рекомендуется.

+0

Большое вам спасибо за помощь. Все это исправлено. – Silvestrini

Смежные вопросы