牛顿迭代法以及求平方根的应用
设 x∗x∗ 是一元非线性方程的根,函数 f(x)f(x) 在 x∗x∗ 的某领域内连续可微, x∗x∗ 是某个迭代的近似根,且 f′(xk)≠0f′(xk)≠0。 f′(xk)f′(xk)在点 xkxk处进行一阶泰勒展开,可得
f(xk)≈f(xk)+f′(xk)(x−xk)f(xk)≈f(xk)+f′(xk)(x−xk)
则方程f(x)=0f(x)=0可近似表示为:
f(xk)+f′(xk)(x−xk)=0f(xk)+f′(xk)(x−xk)=0
这是一个线性方程,可解得
x=xk−f(xk)f′(xk)x=xk−f(xk)f′(xk)
将其右项作为新的迭代值xK+1xK+1,则可得迭代公式:
xk+1=xk−f(xk)f′(xk),k=0,1,2...xk+1=xk−f(xk)f′(xk),k=0,1,2...
求平方根的分析
若要求x=c√x=c,即求等价方程 f(x)=x−c2=0,f′(x)=2xf(x)=x−c2=0,f′(x)=2x。由牛顿迭代公式可得:
xk+1=12(xk+cxk),k=0,1,2...xk+1=12(xk+cxk),k=0,1,2...
Java代码用牛顿迭代法求平方根
public static double sqrt(double c){
if(c<0)
return Double.NaN;
double err=1e-15;
double t=c;
while(Math.abs(t-c/t)>err*t)
t=(c/t+t)/2.0;
return t;
}