Java|寫一個用迭代法解方程的Java程式

  • 2019 年 11 月 24 日
  • 筆記

本文首發於微信公眾號:"演算法與編程之美",歡迎關注,及時了解更多此系列文章。

問題描述

迭代法也稱輾轉法,是一種逐次逼近方法,在使用迭代法解方程組時,其係數矩陣在計算過程中始終不變。它利用電腦運算速度快、適合做重複性操作的特點,讓電腦對一組指令(或一定步驟)進行重複執行,在每次執行這組指令(或步驟)時,都從變數的原值推出它的一個新值。

迭代法具有循環的計算方法,方法簡單,適宜解大型稀疏矩陣方程組,在用電腦計算時只需存儲A的非零元素(或可按一定公式形成係數,這樣A就不需要存儲)。

(1)對於給定的方程組X =Bx+f,用式子逐步代入求近似解的方法稱為迭代法(或稱為一階定常迭代法,這裡與B和k無關)

(2) 如果limx(k), x→∞存在(記作x* ),稱此迭代法收斂,顯然x就是方程組的解,否則稱此迭代法發散。

解決方案

解法介紹

牛頓迭代法是一種線性化方法,其基本思想是將非線性方程f(x)= 0逐步歸結-為某種線性方程來求解.設已知方程f(x)=0有近似根X (假定f』(xk)≠ 0),將函數f(x)在點xk展開,有:

f(x)≈f(xk)+f』(xk)(x-xk)於是方程f(x)=0可近似地表示為f(x)+ f』(xk)(x-xk)=0(是個線性方程),記其根為xk+1,則xk+1的計算公式為xk+1=xk-f(xk)f』(xk)(k=0,1,2……)

例題講解

例:用牛頓迭代法三次求方程f(x)=x5-x2+x-30=0,在區間[1,3]中的近似值請詳細解答

解:

f(1)=-29

f(3)=207 所以[1,3]之間一定有零點。而且明顯更靠近x=3。

f (2) =-2

f(2. 5)=63.9

f(2.2)=19.2

f(2.1)=8.53

f(2. 01)=0.78

f(2 001)=0.08

所以f(2. 0001)=0.008應該滿足要求了。所以x=2.0001

例:使用牛頓迭代法求方程的解,X3-2x-5=0,在區間[2,3]上的根。

package Lab_02.Test_01; public class Test_01 { public static void main(String[] args) { double x=2; for(int i=0;i<20;i++) { x=-f(x)/f1(x)+x; } System.out.println(x+""); } static double f(double x) { double ans; ans=Math.pow(x, 3)-2*x-5; return ans; } static double f1(double x) { double ans; ans=3*Math.pow(x, 2)-2; return ans; }}

END

實習編輯 | 王楠嵐

責 編 | 劉 連

where2go 團隊

微訊號:演算法與編程之美