牛顿迭代法的大题意思就是通过不停的迭代来逐渐的使方程收敛。
因为切线是一条直线,也就是线性的,所以我们可以说,A点的切线是f(x)的线性逼近。离A点距离越近,这种逼近的效果也就越好,也就是说,切线与曲线之间的误差越小。所以我们可以说在A点附近,切线约等于f(x);
例如我们求m的平方根其实就是相当于求f(x) = x^2 - m方程与x轴交点也就是求想x^2 - m = 0 的根。
Xn点的切线方程为
求平方根的方程为x^2 - m = 0
Xn+1 = Xn - (Xn^2 - m)/2Xn
化简得
Xn+1 = (Xn + m/Xn)/2
java代码如下:
public class sqrt {
public static float sqrtRoot(float m) {
if ( m == 0 ) {
return 0;
}
float x1 = m / 2;
for(int i=0;i<1000;i++){
float x2 = (x1 + (m/x1))/2;
if(x1-x2 <= 0.0001){
return x2;
}
x1 = x2;
}
return 0;
}
public static void main(String []args) {
float i = 6;
float l = sqrtRoot(i);
System.out.println(l);
}
}