牛頓迭代法


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM