You are on page 1of 42

TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM

TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG TP.HCM


KHOA TOÁN -THỐNG KÊ

ĐỒ ÁN TOÁN 1

TÍNH GẦN ĐÚNG NGHIỆM CỦA MỘT HỆ PHƯƠNG TRÌNH


ĐẠI SỐ TUYẾN TÍNH

Sinh viên thực hiện:


SV1: Mai Thanh Bình
SV2: Huỳnh Võ Huy Tâm
SV3: Lê Xuân Kỳ

TP. Hồ Chí Minh, tháng 11 năm 2013


Đồ án 1

NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN

...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................

2
Đồ án 1

Lời cảm ơn
Trong quá trình thực hiện bài báo cáo đồ án này, nhóm chúng em đã nhận được nhiều sự

giúp đỡ từ các thầy cô trong khoa Toán-Thống kê, trường Đại học Tôn Đức Thắng. Các

thầy cô đã cung cấp cho chúng em những kiến thức, những kinh nghiệm quý báu trong suốt

quá trình học tập, cùng với sự giúp đỡ không ngừng của gia đình và bạn bè. Nhờ đó mà

nhóm chúng em đã hoàn thành được bài báo cáo đồ án như mong muốn. Nay xin cho phép

chúng em được gửi lời cảm ơn đến các thầy cô. Đặc biệt nhóm chúng em xin gửi lời cảm

ơn sâu sắc tới thầy Huỳnh Văn Kha người đã hướng dẫn và chỉ bảo tận tình cho chúng

em, đã tạo mọi điều kiện thuận lợi và là nguồn động lực quan trọng để nhóm chúng em có

thể hoàn thành tốt bài báo cáo đồ án này. Nhóm cũng xin gửi lởi cảm ơn chân thành tới gia

đình và bạn bè đã động viên, khuyến khích nhóm trong những lúc khó khăn nhất. Một lần

nữa nhóm chúng em xin chân thành cảm ơn. Chúc tất cả mọi người sức khỏe và thành đạt.

TP.HCM ngày 20, tháng 11, năm 2013

3
Đồ án 1

Lời nói đầu


Đối với một hệ phương trình ta luôn có cách tính chính xác nghiệm của nó. Người ta xây

dựng cách tính nghiệm chính xác thông qua công thức Cramer, công thức Cramer đối với

các hệ phương trình có số ẩn thấp thì không phức tạp nhưng việc sử dụng công thức

Cramer không phải đơn giản đối với các hệ phương trình có số ẩn lớn. Do đó người ta xây

dựng cách tính các giá trị xấp xỉ của các hệ phương trình với độ chính xác từ thấp đến cao,

từ không thể đến có thể xác định được độ chính xác của tập nghiệm. Phương pháp tính giá

trị xấp xỉ có thể chấp nhận được nếu độ sai lệ giữa giá trị xấp xỉ và nghiệm chính xác của

phương trình bé hơn  cho trước nào đó. Từ đó nhóm chúng em quyết định chọn để tài
“tính gần đúng nghiệm của một phương trình đại số tuyến tính” để đi sâu vào tìm hiểu

phương thức tính giá trị xấp xỉ của phương trình đại số tuyến tính.

Cách tính xấp xỉ phương trình đại số tuyến tính có rất nhiều, ở đây chúng em chỉ liệt kê

một số phương pháp thông dụng, có độ chính xác cao và có thể áp dụng ngay vào thực tế.

TP.HCM ngày 20, tháng 11, năm 2013

4
Đồ án 1

Mục Lục
Trang

1. PHẦN MỞ ĐẦU .......................................................................................................... 7

2. PHƯƠNG PHÁP KHỬ GAUSS .................................................................................. 8

2.1 Thuật toán .............................................................................................................. 8

2.2 Code chương trình.................................................................................................. 9

2.3 Chạy thử và nhận xét ........................................................................................... 12

3. PHÂN RÃ LU ............................................................................................................. 13

3.1 Thuật toán ............................................................................................................ 13

3.2 Code chương trình................................................................................................ 15

3.3 Chạy thử và nhận xét ........................................................................................... 17

4. BA ĐƯỜNG CHÉO CHÍNH (THUẬT TOÁN THOMAS) ...................................... 18

4.1 Thuật toán ............................................................................................................ 18

4.2 Code chương trình................................................................................................ 20

4.3 Chạy thử và nhận xét ........................................................................................... 21

5. CÁC PHƯƠNG PHÁP LẶP ĐƠN ............................................................................. 23

5.1 Kiến thức chuẩn bị ............................................................................................... 23

5.2 Phương pháp Jacobi ............................................................................................. 25

5.2.1 Thuật toán ...................................................................................................... 25

5.2.2 Sự hội tụ của phương pháp và sai số của nghiệm xấp xỉ .............................. 27

5.2.3 Code chương trình ......................................................................................... 27

5.2.4 Chạy thử và nhận xét ..................................................................................... 31

5.3 Phương pháp Gauss-Seidel .................................................................................. 32

5
Đồ án 1

5.3.1 Thuật toán ...................................................................................................... 32

5.3.2 Sự hội tụ của phương pháp Seidel và đánh giá sai số của nghiệm xấp xỉ .... 32

5.3.3 Code chương trình ......................................................................................... 33

5.3.4 Chạy thử và nhận xét ..................................................................................... 35

6. Ứng dụng .................................................................................................................... 36

KẾT LUẬN ....................................................................................................................... 41

Tài Liệu Tham khảo .......................................................................................................... 42

6
Đồ án 1

TÍNH GẦN ĐÚNG NGHIỆM CỦA MỘT HỆ PHƯƠNG TRÌNH


ĐẠI SỐ TUYẾN TÍNH
1. PHẦN MỞ ĐẦU
Nhiều vấn đề của khoa học, kỹ thuật, kinh tế, môi trường… qui về việc giải hệ phương
trình đại số tuyến tính:
a11 x1  a12 x2   a1n xn  b1
a x  a x   a2 n xn  b2
 21 1 22 2
 (1.1)


an1 x1  an 2 x2   ann xn  bn

