【问题标题】:Division by zero in the Newton-Raphson methodNewton-Raphson 方法中除以零
【发布时间】:2015-03-24 04:49:03
【问题描述】:

我正在尝试在 Scilab 中实现 Newton-Raphson 方法,其中输入必须是函数内部已经建立的方程的根点。然而,在对函数进行导数并输入根之后,我得到除以零。知道为什么输入 2 作为根点时导数等于 0 吗?

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)

【问题讨论】:

    标签: scilab newtons-method


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

    【讨论】:

    • 非常感谢您的帮助。这解决了所有问题。
    猜你喜欢
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多