簡介
牛頓迭代法(簡稱牛頓法)由英國著名的數(shù)學(xué)家牛頓爵士最早提出。但是,這一方法在牛頓生前并未公開發(fā)表。
牛頓法的作用是使用迭代的方法來求解函數(shù)方程的根。簡單地說,牛頓法就是不斷求取切線的過程。
對于形如f(x)=0的方程,首先任意估算一個解x0,再把該估計值代入原方程中。由于一般不會正好選擇到正確的解,所以有f(x)=a。這時計算函數(shù)在x0處的斜率,和這條斜率與x軸的交點(diǎn)x1。
f(x)=0中精確解的意義是,當(dāng)取得解的時候,函數(shù)值為零(即f(x)的精確解是函數(shù)的零點(diǎn))。因此,x1比x0更加接近精確的解。只要不斷以此方法更新x,就可以取得無限接近的精確的解。
但是,有可能會遇到牛頓迭代法無法收斂的情況。比如函數(shù)有多個零點(diǎn),或者函數(shù)不連續(xù)的時候。
牛頓法舉例
下面介紹使用牛頓迭代法求方根的例子。牛頓迭代法是已知的實(shí)現(xiàn)求方根最快的方法之一,只需要迭代幾次后就能得到相當(dāng)精確的結(jié)果。
首先設(shè)x的m次方根為a。
下面程序使用牛頓法求解平方根。
1 const float EPS = 0.00001; 2 int sqrt(double x) { 3 if(x == 0) return 0; 4 double result = x; /*Use double to avoid possible overflow*/ 5 double lastValue; 6 do{ 7 lastValue = result; 8 &nbs