Memoir
ฉบับนี้จัดทำขึ้นเพื่อขยายความในเอกสารประกอบคำสอนวิชาคณิตศาสตร์สำหรับวิศวกรรมเคมี
ในส่วนของการคำนวณเชิงตัวเลข
เรื่องการแก้ปัญหาระบบสมการพีชคณิตเชิงเส้น
ในการแก้ปัญหาระบบสมการพีชคณิต
A.x
= b
ด้วยเทคนิคการกำจัดของเกาส์
(Gauss
elimination) นั้น
จำนวนครั้งของการคูณในขั้นนตอนของการกำจัดไปข้างหน้า
(Forward
elimination) จะแปรผันตามจำนวนสมการยกกำลัง
2
ในขณะที่จำนวนครั้งของการคูณในขั้นตอนการแทนค่าย้อนกลับ
(Back
substitution) แปรผันตามจำนวนสมการยกกำลัง
1
หรือกล่าวอีกนัยหนึ่งคืองานส่วนใหญ่ไปหนักอยู่ที่ขั้นตอนการกำจัดไปข้างหน้า
ในกรณีที่เราต้องแก้ปัญหาระบบสมการพีชคณิต
A.x
= b
หลายครั้ง
โดยแต่ละครั้งนั้นมีเมทริกซ์
A
ที่เหมือนกัน
แต่แตกต่างกันตรงเวกเตอร์
b
แม้ว่าเราจะสามารถใช้เทคนิคการกำจัดของเกาส์ในการแก้ปัญหาได้
แต่จะพบว่ามีการทำงานที่ซ้ำซ้อนกันอยู่
คือขั้นตอนการกำจัดไปข้างหน้าที่เราต้องทำการแปลงเมทริกซ์
A
เพื่อให้ค่าตัวเลขในซีกซ้ายล่างของเมทริกซ์
A
(พวกที่อยู่ใต้แนวเส้นทแยงมุม)
มีค่าเป็น
0
และที่สำคัญคือขั้นตอนนี้เป็นขั้นตอนที่ใช้เวลาคำนวณมากที่สุด
ด้วยเหตุนี้จึงได้มีการหาวิธีที่จะทำการเก็บค่าตัวเลขที่ใช้ในการแปลงตัวเลขในตำแหน่งต่าง
ๆ ที่อยู่ใต้เส้นทแยงมุมของเมทริกซ์
A
ให้มีค่าเป็น
0
เพื่อที่จะได้สามารถนำไปใช้งานในครั้งต่อไปได้เลยโดยไม่ต้องทำการคำนวณใหม่
นั่นคือการแตกเมทริกซ์ A
ให้กลายเป็นผลคูณของเมทริกซ์
2
เมทริกซ์คือ
L
กับ
U
หรือ
A
= L.U
จะว่าไปแล้วการแปลงเมทริกซ์ A ให้กลายเป็นผลคูณของเมทริกซ์ 2 เมทริกซ์คือ L กับ U นั้นก็คือการทำการกำจัดไปข้างหน้าในระหว่างการใช้เทคนิคการกำจัดของเกาส์ในการแก้ปัญหา เพียงแต่เราเอาตัวเลขที่เราใช้ในการกำจัดให้ตัวเลขที่อยู่ ใต้แนวเส้นทแยงมุมให้มีค่าเป็น 0 ไปเก็บไว้ในเมทริกซ์ L ส่วนเมทริกซ์ U ก็คือเมทริกซ์ A ที่เหลือจากการกำจัดไปข้างหน้านั่นเอง
ดังนั้นจากโจทย์ของเรา A.x
= b
จะแปลงเป็น
L.(U.x)
= b
กำหนดให้ U.x
= y
ทำการแก้ระบบสมการ L.y
= b เพื่อหาค่า
y
ก่อน
จากนั้นแก้ระบบสมการ U.x
= y เพื่อให้ได้ค่า
x
เพื่อให้ได้คำตอบที่ออกมาถูกต้อง
(เท่าที่ความอุปกรณ์ที่ใช้ในการคำนวณจะให้ได้)
การแก้ปัญหาด้วยเทคนิคการกำจัดของเกาส์นั้นจะเริ่มจากการทำการกำจัดไปข้างหน้าพร้อมกับการหาตัวหลัก
(pivoting)
ไปด้วยพร้อมกัน
และในขณะเดียวกันก็จะทำการแตกเมทริกซ์
A
ให้กลายเป็นผลคูณของเมทริกซ์
2
เมทริกซ์คือ
L
กับ
U
เมื่อได้คำตอบ
(คือ
x)
แล้วจะนำคำตอบที่ได้ไปแทนค่าในโจทย์เริ่มต้นเพื่อตรวจสอบว่าผลการคำนวณมีความคลาดเคลื่อนสะสมมากน้อยเท่าใด
(ดูผลต่างระหว่างค่า
b
ที่โจทย์กำหนดมาให้กับค่าที่คำนวณได้จากการแทน
x
เข้าไปในสมการ)
ถ้าพบว่าค่า
b
ที่ได้จากการแทนค่า
x
ที่คำนวณได้แตกต่างจากค่า
b
ที่โจทย์กำหนดมาให้
นั่นแสดงว่าค่า x
ที่คำนวณได้นั้นมีความคลาดเคลื่อนสะสมอยู่
ก็จะทำการปรับแก้ด้วยการใช้เทคนิค
iterative
improvement
การปรับแก้คำตอบด้วยเทคนิค
iterative
improvement นั้นเป็นการแก้ปัญหาระบบสมการ
A.dx
= db
เพื่อหาว่าค่าความคลาดเคลื่อนของคำตอบ
(dx)
นั้นมีค่าเท่าใด
เพื่อที่จะได้ไปหักค่าความคลาดเคลื่อนนั้นออกจากค่าที่คำนวณได้ครั้งแรก
กระบวนการปรับแก้ดังกล่าวเป็นกระบวนการที่ทำซ้ำไปเรื่อย
ๆ จนกว่าจะพบว่าไม่สามารถปรับลดความคลาดเคลื่อนให้ต่ำลงไปได้อีกแล้ว
(เกินความสามารถของเครื่องคำนวณ)
และกระบวนการนี้ก็เป็นการทำให้การแก้ปัญหาระบบสมการ
A.x
= b
ของเราเพียงข้อเดียว
กลายเป็นการแก้ปัญหาระบบสมการ
A.x
= b
หลายครั้ง
โดยที่แต่ละครั้งนั้นมีค่าเวกเตอร์
b
ที่แตกต่างกัน
เพื่อให้เห็นภาพเรามาลองดูตัวอย่างโดยใช้ระบบสมการพีชคณิต
5
สมการ
5
ตัวแปรที่เคยยกมาก่อนหน้านี้
0.001x1
+ 200x2
+ x3
- 10x4
- 200x5
= 5 สมการที่
(1)
0.6x1
+ 5x2
+ 11.5x3
+ 4x4
+ 3x5
= -3 สมการที่
(2)
-11x1
+ 3x2
+ 0.8x3
+ x4
- 15.8x5
= 7 สมการที่
(3)
2x1
+ 2x2
+ 2x3
+ 0.000067x4
+ 7x5
= 6 สมการที่
(4)
-3x1
- x2
+ 2x3
+ 8x4
+ 1.3x5
= -11 สมการที่
(5)
จะทำการหาคำตอบของระบบสมการ
(ค่า
x1,
x2,
x3,
x4
และ
x5)
เปรียบเทียบกันระหว่างการใช้
Gauss
elimination โดยไม่มีการหาตัวหลัก
จากนั้นจะใช้เทคนิค Iterative
improvement เพื่อทำการปรับแก้คำตอบ
การคำนวณกระทำโดยใช้โปรแกรม
Spreadsheet
ของ
OpenOffice
3.3.0
รูปที่
๑ เป็นผลการคำนวณโดยไม่มีการหาตัวหลัก
เมื่อนำค่า x1,
x2,
x3,
x4
และ
x5
ที่คำนวณได้แทนค่ากลับเข้าไปในสมการที่
(1)-(5)
พบว่าค่า
b
นั้นมีความคลาดเคลื่อนอยู่
(ตัวเลขสีแดงที่มุมขวาล่างของรูป)
ดังนั้นจึงทำการแก้ระบบสมการ
L.U.dx
= db
เพื่อหาค่า dx
(ณ
ขณะนี้เราไม่จำเป็นต้องทำการแตกเมทริกซ์
A
ให้กลายเป็นผลคูณของเมทริกซ์
L
กับ
U
เพราะเราได้ทำไปแล้วในระหว่างการหาคำตอบ
x
ชุดแรก)
รูปที่
๒ แสดงขั้นตอนคำนวณเพื่อคำนวณหาค่า dx
ครั้งแรกเพื่อนำไปปรับคำตอบ
x
ที่ได้จากการคำนวณในครั้งแรก
และเมื่อได้ค่า x
ชุดใหม่แล้วก็ทำการทดสอบว่ายังมีความคลาดเคลื่อนอยู่หรือไม่
คือดูว่าค่า db
เป็นศูนย์หรือไม่
ซึ่งก็พบว่ายังมีความคลาดเคลื่อนอยู่
(ค่า
db
ยังไม่เป็นศูนย์)
รูปที่
๓ แสดงการทำ Iterative
improvement ซ้ำเป็นครั้งที่สอง
เพื่อหาว่าค่า x
ที่ได้มาจากการปรับแก้ครั้งแรกนั้นยังมีความคลาดเคลื่อนหลงเหลืออยู่เท่าใด
ซึ่งก็พบว่ามีค่าความคลาดเคลื่อนลดลง
(จาก
10-11-10-12
ลงเหลือ
10-16-10-17)
และเมื่อนำค่าคลาดคลาดเคลื่อนที่คำนวณได้ใหม่นี้ไปหักออกจากค่า
x
ที่ได้จากการปรับแก้ครั้งแรก
ก็จะได้ค่า x
ที่ผ่านการปรับแก้สองครั้ง
แต่เมื่อนำค่า x
ที่ได้จากการปรับแก้ครั้งที่สองนี้แทนค่ากลับเข้าไปใหม่กลับพบว่าค่าความคลาดเคลื่อน db
นั้นไม่ลดต่ำลง
ทั้งนี้เป็นเพราะค่า dx
ที่ได้จากการคำนวณครั้งที่สองมีขนาดประมาณ
10-16
เท่าของค่า
x
ที่ได้จากการปรับแก้ครั้งแรก
และการคำนวณนั้นกระทำที่นัยสำคัญ
16
ตำแหน่ง
ดังนั้นเมื่อนำค่า dx
ที่ได้จากการคำนวณครั้งที่สองไปหักออกจากค่า
x
ที่ได้จาก
การคำนวณครั้งแรก
ผลลัพธ์ที่ได้จึงเป็นค่า
x
ชุดเดิม
กล่าวอีกนัยหนึ่งคือเราไม่สามารถปรับคำตอบให้ถูกต้องได้มากกว่านี้อีกแล้วเนื่องด้วยข้อจำกัดของ
machine
precision ดังนั้นการคำนวณจะยุติลงเพียงแค่นี้
ไม่มีความคิดเห็น:
แสดงความคิดเห็น