Đặt A   aij nn là ma trận hệ số, b là ma trận cột các hệ số tự do cho trước, x 
n n

là vectơ phải tìm, thì hệ (1.1) được viết ở dạng:


Ax  b (1.2)
Về phương diện lý thuyết, hệ (1.2) có thể giải được trọn vẹn nhờ lý thuyết ma trận và
định thức. Tuy nhiên, với trường hợp ma trận không suy biến, nếu giải bằng phương pháp
Cramer thì số phép tính là rất lớn, cỡ n!, n 2 phép tính nhân chia. Nhằm khắc phục hạn chế
đó, trong chương này chúng ta xét một số phương pháp giải thực tế hệ phương trình (1.2)
với đặc điểm chung là khối lượng tính toán giảm nhẹ.
Trong số các phương pháp đó chúng ta chia làm hai nhóm phương pháp lớn là nhóm
phương pháp trực tiếp và nhóm phương pháp gián tiếp.
Đặc điểm chung của nhóm phương pháp trực tiếp là sau một số hữu hạn phép tính sẽ
có kết quả, vì vậy nhóm phương pháp này thường được áp dụng với một số bài toán có
kích thước nhỏ, với các số liệu ban đầu là đúng. Tuy nhiên do phải thực hiện một số phép
tính tương đối lớn nên có nguy cơ tích lũy sai số, nhất là đối với trường hợp các số liệu ban
đầu không thật chính xác. Còn với nhóm phương pháp gián tiếp (phương pháp lặp) thường
được áp dụng cho lớp các bài toán có kích thước lớn, số liệu ban đầu là có sai số.
Với mục đích giải các bài toán thực tế, đặc điểm chung là là bài toán đã cho với ma trận
vuông cấp n  n và phương trình luôn tồn tại 1 nghiệm duy nhất. Các trường hợp khác ta
không áp dụng với các phương pháp giải sau:

7
Đồ án 1

2. PHƯƠNG PHÁP KHỬ GAUSS


2.1 Thuật toán
Tư tưởng của phương pháp khử Gauss là đưa hệ phương trình (1.2) về dạng tam giác
trên, lúc đó nghiệm được tìm nhờ phương pháp thế ngược. Quá trình đưa hệ (1.2) về một
hệ tương đương dạng tam giác được gọi là quá trình khử, được thực hiện bởi lược đồ sau
đây:
a) Tìm lần lượt từng giá trị lớn nhất của từng hàng trong ma trận A, sau đó ta lấy lần

lượt từng giá trị a11 , a21 ,..., an1 chia cho giá trị lớn nhất của từng hàng vừa tìm được và
có được giá trị lớn nhất trong đó.

b) Hoán vị lên trên dòng 1 nếu giá trị của phép chia giữa a11 , a21 ,..., an1 và giá trị lớn
nhất tương ứng của từng hàng là lớn nhất.

c) Sau đó lần lượt nhân phương trình đó với – a11a 21 ,  a11a31 ,  , a11an1 và theo thứ

tự, cộng vào phương trình thứ hai, thứ ba, … thứ n. Bằng cách đó ta khử được x1 ra
khỏi các phương trình của hệ từ phương trình thứ hai trở đi. Bước tiếp theo là ta khử
x2 ra khỏi các phương trình từ thứ ba trở đi… Sau một số hữu hạn bước, ta đưa được
hệ (1.2) về dạng tam giác sau đây:
c11 x1 c12 x2  c1n xn  d1
  c2 n xn  d2
 c22 x2



 cnn xn  dn

Khi đó nghiệm x*   x1* , x2* ,...xn*   n


tìm được nhờ phép thế ngược.

Ví dụ: Giải hệ phương trình:


8 x1 3x2 2 x3  20

4 x1 11x2  x3  33
6 x 3x 12 x3  36
 1 2

Giải:

8
Đồ án 1

 8 3 2 20 
 
Ta đưa hệ phương trình về ma trận  4 11 1 33 
 6 3 12 36 
 

Ta thấy 8  4 và 8  6 nên không đổi vị trí hàng thứ nhất.


8 11 8 12

 8 3 2 20 
 8 3 2 20  1  
  h 2h 2 2 h1  25 
 4 11 1 33    0 2 23
 6 3 12 36   2 
   6 3 12 36 
 

Ta thấy 25 / 2  21 / 4 do đó không cần thay đổi vị trí hàng 2 và hàng 3.


25 / 2 21 / 2

   
8 3 2 20  8 3 2 20 
3   h 3  h 3  21 h 2  
h3  h3  h1 25       25
 4
0 2 23   50
0 2 23 
 2   2 
 21 21   567 567 
0 21  0 0 
 4 2   50 50 
Như vậy hệ đã cho tương đương với hệ:

8 x1 3 x2 2 x3  20

 25
 x2 2 x3  23
 2
 567 567
 x3 
 50 50

Vậy hệ có nghiệm x  (3,2,1).


*

2.2 Code chương trình:


subroutine gauss(a,f,x,n)
implicit none
integer n
double precision a(n,n), f(n), x(n)
double precision s(n)
double precision c, pivot, store

9
Đồ án 1

integer i, j, k, l
!!!!! rút gon theo hàng
do k=1, n-1
!!!! tim gia tri lon nhat trong hang
do i=k,n
s(i) = 0.0
do j=k,n
s(i) = max(s(i),abs(a(i,j)))
end do
end do
pivot = abs(a(k,k)/s(k))
l=k
do j=k+1,n
if(abs(a(j,k)/s(j)) > pivot) then
pivot = abs(a(j,k)/s(j))
l=j
end if
end do
!!!!!!!!!!

if(pivot == 0.0) then


write(*,*) ' khong the giai hpt theo cach nay '
return
end if
!!!! hoan doi theo dong
if (l /= k) then
do j=k,n
store = a(k,j)
a(k,j) = a(l,j)

10
Đồ án 1

