Newton-Raphson 方法中除以零

Division by zero in the Newton-Raphson 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)

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