Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 42 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
42
Dung lượng
919,94 KB
Nội dung
TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM TRƯỜNG ĐẠI HỌC TƠN ĐỨC THẮNG TP.HCM KHOA TỐN -THỐNG KÊ ĐỒ ÁN TỐN 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 NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN Đồ án Lời cảm ơn Trong trình thực báo cáo đồ án này, nhóm chúng em nhận nhiều giúp đỡ từ thầy khoa Tố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 kiến thức, kinh nghiệm quý báu suốt trình học tập, với giúp đỡ khơng ngừng gia đình bạn bè Nhờ mà nhóm chúng em hồn thành báo cáo đồ án mong muốn Nay xin cho phép chúng em gửi lời cảm ơn đến thầy Đặ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 bảo tận tình cho chúng em, tạo điều kiện thuận lợi nguồn động lực quan trọng để nhóm chúng em hồn thành tốt báo cáo đồ án Nhóm xin gửi lởi cảm ơn chân thành tới gia đình bạn bè động viên, khuyến khích nhóm lúc khó khăn Một lần nhóm chúng em xin chân thành cảm ơn Chúc tất người sức khỏe thành đạt TP.HCM ngày 20, tháng 11, năm 2013 Đồ án Lời nói đầu Đối với hệ phương trình ta ln có cách tính xác nghiệm Người ta xây dựng cách tính nghiệm xác thơng qua công thức Cramer, công thức Cramer hệ phương trình có số ẩn thấp khơng phức tạp việc sử dụng công thức Cramer đơn giản hệ phương trình có số ẩn lớn Do người ta xây dựng cách tính giá trị xấp xỉ hệ phương trình với độ xác từ thấp đến cao, từ khơng thể đến xác định độ xác tập nghiệm Phương pháp tính giá trị xấp xỉ chấp nhận độ sai lệ giá trị xấp xỉ nghiệm xác phương trình bé cho trước Từ nhóm chúng em định chọn để tài “tính gần nghiệm phương trình đại số tuyến tính” để sâu vào tìm hiểu phương thức tính giá trị xấp xỉ 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ó nhiều, chúng em liệt kê số phương pháp thơng dụng, có độ xác cao áp dụng vào thực tế TP.HCM ngày 20, tháng 11, năm 2013 Đồ án Mục Lục Trang PHẦN MỞ ĐẦU PHƯƠNG PHÁP KHỬ GAUSS 2.1 Thuật toán 2.2 Code chương trình 2.3 Chạy thử nhận xét 12 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ử nhận xét 17 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ử nhận xét 21 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ụ phương pháp sai số nghiệm xấp xỉ 27 5.2.3 Code chương trình 27 5.2.4 Chạy thử nhận xét 31 5.3 Phương pháp Gauss-Seidel 32 Đồ án 5.3.1 Thuật toán 32 5.3.2 Sự hội tụ phương pháp Seidel đánh giá sai số nghiệm xấp xỉ 32 5.3.3 Code chương trình 33 5.3.4 Chạy thử nhận xét 35 Ứng dụng 36 KẾT LUẬN 41 Tài Liệu Tham khảo 42 Đồ án TÍNH GẦN ĐÚNG NGHIỆM CỦA MỘT HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH PHẦN MỞ ĐẦU Nhiều vấn đề khoa học, kỹ thuật, kinh tế, môi trường… qui việc giải hệ phương trình đại số tuyến tính: a11 x1 a12 x2 a x a x 21 22 an1 x1 an x2 Đặt A aij nn ma trận hệ số, b n a1n xn b1 a2 n xn b2 (1.1) ann xn bn ma trận cột hệ số tự cho trước, x n vectơ phải tìm, hệ (1.1) viết dạng: Ax b (1.2) Về phương diện lý thuyết, hệ (1.2) giải trọn vẹn nhờ lý thuyết ma trận định thức Tuy nhiên, với trường hợp ma trận không suy biến, giải phương pháp Cramer số phép tính lớn, cỡ n!, n phép tính nhân chia Nhằm khắc phục hạn chế đó, chương xét số phương pháp giải thực tế hệ phương trình (1.2) với đặc điểm chung khối lượng tính tốn giảm nhẹ Trong số phương pháp chia làm hai nhóm phương pháp lớn nhóm phương pháp trực tiếp nhóm phương pháp gián tiếp Đặc điểm chung nhóm phương pháp trực tiếp sau số hữu hạn phép tính có kết quả, nhóm phương pháp thường áp dụng với số tốn có kích thước nhỏ, với số liệu ban đầu Tuy nhiên phải thực số phép tính tương đối lớn nên có nguy tích lũy sai số, trường hợp số liệu ban đầu khơng thật xác Cịn với nhóm phương pháp gián tiếp (phương pháp lặp) thường áp dụng cho lớp tốn có kích thước lớn, số liệu ban đầu có sai số Với mục đích giải toán thực tế, đặc điểm chung là tốn cho với ma trận vng cấp n n phương trình ln tồn nghiệm Các trường hợp khác ta không áp dụng với phương pháp giải sau: Đồ án PHƯƠNG PHÁP KHỬ GAUSS 2.1 Thuật toán Tư tưởng phương pháp khử Gauss đưa hệ phương trình (1.2) dạng tam giác trên, lúc nghiệm tìm nhờ phương pháp ngược Quá trình đưa hệ (1.2) hệ tương đương dạng tam giác gọi trình khử, thực lược đồ sau đây: a) Tìm giá trị lớn hàng ma trận A, sau ta lấy giá trị a11 , a21 , , an1 chia cho giá trị lớn hàng vừa tìm có giá trị lớn b) Hốn vị lên dịng giá trị phép chia a11 , a21 , , an1 giá trị lớn tương ứng hàng lớn c) Sau nhân phương trình với – a11a 21 , a11a31 , , a11an1 theo thứ tự, cộng vào phương trình thứ hai, thứ ba, … thứ n Bằng cách ta khử x1 khỏi phương trình hệ từ phương trình thứ hai trở Bước ta khử x2 khỏi phương trình từ thứ ba trở đi… Sau số hữu hạn bước, ta đưa hệ (1.2) dạng tam giác sau đây: c11 x1 Khi nghiệm x* x1* , x2* , xn* c12 x2 c1n xn d1 c22 x2 c2 n xn d2 cnn xn dn n tìm nhờ phép ngược Ví dụ: Giải hệ phương trình: 8 x1 3x2 4 x1 11x2 6 x 3x 2 x3 20 x3 33 12 x3 36 Giải: Đồ án 3 20 Ta đưa hệ phương trình ma trận 11 1 33 12 36 Ta thấy nên khơng đổi vị trí hàng thứ 11 12 3 20 3 20 25 h 2h 2 h1 11 33 23 12 36 12 36 Ta thấy 25 / 21 / khơng cần thay đổi vị trí hàng hàng 25 / 21 / 8 h3 h3 h1 0 0 3 25 21 8 20 h h 21 h 50 2 23 0 21 0 21 Như hệ cho tương đương với hệ: 8 x1 3 x2 2 x3 20 25 x2 2 x3 23 567 x3 50 567 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 3 25 2 567 50 20 23 567 50 Đồ án integer i, j, k, l !!!!! rút gon theo hàng k=1, n-1 !!!! tim gia tri lon nhat hang i=k,n s(i) = 0.0 j=k,n s(i) = max(s(i),abs(a(i,j))) end end pivot = abs(a(k,k)/s(k)) l=k 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 !!!!!!!!!! if(pivot == 0.0) then write(*,*) ' khong the giai hpt theo cach ' return end if !!!! hoan doi theo dong if (l /= k) then j=k,n store = a(k,j) a(k,j) = a(l,j) 10 Đồ án !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 i = 1, n f(i) = f(i)/a(i,i) j = 1, n if(i/=j) then if(a(i,i) /= 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 return end if end if end a(i,i) = end i=1 !!!!!!!!!!!!!!!!!!!!! giai tim x(n) while (.true.) x0=x j=1,n c=0.0 k=1,n c=a(j,k)*x(k)+c end tam(j)= -c+f(j) end x = tam ! write(*,*) (x(k), k=1,n) if(chuanmax(x-x0,n)= abs(a(i,j))) 33 Đồ án 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 a(i,i) = end i=1 !!!!!!!!!!!!!!!!!!!!! giai tim x(n) while (.true.) x0=x j=1,n c=0.0 k=1,n c=a(j,k)*x(k)+c end x(j)=-c+f(j) end if(chuanmax(x-x0,n)