a(l,j) = store
end do
store = f(k)
f(k) = f(l)
f(l) = store
end if
do i=k+1,n
c=a(i,k)/a(k,k)
a(i,k) = 0.0
f(i)=f(i)- c*f(k)
do j=k+1,n
a(i,j) = a(i,j)-c*a(k,j)
end do
end do
end do
! giai nguoc
x(n) = f(n)/a(n,n)
do i=n-1,1,-1
c=0.0
do j=i+1,n
c= c + a(i,j)*x(j)
end do
x(i) = (f(i)- c)/a(i,i)
end do
write (*,*)'nghiem phuong trinh theo Gauss la'
write (*,201) (x(i),i=1,n)
201 format (6f12.5)! làm tròn chu so thu 5

end subroutine gauss

11
Đồ án 1

Chú thích: Trong chương trình trên có khai báo một số công thức thuật toán sau,
các công thức đó được hiểu:
a(n,n): cấp phát một ma trận vuông ann .

f(n): cấp phát ma trận hệ số tự do f n .

x(n): ma trận kết quả cần tìm xn .

Các chú thích này được áp dụng cho các các thuật toán khác trong đề tài này.
2.3 Chạy thử và nhận xét
Chạy thử:
Hệ phương trình cấp 3

Hệ phương trình cấp 5

Nhận xét:
Phương pháp giải Gauss đưa cho ta các ưu điểm: thuật toán dễ hiểu, cách thức đơn
giản.
Song thuật toán Gauss cũng có vài nhược điểm của riêng mình: số lượng vòng lập
lớn, độ phức tạp của bài toán cao, thời gian chạy chương trình kéo dài, đối với các ma trận
lớn kết quả tìm được không còn chính xác, nguyên nhân là do sai số chặt cụt có trong máy
tính.

12
Đồ án 1

3. PHÂN RÃ LU
3.1 Thuật toán
Ý tưởng chính của sự phân rã LU là để ghi lại các bước sử dụng trong khử Gauss trên
một ma trận khác mà những phép biến đổi về sau không còn sử dụng nữa.
Ma trận được dùng để ghi lại các phép biến đổi được gọi là ma trận L, ma trận biến đổi
tam giác trên được gọi là ma trận U và dĩ nhiên phép biến đổi LU luôn luôn phải đảm bảo
A  LU .

Để ma trận L trở thành ma trận tam giác dưới và LU  A thì ta thêm chỉ số L ii  1 trong
ma trận L.
Ta xét ví dụ sau:

 1 2 3   1 2 3   1 2 3 
  h 22 h1   h  3  2 h  2   
A   2 5 12    (2) 1 6    (2) 1 6 
 0 2 10   0 2 10   (0) ( 2) 2 
    

1 0 0  1 2 3 
   
L   2 1 0  ;U   0 1 6 
 0 2 1  0 0 2
   
Để kiểm nghiệm lại ta kiểm tra 1 lần nữa:
 1 0 0  1 2 3   1 2 3 
    
LU   2 1 0  0 1 6    2 5 12   A
 0 2 1  0 0 2   0 2 10 
    
Khi đã đưa ma trận A về dạng tích LU thì phương trình Ax  b ta có thể giải theo
phương pháp sau:
 Ly  b
Ax  b  LUx  b  
Ux  y
Dùng biến đổi giải ngược đối với ma trận tam giác dưới và ma trận tam giác trên ta sẽ
được kết quả.
Ví dụ: Ta xét lại bài toán giải Gauss ở ví dụ trên:

13
Đồ án 1

8 x1 3x2 2 x3  20

4 x1 11x2  x3  33
6 x 3x 12 x3  36
 1 2

   
 8 3 2   8 3 2 
 8 3 2     
  h  2   h  2  
1
h 1   1  25  h  3   h  3  
21
h  2    1  25 
A   4 11 1  2
3   2   50
  2 
 6 3 12      4     2  2  2 
h 3 h 3  h 1 2
 
    3  21 21    3   21  567 
       
 4  4 2   4   50  50 
   
1 0 0 8 3 2 
   
1 25
L 1 0 ;U   0
 2 
2   2 
3 21   567 
 1 0 0 
4 50   50 
Ta tiến hành giải:
 
1 0 0
   y1   20 
1    
Ly  b   1 0   y2    33 
2    
3 21   y3   36 
 1
4 50 


 y1  20 
  y1  20
1 
  y1  y2  33   y2  23
2  567
3 21  y3 
 y1  y2  y3  36  50
4 50

 
8 3 2   
 
 1 x   20 
25    
Ux  y   0 2   x2    23 
 2  
  567 
567   3  
x
0  
0  50 
 50 

14
Đồ án 1


8 x1 3 x2 2 x3  20
  x1  3
 25 
 x2 2 x3  23   x2  2
 2 
 567 567  x3  1
 x3 
50 50

Vậy hệ có nghiệm x  (3,2,1).


*

3.2 Code chương trình:


subroutine PhanRaL_U(a,f,x,n)

implicit none
integer n
double precision a(n,n)
double precision L(n,n), U(n,n), f(n), x(n)
double precision coeff
integer i, j, k
real c
L=0.0
U=0.0

! gán l cho ma tran tam giac duoi,


!U cho ma tran tam giac tren
do k=1, n-1
do i=k+1,n
coeff=a(i,k)/a(k,k)
L(i,k) = coeff
do j=k+1,n
a(i,j) = a(i,j)-coeff*a(k,j)
end do

15
Đồ án 1

end do
end do

! truyen gia tr duong cheo chinh bang 1 cho L


do i=1,n
L(i,i) = 1.0
end do

! ma tran U chinh la ma tran A.


do j=1,n
do i=1,j
U(i,j) = a(i,j)
end do
end do
! gauss doi vi LY=B
c=0.0
do i=1,n
x(i) = (f(i)- c)
c=0.0
do j=1,i
c= c + L(i+1,j)*x(j)
end do
end do
! gauss doi voi UX=Y
f(n) = x(n)/U(n,n)
do i=n-1,1,-1
c=0.0
do j=i+1,n
c= c + U(i,j)*f(j)

16
Đồ án 1

end do
f(i) = (x(i)- c)/U(i,i)
end do
write (*,*)'nghiem phuong trinh theo phan ra LU la'
write (*,201) (f(i),i=1,n)
201 format (6f12.5)! làm tròn chu so thu 5

