一、簡介
牛頓迭代法(Newton's method)又稱為牛頓-拉夫遜(拉弗森)方法(Newton-Raphson method),它是牛頓在17世紀提出的一種在實數域和復數域上近似求解方程的方法。
多數方程不存在求根公式,因此求精確根非常困難,甚至不可能,從而尋找方程的近似根就顯得特別重要。方法使用函數
的泰勒級數的前面幾項來尋找方程 的根。牛頓迭代法是求方程根的重要方法之一,其最大優點是在方程
的單根附近具有平方收斂,而且該法還可以用來求方程的重根、復根,此時線性收斂,但是可通過一些方法變成超線性收斂。另外該方法廣泛用於計算機編程中。
二、牛頓迭代公式
三、代碼實現
我們現在先求平方根: 設函數 f(x) = x^2 - a ,那么求 a 的平方根等價於求 f(x) = 0 , 由牛頓迭代公式有:
x = x0 - f(x0)/f `(x0) ( f `(x) 為函數 f(x) 的一階導數 f `(x) != 0)
進行迭代:
x1 = x0 -f(x0)/f `(x0)
x2 = x1 - f(x1)/f `(x1)
x3 = x2 - f(x2)/f `(x2)
......
xk+1 = xk - f(xk)/f `(xk) (k = 0,1,2,3......)
同樣道理,求立方根時 我們設函數 f(x) = x^3 - a, 那么求 a 的立方根等價於求 f(x) = 0
//迭代法求立方根 public double getCube(double input){ double x = 1; double x1 = x - (x*x*x - input) / (3*x*x); while(x - x1 >0.000000001 || x - x1 < -0.000000001){ //判斷精度 x = x1; x1 = x - (x*x*x - input) / (3*x*x); } return x1; } //迭代法求平方根 public double getSqrt(double input){ double x = 1; double x1 = x - (x*x - input)/(2*x); while(x - x1 > 0.00000001 || x - x1 < -0.00000001){ x = x1; x1 = x - (x*x - input)/(2*x); } return x1; }
---------------------
作者:luzi_這個人有點意思
來源:CSDN
原文:https://blog.csdn.net/qq_34528297/article/details/70327734