对于用牛顿迭代法求平方根,最重要的是利用函数关系得到切线方程,再求出迭代公式
牛顿迭代法:多数方程不存在求根公式,牛顿提出了一种用迭代来求方程近似根的方法。思路就是不断取切线,用线性方程的根逼近非线性方程f(x)=0的根X*。
流程演示:不断取切线,逼近非线性方程f(x)的根
迭代公式的求法
过点(Xk,f(Xk))作函数的切线,切线方程是:.
切线与x轴的交点是Xk+1,点(Xk+1,0)满足以下方程:.
如果f'(Xk)≠0,则有 这就是牛顿迭代法的迭代公式
代码①:
//C语言 abs()是取绝对值
#include <math.h>
int mySqrt(int x) {
if( x==0 )
return 0;
double xk = 1, xk1 = 0;
double err = 1e-6; // err为误差,1e-6就是1乘10的-6次幂
while( abs(xk-xk1) > err ) //循环退出的条件是真正解与近似解的误差进入允许的范围
{
xk1 = xk;
xk = ( xk + x/xk )/2; //迭代公式
}
return xk;
}
代码②:
#include <math.h>
int mySqrt(int x) {
long xk = x; //避免 xk*xk 溢出,故采用long整型
double err = 1e-6; // err为误差,1e-6就是1乘10的-6次幂
while( xk*xk > x ) //循环退出的条件是 xk*xk 小于 x ,参考本文代码1中的区间关系
{
xk = ( xk + x/xk )/2; //迭代公式
}
return xk;
}
注:二分法求平方根的C代码见 https://blog.csdn.net/qq_39564672/article/details/88095963