end subroutine
3.3 Chạy thử và nhận xét
Chạy thử:
Hệ phương trình cấp 3

Hệ phương trình cấp 5

Nhận xét:
Đối với thuật toán sử dụng bằng phương pháp phân rã LU hạn chế được khuyết
điểm về thời gian chạy của phương pháp Gauss, thời gian rút ngắn xuống còn một nữa, do
số vòng lặp giảm một nữa đối với thuật toán này.
Thuật toán vẫn mắc phải các lỗi như Gauss về độ chính xác của bài toán đối với ma
trận có hệ số lớn, số vòng lặp tuy có giảm bớt nhưng vẫn còn ở con số cao, ngoài ra do sử
dụng thêm 1 ma trận để lưu các bước khai triển Gauss nên thuật toán còn lãng phí thêm 1
lượng ô nhớ bằng với ma trận đã cho.

17
Đồ án 1

4. BA ĐƯỜNG CHÉO CHÍNH (THUẬT TOÁN THOMAS)


4.1 Thuật toán
Nói chung, một phương trình ma trận bất kì, có thể được giải quyết bằng phương pháp
Gauss hay phương pháp phân rã LU . Tuy nhiên, ngoại trừ các loại đặc biệt của ma trận hệ
số, phương pháp khử Gauss đòi hỏi rất nhiều dung lượng lưu trữ máy tính và thời gian máy
tính. Một hình thức đặc biệt có hiệu quả như khử Gauss có thể được sử dụng để giải quyết
một phương trình ma trận mà có hệ số ba đường chéo, hình thức đó ta sử dụng thuật toán
Thomas.
Ma trận ba đường chéo là ma trận mà các hệ số nằm ngoài 3 đường chéo chính bằng 0.
Để hiểu như thế nào là là ma trận ba đường chéo ta xét ví dụ tổng quát phía dưới:

Ví dụ:

 b1 c1 
a b2 c2 
 2 
 a3 b3 
 
 cn 1 
 an bn 

Để giải quyết bài toán đại số tuyến tính như trên thay vì ta phải cung cấp 1 ma trận
vuông cấp n  n đối với thuật toán Gauss hay là 2 ma trận đối với thuật toán phân rã LU .
Để tránh thực hiện các vòng lặp với hệ số 0, và lượng ô nhớ lưu trữ lớn ta xét thuật toán
tổng quát sau:

 b1 c1   x1   f1 
a b2 c2  x   f 
 2  2  2
 a3 b3   x2    f 3 
    
 cn 1     
 an bn   xn   f n 

18
Đồ án 1

 b1 x1 c1 x2   f1 
a x b x c x  f 
 2 1 2 2 3 3   2
 a3 x2 b3 x3    f3 
   
 cn 1 xn   
 an xn 1 bn xn   yn 

Nhận xét: ma trận trên ta biến đổi đưa về dạng ma trận tam giác trên bằng cách khử

lần lượt các hệ số ai ra khỏi ma trận như phép khủ Gauss nhưng chỉ thực hiện trên các hệ

số khác 0, thông qua phương pháp hàng  i    i   a ibi 1  i  1 , i  2,3,..., n.

Trên thực tế, trong khi tính toán ta chỉ cần tính các giá trị thay đổi trên đường chéo
b1 , b2 ,...,bn . và đường chéo c1 , c2 ,.., cn1.

b 1 x1 1 x2   y1 
 b2 x2  2 x3  y 
   2
 b3 x3    y3 
   
  n 1 xn   
 bn xn   yn 

Ta thực hiện giải ngược với ma trận vừa tìm được để tìm ra kết quả.

Ví dụ:

 4 1   x1   0 
  x   
 1 4 1  2   0 
 1 4 1   x3   0 
    
 1 4 1   x4    0 
  1 4 1   x5   0 
    
 1 4 1   x6   0 
 1 4 1  x7   0 
     
  
 1 4   x8  16 

19
Đồ án 1

 4 1 
 
  1 15 
1
 4 
 56  x   0 
  1 1  1   
 15   x2   0 
 209  x   0 
  1 1  3   
 56   x4   0 
 780     
  1 1   x5   0 
209
   x6   0 
  1
2911
1    
 780   x7   0 
   x8  16 
10864  
  1 1 
 2911 
 40545 
  1 
 10864 

Nghiệm của phương trình tìm được là:

 x1  0.000395
 x  0.001578
 2
 x3  0.005919

 x  0.022099
 4
 x5  0.082476
 x6  0.307806

 x7  1.148748
 x  4.287187
 8

4.2 Code chương trình:


subroutine Thomas(a,f,x,n)

integer::n,i

double precision a(n,3), f(n), x(n)

double precision coeff

do i=2,n

20
Đồ án 1

coeff=a(i,1)/a(i-1,2)

a(i,2)=a(i,2)-coeff*a(i-1,3)

f(i)=f(i)-coeff*f(i-1)

end do

!!

x(n) = f(n)/a(n,2)

do i=n-1,1,-1

x(i) = (f(i)- a(i,3)*x(i+1))/a(i,2)

end do

!!

write(*,*)"Nghiem cua phuong trinh giai theo


thomas la: "

write(*,201) (x(i), i = 1,n)

201 format(6f12.5)

end subroutine

4.3 Chạy thử và nhận xét


Chạy thử:

21
Đồ án 1

Nhận xét: Đối với các ma trận ba đường chéo chính thì thuật toán trên giúp cho bài
toán được giải quyết nhanh hơn, không tốn kém bộ nhớ như thuật toán Gauss hay thuật
toán phân rã LU . Do phương pháp biến đổi giống Gauss nên bài toán cũng mắc phải những
khuyết điểm như 2 thuật toán trên.

22
Đồ án 1

5. CÁC PHƯƠNG PHÁP LẶP ĐƠN


