Upload
ngodat
View
222
Download
5
Embed Size (px)
Citation preview
บทที่ 4 ระบบสมการ
ในบทนี้จะกลาวถึงการแกระบบสมการ ซึ่งสามารถเขยีนเปนรูปแบบทั่วไป คือ
11 1 12 2 1 1
21 1 22 2 2 2
n n
n n
a x a x a x ba x a x a x b
+ + + =+ + + =
K
K
M M 1 1 2 2n n nn na x a x a x b+ + + =K n
4.1 วิธีกราฟ
พิจารณาสมการ a11x1 + a12x2 = b1 a21x1 + a22x2 = b2
แกสมการทั้งสองหาคา x2 ไดดังนี้
11 12 1
12 12
a bx xa a
⎛ ⎞= − +⎜ ⎟
⎝ ⎠
21 22 1
22 22
a bx xa a
⎛ ⎞= − +⎜ ⎟
⎝ ⎠
PH 615 83
ตัวอยางที่ 4.1 จงใชวิธีกราฟแกสมการ 3x1 + 2x2 = 18
- x1 + 2x2 = 2 วิธีทํา
x2 = 23
− x1 + 9
x2 = 21 x1 + 1
นําสมการทั้งสองไปเขียนกราฟ ที่จุดตัด x1 = 4 และ x2 = 3 ซึ่งเปนคําตอบของสมการ
รูป 4.1 วิธีกราฟ
ตัวอยางที่ 4.2 จงใชวธิีกราฟแกสมการ 2x2 - 6x2 = -18 - x1 + 8x2 = 40
ตรวจสอบคําตอบโดยแทนคากลับลงในสมการ
PH 615 84
วิธีทํา กําหนดให จากสมการขางตน เขียนใหมไดเปน xx =1 yx =2
1862 −=− yx 1826 1 −−=− xy 331 +=xy ( ) 3
3+=
xxf
⇒ ⇒ ⇒
408 =+− yx 408 2 += xy 582 +=xy ( ) 5
8+=
xxg
นําไปเขียนกราฟ จะได x 50− 49.99−, 50..:=
f x( )x3
⎛⎜⎝
⎞⎟⎠
3+:= g x( )x8
⎛⎜⎝
⎞⎟⎠
5+:=
60 40 20 0 20 40 60
20
10
10
20
f x( )
g x( )
x
จะไดวา 6.91 == xx ( ) ( ) 2.62 === xgxfx เม่ือนําคา และ ที่ไดไปแทนลงในสมการโจทย จะได 1x 2x
( ) ( ) 182.666.92 −=−
( ) ( ) 402.686.9 =+−
PH 615 85
ซึ่งทําใหสมการเปนจริง ดังนั้น 6.91 =x
2.62 =x
เปนคําตอบของระบบสมการ
4.2 วิธีใช หลักของเครเมอร (Cramer’s Rule)
เปนวธิีการที่สามารถชวยแกสมการที่มีจํานวนนอยไดงาย
[ ]11 12 13
21 22 23
31 32 33
a a aA a a a
a a a
⎛ ⎞⎜ ⎟= ⎜ ⎟⎜ ⎟⎝ ⎠
cocfficientmatrix
11 12 13
21 22 23
31 32 33
a a aD a a a
a a a= Determinant
22 23 21 23 21 2211 12 13
31 3232 33 31 33
a a a a a aa a a
a aa a a a= − +
ตัวอยางที่ 4.3 จงหาคา Determinant ของระบบในตวัอยางที่ 4.1
วิธีทํา
( ) ( )3 2
3 2 2 1 81 2
D = = − −−
=
PH 615 86
หลักของเครเมอร เปนวธิีการคํานวณหาผลเฉลยของระบบสมการที่มีจํานวนไมมาก
นัก เชน ถาเรามีสมการ 3 สมการและมีตัวแปรทีต่องการหาคา 3 คา จะได
= 1x Daabaabaab
33323
23222
13121
= 2xD
abaabaaba
33331
23221
13111
= 3xD
baabaabaa
33231
22221
11211
เม่ือ D = 333231
232221
131211
aaaaaaaaa
ตัวอยางที่ 4.4 จงอาศัยหลักของเครเมอร แกสมการ
1 2 3
1 2 3
1 2 3
0.3 0.52 0.010.5 1.9 0.670.1 0.3 0.5 0.04
x x xx x xx x x
+ + = −+ + =+ + = −
PH 615 87
วิธีทํา
( ) ( ) ( )0.3 0.52 10.5 1 1.9 0.3 0.07 0.52 0.06 1 0.05 0.00220.1 0.3 0.5
D = = − − + = −
ไมเนอร (Minor) คือ
( ) ( )1
1 1.91 0.5 1.9 0.3 0.07
0.3 0.5A = = − = −
( ) ( )2
0.5 1.90.5 0.5 1.9 0.1 0.06
0.1 0.5A = = − =
( ) ( )3
0.5 10.5 0.3 1 0.1 0.05
0.1 0.3A = = − =
1
0.01 0.52 10.67 1 1.90.44 0.3 0.5 0.03178 14.9
0.0022 0.0022x
−
−= =
− −= −
2
0.3 0.01 10.5 0.67 1.90.1 0.44 0.5 0.0649 29.5
0.0022 0.0022x
−
−= =
− −= −
3
0.3 0.52 0.010.5 1 0.670.1 0.3 0.44 0.04356 19.8
0.0022 0.0022x
−
− −= =
− −=
PH 615 88
4.3 วิธีกําจัดตวัแปร การแกสมการอีกวิธีหนึ่งก็คอื การกําจัดตัวแปรจากสมการ
11 1 12 2 1
21 1 22 2 2
a x a x ba x a x b
+ =+ =
คูณสมการแรกดวย a21 ⇒ a11a21x1 + a12a21x2 = b1a21
คูณสมการสองดวย a11 ⇒ a11a21x1 + a12a21x2 = b1a21 แลวลบกันจะได
22 11 2 12 21 2 2 11 1 21a a x a a x b a b a− = − ทําใหเหลือตวัแปรเพียงตวัเดียว ซึ่งสามารถหาคา ได 2x
11 2 21 12
11 22 12 21
a b a bxa a a a
−=
−
และ 21 1 12 2
111 22 12 21
a b a bxa a a a
−=
−
เทียบกับจากหลักของเครเมอร
1 12
2 22 1 22 12 21
11 12 11 22 12 21
21 22
b ab a b a a bxa a a a a aa a
−= =
−
11 1
21 2 11 1 2 212
11 12 11 22 12 21
21 22
a ba b a b b axa a a a a aa a
−= =
−
จะไดผลเฉลยตรงกันทั้งสองวิธ ี
PH 615 89
ตัวอยางที่ 4.5 จงใชวิธีกําจัดตัวแปร หาคา จากสมการ 1 2,x x
1 2
1 2
3 2 12 2
x xx x
8+ =− + =
วิธีทํา
( ) ( )( ) ( )1
2 18 2 24
3 2 2 1x
−= =
− −
( ) ( )( ) ( )2
3 2 1 183
3 2 2 1x
− −= =
− −
ซึ่งเทากับวธิีกราฟ
4.4 วิธี Naive Gauss Elimination
วิธีการน้ีใชขยายมาจากวิธีกําจัดตัวแปรจากหัวขอที่ผานมา โดยสามารถนําไปใชกับเซทของสมการที่มีหลายสมการได วิธีนี้เหมาะในการคํานวณโดยใชคอมพิวเตอร จะสามารถหาคาตัวแปรไดอยางรวดเร็ว แตก็มีขอเสียเม่ือสัมประสิทธิต์ังหนึ่งตวัใดเปนศูนย ก็จะทําใหเกิดการหารดวยศูนย ซึ่งจะไมสามารถคํานวณตอไปได วิธีการนี้จึงมีชื่อเรียกวา “naive” Gauss elimination
สมมุติวา มีเซตของ n สมการ
11 1 12 2 1 1
21 1 22 2 2 2
.... ......................9.12.... .....................9.12
n n
n n
a x a x a x b aa x a x a x b b
+ + + =+ + + =
M M 1 1 2 2 .... .....................9.12n n nn n na x a x a x b c+ + + =
PH 615 90
กําจัดตัวแปร
คูณสมการดวย ⇒ = 11
21
aa
nmxaaaxa
aaxa
11
21212
11
21121 ...+++ 1
11
21 baa
ลบออกจากสมการที่สองจะได
21 21 2122 12 2 2 1 2 1
11 11 11
..... n na aa a x a a x ba a
⎛ ⎞ ⎛ ⎞− + + − = −⎜ ⎟ ⎜ ⎟
⎝ ⎠ ⎝ ⎠
a ba
หรือ
22 2 2 2.... n na x a x b ′′ ′+ + =
ทําซํ้าตอไปอีกโดยคูณดวย แลวจะได 31
11
aa
a11x1 + a12x2 + …+ a1nxn = b1
a/22 x2 +…+ a/
2n xn = b2/
a/32 x2 +…+ a/
3n xn = b3/
M M a/
n2 x2 +…+ ann/ xn = bn
/ ใชวธิีการเชนนี้ ทําซํ้าหลาย ๆ คร้ังจะได
a11x1 + a12x2 + …+ a1nxn = b1
a/22 x2 +…+ a/
2n xn = b2/
a/33 x3 +…+ a/
3n xn = b3/
M M a//
n3 x3 +…+ a//nn xn = b//
n
PH 615 91
ทําซํ้าตอไปอีกจะได
a11x1 + a12x2 + …+ a1nxn = b1
a/22 x2 +…+ a/
2n xn = b2/
a//33 x3 +…+ a//
3n xn = b// 3
Ο M ( )
nn
nn xa 1− = ( )1−nnb
ซึ่งจะสามารถแทนคายอนกลับเพ่ือหาคา xn กอน
( )
( )
1
1
nn
n nn
bxa
−
−=
แลวจึงหาคา xn-1, xn-2, … จนสุดทายจะไดคา x1 ตามตองการ สามารถเขียนเปนสมการทั่วไปได คือ
( ) ( )
( )
1 1
11
ni i
i ijj i
i iij
b ax
a
− −
= +−
−=
∑ jx เม่ือ 1, 2,....,1i n n= − −
สรุป ขั้นตอนตาง ๆ ไดดังนี้
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
3
2
1
333231
232221
131211
ccc
aaaaaaaaa
Forward Elimination
⇓
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
′′′
′′′′
3
2
1
33
2322
131211
ccc
aaaaaa
⇓ 3 3 33x c a′′ ′′= ( )3 2 23 3 22x c a x a′ ′= − ′′ Back Substitution ( )1 1 12 2 13 3 11x c a x a x a= − −
PH 615 92
ตัวอยางที่ 4.5 จงใช Gauss Elimination แกสมการ
0.3x1 - 0.1x2 – 0.2x3 = 7.85
0.1x1 + 7x2 – 0.3x3 = - 19.3
0.3x1 - 0.2x2 + 10x3 = 71.4 วิธีทํา คูณสมการดวย 0.1/3 แลวหักออกจากสมการจะได
2 37.00333 0.293333 19.5617x x− = −
คูณสมการดวย 0.3/3 แลวหักออกจากสมการจะได
0.3x1 - 0.1x2 – 0.2x3 = 7.85
7.00333x2 – 0.293333x3 = -19.5617
- 0.19000x2 + 10.0200x3 = 70.6150 ตอไปทําให ในสมการหมดไป 2x
คูณสมการดวย - 0.19000/7.00333 แลวหักออกจากสมการจะได
0.3x1 - 0.1x2 – 0.2x3 = 7.85
7.00333x2 – 0.293333x3 = -19.5617
10.0200x3 = 70.0843
หาคา จากสมการ 3x
370.0843 7.0000310.0200
x = =
แทน ลงไปในสมการ 3x
( )27.00333 0.293333 7.00003 19.5617x − = −
PH 615 93
ดังนั้น
x2 = ( )00333.7
00003.7293333.05617.19 +−
= - 2.5000 แทน และ ลงในสมการจะได 2x 3x
( ) ( )10.3 0.1 2.50000 0.2 7.00003 7.85x − − − = ดังนั้น
x1 = ( ) ( )3
00003.72.050000.21.085.7 +−+
= 3.0000 ตัวอยางที่ 4.6 จงเขียนโปรแกรมเพื่อแกสมการ
2x1 – 6x2 = -18 - x1 + 8x2 = 40
วิธีทํา PROGRAM GAUSS_ELE DIMENSION A(50,50),B(50),X(50) PARAMETER (N=2) DATA ((A(I,J),J=1,N),I=1,N)/2.,-6., + -1.,8./ DATA (B(I),I=1,N) /-18.,40./ CALL GAUSS(N,A,B,X) * --------------------------------- WRITE(*,100)
PH 615 94
100 FORMAT(/, 7X, 'EQUATION NO.', + 7X, 'SOLUTION X', /) DO 20 I=1,N WRITE(*,200) I, X(I) 200 FORMAT(I12, 8X, F16.6) 20 CONTINUE * ---------------------------------- STOP END *--------------------------------------------------------- SUBROUTINE GAUSS(N,A,B,X) DIMENSION A(50,50),B(50),X(50) CALL SCL(N,A,B) DO 100 IP=1,N-1 CALL PIVOT(N,A,B,IP) DO 200 IE=IP+1,N RATIO = A(IE,IP)/A(IP,IP) DO 300 IC=IP+1,N A(IE,IC) = A(IE,IC) - RATIO*A(IP,IC) 300 CONTINUE B(IE)=B(IE)-RATIO*B(IP) 200 CONTINUE DO 400 IE=IP+1,N A(IE,IP)=0. 400 CONTINUE 100 CONTINUE X(N)=B(N)/A(N,N) DO 500 IE=N-1,1,-1 SUM=0.
PH 615 95
DO 600 IC=IE+1,N SUM=SUM+A(IE,IC)*X(IC) 600 CONTINUE X(IE)=(B(IE)-SUM)/A(IE,IE) 500 CONTINUE RETURN END *---------------------------------------------------------- SUBROUTINE SCL(N,A,B) DIMENSION A(50,50),B(50) DO 10 IE=1,N BIG=ABS(A(IE,1)) DO 20 IC=2,N AMAX=ABS(A(IE,IC)) IF(AMAX.GT.BIG) BIG=AMAX 20 CONTINUE DO 30 IC=1,N A(IE,IC)=A(IE,IC)/BIG 30 CONTINUE B(IE)=B(IE)/BIG 10 CONTINUE RETURN END *--------------------------------------------------------- SUBROUTINE PIVOT(N,A,B,IP) DIMENSION A(50,50),B(50) JP=IP BIG=ABS(A(IP,IP)) DO 10 I=IP+1,N
PH 615 96
AMAX=ABS(A(I,IP)) IF(AMAX.GT.BIG) THEN BIG=AMAX JP=I ENDIF 10 CONTINUE IF(JP.NE.IP) THEN DO 20 J=IP,N DUMY = A(JP,J) A(JP,J)= A(IP,J) A(IP,J)= DUMY 20 CONTINUE DUMY = B(JP) B(JP) = B(IP) B(IP) = DUMY ENDIF RETURN END *----------------------------------------------------------- เอาทพุทคือ
PH 615 97
4.4.1 ขอเสียของวิธี Elimination จะมีอยู 3 ขอ คือ 1. สัมประสิทธิ์ตวัใดตวัหนึง่เปนศูนย ทาํใหเกิดการหารดวยศูนย 2. การปดเศษหลาย ๆ คร้ัง ทําใหผลเฉลยคลาดเคลือ่นไป 3. สมการบางสมการมีคาความชันใกลเคยีงกัน ทําใหไมทราบจุดตดัที่แนนอนได ตัวอยางที่ 4.7 จงแกสมการ
1 2
1 2
2 101.1 2 10.4x x
x x+ =+ =
แลวเปลี่ยนคาสัมประสิทธิข์อง ในสมการสองเปน 1.05 แลวแกสมการอีกคร้ัง 1x
วิธีทํา
12(10) 2(10.4) 41(2) 2(1.1)
x −= =
−
21(10.4) 1.1(10) 3
1(2) 2(1.1)x −= =
−
เม่ือเปลี่ยน จาก 1.1 เปน 1.05 จะได 21a
12(10) 2(10.4) 81(2) 2(1.05)
x −= =
−
21(10.4) 1.1(10) 11(2) 2(1.05)
x −= =
−
จะเห็นไดวา a21 เปลี่ยนไปเพียง 0.05 เทาน้ัน แตผลเฉลยมีคาแตกตางกันมาก
เน่ืองจากวา ทั้งสองสมการมีความชันใกลเคียงกันมาก
PH 615 98
พิจารณาสมการ
11 1 12 2 1
21 1 22 2 2
11 11 1
12 12
21 22 2
22 22
a x a x ba x a x b
a bx xa aa bx xa a
+ =+ =
= − +
= − +
ถาความชันเกอืบจะมีคาเทากัน
11 21
12 22
a aa a
≅
หรือ
11 22 12 21a a a a≅
11 22 12 21 0a a a a− = ซึ่ง เปน Determinant ของระบบสมการเม่ือนําไปหารเพ่ือหาคาผลเฉลย จะทําใหผลเฉลยมีคาเปลี่ยนไปมาก
11 22 12 21a a a a−
ตัวอยางที่ 4.8 ผลของการคูณดวยคาคงที่ เพ่ือทําใหคา determinant มีคามากขึ้น จงหา Determinant
ก) 1 2
1 2
3 2 12 2
x xx x+ = 8
− + =
ข) 1 2
1 2
2 101.1 2 10.4x x
x x+ =+ =
ค) ทําซํ้าขอ ข) โดยคูณสมการดวย 10
PH 615 99
วิธีทํา ก) D = 3(2) – 2(-1) = 8
มีคามากกวาศูนย ใชไดดี
ข) D = 1(2) – 2(1.1) = -0.2 มีคาเขาใกลศนูย ทําใหผลเฉลยคลาดเคลื่อนไดมาก
ค) คูณสมการดวย 10 (ผลเฉลยเทาเดิม) 1 2
1 2
10 20 10011 20 104
x xx x+ =+ =
( ) ( )10 20 20 11 20D = − = −
มีคามาก โดยที่ผลเฉลยมีคาเหมือนเดิม จึงเปนวิธีการที่จะทําให D มีคามากขึ้น
ตัวอยางที่ 4.9 ให scale สมการในตัวอยาง 4.8 โดยสัมประสิทธิ์มีคามากที่สุดเทากับ 1 แลวคํานวณหา Determinant วิธีทํา ก)
1 2
1 2
0.667 60.5 1
x xx x
+ =− + =
( ) ( )1 1 0.667 0.5 1.333D = − − =
ข) 1 2
1 2
0.5 50.55 5.2
x xx x+ =+ =
( ) ( )0.5 1 1 0.55 0.05D = − = −
PH 615 100
ค) scaling เหมือนขอ ข) 0.05D = − เหมือนกัน
4.4.2 วิธีแกขอเสียของวธีิ Elimination มีอยู 2 วิธี คือ
1. เพ่ิมทศนิยมในการคํานวณ 2. สลับแถว หรือคอลัมน
Partial → สลับแถว
Complete → สลับแถวและคอลัมน ตัวอยางที่ 4.10 อาศัย Gauss elimination แกสมการ
1 2
1 2
0.0003 3.0000 2.00011.0000 1.0000 1.0000
x xx x+ =+ =
เน่ืองจาก มีคาเขาใกลศูนย ใหสลับลําดับของสมการ ผลเฉลยที่แทจริง คือ
และ 11 0.0003a =
11
3x = 22
3x =
วิธีทํา คูณสมการแรกดวย จะได 1
0.0003
1 210.000 6667x x+ =
ทําให หมดจากสมการสอง 1x
2
2
9999 666623
x
x
− = −
=
แทน กลับเขาไปในสมการแรกเพื่อหา 2x 1x
PH 615 101
1
22.0001 33
0.0003x
⎛ ⎞− ⎜ ⎟⎝ ⎠=
Significant Figures 2x 1x
Absolute Value of Percent relative
Error for 1x 3 4 5 6 7
0.667 0.6667 0.66667 0.666667 0.6666667
-3.33 0.0000 0.3000 0.330000 0.3330000
1099 100 10 1 0.1
สลับ order ของสมการ ซึ่งจะทําใหไดผลเฉลยของสมการที่มีความแนนอนกวา
1 2
1 2
1.0000 1.0000 1.00000.0003 3.0000 2.0001
x xx x+ =+ =
จะได 223
x =
และ 1
213
1x
⎛ ⎞− ⎜ ⎟⎝ ⎠=
PH 615 102
Significant Figures 2x 1x
Absolute Value of Percent relative
Error for 1x 3 4 5 6 7
0.667 0.6667 0.66667 0.666667 0.6666667
0.333 0.3333 0.33333 0.333333 0.3333333
0.1 0.01 0.001 0.0001 0.00001
จะเห็นไดวา การสลับ order จะใหผลทีน่าพึงพอใจมากกวา
ตัวอยางที่ 4.11 Scaling
ก) แกสมการโดยใช Gauss elimination และ pivoting 1 2
1 2
2 100,000 100,0002
x xx x
+ =+ =
ข) แกสมการโดยการ Scaling ใหสัมประสิทธิส์ูงสดุของแตละแถว = 1 ค) อาศัยการ Scaling สัมประสิทธิ์ เพ่ือที่จะพิจารณาวา การ pivot จําเปนหรือไม
อยางไรก็ตามใหแกสมการโดยอาศัยสัมประสิทธิค์าเดิม ใชเลขนัยสําคัญ 3 หลักคําตอบที่ถูกตอง คือ , หรือถาใชเลข 3 หลัก 1 1.00002x = 2 0.99998x = 1 2 1.00x x= =
วิธีทํา
ก) โดยไมใชการ Scale 1 2
2
2 100,000 100,00050,000 50,000x x
x+ =
− = −
ซึ่งจะได , คา มีError 100% เน่ืองจากการปดทศนิยม 1 1.00x = 2 0.00x = 1x
PH 615 103
Scaling 1 2
1 2
0.00002 12x x
x x+ =
+ =
ข)
Pivot แถวแรก 1 2
1 2
20.00002 1x x
x x+ =
+ =
จาก Forward elimination ได
1 2
2
21.00
x xx+ ==
จะได ซึ่งตรงกับคาที่แทจริง 1 2 1x x= =
ค) สัมประสิทธิข์องการ Scale บงชี้วาจําเปนที่จะตองใช Pivot เราจะทําการ Pivot
แตใช คาสัมประสิทธิเ์ดิม 1 2
1 2
22 100,000 100,000x xx x+ =+ =
จาก Forward elimination ได 1 2
2
2100,000 100,000x x
x+ =
=
ซึ่งจะไดวา 1 2 1x x= =
ดังนั้นการ Scale เปนประโยชนตอการพิจารณาวาPivotจําเปนหรือไม แตไมจําเปนที่
จะตอง Scale เพ่ือใหไดคําตอบที่ถูกตอง ตัวอยางที่ 4.12 จงแกสมการตอไปน้ี
0.77x1 + x2 = 14.25 1.2x1 + 1.7x2 = 20 ก) โดยวิธีกราฟ ข) จากกราฟที่ได จงพิจารณาภาวะของระบบสมการ
ค) จงเขียนโปรแกรมโดยใชวิธี Gauss elimination เพ่ือแกสมการน้ี
PH 615 104
วิธีทํา ก) กําหนดให , จากสมการขางตน เขียนใหมไดเปน xx =1 yx =2
25.1477.0 =+ yx 25.1477.01 +−= xy ( ) 25.1477.0 +−= xxf
⇒ ⇒
207.12.1 =+ yx 7.1
202.12
+−=
xy ( )7.1
202.1 +−=
xxg
นําไปเขียนกราฟ จะได x 50− 49.99−, 50..:=
f x( ) 0.77− x 14.25+:= g x( )1.2− x 20+( )
1.7:=
60 40 20 0 20 40 60
40
20
20
40
60
f x( )
g x( )
x
PH 615 105
ข) จะไดวา
761482.381 ≅= xx ( ) ( ) 596339.152 −≅== xgxfx
เน่ืองจากวากราฟทั้งสองมีความชันใกลเคียงกัน จึงทําใหการหาจุดตัดจากการ
คาดคะเนทําไดยาก คารากของระบบสมการจึงเปนเพียงคาประมาณหยาบๆ ค) PROGRAM GAUSS DIMENSION A(50,50),B(50),X(50) PARAMETER (N=2) DATA ((A(I,J),J=1,N),I=1,N)/0.77,1., + 1.2,1.7/ DATA (B(I),I=1,N) /14.25,20./ CALL GAUSS(N,A,B,X) * --------------------------------- WRITE(*,100) 100 FORMAT(/, 7X, 'EQUATION NO.', + 7X, 'SOLUTION X', /) DO 20 I=1,N WRITE(*,200) I, X(I) 200 FORMAT(I12, 8X, F16.6) 20 CONTINUE * ---------------------------------- STOP END *--------------------------------------------------------- SUBROUTINE GAUSS(N,A,B,X) DIMENSION A(50,50),B(50),X(50)
PH 615 106
CALL SCL(N,A,B) DO 100 IP=1,N-1 CALL PIVOT(N,A,B,IP) DO 200 IE=IP+1,N RATIO = A(IE,IP)/A(IP,IP) DO 300 IC=IP+1,N A(IE,IC) = A(IE,IC) - RATIO*A(IP,IC) 300 CONTINUE B(IE)=B(IE)-RATIO*B(IP) 200 CONTINUE DO 400 IE=IP+1,N A(IE,IP)=0. 400 CONTINUE 100 CONTINUE X(N)=B(N)/A(N,N) DO 500 IE=N-1,1,-1 SUM=0. DO 600 IC=IE+1,N SUM=SUM+A(IE,IC)*X(IC) 600 CONTINUE X(IE)=(B(IE)-SUM)/A(IE,IE) 500 CONTINUE RETURN END *---------------------------------------------------------- SUBROUTINE SCL(N,A,B) DIMENSION A(50,50),B(50) DO 10 IE=1,N BIG=ABS(A(IE,1))
PH 615 107
DO 20 IC=2,N AMAX=ABS(A(IE,IC)) IF(AMAX.GT.BIG) BIG=AMAX 20 CONTINUE DO 30 IC=1,N A(IE,IC)=A(IE,IC)/BIG 30 CONTINUE B(IE)=B(IE)/BIG 10 CONTINUE RETURN END *--------------------------------------------------------- SUBROUTINE PIVOT(N,A,B,IP) DIMENSION A(50,50),B(50) JP=IP BIG=ABS(A(IP,IP)) DO 10 I=IP+1,N AMAX=ABS(A(I,IP)) IF(AMAX.GT.BIG) THEN BIG=AMAX JP=I ENDIF 10 CONTINUE IF(JP.NE.IP) THEN DO 20 J=IP,N DUMY = A(JP,J) A(JP,J)= A(IP,J) A(IP,J)= DUMY 20 CONTINUE
PH 615 108
DUMY = B(JP) B(JP) = B(IP) B(IP) = DUMY ENDIF RETURN END *----------------------------------------------------------- ตัวอยางที่ 4.13 จงเขียนโปรแกรมภาษาฟอรแทรนโดยใชวธิี Gauss elimination พรอมทั้ง partial pivoting เพ่ือแกสมการตอไปน้ี (ซึ่งมีคําตอบคือ x1 = x2 = x3 = 1)
x1 + x2 – x3 = 1
6x1 + 2x2 + 2x3 = 10
-3x1 + 4x2 + x3 = 2 วิธีทํา PROGRAM GAUSS DIMENSION A(50,50),B(50),X(50) PARAMETER (N=3) DATA ((A(I,J),J=1,N),I=1,N)/1.,1.,-1., + 6.,2.,2., + -3.,4.,1./ DATA (B(I),I=1,N) /1.,10.,2./ CALL GAUSS(N,A,B,X) * --------------------------------- WRITE(*,100) 100 FORMAT(/, 7X, 'EQUATION NO.', + 7X, 'SOLUTION X', /) DO 20 I=1,N WRITE(*,200) I, X(I)
PH 615 109
200 FORMAT(I12, 8X, F16.6) 20 CONTINUE * ---------------------------------- STOP END *--------------------------------------------------------- SUBROUTINE GAUSS(N,A,B,X) DIMENSION A(50,50),B(50),X(50) CALL SCL(N,A,B) DO 100 IP=1,N-1 CALL PIVOT(N,A,B,IP) DO 200 IE=IP+1,N RATIO = A(IE,IP)/A(IP,IP) DO 300 IC=IP+1,N A(IE,IC) = A(IE,IC) - RATIO*A(IP,IC) 300 CONTINUE B(IE)=B(IE)-RATIO*B(IP) 200 CONTINUE DO 400 IE=IP+1,N A(IE,IP)=0. 400 CONTINUE 100 CONTINUE X(N)=B(N)/A(N,N) DO 500 IE=N-1,1,-1 SUM=0. DO 600 IC=IE+1,N SUM=SUM+A(IE,IC)*X(IC) 600 CONTINUE X(IE)=(B(IE)-SUM)/A(IE,IE)
PH 615 110
500 CONTINUE RETURN END *---------------------------------------------------------- SUBROUTINE SCL(N,A,B) DIMENSION A(50,50),B(50) DO 10 IE=1,N BIG=ABS(A(IE,1)) DO 20 IC=2,N AMAX=ABS(A(IE,IC)) IF(AMAX.GT.BIG) BIG=AMAX 20 CONTINUE DO 30 IC=1,N A(IE,IC)=A(IE,IC)/BIG 30 CONTINUE B(IE)=B(IE)/BIG 10 CONTINUE RETURN END *--------------------------------------------------------- SUBROUTINE PIVOT(N,A,B,IP) DIMENSION A(50,50),B(50) JP=IP BIG=ABS(A(IP,IP)) DO 10 I=IP+1,N AMAX=ABS(A(I,IP)) IF(AMAX.GT.BIG) THEN BIG=AMAX JP=I
PH 615 111
ENDIF 10 CONTINUE IF(JP.NE.IP) THEN DO 20 J=IP,N DUMY = A(JP,J) A(JP,J)= A(IP,J) A(IP,J)= DUMY 20 CONTINUE DUMY = B(JP) B(JP) = B(IP) B(IP) = DUMY ENDIF RETURN END *----------------------------------------------------------- ตัวอยางที่ 4.14 จงเขียนโปรแกรมเพื่อแกสมการ
0.5x1 – x2 = -9.5 0.26 x1 - 0.5x2 = -4.7
วิธีทํา อาศัยโปรแกรมในตวัอยาง 4.13 โดยเปลี่ยนระบบสมการ เอาทพุท คือ
PH 615 112
ตัวอยางที่ 4.5 จงเขียนโปรแกรมโดยวิธ ี naive – Gauss elimination เพ่ือแกสมการ
-12x1 + x2 – x3 = -20
-2x1 - 4x2 + 2x3 = 10
x1 + 2x2 + 2x3 = 25
วิธีทํา อาศัยโปรแกรมในตวัอยาง 4.13 โดยเปลี่ยนระบบสมการ PROGRAM GAUSS_ELE DIMENSION A(50,50),B(50),X(50) PARAMETER (N=3) DATA ((A(I,J),J=1,N),I=1,N)/-12.,1.,-1., + -2.,-4.,2., + 1.,2.,2./ DATA (B(I),I=1,N) /-20.,10.,25./ CALL GAUSS(N,A,B,X)
• ---------------------------------
• เอาทพุทคือ ดังนั้น x1 = 1, x2 = 2 และ x3 = 10
PH 615 113
ตัวอยางที่ 4.16 จงเขียนโปรแกรมโยวิธ ี naive – Gauss elimination เพ่ือแกสมการ
4x1 + x2 – x3 = -2
5x1 + x2 + 2x3 = 4
6x1 + x2 + x3 = 6
วิธีทํา อาศัยโปรแกรมในตัวอยาง 4.13 โดยเปลี่ยนระบบสมการ PROGRAM GAUSS_ELE DIMENSION A(50,50),B(50),X(50) PARAMETER (N=3) DATA ((A(I,J),J=1,N),I=1,N)/4.,1.,-1., + 5.,1.,2., + 6.,1.,1./ DATA (B(I),I=1,N) /-2.,4.,6./ CALL GAUSS(N,A,B,X) * --------------------------------- เอาทพุทคือ ดังนั้น x1 = 3, x2 = -13, x3 = 1
PH 615 114
4.5 วิธีเกาส-จอรแดน (Gauss – Jordan) วิธีการของเกาส-จอรแดนจะคลายกับวธิกีารของเกาส ขอแตกตางอยูตรงที่วาหลังจากการกําจัดตัวแปรแลว เมทริกซที่ไดจะเปน identity matrix ตัวอยางที่ 4.17 ใชเทคนิคเกาส-จอรแดนแกสมการ
1 2 3
1 2 3
1 2 3
3 0.1 0.2 7.850.1 7 0.3 19.30.3 0.2 10 71.4
x x xx x xx x x
− − =+ − = −− + =
วิธีทํา
3 0.1 0.20.1 7 0.3 19.30.3 0.2 10
− −⎡ ⎤⎢ ⎥− − −⎢ ⎥⎢ ⎥−⎣ ⎦
Normalize แถวแรกดวยการหารดวย 3
1 0.0333333 0.0666670.1 7 0.3 19.30.3 0.2 10
− −⎡ ⎤⎢ ⎥− − −⎢ ⎥⎢ ⎥−⎣ ⎦
ทําให หมดจากสมการสอง โดยการหัก 0.1 เทาของสมการหนึ่ง จากสมการสองและเชนเดียวกัน หัก 0.3 เทาของแถวแรก จากแถว 3 จะทําให ในแถว 3 หมดไป
1x
1x
1 0.0333333 0.0666670 7.00333 0.293333 19.56170 0.190000 10.0200
− −⎡ ⎤⎢ ⎥− − −⎢ ⎥⎢ ⎥−⎣ ⎦
PH 615 115
ตอไป Normalize แถวสองโดยการหารดวย 7.00333
1 0.0333333 0.0666670 1 0.0418848 2.793200 0.190000 10.0200
− −⎡ ⎤⎢ ⎥− − −⎢ ⎥⎢ ⎥−⎣ ⎦
ทําใหเทอม หมดจากสมการหน่ึงและสามจะได 2x
1 0 0.06806290 1 0.0418848 2.793200 0 10.01200
−⎡ ⎤⎢ ⎥− − −⎢ ⎥⎢ ⎥⎣ ⎦
ตอไป Normalize แถวสามโดยการหารดวย 10.01200
1 0 0.06806290 1 0.0418848 2.793200 0 1
−⎡ ⎤⎢ ⎥− − −⎢ ⎥⎢ ⎥⎣ ⎦
ทําใหเทอม หมดจากสมการหน่ึงและสองจะได 3x
1 0 00 1 0 2.500010 0 1
⎡ ⎤⎢ ⎥− −⎢ ⎥⎢ ⎥⎣ ⎦
PH 615 116
สรุป ขั้นตอนของวิธีเกาส-จอรแดน
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
3
2
1
333231
232221
131211
ccc
aaaaaaaaa
( )
( )
( )⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
n
n
n
ccc
3
2
1
100010001
x1 = ( )nc1 x2 = ( )nc2 x3 = ( )nc3
PH 615 117
แบบฝกหัดบทที่ 4
1. จงแกสมการตอไปน้ี โดยวิธีกราฟ
0.5x1 – x2 = -9.5
0.26x1 – 0.5x2 = -4.7 2. จงแกสมการตอไปน้ี โดยวิธีกําจัดตวัแปร
0.77x1 + x2 = 14.25
1.2x1 + 1.7x2 = 20 3. กําหนดเซทของสมการ
2x2 + 5x3 = 1
2x1 + x2 + 2x3 = 1
3x1 + x2 = 2 ก) จงหา determinant จงใชหลักของเครเมอร หาคา xi ข) แทนคา xi กลับลงในสมการ เพ่ือตรวจสอบคําตอบ ค)
4. จงแกสมการตอไปน้ี 4x1 + x2 – x3 = -2
5x1 + x2 + 2x3 = 4
6x1 + x2 + x3 = 6 ก) โดยวิธีกําจัดเกาส ใชวิธีสลับแถว (partial pivoting) ข) เขียนโปรแกรม
PH 615 118