Gauss-Seidel method หลังจาก Jacobi ได้นำเสนอวิธการแก้ระบบสมการ มาระยะหนึ่ง ก็มีคนนำมาพัฒนาต่อ แต่หลักการจะใกล้เคียงกัน สมมติเรามีระบบสมการเชิงเส้น 3 สมการดังนี้
จัดรูปสมการใหม่ตามหลักการ Jacobi method ได้ดังนี้
เมื่อต้องการหาค่า x1 ก็ให้ลองใส่ค่า x2 , x3 ในสมการ แล้วนำค่า x1 ใหม่ดังกล่าวไปใช้ในการคำนวณค่า x2 เลย และก็นำ x1,x2 ใหม่ที่เพิ่งคำนวณได้ไปใช้ในการหา x3 ได้ทันที จนถึง xn จะเห็นว่า Gauss-Seidel method มีจุดต่างกับ Jacobi คือ xi ใดๆ ที่เพิ่งหามาได้จะถูกนำไปแทนค่า ในการหาค่า ของตัวแปร Unknown อื่นๆทันที ในรอบนั้นเลย และทำเช่นนี้ไปเรื่อยๆจนค่า x1 รอบปัจจุบัน กับรอบที่ผ่านมามีค่าแตกต่างกันน้อยมากๆ หรือไม่ต่างกันเลย (ดังสมการข้างล่างนี้) และ x2,x3 .. xn ก็เช่นเดียวกัน ถ้าเป็นเช่นนั้น ค่า x1,x2,x3 ... xn ที่ได้จากรอบล่าสุด คือคำตอบสุดท้าย
ในขณะที่ Jacobi method จะใช่ค่าเริ่มต้นใหม่ ทุกตัวในรอบต่อๆไป เท่านั้นแต่ในระหว่างรอบ จะไม่มีการนำค่าที่คำนวณได้ใหม่ มาใช้แต่อย่างใด ซึ่งจะเห็นว่าความแตกต่างดังกล่าวจะทำให้ Gauss-Seidel method จะใช้จำนวณรอบในการคำนวณน้อยกว่า Jacobi method มากเลยทีเดียว ซึ่งหากเราเขียนโปรแกรมสั่งให้คอมพิวเตอร์หาค่าให้เรา ถ้าจำนวนสมการเป็นหลัก พัน หรือ มากกว่า เราก็จะใช้เวลา หน่วยความจำของคอมพิวเตอร์น้อยกว่าการใช้ Jacobi method อย่างมากทีเดียว ใน การแก้สมการ ผู้เขียนใช้วิธี แยกหา x1 และ xn แยกออกมาต่างหาก ส่วน x2 จนถึง xn-1 จะหาโดยใช้ loop เดียวกัน
Gauss-Seidel m-file.
function gauss_seidel(A,b,error,max) Step to entry the linear system equation. >> A=[2,1,1;3,5,2;2,1,4] A = 2 1 1 3 5 2 2 1 4 >> b=[5;15;8] b = 5 15 8
>>gauss_seidel(A,b,0.0001,50)
The result of the computation. X Matrix -------------------- 0.9996 2.0002 1.0002 -------------------- Number of iterations : 8 >>
|