5.1 Kiến thức chuẩn bị
Phương pháp khử Gauss, phân rã LU đã xét ở trên, mặc dù có số phép tính ít hơn
quy tắc Cramer rất nhiều, song cũng không hiệu quả trong trường hợp hệ cỡ lớn hoặc
ma trận hệ số có nhiều số 0. Do đó trong mục này, chúng ta tiến hành nghiên cứu nhóm
phương pháp hiệu quả hơn để giải gần đúng nghiệm của hệ phương trình đại số tuyến
tính với độ chính xác tùy ý.Tất cả các phương pháp giải gần đúng hệ đại số tuyến tính
sẽ trình bày đều có chung một đặc điểm là xây dựng dãy lặp vectơ hội tụ tới nghiệm
đúng.
Trước hết chúng ta có các khái niệm sau:
Giới hạn của dãy vectơ

Cho n dãy số  x1k  ,  x2k  , ,  xnk  với k 


 k
và xi là số hạng thứ k của dãy số

thứ i.
1  2 3
Với mỗi k , đặt v k    v1 k  , v2 k  , vn
k
 n
ta có dãy vectơ v , v , v

Khi k   nếu mỗi thành phần thứ i của v


k
có giới hạn là ai thì v   a1 , a2 ,..., an 

được gọi là giới hạn của dãy v k   , và ta cũng nói v k   hội tụ tới v .

1   k   1 
Ví dụ: Xét ba dãy   ;   ;  2  thì ta được một dãy vectơ hội tụ đến
 k   2k  1   k 
 1 
v   0; ;0  .
 2 

Định nghĩa: Với v   x1 , x2 ,...xn   , gọi max  x1 , x2 


n
xn là chuẩn vô hạn của

vectơ v , và ký hiệu
v 
 max  x1 , x2 , xn 
Chuẩn vô hạn thỏa mãn ba tích chất sau:
(i) v  0 với dấu "=" xảy ra khi và chỉ khi v  0 .

(ii) cv  c v đối với vô hướng c bất kỳ.

23
Đồ án 1

(iii) v  w  v  w (bất đẳng thức Tam giác).

Nhờ khái niệm chuẩn vô hạn, ta có định lý về tiêu chuẩn hội tụ.
Định lý: v k   hội tụ tới v nếu và chỉ nếu v k   v*  0 khi k  

Trong việc xác lập sự hội tụ của một dãy vectơ tới nghiệm đúng và đánh giá sai số
của nghiệm xấp xỉ so với nghiệm đúng ta cũng cần đến khái niệm chuẩn của ma trận.
Định nghĩa: Chuẩn vô hạn của ma trận thực B   bij nn , ký hiệu B  , là số thực

n n n 
B 
 max  b1 j ,  b2 j ,  bnj 
 j 1 j 1 j 1 

 0 0.03 0.02 
 0.02 0.04 
Ví dụ:  0
 0.04 0.01 0 

Có B 
 max 0.05;0.06;0.05  0.06

Nội dung phương pháp lặp đơn.


Cho hệ Ax  b cỡ n  n. Có nhiều cách để đưa hệ này về dạng x  Bx  g tương
đương.
Ví dụ, tách A = S - T, trong đó S khả nghịch, thì:
Ax  b  Sx  Tx  b.
1 1
Đặt B  S T , g  S b , ta có hệ x  Bx  g .
Xây dựng dãy vectơ v k   như sau:

v
0
Cho trước cho rồi tính v  theo công thức
1

v  Bv   g , k   0,1, 2,...


k 1 k
(2.1)

(2.1) là công thức tính lặp, k  1 là số lần lặp.


Phương pháp tính v k   thế này là phương pháp lặp đơn.

Nếu v k   hội tụ thì ta nói phương pháp lặp đơn hội tụ.

24
Đồ án 1

 k 1
Giả sử v k    v* . Lấy giới hạn ở hai vế của v  Bv k   g.

Ta có:

v*  Bv*  g ,
 v
*
là nghiệm của x  Bx  g , tức cũng là nghiệm của Ax  b .
Với   0 cho trước, nếu k đủ lớn ta luôn có:
v k   v* 

Khi đó ta nói v
k
là nghiệm xấp xỉ của nghiệm đúng với độ chính xác  .
v
k
Trong thực hành, ta bắt buộc phải dừng tính toán ở bước thứ k nào đó và xem
là nghiệm gần đúng.

5.2 Phương pháp Jacobi


5.2.1 Thuật toán
Nếu trong hệ Ax  b ma trận A có tất cả các phần tử trên đường chéo khác 0, tách
A  S T, với

 a11   0 a12 a1n 


   a2 n 
S
a22  , T   a21 0
   
   
 ann   an1 an 2 0 

thì Ax  b  Sx  Tx  b.
1 1
Đặt g  S b , và B  S T  x  Bx  g.
 k 1
Phương pháp lặp đơn tiến hành theo công thức v  Bvk   g được gọi là phương
pháp Jacobi.
Phương pháp Jacobi sẽ hội tụ, nếu A   aij nn là ma trận đường chéo trội, tức là

i  1, 2,..., n; aii  ai1  ai 2   aii 1  aii 1   ain .

Ví dụ 3.1: Xét hệ phương trình

25
Đồ án 1

10 x1 2 x2  x3  10  x1  0.2 x2 0.1x3 10


 
 x1 10 x2 2 x3  12   x2  0.1x1 0.2 x3 1.2
 x  x2 10 x3 8 x  0.1x1 0.1x2 0.8
 1  3
Hệ trên tương đương x  Bx  g với:

 0 0.2 0.1 1 
B   0.1 0 0.2  , g  1.2 
 0.1 0.1 0  0.8

Với v k 1   x1 k 1 , x2 k 1 , x3 k 1  , với v  k    x1 k  , x2 k  , x 3 k   xây dựng công thức tính lặp

v k 1  Bvk   g , tức là:

x1
k 1
 0.2 x2  0.1x3
k
10
k

x2
k 1
 0.1x1
k
0.2 x3
k
1.2
x3 k 1  0.1x1 k  0.1x2 k  0.8

Xấp xỉ với x0   0,0,0 ta thu được kết quả, thể hiện ở bảng sau:

K 𝑥1 𝑥2 𝑥3

1 1 1.2 0.8

2 0.68 0.94 0.58

3 0.754 1.016 0.638

4 0.733 0.997 0.623

5 0.7383 1.0021 0.6273

