迭代是數值分析中通過從一個初始估計出發尋找一系列近似解來解決問題(一般是解方程或者方程組)的過程,為實現這一過程所使用的方法統稱為迭代法(Iterative Method)。
一般可以做如下定義:對於給定的線性方程組x=Bx+f(這里的x、B、f同為矩陣,任意線性方程組都可以變換成此形式),用公式x(k+1)=Bx(k)+f(括號中為上標,代表迭代k次得到的x,初始時k=0)逐步帶入求近似解的方法稱為迭代法(或稱一階定常迭代法)。如果k趨向無窮大時limt(k)存在,記為x*,稱此迭代法收斂。顯然x*就是此方程組的解,否則稱為迭代法發散。
跟迭代法相對應的是直接法(或者稱為一次解法),即一次性的快速解決問題,例如通過開方解決方程x +3= 4。一般如果可能,直接解法總是優先考慮的。但當遇到復雜問題時,特別是在未知量很多,方程為非線性時,我們無法找到直接解法(例如五次以及更高次的代數方程沒有解析解,參見阿貝耳定理),這時候或許可以通過迭代法尋求方程(組)的近似解。
最常見的迭代法是牛頓法。其他還包括最速下降法、共軛迭代法、變尺度迭代法、最小二乘法、線性規划、非線性規划、單純型法、懲罰函數法、斜率投影法、遺傳算法、模擬退火等等。
利用迭代算法解決問題,需要做好以下三個方面的工作:
確定迭代變量
在可以用迭代算法解決的問題中,至少存在一個直接或間接地不斷由舊值遞推出新值的變量,這個變量就是迭代變量。
建立迭代關系式
所謂迭代關系式,指如何從變量的前一個值推出其下一個值的公式(或關系)。迭代關系式的建立是解決迭代問題的關鍵,通常可以順推或倒推的方法來完成。
對迭代過程進行控制
在什么時候結束迭代過程?這是編寫迭代程序必須考慮的問題。不能讓迭代過程無休止地重復執行下去。迭代過程的控制通常可分為兩種情況:一種是所需的迭代次數是個確定的值,可以計算出來;另一種是所需的迭代次數無法確定。對於前一種情況,可以構建一個固定次數的循環來實現對迭代過程的控制;對於后一種情況,需要進一步分析出用來結束迭代過程的條件。
用迭代法求平方根
已知求平方根的迭代公式為:x n+1 = (xn + a / xn) / 2,要求前后兩次求出的差的絕對值小於10-5。
算法如下:
① 設定一個x的初值x0 ; (在如下程序中取x0=a/2, 通過迭代公式求出x1,可以肯定與真正的平方根相比,誤差很大。)
② 迭代關系式: 用公式x n+1 = (xn + a / xn) / 2求出x的下一個值 x1 ;
③ 迭代終止條件:如此繼續下去,直到前后兩次求出的x值(x n+1和xn)滿足以下關系:|x n+1-xn|<10-5 .
c語言實現:
1 #define ABS(VAL) (((VAL)>0)?(VAL):(-(VAL))) 2 //用牛頓迭代法求浮點數的平方根 3 double mysqrt(float x) { 4 double g0,g1; 5 if(x==0) 6 return 0; 7 g0=x/2; 8 g1=(g0+x/g0)/2; 9 while(ABS(g1-g0)>0.01) 10 { 11 g0=g1; 12 g1=(g0+(x/g0))/2; 13 } 14 return g1; 15 }
內容引自:http://baike.baidu.com/view/649495.htm
代碼引自:http://yarin.blog.51cto.com/1130898/379989
證明查看:http://brianyang1106.blog.163.com/blog/static/13760289220101251211355/