C语言 牛顿迭代法求平方根

对于用牛顿迭代法求平方根,最重要的是利用函数关系得到切线方程,再求出迭代公式

牛顿迭代法:多数方程不存在求根公式,牛顿提出了一种用迭代来求方程近似根的方法。思路就是不断取切线,用线性方程的根逼近非线性方程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

猜你喜欢

转载自blog.csdn.net/qq_39564672/article/details/88097336