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