牛顿迭代法

1. 迭代公式建立

clip_image002clip_image004点的Taylor展开如下:

clip_image006

一阶泰勒多项式:clip_image008

clip_image010近似于clip_image012

解出x记为clip_image014,则clip_image016

2. 牛顿迭代法的几何解析

clip_image002[4]处做曲线的切线,切线方程为:

clip_image004[4]

clip_image006[4]得切线与x轴的交点坐标为clip_image008[4],这就是牛顿迭代法的迭代公式。因此,牛顿法又称“切线法”。

clip_image010

Newton迭代法的特点是:

1. 对初值clip_image002[6]的选取要求较高。一般的,Newton迭代法只有局部收敛性,当初值clip_image002[7]在收敛区间里时,收敛速度很快(平方收敛)。但初值clip_image002[8]离方程根x*较远时,不能保证Newton迭代法收敛。

clip_image003

2. Newton迭代法求单根时,收敛速度很快(平方收敛)。但如果方程根clip_image005是重根,则收敛速度较慢,且重数越高速度越慢。但当clip_image005[1]是m重根时,用下面的迭代格式:

clip_image007

则至少能保持平方收敛。

3.应用:用有Newton迭代法求clip_image002[12]

求解:设clip_image002[14],则clip_image004[6]

clip_image006[6]

clip_image008[6]

程序实现:

#define ABS(VAL) (((VAL)>0)?(VAL):(-(VAL)))   

//用牛顿迭代法求浮点数的平方根   

double mysqrt(float x) {   

    double g0,g1;   

    if(x==0) 

        return 0;   

    g0=x/2;   //初值

    g1=(g0+x/g0)/2;   

    while(ABS(g1-g0)>0.01) //终止条件  

    {   

        g0=g1;   

        g1=(g0+(x/g0))/2;   //迭代规则

    }   

    return g1;   

}

double sqr(double n) {

    double k=1.0;

    while(abs(k*k-n)>1e-9) {

        k=(k+n/k)/2;

    }

    return k;

}

附加:

1. Newton下山法

由于当初值clip_image002[16]离方程根clip_image004[8]较远时,不能保证Newton迭代法收敛,但一旦clip_image006[8]进入收敛区间,则收敛速度很快。为使clip_image006[9]尽快进入收敛区间,常采用Newton下山法:

clip_image008[8] clip_image010[4]称为下山因子

具体做法如下:

1. 选取初值clip_image002[17]
2. 取下山因子clip_image012[4](可修改)
3. 计算clip_image008[9]
4. 计算clip_image014[4]并比较clip_image016[4]clip_image018的大小:
clip_image020,则
         1) 当clip_image022时,取clip_image024,结束;
         2) 当clip_image026时,将clip_image028作为新的clip_image006[10]值继续计算;
clip_image030,则取clip_image032,返回3。

2. 弦截法(方程常用的求解方法)

将Newton切线法中的切线斜率clip_image002[20]用弦的斜率替换:

clip_image004[10]

clip_image006

你可能感兴趣的:(迭代)