6 0.73688 1.00077 0.62596

7 0.737250 1.000112 0.626235

26
Đồ án 1

*  707 956 598 


Có thể thấy nghiệm đúng của hệ này là x   , ,  do đó nghiệm x
7

 955 955 955 


tương đối chính xác.
5.2.2 Sự hội tụ của phương pháp và sai số của nghiệm xấp xỉ
Phương pháp lặp đơn áp dụng cho x  Bx  g với B   bij nn .

Định lý: Nếu B 


 1 , thì với mọi v  
0 n
cho trước dãy v k   xác định bởi sai số sau:

1
v k   v*  B v1  v 0
k

 
1 B 

Nhận xét:
1) Với điều kiện của định lý, và với v
0
và   0 chọn trước, số lần lặp k để nghiệm
xấp xỉ đạt độ chính xác  (tức là v k   v*  ) xác định từ bất phương trình:

1
v1  v 0 
k
B 
1 B 

2) Sai số trong quá trình tính toán không ảnh hưởng đến kết quả cuối cùng (Phương
phương pháp lặp đơn có khả năng tự sửa sai, phép lặp đơn thực hiện cho tới khi
v k   v*  cho trước).

Ví dụ 2: Quay lại ví dụ 1. B   0.3  1 , nên phương pháp lặp đơn hội tụ.

v
7
v
*
Đánh giá sai số của so với nghiệm đúng :
v   v   1,1.2,0.8
1 0

1
v 7   v*  B v1  v 0
7

1 B 

0.37
  1.2  3.7 104
1  0.3

5.2.3 Code chương trình:


subroutine jacobi(a,f,x,n)

27
Đồ án 1

!implicit none

integer n

double precision a(n,n)

double precision f(n), x(n),x0(n), tam(n)

integer i,j,Kmax,k

real::eps

Kmax=10000

eps=0.00001

i=0

x=0 ! gan x(i) =0

tam = x

! bien doi a ve bx + g

do i = 1, n

f(i) = f(i)/a(i,i)

do j = 1, n

if(i/=j) then

if(a(i,i) /= 0 .and. abs(a(i,i)) >=


abs(a(i,j))) then

a(i,j) = a(i,j)/a(i,i)

else

write(*,*) "ma tran da cho khong hoi


tu"

28
Đồ án 1

return

end if

end if

end do

a(i,i) = 0

end do

i=1

!!!!!!!!!!!!!!!!!!!!! giai tim x(n)

do while (.true.)

x0=x

do j=1,n

c=0.0

do k=1,n

c=a(j,k)*x(k)+c

end do

tam(j)= -c+f(j)

end do

x = tam

! write(*,*) (x(k), k=1,n)

if(chuanmax(x-x0,n)<eps) then

write (*,*)" nghiem cua phuong trinh


theo Jacobi"
29
Đồ án 1

write (*,201)(x(k),k=1,n)

write(*,*)"so lan lap", i

return !!!!! thoat khoi vong lap,


chuong trinh khi tim ra nghiem

end if

i = i+1

end do

201 format (6f12.5)! làm tròn chu so thu 5

end subroutine

Chú thích: Trong chương trình trên có sử dụng hàm chuanmax(), hàm này được
định nghĩa như sau:

function chuanmax(x,n)

integer n

double precision x(n)

real :: s, chuanmax

integer :: i

s = x(1)

do i = 1, n

if (s < abs(x(i))) then

s = abs(x(i))

end if

30
Đồ án 1

end do

chuanmax = s

end function chuanmax

5.2.4 Chạy thử và nhận xét


Chạy thử:

Hệ phương trình cấp 3

Hệ phương trình cấp 5

Nhận xét:

Ưu điểm: đối với bài toán giải bằng phương pháp jacobi ta tiết kiệm được bộ
nhớ máy tính, đảm bảo được thời gian thực hiện chương trình, số lần lặp cũng như thời
gian chạy giảm đáng kể so với các phương pháp trên, ngoài ra nghiệm cần tìm có độ
chính xác cao hơn đối với các ma trận có hệ số lớn, nguyên nhân là do thực hiện kiểm
tra độ chính xác sau mỗi lần lặp.

31
Đồ án 1

Nhược điểm của bài toán này là không phải tất cả các phương trình có nghiệm
đều hội tụ (chỉ áp dụng cho ma trận đường chéo trội), nếu hệ số hội tụ quá lớn thì ma
trận sẽ lâu hội tụ về ma trận kết quả.

5.3 Phương pháp Gauss-Seidel


5.3.1 Thuật toán
Quay lại Ví dụ trên trong phương pháp lặp đơn v k 1   v1 k 1 , v2 k 1 , v3 k 1  , tính qua
k

v    v1  , v2  , v3
k k k
 nhờ:
x1
k 1
 0.2 x2   0.1x3   1
k k

x2 k 1  0.1x1 k   0.2 x3 k   1.2


x3
k 1
 0.1x1   0.1x2   0.8
k k

 k 1  k 1
Cải tiến: Khi tính x2 sử dụng ngay x1 vừa tính được

x2 k 1  0.1x1 k 1  0.2 x3 k   1.2


 k 1  k 1  k 1
Khi tính x3 sử dụng ngay x1 , x2 vừa tính được

x3 k 1  0.1x1 k 1  0.1x2 k 1  0.8


Cụ thể:
v
k 1
 v1 k 1
, v2
k 1
, v3
k 1
 , qua v    v  , v  , v   theo các công thức:
k
1
k
2
k
3
k

x1
k 1
 0.2 x2   0.1x3   1
k k

x2 k 1  0.1x1 k 1  0.2 x3 k   1.2


x3
k 1
 0.1x1
k 1
 0.1x2
k 1
 0.8

Với v 0   0,0,0  , ta tính được  x11 , x12 , x31  với:

x11  0.2  0   0.1 0   1  1


x12  0.11  0.2  0   1.2  1.1
x31  0.11  0.11.1  0.8  0.59

 v   1,1.1,0.59 
1

5.3.2 Sự hội tụ của phương pháp Seidel và đánh giá sai số của nghiệm xấp xỉ

