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 Crame
Trang 1TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG TP.HCM
KHOA TOÁN -THỐNG KÊ
TP Hồ Chí Minh, tháng 11 năm 2013
Trang 2NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
Trang 3
Lời cảm ơnTrong 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
Trang 4Lờ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
Trang 5Mụ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
Trang 65.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
Trang 7TÍNH GẦN ĐÚNG NGHIỆM CỦA MỘT HỆ PHƯƠNG TRÌNH
đó, 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:
Trang 8có đượ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 a a11, 21, , 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 – a a , 11 21 a a11 31, , a a11 n1 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ử
2
x 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:
Trang 93 3 2 50 4
integer n double precision a(n,n), f(n), x(n) double precision s(n)
double precision c, pivot, store
Trang 10end do pivot = abs(a(k,k)/s(k))
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)
Trang 11a(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
Trang 12Chú 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:
Trang 143 3 1 4
1 0 0
20 1
20 25
2
567 567
Trang 151 2 3
1
3 3
3 25
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
Trang 16end 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
do j=1,i
c= c + L(i+1,j)*x(j) end do
Trang 17end 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
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
Trang 184 BA ĐƯỜNG CHÉO CHÍNH (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:
Trang 19Nhậ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 b i i1 i1 ,i2,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
Trang 2016 10864
2911
40545 1
10864
x x x x x x x x
Trang 21coeff=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)
4.3 Chạy thử và nhận xét
Chạy thử:
Trang 22Nhậ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
Trang 235 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 , , x n k với k và k
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 v0
(ii) cv c v đối với vô hướng c bất kỳ
Trang 24(iii) vw 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ụ
Cho hệ Axb cỡ n n Có nhiều cách để đưa hệ này về dạng xBxg tương đương
Trang 25 là nghiệm củaxBxg, tức cũng là nghiệm của Axb
Với 0 cho trước, nếu k đủ lớn ta luôn có:
0
n n
Phương pháp lặp đơn tiến hành theo công thức k 1 k
v Bv 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
Trang 261.2 0.94 1.016 0.997 1.0021 1.00077 1.000112
0.8 0.58 0.638 0.623 0.6273 0.62596 0.626235
Trang 27Có thể thấy nghiệm đúng của hệ này là * 707 956 598
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 xBxg với ij
n n
Định lý: Nếu B 1, thì với mọi v 0 ncho trước dãy k
v xác định bởi sai số sau:
1
k k
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ụ
Đánh giá sai số của 7
Trang 28!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"
Trang 29return
end if end if
end do a(i,i) = 0
end do
i=1 !!!!!!!!!!!!!!!!!!!!! giai tim x(n)
tam(j)= -c+f(j) end do
Trang 30write (*,201)(x(k),k=1,n)
write(*,*)"so lan lap", i return !!!!! thoat khoi vong lap, chuong trinh khi tim ra nghiem
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
Trang 31end do
chuanmax = s end function chuanmax
Ư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
Trang 32Nhượ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ả.
0.2 0 0.1 0 1 10.1 1 0.2 0 1.2 1.10.1 1 0.1 1.1 0.8 0.59
x x x
Trang 33Phương pháp Seidel áp dụng cho phương trình xBxgvới ij
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)))
Trang 34then
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
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
Trang 35i = i+1 end do
201 format (6f12.5)! làm tròn chu so thu 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
Trang 366 Ứ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
Trang 37Có 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:
Trang 38a) Để 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 x x x1, ,2 3 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:
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
Trang 39giả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: