Page 1
Ch.2 System of Linear Equations 02212471 Semester I - 2011
22
บทท่ี 2 ระบบสมการเชิงเสน [10nov2010 rev.1]
2.1 รูปแบบของระบบสมการเชิงเสน (System of Linear Equations) ในหัวขอน้ี เรากําลังพูดถึงระบบสมการ (System of Equations) ซึ่งบอกเปนนัยวา มีมากกวา 1 สมการ
และสิ่งที่ตามมาก็คือ มีตัวแปรไมทราบคา (Unknowns) มากกวา 1 ตัวเชนกัน ตัวอยางเชน เม่ือมี 2 unknowns อาจเปน (x,y) หรือ (x1,x2) เราก็ตองการ 2 สมการ เพื่อให (โดยทั่วไป) สามารถหาคา unknowns ดังกลาวได สมการเชิงเสนที่มีตัวแปร ไมทราบคา n ตัว จํานวน n สมการ เขียนไดดังนี้
a11x1 + a12x2 + … + a1nxn = b1 a21x1 + a22x2 + … + a2nxn = b2 M an1x1 + an2x2 + … + annxn = bn
หรือในเชิงสัญลักษณ ระบบสมการขางบนสามารถเขียนแทนสั้นๆ ไดดวย i
n
jjij bxa =∑
=1 for i=1,2,3,…, n (eqn. 2.1)
ในที่น้ี aij’s (known) เปนสมาชิกของเมตริกซจตุรัส A มีขนาด n x n สวน bi (known) และ xj (unknown) เปนเวกเตอรแบบคอลัมนที่มีขนาด n ถากําหนดให n = 3 ระบบสมการขางบน นํามาเขียนในรูปเมตริกซไดวา
⎪⎭
⎪⎬
⎫
⎪⎩
⎪⎨
⎧=
⎪⎭
⎪⎬
⎫
⎪⎩
⎪⎨
⎧
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
3
2
1
3
2
1
333231
232221
131211
bbb
xxx
aaaaaaaaa
(eqn. 2.2)
หรือ [A]{x} = {b}
หรือสั้นๆ Ax = b (eqn. 2.3)
ผลเฉลยหรือ solutions ของสมการเมตริกซ (eqn. 2.3) ไดกลาวถึงและอธิบายแลวในบทที่ 1 หัวขอ (1.7.5) เร่ืองการหารเมตริกซ เราไดวาผลเฉลย ดังสมการ (eqn. 1.2)
x = A-1b ซึ่งดูเรียบงาย แตในทางปฏิบัติ เวลาคํานวณคา A-1 (ดวยมือ) กระทําไดยาก โปรแกรม Matlab ไดอํานวยความสะดวกในการนี้ดวย “การหารซาย” หรือ left division โดยเปล่ียนการคูณ A-1 หนาเวกเตอร b, inv(A)*b เปน A\b
จํานวน n สมการ
Page 2
Ch.2 System of Linear Equations 02212471 Semester I - 2011
23
เม่ือไดผลเฉลย หรือคําตอบของระบบสมการเชิงเสนมาแลว คําถามที่ควรถาม ก็คือ มันหมายถึงอะไร? คําตอบอยางงาย ก็คือ จะยกตัวอยางในกรณี n = 2 ผลเฉลยที่ได คือ คา x1, x2 หรือ คา x, y หรือมองเปนคูลําดับ (x,y) ของจุดในระนาบ (2 มิติ) และจุดน้ันเปนจุดตัดของสมการเสนตรง 2 เสน ในกรณีท่ี n = 3 คําอธิบายเชิงกราฟก็ยังใชได ซึ่งในกรณีนี้เราก็จะไดกราฟเสนตรงในปริภูมิ (space, 3 มิติ) ตัดกันที่จุดเดียว แตในกรณีท่ี n > 3 จะเปนการยากที่จะอธิบายเชิงกราฟ คําอธิบายอีกแบบหนึ่ง เม่ือเราแทนผลเฉลยที่ไดในสมการทุกสมการในระบบ สมการก็จะเปนจริง ซึ่งโดยทั่วไป คําตอบของระบบสมการเชิงเสน แบงออกไดเปน 3 กรณี คือ
1. มีผลเฉลยเดียวและ unique (Unique Solution) กลาวคือแตละ x1,x2, …, xn มีคาเดียว หรือเปนไปไดแบบเดียว อธิบายไดดวยกราฟ คือ กราฟเสนตรงจะตัดกันที่จุดเดียว ดังรูปที่ 2.1
2. มีผลเฉลยมากมาย หรืออนันต (Infinite Solutions) คือ x1,x2, …, xn เปนไดหลายคา คําอธิบายก็คือ กราฟเสนตรงในระบบจะทับกันพอดี ดังรูปที่ 2.2
3. ไมมีผลเฉลย (No Solution) คือ ไมสามารถหาคา x1,x2, …, xn ได เพราะไมเกิดจุดตัดของกราฟ หรือ เสนกราฟในระบบขนานกัน นั่นเอง ดังแสดงในรูปที่ 2.3
รูปที่ 2.1 กรณี Unique solution - กราฟของระบบสมการ x1 + x2 = 2
x1 - x2 = 2
Page 3
Ch.2 System of Linear Equations 02212471 Semester I - 2011
24
รูปที่ 2.2 กรณี Infinite solutions - กราฟของระบบสมการ x1 + x2 = 2
-x1 - x2 = -2
รูปที่ 2.3 กรณี No solution - กราฟของระบบสมการ x1 + x2 = 2
x1 + x2 = 1
Page 4
Ch.2 System of Linear Equations 02212471 Semester I - 2011
25
2.2 การใช Matlab ในการหาผลเฉลยของระบบสมการเชิงเสน
ตัวอยางของระบบสมการเชิงเสน n = 4 r + s + t + w = 4 2r – s + w = 2 3r + s – t – w = 2 r – 2s - 3t + w = -3
ในที่น้ี [A] = ⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
−−−−
−
13211113
10121111
, {x} = ⎪⎪⎭
⎪⎪⎬
⎫
⎪⎪⎩
⎪⎪⎨
⎧
wtsr
และ {b} = ⎪⎪⎭
⎪⎪⎬
⎫
⎪⎪⎩
⎪⎪⎨
⎧
− 3224
เราตองการหาคา r, s, t และ w ซึ่งในที่น้ีก็คือ {x} จากสมการ (eqn. 1.2) เราสามารถหาคา {x} โดยการนําคา อินเวอรสของเมตริกซ A มาคูณเขาที่ขางหนาเวกเตอร {b} ก็จะไดผลลัพธตามตองการ เชน >> A=[1 1 1 1; 2 -1 0 1; 3 1 -1 -1; 1 -2 -3 1] A = 1 1 1 1 2 -1 0 1 3 1 -1 -1 1 -2 -3 1 >> b=[4; 2; 2; -3] b = 4 2 2 -3 >> inv(A)*b ans = 1.0000 1.0000 1.0000 1.0000
หรืออีกวิธีที่ Matlab อํานวยความสะดวกให โดยการใช การหารซาย หรือ left division, “ \ ” ก็จะไดผลลัพธเชนเดียวกัน คือ r = 1, s = 1, t = 1 และ w = 1 ดังตัวอยาง >> A\b ans = 1.0000 1.0000 1.0000 1.0000
Page 5
Ch.2 System of Linear Equations 02212471 Semester I - 2011
26
2.3 วิธีการกําจัดแบบเกาส (Gaussian Elimination method) การแกระบบสมการเชิงเสนดวยวิธี Gauss Elimination (ใหเรียกยอๆ วาวิธี GE) จะแบงออกเปน
2 ข้ันตอนใหญๆ ไดแก (ก) การกําจัดไปขางหนา (forward elimination) ในข้ันตอนน้ีเปาหมายก็คือ การเปลี่ยนสมาชิกของ [A]
ท่ีอยูใตแนวแทยงหลัก ทุกตัวใหเปนศูนย ระบบสมการเชิงเสน n = 3
⎪⎭
⎪⎬
⎫
⎪⎩
⎪⎨
⎧=
⎪⎭
⎪⎬
⎫
⎪⎩
⎪⎨
⎧
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
3
2
1
3
2
1
333231
232221
131211
bbb
xxx
aaaaaaaaa
เม่ือผานการกําจัดไปขางหนา จะไดเปน
⎪⎭
⎪⎬
⎫
⎪⎩
⎪⎨
⎧=
⎪⎭
⎪⎬
⎫
⎪⎩
⎪⎨
⎧
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
"3
'2
1
3
2
1
"33
'23
'22
131211
000
bbb
xxx
aaaaaa
(eqn. 2.4)
หมายเหตุ เราจะสังเกตเห็นวาคาสัมประสิทธ์ิ a’s และสมาชิก b’s บางตัวมีเคร่ืองหมาย prime (’) และ double prime (”) อยูที่ตําแหนง superscript หมายความวาคาเหลาน้ันไดมีการเปล่ียนแปลงไป 1 คร้ัง และ 2 คร้ัง ตามลําดับ กอนที่จะกลาวตอไป ขอใหคําจํากัดความของเมตริกซชนิดพิเศษอีก 1 ชนิด คือ triangular matrix ซึ่งแบงยอยออกเปน 2 แบบ คือ
- เมตริกซชนิดสามเหลี่ยมบน (Upper triangular matrix, U) จะมีสมาชิกที่อยูต่ํากวาแนวแทยงหลัก เปนศูนยทุกตัว
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
44
3433
242322
14131211
00000
0
aaaaaaaaaa
- เมตริกซชนิดสามเหลี่ยมลาง (Lower triangular matrix, L) จะมีสมาชิกที่อยูเหนือแนวแทยงหลัก เปนศูนยทุกตัว
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
44434241
333231
2221
11
000000
aaaaaaa
aaa
Page 6
Ch.2 System of Linear Equations 02212471 Semester I - 2011
27
(ข) การแทนคายอนกลับ (back substitution) เม่ือไดสมการ (eqn. 2.4) ซึ่งอยูในรูปเมตริกซ แลวทําการจัดใหอยูในรูปสมการปกติ เราไดวา
a11x1 + a12 x2 + a13 x3 = b1 a’22x2 + a’23x3 = b’2 (eqn. 2.5)
a”33x3 = b”3 จากสมการ (eqn. 2.5) เปนการงายท่ีจะคํานวณคา {x1, x2, x3} โดยเริ่มจากสมการสุดทายกอน แลวยอนข้ึนมา จะไดคาดังนี้
x3 = b”3 / a”33 x2 = (b’2 - a’23x3) / a’22 (eqn. 2.6) x1 = (b1 - a12 x2 - a13 x3) / a11
เพื่อใหเกิดความเขาใจในวิธีกําจัดแบบเกาส จะทําการศึกษาจากตัวอยางตอไปน้ี
ตัวอยาง 2.1 จงแกระบบสมการตอไปน้ี ดวยวิธีการกําจัดแบบเกาส x1 + 2x2 + x3 = 3 3x1 - x2 - 3x3 = -1 2x1 + 3x2 + x3 = 4
วิธีทํา ทําการ forward elimination มีข้ันตอนดังนี้ 1.
⎥⎥⎥
⎦
⎤−
⎢⎢⎢
⎣
⎡−−
41
3
132313
121
)0(~A
- สราง Augmented matrix, A~ โดยนํา {b} มาใสใน [A] ไดเปน [A | b]
2.
⎥⎥⎥
⎦
⎤−
⎢⎢⎢
⎣
⎡−−
41
3
132313
121
)1()0( ~~ AA →
- ทํา a11 ใหเปน 1, Row1 : 11)0(
1)1(
1 / aEE = เม่ือเปน 1 แลว นําไปกําจัด สมาชิกในคอลัมน 1 ท่ีเหลือ คือ ในแถว 2-3 โดย
3.
⎥⎥⎥
⎦
⎤
−−
⎢⎢⎢
⎣
⎡
−−−−
2103
110670
121
)2()1( ~~ AA →
Row1 : )1(1
)2(1 EE = , คงเดิม
Row2 : )1(121
)1(2
)2(2 EaEE −=
Row3 : )1(131
)1(3
)2(3 EaEE −=
4.
⎥⎥⎥
⎦
⎤
−⎢⎢⎢
⎣
⎡
−− 27/10
3
1107/610
121
)3()2( ~~ AA →
- ทํา a22 ใหเปน 1, โดย Row2 : 22
)2(2
)3(2 / aEE =
แลวนําไปกําจัดสมาชิกในคอลัมน 1 ท่ีเหลือ
Page 7
Ch.2 System of Linear Equations 02212471 Semester I - 2011
28
5.
⎥⎥⎥
⎦
⎤
−⎢⎢⎢
⎣
⎡
− 7/47/10
3
7/1007/610
121
)4()3( ~~ AA →
Row1 : )3(1
)4(1 EE = , คงเดิม
Row2 : )3(2
)4(2 EE = , คงเดิม
Row3 : )3(232
)3(3
)4(3 EaEE −=
หลังจากที่ไดเมตริกซสามเหล่ียมบนแลว เราก็สามารถหา xi แตละตัวไดดวยการแทนคายอนกลับ (back substitution) จากสมการ (eqn. 2.6) ไดดังน้ี
x3 = b”3 / a”33 = 7/17/4
−− = 4
x2 = (b’2 - a’23x3) / a’22 = 1
)4)(7/6(7/10 − = -2
x1 = (b1 - a12 x2 - a13 x3) / a11 = 1
)4)(1()2)(2(3 −−− = 3
Ans. ขอสังเกต (1) คําตอบที่ไดจากกระบวนการ back substitution จะได xn ออกมากอนแลวคอยๆ ยอนไปขางหนา …, x2, x1 ฉะน้ันตองระวังเร่ืองลําดับของคําตอบ เวลาจะตอบในรูปฟอรมมาตรฐาน x1 = … x2 = … M xn = … (2) ในข้ันตอนที่ 2 และ 4 ของกระบวนการ forward elimination เปนการทําใหสปส. aii มีคาเปน 1 โดยการหารดวยตัว aii เอง แลวจึงนําไปกําจัดสมาชิกตัวท่ีอยูใตมันดวยวิธีพีชคณิต (บวก-ลบ) ในข้ันตอนถัดมา การทําใหเปน 1 เพื่อใหดูงายเวลากระทําการคํานวณดวยมือ แตเวลานําไปเขียนเปนโปรแกรมคอมพิวเตอร เราสามารถรวมขั้นตอนการทําใหเปน 1 ในข้ันตอนการกําจัดไดเลย เชน
ข้ันตอนที่ 3 Row2 : )1(1
11
21)1(2
)2(2 E
aaEE −=
Row3 : )1(1
11
31)1(3
)2(3 E
aaEE −= , และ
ข้ันตอนที่ 5 Row3 : )3(2
22
32)3(3
)4(3 E
aaEE −=
การรวบข้ันตอนลักษณะนี้ จะใชไดในกรณีที่ระบบสมการมีขนาดใหญกวาน้ีดวย (กรณี n > 3 หรือ n ท่ีเปนจํานวนเต็มใดๆ) ประโยชนก็คือจะทําให code ท่ีเขียนข้ึนกระชับ ดูงายเปนระบบ (แตอาจจะเขาใจยาก เวลาอานทําความเขาใจ algorithm)
Page 8
Ch.2 System of Linear Equations 02212471 Semester I - 2011
29
2.3.1 ปญหาที่อาจจะเกิดจากวิธีการกําจัดแบบเกาส กรณีที่ 1 – ปญหาจากการหารดวยศูนย (หรืออาจใชช่ือหัวขอวา Pivoting in GE) ในวิธิเกาสนี้ หากเกิดกรณีท่ีสปส.ตัวแรกที่ใชในการกําจัดแถวอ่ืนๆ เปนศูนย เชน ในข้ันตอนที่ 2 และ 4 ใน forward elimination โปรแกรมก็ไมสามารถ run ได จึงตองทําการสลับเอาแถวอื่นที่สปส.ไมเปนศูนยข้ึนมากําจัดแทน เราเรียกการสลับแถว (อยางเดียว) วา “Partial Pivoting” ซึ่งวิธีการนี้จะไมมีผลตอลําดับของผลเฉลยที่ได (x1, x2, x3, …) มีบางกรณีที่อาจตองทําการสลับคอลัมน (column switching) ดวย ซึ่งถามีการสลับทั้งแถวและคอลัมนจะเรียก “Full Pivoting” ซึ่งจะซับซอนกวาการสลับแถวเพียงอยางเดียว เพราะหากสลับคอลัมน ลําดับของผลเฉลยก็จะเปลี่ยนไป เชน (x1, x3, x2) เวลาเขียนโปรแกรม ก็จะตองมีการสลับคา b’s ตามไปดวย และตองบันทึกประวัติการสลับคอลัมน เพื่อจะไดทราบลําดับที่ถูกตองของผลเฉลยที่ไดออกมา จะเห็นไดวาเปนข้ันตอนที่ยุงยากมาก ฉะน้ันการสลับคอลัมนจึงไมนิยมในวิธีเกาส
ตัวอยาง 2.2 จงแกระบบสมการตอไปน้ี ดวยวิธีการกําจัดแบบเกาส 2x2 + 3x3 = -1 4x1 + 5x2 + 6x3 = 8 7x1 + 8x2 + 9x3 = 14
กรณีที่ 2 – ปญหาจากการปดเศษ (หรืออาจใชช่ือหัวขอวา Scaling in GE) ในกรณีท่ีสปส.ในแถวมีความแตกตางกันมาก มีขอแนะนําวาใหทําการปรับคาของสปส.ตัวท่ีใหญท่ีสุดใหเปน 1 โดยการหารตลอดดวยคาใหญสุดนั้นทั้งแถว คาสปส.ตัวอื่นที่มีคานอยก็อาจมีคาเขาใกลศูนย โดยเฉพาะถาเปนตัวแรกของแถวที่ใชกําจัด ก็จะทําใหเขากรณีท่ี 1 เราก็จะใช Partial Pivoting รวมดวย กรณีที่ 3 – ปญหาที่สปส.ใน [A] ของระบบสมการมีสภาวะไมเหมาะสม (Ill-conditioned [A]) ในการที่จะอธิบายสภาวะ (ขอเรียกสั้นๆ วา) “Ill-conditioned” นี้ จะตองยอนไปที่วิธีการหาผลเฉลยของระบบสมการดวย Cramer’s Rule ซึ่งเหมาะสําหรับระบบสมการเล็กๆ (คือ n นอยๆ)
Cramer’s Rule เราสามารถเขียนผลเฉลย xi ของระบบสมการเชิงเสน [A]{x}={b} ดวยอัตราสวนของ determinants 2 ตัว โดยที่ determinant ของ ตัวเศษ (nominator) จะแทนคอลัมน i ใน [A] ดวย {b} และตัวสวน (denominator) คือ det[A] หรือ |A| ฉะน้ัน ในระบบสมการ n = 3
Page 9
Ch.2 System of Linear Equations 02212471 Semester I - 2011
30
x1 =
333231
232221
121211
33323
23222
12121
aaaaaaaaaaabaabaab
= A...
x2 = A
abaabaaba
33331
23221
12111
M จะสังเกตวาถา det[A] มีคาเขาใกลศูนย ( ≅ 0) หรือนอยมากๆ จะทําให xi =
A... ≅ ∞
หรือมีคามากๆ และจะเปนผลเฉลยที่ไมถูกตอง เราเรียกกรณีที่ det[A] ≅ 0 วา “Ill-conditioned” ซึ่งจะเกิดข้ึนในกรณีท่ีมี 2 สมการ (หรือมากกวา) มีความชันใกลเคียงกันมากๆ ทําใหเสมือนมีจุดตัด (solutions ของระบบสมการ) หลายจุด และในกรณีที่ det[A] = 0 เราเรียกระบบสมการนี้วาเปน Singular และจะหา solutions ไมได ในกรณีท่ี det[A] มีคานอยๆ แตไมเปนศูนย ระบบจะมี ill-conditioned ถาในระบบที่มี ill-conditioned ไมมาก บางกรณีจะสามารถแกไขดวยวิธี scaling ได
ตัวอยาง 2.3 จงแกระบบสมการตอไปน้ี ดวยวิธีการกําจัดแบบเกาส
⎭⎬⎫
⎩⎨⎧
=⎭⎬⎫
⎩⎨⎧
⎥⎦
⎤⎢⎣
⎡2000,100
11000,1002
2
1
xx
Page 10
Ch.2 System of Linear Equations 02212471 Semester I - 2011
31
2.4 วิธีเกาส-จอรแดน (Gauss-Jordan method) วิธีเกาส-จอรแดน หนังสือบางเลมใช วิธีเกาส-ชอรดอง (ใหเรียกยอๆ วาวิธี GJ) เปนวิธีที่ปรับปรุง
เพิ่มเติมมาจากวิธี Gauss Elimination กลาวคือ เม่ือเราไดเมตริกซสามเหลี่ยมบน, U จากกระบวนการ forward elimination แลว เราจะดําเนินการกําจัดตอไปจนกระทั่ง เมตริกซ A กลายเปน Identity matrix ซึ่งเราจะไดวา
⎪⎭
⎪⎬
⎫
⎪⎩
⎪⎨
⎧
=⎪⎭
⎪⎬
⎫
⎪⎩
⎪⎨
⎧
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
*3
*2
*1
3
2
1
100010001
bbb
xxx
(eqn. 2.7)
จากสมการ (eqn. 2.7) เราจะทราบผลเฉลยไดทันที ซึ่งก็คือเวกเตอร b ท่ีไดน่ันเอง x1 = *
1b x2 = *
2b , และ x3 = *
3b
ตัวอยาง 2.4 จงแกระบบสมการในตัวอยาง 2.1 ดวยวิธีเกาส-จอรแดน
วิธีทํา เราเร่ิมตนดวยผลลัพธจากการทํา forward elimination ท่ีข้ันตอนที่ 5 ของตัวอยาง 2.1 ดังน้ี
⎥⎥⎥
⎦
⎤
−⎢⎢⎢
⎣
⎡
− 7/47/10
3
7/1007/610
121
)4(~A
- ผลลัพธจากการทํา forward elimination
1.
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
47/10
3
1007/610
121
)5()4( ~~ AA →
- ทํา a33 ใหเปน 1, Row3 : 33)4(
3)5(
3 / aEE = แลวนําไปกําจัดสมาชิกในคอลัมนเดียวกันกับ a33 ที่อยูเหนือข้ึนไป คือแถวที่ 2 และ 1
2.
⎥⎥⎥
⎦
⎤−−
⎢⎢⎢
⎣
⎡
421
100010021
)6()5( ~~ AA →
Row3 : )5(3
)6(3 EE = , คงเดิม
Row2 : )5(323
)5(2
)6(2 EaEE −=
Row1 : )5(313
)5(1
)6(1 EaEE −=
3.
⎥⎥⎥
⎦
⎤−
⎢⎢⎢
⎣
⎡
42
3
100010001
)7()6( ~~ AA → Row3 : )6(
3)7(
3 EE = , คงเดิม Row2 : )6(
2)7(
2 EE = , คงเดิม Row1 : )6(
212)6(
1)7(
1 EaEE −= ฉะนั้นเราไดผลเฉลยของระบบสมการตรงกันกับในตัวอยาง 2.1 ดังน้ี
x1 = 3 x2 = -2, และ x3 = 4 Ans.
Page 11
Ch.2 System of Linear Equations 02212471 Semester I - 2011
32
2.5 วิธี LU Decomposition วิธี LU Decomposition เปนวิธีการหาผลเฉลยของระบบสมการเชิงเสนอีกวิธีหน่ึง ที่มีหลักคิดท่ีแตกตาง
จากวิธีการกําจัดแบบเกาส และวิธีเกาส-จอรแดน แตกลไกการหาผลเฉลยมีสวนคลายคลึงกัน (เราตกลงกันใหเรียกยอๆ วาวิธี LU) ในวิธีน้ีเมตริกซ [A] จะถูก decompose หรือแยกออกเปนเมตริกซ 2 ตัว คือ [L] กับ [U] ซึ่งก็ คือเมตริกซชนิดสามเหล่ียมลางและสามเหล่ียมบน (ตามลําดับ) และเปนที่มาของชื่อวิธี มีข้ันตอนการทําดังนี้ เราเร่ิมตนดวยระบบสมการเชิงเสนในรูปฟอรมเมตริกซ
[A]{x} = {b} (eqn. 2.8) decompose [ ] [ ]LA → [ ]U แทนคา [A] ใน (eqn. 2.8), [L] [U]{x} = {b} (eqn. 2.9) กําหนดให [U]{x} = {y} (eqn. 2.10) สมการ (eqn. 2.10) กลายเปน [L]{y} = {b} (eqn. 2.11) เราไดเรียนรูเก่ียวกับเมตริกซชนิดสามเหล่ียม 2 ชนิด แลววา
[L] = ⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
333231
2221
11
000
lllll
l
[U] = ⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
33
2322
131211
000
uuuuuu
นอกจากนี้ เม่ือพิจารณาลักษณะพิเศษของสมาชิกของ [L] และ [U] วิธี LU ยังสามารถแบงยอยออกเปน 3 วิธี ดังตอไปน้ี ถา lii = 1 เรียกวา Doolittle’s method uii = 1 เรียกวา Crout’s method lii = uii เรียกวา Choleski’s method
เปาหมายของเราคือตองการหาผลเฉลย xi = … แตกอนจะทราบ {x} จากสมการ (eqn. 2.10) เราตองทราบ {y} เสียกอน ซึ่งในที่น้ี {y} จะหาไดจากสมการ (eqn. 2.11)
[L]{y} = {b} เขียนสมการ (eqn. 2.11) ในรูปแบบเมตริกซ
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
333231
2221
11
000
lllll
l
⎪⎭
⎪⎬
⎫
⎪⎩
⎪⎨
⎧
=⎪⎭
⎪⎬
⎫
⎪⎩
⎪⎨
⎧
3
2
1
3
2
1
bbb
yyy
(eqn. 2.12)
Page 12
Ch.2 System of Linear Equations 02212471 Semester I - 2011
33
- เราสามารถหาคา {y} จากสมการ (eqn. 2.12) ดวยวิธีแทนคาไปขางหนา (forward substitution) y1 = b1 / l11 y2 = (b2 - l21y1) / l22 (eqn. 2.13) y3 = (b3 - l31 y1 - l32 y2) / l33
เม่ือไดคา {y} แลว นําไปแทนในสมการ (eqn. 2.10) เพื่อหาผลเฉลย {x} จะไดวา
[U]{x} = {y} เขียนในรูปแบบเมตริกซ
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
33
2322
131211
000
uuuuuu
⎪⎭
⎪⎬
⎫
⎪⎩
⎪⎨
⎧
=⎪⎭
⎪⎬
⎫
⎪⎩
⎪⎨
⎧
3
2
1
3
2
1
yyy
xxx
(eqn. 2.14)
- ถึงตอนน้ี เราสามารถหาคา {x} จากสมการ (eqn. 2.14) ดวยวิธีแทนคายอนกลับ (backward substitution) x3 = y3 / u33 x2 = (y2 - u23x3) / u22 (eqn. 2.15) x1 = (y1 - u12 x2 - u13 x3) / u11
ขอสรุปของวิธี LU ในเบื้องตนนี้ เราพบวาเม่ือเราไดดําเนินการ 3 ข้ันตอนหลัก ดังตอไปนี้ เราก็จะไดผลเฉลยของระบบสมการเชิงเสน ข้ันตอนที่ 1 - แยก [ ] [ ]LA → [ ]U
ข้ันตอนที่ 2 - ทําการ forward substitution ในสมการ (eqn. 2.12) จะได {y} ข้ันตอนที่ 3 - ทําการ backward substitution ในสมการ (eqn. 2.14) จะได ผลเฉลย {x} หลักการทั่วไปในการแยก (decompose) เมตริกซ [A] เปน [L] กับ [U] วิธีการโดยทั่วไปในการแยกเมตริกซ [A] เปน [L][U] อาศัยความสัมพันธท่ีวา [L][U] = [A] เขียนในรูปฟอรมเมตริกซ ไดวา
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
333231
2221
11
000
lllll
l
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
33
2322
131211
000
uuuuuu
= ⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
333231
232221
131211
aaaaaaaaa
เปาหมายของเรา คือ ตองการหาสมาชิกใน [L] และ [U] ซึ่งก็คือ lij และ uij กระทําโดยการคูณเมตริกซทางดานซาย (LHS) ของสมการและใหเทากับเมตริกซ [A] ซึ่งอยูทางดานขวา (RHS) ตัวอยางเชน
Page 13
Ch.2 System of Linear Equations 02212471 Semester I - 2011
34
[1] เพื่อท่ีจะได a11 เราคูณ Row1 ของ [L] กับ Col.1 ของ [U] จะไดวา l11 u11 = a11 เม่ือพิจารณาสมการขางบน จะพบวา เราจะไดคา l11 หรือ u11 ตัวใดตัวหน่ึง เม่ือเราทราบคาของอีกตัว (พิจารณาสมาชิกที่ลอมรอบดวยวงกลมและวงรี)
[2] เพื่อท่ีจะได a21 เราคูณ Row2 ของ [L] กับ Col.1 ของ [U] จะไดวา l21 u11 = a21 จะพบวาสภาวะคลายๆ กับกรณีแรก คือจะไดคา l21 หรือ u11 ตัวใดตัวหน่ึง เม่ือเราทราบคาของอีกตัว (พิจารณาสมาชิกที่ลอมรอบดวยเสนทึบ) M (ขอขามนิดหนอย)
[3] เพื่อท่ีจะได a22 เราคูณ Row2 ของ [L] กับ Col.2 ของ [U] จะไดวา l21 u12 + l22 u22 = a22 ในข้ันนี้เราตองทําการแทนคา ตัวที่ทราบคาแลวจากข้ันตอนที่ผานๆ มา เราก็จะทราบคาของ unknown เพิ่มข้ึน M (ตอไปเรื่อยๆ) ทําการ match ผลคูณทาง LHS กับสปส. aij ทาง RHS ไปเรื่อยๆ ก็จะทราบคาสมาชิกของ [L] และ [U] ครบทุกตัว
ขอสังเกต เม่ือพิจารณาลักษณะพิเศษยอยๆ ของวิธี LU เชน วิธีของ Crout (uii = 1) ประกอบกับสมการในข้ันตอน [1], [2] และ [3] เราก็จะไดคา l11 , l21 และ l22 ทันที
กลไกการทํางานของวิธี LU ก็คือ เราจะเสียเวลาในการแยก [A] เปน [L] [U] คร้ังเดียว ซึ่งเหมาะสมกับระบบสมการเชิงเสนที่ LHS เปนตัวแทนหรืออธิบายระบบที่เราสนใจ เชน ในระบบโครงสรางแบบคาน ก็จะมีเมตริกซของคา k ในทางโครงสรางเรียก stiffness matrix อยูทาง LHS ซึ่งก็คือ [A] น่ันเอง สวน {x} ท่ีไมทราบคา (unknowns) ก็จะเปนคาความเคนที่ตําแหนงตางๆ ของคานที่เราสนใจวาคาความเคนที่เราคํานวณได จะเกินขีดจํากัดความปลอดภัยหรือไม หรือเปนคาที่ยอมรับไดตามมาตรฐานหรือไม และเวกเตอร {b} ซึ่งอยูทาง RHS จะเปน load ที่มากระทํากับโครงสรางที่เราออกแบบ เราสนใจที่จะทราบการตอบสนองของโครงสรางที่เราออกแบบกับ load หลายๆ ชนิด ซึ่งก็คือการเปล่ียนแปลงคาใน {b} เม่ือสภาวะของ load เปล่ียนไป ฉะนั้นในวิธี LU นี้ เม่ือได[L] [U] แลว เวลาตองการทราบผลเฉลย {x} ก็เพียงแต run ข้ันตอนการ forward substitution เพื่อหา {y} และ backward substitution เพื่อหาผลเฉลย {x} เทานั้น ซึ่งจะสิ้นเปลืองเวลาไมมาก เม่ือเทียบกับข้ันตอนการแยก [L] [U] ซึ่งจะสงผลใหชวยทุนเวลาในการวิเคราะหระบบขนาดใหญ ที่มีจํานวนสมการมากๆ เม่ือเราเปรียบเทียบวิธี LU กับวิธีการกําจัดแบบเกาส จะพบวา มีจํานวน operations หรือจํานวนครั้งในการบวก ลบ คูณ หาร ใกลเคียงกัน แตวิธี LU จะตองการหนวยความจํามากกวา เพราะทั้ง [L] และ [U] ก็ตางตอง
Page 14
Ch.2 System of Linear Equations 02212471 Semester I - 2011
35
ใชหนวยความจํา ซึ่งมีขนาดเทากับเมตริกซ [A] ในปจจุบันไดมีการปรับปรุงการจัดเก็บ [L] และ [U] เขาไปใน [A] เพื่อเปนการลดการใชหนวยความจํา เวลาทําการวิเคราะหปญหาทางวิศวกรรมขนาดใหญจึงมีประสิทธิภาพมากข้ึน ซึ่งจะเห็นเทคนิคน้ี (แบบหน่ึง) ในวิธี LU แบบ Doolittle
2.5.1 วิธี LU Decompostion – Doolittle’s method เราเร่ิมตนจากสมการ [A] = [L][U] โดยมีขอกําหนดเพิ่มเติมคือ lii = 1 หรือเขียนในรูปฟอรมเมตริกซ ไดดังน้ี
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
44434241
34333231
24232221
14131211
aaaaaaaaaaaaaaaa
= ⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
1010010001
434241
3231
21
lllll
l ⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
44
3433
242322
14131211
00000
0
uuuuuuuuuu
เม่ือพิจารณาสมการขางบน และความรูท่ีไดจากหลักการทั่วไปในการแยก [L] [U] แลว พบวา เม่ือเราทราบคา lii = 1 ถาเราใช Row1 ของ [L] คูณ Col.1, Col.2, Col.3, … ไปเรื่อยๆ เราก็จะทราบคา u1i ในแถวที่ 1 ท้ังหมด น่ีคือข้ันตอนใน Step I ตอมา เม่ือเราทราบ u11 แลว เรานํา Col.1 ของ [U] ไปคูณกับ Row2, Row3, Row 4, … เอาไป match กับ a21, a31, a41, … เราก็จะได li1 ในคอลัมนท่ี 1 ท้ังหมด น่ีคือข้ันตอนใน Step II เม่ือเราทราบ l21 แลว Row2 ของ [L] ซึ่งมีอยู 2 เทอมที่ไมเปนศูนย คือ l21 1 ... ก็จะทราบคาทั้งหมด เราจึงสามารถนํา Row2 ของ [L] ไปคูณกับ Col.2, Col.3, Col 4, … ก็จะทําใหทราบคา u2i ในแถวที่ 2 ท้ังหมด น่ีคือข้ันตอนใน Step III M เราจะทําอยางนี้ สลับไปมาระหวางแถว กับคอลัมนท่ีเหลือ ก็จะไดสมาชิกของ [L] และ [U] ทั้งหมด เราพอจะสรุป Pattern การ decompose เมตริกซ [A] ไดดังนี้
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
44434241
34333231
24232221
14131211
aaaaaaaaaaaaaaaa
เม่ือเสร็จสิ้นกระบวนการ decomposition เราก็จะไดสมาชิกของเมตริกซ [L] กับ [U] ซึง่เราสามารถนํามาเก็บในเมตริกซ [A]โดยทําการ overwrite หรือเขียนทับเมตริกซ [A] เพราะไมตองการใชพ้ืนที่ใน memory เพิ่ม สามารถอธิบายดวย diagram ไดดังน้ี
Step I
Step II
I
IIIV
II IV
decompose
Page 15
Ch.2 System of Linear Equations 02212471 Semester I - 2011
36
ขอสังเกต ใน [L\U] (ซึ่งจะเรียกวา Composite matrix) คา uii ท่ีได จะเขียนทับ lii เพราะเราทราบอยูแลววา lii=1 จึงไมจําเปนตองเก็บไวอีก
วิธีการคํานวณหาสมาชิก [L\U] ของวิธี Doolittle Step I – ตอยอดจากคําอธิบาย Step I ท่ีผานมา เราไดวา
u11 = a11
u12 = a12
u13 = a13
u14 = a14
หรือโดยทั่วไป เขียนในรูปสัญลักษณ และ index ไดวา u1j = a1j , j = 1,2,3, …, n (eqn. 2.16)
Step II – ดวยวิธีเปรียบเทียบผลคูณ จะไดวา a21 = l21u11
M
l21 = a21 / u11 l31 = a31 / u11 l41 = a41 / u11
หรือโดยทั่วไป เขียนในรูปสัญลักษณ และ index ไดวา li1 = ai1 / u11 , i = 2,3, …, n (eqn. 2.17)
Step III – จะกระทําที่ Row2 ของ [A] ในสมาชิกที่ยังไมถูกเปลี่ยน ดวยวิธีเปรียบเทียบผลคูณ จะไดวา a22 = l21u12 + u22
M
u22 = a22 - l21 u12 u23 = a23 - l21 u13 u24 = a24 - l21 u14
หรือโดยทั่วไป เขียนในรูปสัญลักษณ และ index ไดวา u2j = a2j - l21 u1j , j = 2,3, …, n (eqn. 2.18)
แทนคา u1j = a1j จาก Step I l21 = a21 / u11 จาก Step II, โดยที่ i = 2 ลงในสมการ (eqn. 2.18) จะไดวา u2j = a2j -
11
21
aa a1j
ULA
Page 16
Ch.2 System of Linear Equations 02212471 Semester I - 2011
37
หรือ a2j(2) = a2j
(1) - )1(11
)1(21
aa a1j
(1)
ซึ่งเทียบเคียงไดกับ )1(
111
21)1(2
)2(2 E
aaEE −= , ใน Gaussian Elimination
ฉะนั้น u2j = ผลของการกําจัดในวิธี GE ข้ันตอนที่ 2 ตําแหนงตอตําแหนง
Step IV – ดวยวิธีเปรียบเทียบผลคูณ จะไดวา a32 = l31u12 + l32u22
M l32 = (a32 - l31u12) / u22
l42 = (a42 – l41u12) / u22
หรือโดยทั่วไป เขียนในรูปสัญลักษณ และ index ไดวา li2 = (ai2 – li1u12) / u22 , i = 3, 4, …, n
ในวิธี GE คือ = (ai2(1) - )1(
11
)1(1
aai a12
(1)) / a22(2)
= ai2(2) / a22
(2) ฉะนั้น li2 = สปส.การกําจัดในข้ันตอนที่ 3 ของ GE M ทําเชนน้ีไปเร่ือยๆ จนหาสมาชิกของ [L] และ [U] ไดครบทุกตัว ซึ่งจากการสังเกต เราจะไดขอสรุปของวิธี LU แบบ Doolittle ดังนี้
[U] ไดมาจากผลของการกําจัดดวยวิธี Gaussian Elimination [L] มี lii=1 สวน lij ที่ไมเปนศูนย จะเทากับ สปส.การกําจัด (Eliminating Coefficient) ของวิธี GE
เม่ือได [L] และ [U] แลว ก็จะทําอีก 2 ข้ันตอน เพื่อหาผลเฉลยของระบบสมการ คือ [1] ทํา Forward substitution เพื่อหา yi จากสมการ
[L]{y} = {b}
[2] ทํา Backward substitution เพื่อหา xi จากสมการ [U]{x} = {y}
**
Page 17
Ch.2 System of Linear Equations 02212471 Semester I - 2011
38
ตัวอยาง 2.5 จงแกระบบสมการตอไปน้ี ดวยวิธี LU แบบ Doolittle
⎪⎭
⎪⎬
⎫
⎪⎩
⎪⎨
⎧=
⎪⎭
⎪⎬
⎫
⎪⎩
⎪⎨
⎧
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
472
111312613
3
2
1
xxx
Page 18
Ch.2 System of Linear Equations 02212471 Semester I - 2011
39
2.5.2 วิธี LU Decompostion – Crout’s method เราเร่ิมตนจากสมการ [A] = [L][U] โดยมีขอกําหนดเพิ่มเติมคือ uii = 1 เรามีประสบการณบางแลว จากวิธี Doolittle คือ เม่ือเราทราบ uii = 1 เราก็จะสามารถหา l11 , l12 , l13 , … ไดกอน จึงนําไปสู Schematic หรือ Pattern ของการ decompose เมตริกซ [A] ของวิธี Crout ดังน้ี
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
44434241
34333231
24232221
14131211
aaaaaaaaaaaaaaaa
เราไดเห็นกระบวนการ derive สูตรทั่วไปที่ใชหาสมาชิกของ [L] และ [U] ในหัวขอ 2.5.1 มาแลว ในที่น้ีจึงขอละข้ันตอนแสดงที่มา และสรุปข้ันตอนและสูตรของวิธี Crout ดังน้ี
เร่ิมตนจาก กําหนดให cij เปนสมาชิกของ decomposed matrix ของ [A] สําหรับวิธี Crout method
สูตรของวิธี LU แบบ Crout มีดังน้ี
1. ci1 = li1 = ai1 for i = 1,2,3,…, n 2. c1j = u1j = a1j / c11 for j = 1,2,3,…, n 3. for j = 1,2,3,…, n
cij = lij = aij - ∑−
=
1
1
j
kkjikul
และ cjk = ujk = ajk - ∑
−
=
1
1
j
iikjiul
for i = j,j+1,j+2,…, n
for k = j+1,j+2,j+3,…, n
4. cnn = lnn= ann - ∑−
=
1
1
n
kknnkul
เม่ือได [C] = [L\U] แลว ตองกระทําอีก 2 ข้ันตอน จึงจะไดผลเฉลย {x} ดังนี้ - ทํา Forward substitution (เพื่อใหได yi) y1 = b1 / l11 = b1 / c11
IIIVVI
I III V
ULA
decompose
C =
Page 19
Ch.2 System of Linear Equations 02212471 Semester I - 2011
40
yi = (bi - ∑−
=
1
1
i
jjijbl ) / lii =
ii
i
jjiji
c
bcb ∑−
=
−1
1 , for i = 2,3,4,…,n
- ทํา Backward substitution (เพื่อใหได xi หรือผลเฉลยน่ันเอง) xn = yn xi = yi - ∑
+=
n
ijjij xu
1
หรือ xi = yi - ∑+=
n
ijjij xc
1 , for i = n-1,n-2,n-3,…,1
ตัวอยาง 2.6 จงแกระบบสมการตอไปน้ี ดวยวิธี LU แบบ Crout
⎪⎭
⎪⎬
⎫
⎪⎩
⎪⎨
⎧−=
⎪⎭
⎪⎬
⎫
⎪⎩
⎪⎨
⎧
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
−−−
−
168
12
243131
152
3
2
1
xxx
2.5.3 วิธี LU Decompostion – Cholesky’s method สําหรับวิธี Cholesky นี้มี requirement หรือขอกําหนดเบื้องตนวา [A] จะตองเปนเมตริกซสมมาตร (Symmetric matrix) และเมื่อทําการแยก [A] → [L][U] แลวจะพบวา [L][U] = [L][L]T ซึ่งในกรณีก็จะทําให ขอกําหนดที่วา lii = uii เปนจริง เราเขียนแสดงการแยก [A] ในรูปเมตริกซฟอรม ไดดังนี้
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
333231
232221
131211
aaaaaaaaa
= ⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
333231
2221
11
000
lllll
l
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
33
2322
131211
000
uuuuuu
= ⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
333231
2221
11
000
lllll
l
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
33
3222
312111
000
llllll
เม่ือทําการคูณเมตริกซของ RHS และนํามา match กับสมาชิก aij ท่ี LHS จะไดดังน้ี (l11)2 = a11
l11l21 = a12 l11l31 = a13
l11 = √(a11)
l21 = a12 / l11 = a12 / √(a11) l31 = a13 / l11
(l21)2 + (l22)2 = a22 l21l31 + l22l31 = a23
l22 = √[a22 - (l21)2]
l32 = ( a23 - l21 l31) / l22
(l31)2 + (l32)2 + (l33)2 = a33 l33 = √[a33 - (l31)2 - (l32)2]
Page 20
Ch.2 System of Linear Equations 02212471 Semester I - 2011
41
เราสรุปความสัมพันธ ในรูปทั่วไปไดดังน้ี [1] สําหรับสมาชิกของ [L] ท่ีแนวแทยงหลัก (diagonal components)
∑−
=
−=1
1
2)(k
jkjkkkk lal (eqn. 2.19)
[2] สําหรับสมาชิกของ [L] ท่ีเหลือ
ii
i
jkjijki
ki l
llal
∑−
=
−=
1
1 , for i=1,2,…,k-1 (eqn. 2.20)
ตัวอยาง 2.7 จงแกระบบสมการตอไปน้ี ดวยวิธี LU แบบ Cholesky
⎪⎭
⎪⎬
⎫
⎪⎩
⎪⎨
⎧=
⎪⎭
⎪⎬
⎫
⎪⎩
⎪⎨
⎧
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
???
97925555255551555156
3
2
1
xxx
วิธีการหาผลเฉลยตางๆ ท่ีไดศึกษาผานมาในบทนี้ ไมวาจะเปนวิธี การกําจัดแบบเกาส (GE) วิธีเกาส-จอรแดน (GJ) และวิธีแยกแบบแอลยู (LU) รวมท้ังวิธี Cramer’s Rule ดวย ตางก็เปนวิธีตรง หรือ Direct method ซึ่งจะมีจํานวน operations เปนคาที่จํากัด กลาวคือ เม่ือไดกระทํา operations เหลานั้นครบแลว เราก็จะไดผลเฉลยของระบบสมการ หรืออาจจะไมไดผลเฉลย ซึ่งก็ข้ึนอยูกับสภาวะของระบบสมการ เชน ในกรณีที่เมตริกซ [A] เปน Singular matrix ก็จะไมไดผลเฉลย นอกจากวิธีหาผลเฉลยทางตรง (Direct method) ก็จะมีอีกวิธีในการหาผลเฉลยของระบบสมการเชิงเสน คือ วิธีกระทําซ้ํา หรือ Iterative method ซึ่งจะเปนการเดาคําตอบหรือผลเฉลยเบื้องตน (initial solutions) นําไปแทนในระบบสมการ แลวคํานวณผลเฉลยใหม จะกระทําซ้ําไปเรื่อยๆ จนคาวิ่งเขาหาผลเฉลยจริง และมีคา error อยูในเกณฑท่ียอมรับได ก็จะเสร็จสิ้นกระบวนการหาผลเฉลยดวยวิธีกระทําซ้ํา ซึ่งจะขอพักเอาไวกอน และจะกลาวถึงอีกคร้ังในบทตอๆ ไป 2.6 การใชฟงกชั่นภายในของ Matlab ในวิธี LU Decomposition
Matlab ไดประดิษฐคําสั่งสําหรับชวยแกระบบสมการเชิงเสน ดวยวิธี LU Decomposition ไว ซึ่งจะแบงออกเปนหัวขอยอยๆ ดังน้ี
Page 21
Ch.2 System of Linear Equations 02212471 Semester I - 2011
42
2.6.1 การแยกเมตริกซแบบ LU โปรแกรม Matlab มีคําสั่งสําหรับชวยสรางเมตริกซ [L] และ [U] ไดโดยตรง น่ันคือคําสั่ง lu(…) ซึ่งรูปแบบการใชคําสั่ง เปนดังนี้ >> [L,U]= lu(A)
ใหทดลองใชกับ ตัวอยาง 2.5 จะไดวา >> A=[3 1 6;2 1 3; 1 1 1] A = 3 1 6 2 1 3 1 1 1 >> b=[2;7;4] b = 2 7 4 >> [L,U]=lu(A) L = 1.0000 0 0 0.6667 0.5000 1.0000 0.3333 1.0000 0 U = 3.0000 1.0000 6.0000 0 0.6667 -1.0000 0 0 -0.5000
ขอสังเกต การที่ L ไมไดเปนเมตริกซสามเหลี่ยมลางโดยสมบูรณ เน่ืองจาก ในข้ันตอนการคํานวณภายในโปรแกรม Matlab ไดมีการสลับแถว ระหวางแถว 2 กับแถว 3 เพื่อใหการคํานวณมีประสิทธิภาพ เม่ือไดคา [L] และ [U] ลองทดสอบคูณกลับ ก็จะไดเมตริกซ [A] ดังน้ี >> L*U ans = 3 1 6 2 1 3 1 1 1
ข้ันตอนตอไป เม่ือเราทราบ [L] และ [U] แลว เราก็จะหา {y} และ ผลเฉลย {x} จากสมการดังตอไปน้ี
[L]{y} = {b} [U]{x} = {y}
Page 22
Ch.2 System of Linear Equations 02212471 Semester I - 2011
43
ดวยคําสั่ง Matlab ดังน้ี >> y=L\b y = 2.0000 3.3333 4.0000 >> x=U\y x = 19.0000 -7.0000 -8.0000 23
2.6.2 คําส่ัง Matlab กับวิธี Cholesky
สําหรับวิธีแยก LU แบบ Cholesky ในโปรแกรม Matlab ก็มีคําสั่งอํานวยความสะดวกในการสรางเมตริกซยอย 2 ตัว คือ chol(…) แตคําสั่งนี้จะไดเมตริกซยอย [U] ออกมากอน เราไดทราบจาก หัวขอ 2.5.3 แลววา [A] → [L][U] = [L][L]T ซึ่งหมายถึง [L][U] เปน transpose ของกันและกัน ฉะน้ันเราจึงรับคาออกจาก คําสั่ง chol(…) ดวยเมตริกซ [U] ดังตัวอยาง
ตัวอยาง 2.8 จงแก Matlab ในการแกระบบสมการตอไปน้ี ดวยวิธี Cholesky
⎪⎭
⎪⎬
⎫
⎪⎩
⎪⎨
⎧=
⎪⎭
⎪⎬
⎫
⎪⎩
⎪⎨
⎧
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
280036503125
621253134
3
2
1
xxx
วิธีทํา จะเห็นไดวา เมตริกซ [A] ของระบบสมการนี้เปนเมตริกซสมมาตร (Symmetric matrix) จึงนําวิธี LU Decomposition แบบ Cholesky มาใช ในโปรแกรม Matlab กระทําเปนข้ันตอน ดังน้ี >> A=[4 3 1; 3 5 2; 1 2 6] A = 4 3 1 3 5 2 1 2 6 >> b=[3125; 3650; 2800] b = 3125 3650 2800 >> U=chol(A) U = 2.0000 1.5000 0.5000 0 1.6583 0.7538 0 0 2.2764
Page 23
Ch.2 System of Linear Equations 02212471 Semester I - 2011
44
เม่ือไดคา [U] แลว ลองคูณกลับเพื่อใหไดเมตริกซ [A] จะตองใชสมการ คือ [A]=[L][U] = [L][L]T= [U]T[U] (หรือ [L] = [U]T นั่นเอง) โปรดสังเกต ถาเราสลับตําแหนงการคูณของ [U]T[U] เปน [U][U]Tคําตอบที่ไดก็ไมเทากัน ดังตัวอยาง >> U'*U ans = 4 3 1 3 5 2 1 2 6 >> U*U' ans = 6.5000 2.8644 1.1382 2.8644 3.3182 1.7159 1.1382 1.7159 5.1818
ข้ันตอนตอไปหลังจากไดเมตริกซยอย (decomposed matrices) แลว ก็จะหา {y} และผลเฉลย {x} จากสมการดังตอไปน้ี
[L]{y} = {b}, อยาลืมวาตอนนี้ [L] = [U]T [U]{x} = {y}
ดวยคําสั่ง Matlab ดังน้ี >> y=U'\b y = 1.0e+003 * 1.5625 0.7877 0.6260 >> x=U\y x = 450.0000 350.0000 275.0000
Ans. * * * * *