32
Đồ án 1

Phương pháp Seidel áp dụng cho phương trình x  Bx  g với B   bij nn .

Định lý: Nếu B 


 1, thì với mọi v  
0 n
phương pháp Gauss Seidel đều hội tụ tới

nghiệm duy nhất v của x  Bx  g x. Hơn nữa có đánh giá sai số:
1
v k   v*  v 1  v 0
 1 B 

Trong đó:
i
  max với ai  bi1  bi 2   bii 1 , i  bii 1   bin .
in i
5.3.3 Code chương trình:
subroutine Gauss_Seidel(a,f,x,n)!!!! lap cai tien

!implicit none
integer n
double precision a(n,n)
double precision f(n), x(n),x0(n)
integer i,j,k
real::eps
i=0
eps=0.00001

x=0 ! gan x(i) =0

! bien doi a ve bx + g
do i = 1, n
f(i) = f(i)/a(i,i)
do j = 1, n
if(i/=j) then
if(a(i,i) /= 0 .and. abs(a(i,i)) >= abs(a(i,j)))

33
Đồ án 1

then
a(i,j) = a(i,j)/a(i,i)
else
write(*,*) "ma tran da cho khong hoi tu"
return
end if
end if
end do
a(i,i) = 0
end do
i=1
!!!!!!!!!!!!!!!!!!!!! giai tim x(n)
do while (.true.)
x0=x
do j=1,n
c=0.0
do k=1,n
c=a(j,k)*x(k)+c
end do
x(j)=-c+f(j)
end do
if(chuanmax(x-x0,n)<eps) then
write (*,*)" nghiem cua phuong trinh theo
Gauss Seidel"
write (*,201)(x(k),k=1,n)
write(*,*)"so lan lap", i
return !!!!! thoat khoi vong lap, chuong trinh
khi tim ra nghiem
end if

34
Đồ án 1

i = i+1
end do
201 format (6f12.5)! làm tròn chu so thu 5

end subroutine
Chú thích: Hàm chuanmax() ở đây được định nghĩa như trên thuật toán Jacobi.
5.3.4 Chạy thử và nhận xét
Chạy thử:

Hệ phương trình cấp 3

Hệ phương trình cấp 5

Nhận xét: Đối với phương pháp Gauss-Seidel hay còn được gọi là phương pháp
lặp cải tiến với các ưu điểm sau: sử dụng ít bộ nhớ máy, thời gian, tốc độ hội tụ về
nghiệm nhanh hơn phương pháp jacobi. Và cũng mắc phải những nhược điểm như
phương pháp jacobi về độ hội tụ của bài toán đã cho.

35
Đồ án 1

6. Ứng dụng
Bài toán giải hệ phương trình tuyến tính có rất nhiều ứng dụng trong thực tế bao gồm
cả ứng dụng trong kinh doanh cũng như ứng dụng trong kĩ thuật. Một trong những ứng
dụng thường được nhắc đến là:
6.1 Điều Khiển Lưu Lượng Giao Thông
Vào giờ cao điểm, vấn đề kẹt xe thường bắt gặp tại các đoạn đường giao nhau như trong
hình. Cả thành phố muốn cải thiện tín hiệu giao thông tại các góc đường để cải thiện lưu
lượng giao thông. Tất cả các con đường đều là một chiều và hướng đi của các con đường
được chỉ bởi các mũi tên.

Dữ liệu thu thập được: Các kĩ sư thiết kế giao thông đã thu thập được các thông tin sau:
1. Góc A:
Có 700 xe mỗi giờ đổ xuống Spruce Street đến giao điểm A.
Có 300 xe mỗi giờ đổ xuống 9th Street đến giao điểm A.
2. Góc B:
Có 200 xe mỗi giờ rời khỏi giao điểm B trên Spruce Street.
36
Đồ án 1

Có 900 xe mỗi giờ rời khỏi giao điểm B tên 10th Street.
3. Góc C:
Có 400 xe mỗi giờ tiến vào Pine Street đến giao điểm C.
Có 300 xe mỗi giờ đổ xuống 10th Street đến giao điểm C.
4. Góc D:
Có 200 xe mỗi giờ rời khỏi giao điểm D trên Pine Street.
Có 400 xe mỗi giờ rời khỏi giao điểm D trên 9th Street đến giao điểm
A.

Giới thiệu các ký hiệu:

Gọi x1 là số xe rời khỏi góc A trên Spruce Street tiến đến góc B.
Gọi x2 là số xe tiến đến góc B trên 10th Street từ góc C.
Gọi x3 là số xe rời khỏi góc C trên Pine Street tiến đến góc D.
Gọi x4 là số xe tiến đến góc D trên 9th Street từ góc A.
Giải pháp: Ta giả thuyết như sau:

37
Đồ án 1

a) Để tăng tốc lưu lượng giao thông của mỗi xe tiến đến một giao điểm
cũng đồng thời rời khỏi, do đó tại mỗi góc số lượng xe tiến đền cũng
phải bằng với số lượng xe rời khỏi.
b) Tất cả các con đường là một chiều.
c) Tất cả các biến x1 , x2 , x3 và x4 đều chắc chắn là số nguyên vì nó biểu
thị cho số lượng xe.

Phương Trình: sử dụng giả thuyết a) cho mỗi góc chúng ta có được phương trình sau:
Tại góc A Tại góc B Tại góc C Tại góc D

x1  x4  700  300 x1  x2  900  200 x2  x3  400  300 x3  x4  400  200

Bốn phương trình trên tạo thành một hệ phương trình đại số tuyến tính có thể giải
được bằng phương pháp Gauss:
 x1  x4  1000
x  x2  1100
 1

 x2  x3  700

 x3  x4  600

6.2 Ứng dụng trong kĩ thuật điều khiển điện, điện tử


Một trong những ứng dụng quan trọng nhất của đại số tuyến tính khi nhắc đến điện,
điện tử là để phân tích mạch điện tử. Mục đích là để tính toán điện chạy trong mỗi
nhánh của mạch điện hoặc tính toán điện áp tại mỗi nút của mạch điện.

