หาคำตอบของระบบสมการเชิงเส้นโดยใช้ SOR method

ให้ระบบสมการเชิงเส้นในรูปของเมทริกซ์ $Ax=b$ โดยที่ \[ A = \left[\begin{array}{cccc} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{n1} & a_{n2} & \cdots & a_{nn} \end{array}\right],\qquad x = \left[\begin{array}{c} x_1 \\ x_2 \\ \vdots \\ x_n \end{array}\right],\qquad b = \left[\begin{array}{c} b_1 \\ b_2 \\ \vdots \\ b_n \end{array}\right] \] แอปพลิเคชันนี้ใช้วิธี successive over-relaxation (SOR) ในการหาคำตอบของระบบสมการข้างบน โดยคำนวณจาก \[ x_i^{(k+1)} = (1-\omega)x_i^{(k)}+\frac{\omega}{a_{ii}}\left(b_i-\sum_{j=1}^{i-1}a_{ij}x_j^{(k+1)} - \sum_{j=i+1}^na_{ij}x_j^{(k)}\right),\qquad i=1,\ldots, n \] โดย $\omega$ เป็น relaxation factor ถ้าเมทริกซ์ $A$ มีคุณสมบัติ symmetric positive definite และเลือก $\omega$ ในช่วง $0 < \omega < 2$ จะทำให้ SOR method คำนวณคำตอบของสมการข้างบนได้ แอปพลิเคชั้นจะหยุดการคำนวณเมื่อ $k=1000$ หรือ $\|b-Ax\|_\infty < 10^{-8}$ ซึ่งในกรณีหลังนี้ค่า $x$ ที่ได้เป็นคำตอบของระบบสมการดังกล่าว

การเลือกค่า $\omega$ เพื่อที่จะทำให้วิธีนี้หาคำตอบของระบบสมการข้างต้นได้เร็วขึ้นเป็นเรื่องค่อนข้างซับซ้อนต้องพิจารณาจากคุณสมบัติของ $A$ การใช้ค่า $\omega$ ที่ไม่เหมาะสมจะทำให้ SOR method หาคำตอบได้ช้ากว่าวิธีจาโคบีหรือวิธี Gauss-Seidel (ซึ่งก็คือวิธี SOR เมื่อ $\omega=1$) นอกจากนี้ SOR method ไม่ใช่ general solver เหมือนวิธีที่ใช้ LU decomposition สำหรับเมทริกซ์ทั่วไป แต่วิธีนี้ยังใช้ในปัญหาเฉพาะทาง เช่นใช้เป็นส่วนหนึ่งของการคำนวณในของไหล (Computational Fluid Dynamics) เหมือนวิธีจาโคบีและวิธี Gauss-Seidel

ดูรายละเอียดการใส่ ข้อมูลเมตริกซ์ และสำหรับแอปพลิเคชันนี้ $A$ เป็นเมทริกซ์จัตุรัส ส่วน $x$ และ $b$ เป็นเมทริกซ์ที่มีหนึ่งหลักเท่านั้น สมาชิกทั้งหมดของเมทริกซ์เป็นจำนวนจริง และค่า $\omega$ จะต้องอยู่ในช่วง $0 < \omega < 2 $

คำนวณ SOR method