在Newton-Raphson方法中除以零

时间:2015-03-23 15:45:26

标签: scilab newtons-method

我正在尝试在Scilab中实现Newton-Raphson方法,其中输入必须是已在函数内部建立的等式的根点。但是在完成函数的导数并输入根之后,我得到除零。当输入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 个答案:

答案 0 :(得分: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中内置函数的名称,因此不建议将其用作变量名称。