簡(jiǎn)介
牛頓迭代法(簡(jiǎn)稱牛頓法)由英國(guó)著名的數(shù)學(xué)家牛頓爵士最早提出。但是,這一方法在牛頓生前并未公開(kāi)發(fā)表。
牛頓法的作用是使用迭代的方法來(lái)求解函數(shù)方程的根。簡(jiǎn)單地說(shuō),牛頓法就是不斷求取切線的過(guò)程。
對(duì)于形如f(x)=0的方程,首先任意估算一個(gè)解x0,再把該估計(jì)值代入原方程中。由于一般不會(huì)正好選擇到正確的解,所以有f(x)=a。這時(shí)計(jì)算函數(shù)在x0處的斜率,和這條斜率與x軸的交點(diǎn)x1。
f(x)=0中精確解的意義是,當(dāng)取得解的時(shí)候,函數(shù)值為零(即f(x)的精確解是函數(shù)的零點(diǎn))。因此,x1比x0更加接近精確的解。只要不斷以此方法更新x,就可以取得無(wú)限接近的精確的解。
但是,有可能會(huì)遇到牛頓迭代法無(wú)法收斂的情況。比如函數(shù)有多個(gè)零點(diǎn),或者函數(shù)不連續(xù)的時(shí)候。
牛頓法舉例
下面介紹使用牛頓迭代法求方根的例子。牛頓迭代法是已知的實(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