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