Tính toán đúng điện áp tại mỗi nhánh cũng như tại mỗi nút của dòng điện giúp cho
38
Đồ án 1

giảm thiểu tai nạng về điện.

6.3 Ứng dụng trong kĩ thuật xây dựng


Đại số tuyến tính được sử dụng khá nhiều trong kết cấu kỹ thuật, đây là một lý do
rất đơn giản. Phân tích của một cấu trúc cân bằng liên quan đến viết ra nhiều phương
trình nhiều ẩn số. Ví dụ như hình bên dưới:

Các dầm được nối với nhau bằng chân mịn màng, và sự hỗ trợ được gắn chặt để họ
không thể di chuyển. Một phân tích đơn giản, bằng cách sử dụng phương pháp của các
khớp xương, giả định rằng các lực lượng bên ngoài sẽ chỉ hoạt động ở các khớp, và
rằng các tia sáng là hoàn toàn cứng nhắc. Điều này cho phép chỉ có lực lượng theo chiều
dọc trong các dầm. Với những giả định, các giàn là ổn định khi và chỉ khi các thành
phần dọc và ngang của các lực bằng 0.

6.4 Ứng dụng trong kĩ thuật cơ khí


Lý tưởng hóa hệ thống lò xo khối lượng có nhiều ứng dụng trong kỹ thuật và đại số
tuyến tính thành công có thể được áp dụng để giải quyết những vấn đề liên quan đến hệ
thống như vậy.
Hệ thống lò xo khối lượng đóng một vai trò quan trọng trong hệ thống kỹ thuật cơ
khí và khác. Một hệ thống như vậy được thể hiện trong hình:

39
Đồ án 1

Hệ phương trình đại số tuyến tính giúp cho tính toán chính xác của các hệ vật.

6.5 Ứng dụng để phân phối nhiệt độ


Xem xét các mặt cắt ngang của một tấm kim loại hình chữ nhật dài. Như bạn có thể
tưởng tượng, những ranh giới của tấm có thể có ba nhiệt độ khác nhau, biểu đồ dưới
đây thể hiện cho tình trạng này:

Các con số đại diện cho nhiệt độ (theo độ C) của ranh giới. Kỹ sư quan tâm muốn
biết sự phân bố nhiệt độ bên trong tấm trong một thời gian nhất định để họ có thể xác
định ứng suất nhiệt mà tấm phải chịu. Giả sử nhiệt độ ranh giới được tổ chức liên tục
trong khoảng thời gian cụ thể, nhiệt độ bên trong các tấm sẽ đạt trạng thái cân bằng
nhất định sau một thời gian đã trôi qua. Việc tìm kiếm này phân bố nhiệt độ cân bằng
tại các điểm khác nhau trên các tấm là mong muốn, nhưng vô cùng khó khăn. Tuy
nhiên, người ta có thể xem xét một vài điểm trên tấm và khoảng nhiệt độ của các điểm.

40
Đồ án 1

KẾT LUẬN
Với những phương pháp tính giá trị xấp xỉ được liệt kê ở trên chúng em có đưa ra
nhận xét sau:
Phương pháp Gauss thực hiện chính xác các phương trình có số ẩn thấp song với
những phương trình có số ẩn lớn phương pháp này không còn chính xác nữa, phương
pháp phân rã LU cũng như phương pháp Gauss nhưng số lần lập giảm xuống đáng kể,
giảm thời gian chạy của chương trình xuống gần một nữa thời gian đối với phương pháp
Gauss. Đối với các phương pháp lặp thì ưu điểm là thời gian chạy và tiết kiệm bộ nhớ
của chương trình đối với các hệ phương trình lớn. Nhưng những có sổ ẩn thấp thì ta
không nên sử dụng phương pháp này vì thời gian chạy khá lâu.
Phương pháp ba đường chéo chính chỉ áp dụng cho trường hợp đặc biệt.
Với phương pháp xấp xỉ chúng em đã đưa ra được ưu, nhược điểm của từng phương
pháp, sử dụng phương pháp nào đối với từng trường hợp cụ thể để tránh lãng phí bộ
nhớ máy cũng như thời gian chạy của từng chương trình. So sánh được thời gian chạy
từng chương trình đối với từng thuật toán.
Bên cạnh đó chúng em chưa có đủ thời gian để xây dựng đầy đủ hơn các phương
pháp tính giá trị xấp xỉ khác, từ lúc thuật toán đưa ra cho tới khi chương trình thực hiện
khá lâu dẫn đến thiếu những thuật toán quang trọng như Gauss Jordan...
Với đề tài là “tính gần đúng nghiệm của một phương trình đại số tuyến tính” chúng
em còn mong muốn đề tài phát triển hơn nữa giúp ích cho tính toán lưu lượng lưu thông
trên các đoạn đường trong nội thành hay đơn giản hơn là tính gần đúng giá trị xấp xỉ
của ma trận nghịch đảo....

41
Đồ án 1

Tài Liệu Tham khảo


1. David Kincaid and Ward Cheney, Numerical Analysis Mathematics of Scientific
Computing,The University of Texas at Austin, 1991.
2. William H. Press, Saul A. Teukolsky, William T. Vetterling, Brian
P.Flannery, Numerical Recipes in Fortran 77: The Art of Scientific Computing
(Vol. 1 of Fortran Numerical Recipes), Cambridge University, 1986.
3. Bishan Li Regina, Saskatchewan, Generalizations of Diagonal Dominance in
Matrix theory, Bishan Li, October 1997.
4. Đặng Văn Liệt, Gải tích số, NXB ĐH Quốc Gia TP Hồ Chí Minh, 2004.
5. Lê Minh Lưu, Giải Tích Số (bài giảng tóm tắc), ĐH Đà Lạt, 2009.
6. Phạm Văn Huấn, Ngôn ngữ lập trình fortran và ứng dụng trong khí tượng
thủy văn, NXB Nông nghiệp, 2005.
7. Phan Văn Tân, Ngôn Ngữ Lập Trình Fortran 90, NXB Đại học Quốc gia Hà
Nội, 2007
8. Các trang web trong và ngoài nước khác....

42

You might also like