记一笔牛顿迭代求平方根与立方根
假设现在所求为平方根,即函数 x^2 = input 的解,即 x^2 - input = 0 的解.
令 f(x) = x^2 - input
牛顿迭代公式:
即假设 X_n 为函数 f(x) 的第 n 次解,那么第 n + 1 次解就是 X_n - f(X_n) / f'(X_n)
其中 f'(x) 是 f(x) 的导函数.
当 abs(X_(n + 1) - X_n) < eps 时,X_(n + 1) 符合要求精度,即 X_(n + 1) 的平方在要求精度内满足 X_(n + 1) 的平方等于 input
求立方根是同理的,即 f(x) = x^3 - input.
//迭代法求立方根 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; }
牛顿迭代公式是怎么来的:
牛顿迭代法的原理是:https://blog.csdn.net/ccnt_2012/article/details/81837154
任意一点 x0,可得到点 (x0, f(x0)) 处的切线方程斜率为 f'(x0),设切线方程为 y = f'(x0)x + b,带入点坐标,解得 b = f(x0) - f'(x0)x0
故 切线方程为:y = f'(x0)x + f(x0) - f'(x0)x0,令 y = 0,解得 x = (f'(x0)x0 - f(x0)) / f'(x0) = x0 - f(x0) / f'(x0).
即