1. Trang chủ
  2. » Luận Văn - Báo Cáo

Phương pháp lặp Conjugate Gradient và ứng dụng giải hệ phương trình tuyến tính

17 124 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 17
Dung lượng 724,54 KB

Nội dung

ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA Môn Đại Số Tuyến Tính BÁO CÁO BÀI TẬP LỚN ĐỀ TÀI SỐ 31 SỬ DỤNG PHƯƠNG PHÁP LẶP CONJUGATE GRADIENT ĐỂ GIẢI HỆ PHƯƠNG TRÌNH TUYẾN TÍNH Nhóm 3 Lớp.

ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA Mơn: Đại Số Tuyến Tính BÁO CÁO BÀI TẬP LỚN ĐỀ TÀI SỐ 31 SỬ DỤNG PHƯƠNG PHÁP LẶP CONJUGATE GRADIENT ĐỂ GIẢI HỆ PHƯƠNG TRÌNH TUYẾN TÍNH Nhóm - Lớp DT01 Nguyễn Xn Anh 2010872 Phan Trung Anh 1912608 Trần Ngọc Thùy Trinh 2115076 Thân Thái Tuấn 2115190 Nguyễn Trương Tiến Đạt 1952648 GVHD: TS Đặng Văn Vinh Thành phố Hồ Chí Minh - 2022 MỤC LỤC I Cơ sở lý thuyết: A Giới thiệu chung phương pháp lặp Đặt vấn đề: Tính chất phương pháp lặp: B Phương pháp lặp Conjugate Gradient Giới thiệu chung : Nội dung: a Định nghĩa: b Bổ đề: c Chứng minh: Nhận xét: Để giải hệ Ax = b, ta không cần nghịch đảo ma trận cần sử dụng phép tính tích Khai triển x* coi kết vòng lặp n lần với bước nhảy  i pi Thuật toán: a Định lý 1: b Định lý 2: c Hệ quả: d Thuật toán: Điều kiện hội tụ phương pháp lặp II Chương trình sử dụng thuật toán Conjugate Gradient để giải hệ nêu ứng dụng vào toán thực tế III Tài liệu tham khảo 17 I Cơ sở lý thuyết: A Giới thiệu chung phương pháp lặp Đặt vấn đề: - Khi ma trận lớn thưa (tỉ lệ phần tử khác ít), phương pháp khử Gauss, phương pháp phân rã không hiệu (yêu cầu nhớ lớn, làm biến tính “thưa”) - Thay vào đó, ta xem xét phương pháp lập để giải hệ, tìm nghiệm gần - Phương pháp lặp có hiệu chi phí hệ lớn thưa, đặc biệt ma trận A có cấu trúc đối xứng (thường xuất rời rạc hóa phương trình đạo hàm riêng) Tính chất phương pháp lặp: - Phần lớn phương pháp lặp xây dựng dựa kỹ thuật phân tách ma trận hệ số: Xét hệ phương trình Ax = b với A  R nn ma trận không suy biến Ta tách A thành hiệu A = M – N với M thỏa mãn điều kiện cho hệ Mz = f dễ dàng giải Khi đó, hệ Ax = b trở thành Mx = Nx + b - Vì hệ Mz = f dễ dàng giải được, tức dễ dàng tính M-1f với f Do viết x =M-1Nx + M-1 b - Từ gợi ý cho ta xây dựng phương pháp lặp sau: Cho trước xấp xỉ ban đầu x(0) ta tính x(k) theo công thức: x(k+1) = M-1Nx(k) + M-1b, k = 0,1,2,… dãy hội tụ (có điều kiện, đánh giá sai số) B Phương pháp lặp Conjugate Gradient Giới thiệu chung : Phương pháp Gradient liên hợp (Conjugate Gradient) Hestenses Stiefel nêu vào năm 1950 để giải hệ phương trình đại số tuyến tính (PTĐSTT) Vì việc giải hệ phương trình tuyến tính tương đương với việc tìm cực tiểu hàm toàn phương xác định dương nên năm 1960 Fletcher – Reeves cải biên phát triển thành phương pháp Gradient liên hợp cho cực tiểu không ràng buộc Phương pháp Gradient liên hợp (CG) cần tới đạo hàm bậc làm tăng hiệu độ tin cậy thuật toán Trên sở đó, báo cáo thuật tốn CG cài đặt thử nghiệm Matlab 2 Nội dung: a Định nghĩa: Cho A  R nn ma trận đối xứng xác định dương Hệ k vectơ ( pi  n  p0 , p1 , , pk  , pi  0) gọi A-trực giao (liên hợp) nếu: piT Api  0, i  j b Bổ đề: Nếu hệ k vectơ  p0 , p1 , , pk  ( pi  n , pi  0) A-liên hợp độc lập tuyến tính c Chứng minh:  k 1  k 1   j 1 Giả sử pk  1 p1  2 p2   k 1 pk 1 pk T Apk  pk T A    j p j     j pk T Ap j  j 1 Giả sử x* nghiệm Ax = b  p0 , p1 , , pn 1 hệ n vectơ A-liên hợp n Khi hệ  p0 , p1 , , pn 1 độc lập tuyến tính, nên x*   p0  1 p1    n1 pn1  n 1   j 0  Do đó, piT Ax*  piT    j p j    i piT Api piT Ax* piT b  Từ suy  i  T pi Api piT Api n 1 n 1 i 0 i 0 Như vậy, i không phụ thuộc vào x* vậy, ta có: x*    i pi   piT b pi piT Api Nhận xét: Để giải hệ Ax = b, ta không cần nghịch đảo ma trận cần sử dụng phép tính tích Khai triển x* coi kết vịng lặp n lần với bước nhảy  i pi Thuật toán: a Định lý 1: Cho  p0 , p1 , , pn 1 hệ n vectơ A-liên hợp x(0)  Thực bước lặp bao gồm:  Cập nhật bước nhảy: x( k 1)  x( k )   k pk n phương án ban đầu  Tính Gradient f: r ( k )  b  Ax( k )  Tính:  k  pkT r ( k ) pk (b  Ax ( k ) )  piT Api piT Api Đến bước thứ n x( n)  x* b Định lý 2: Cho  p0 , p1 , , pn 1 hệ n vectơ A-liên hợp x(0)  x( k 1)  x( k )   k pk ,  k  n phương án ban đầu pkT r ( k ) piT Api 1 1   Khi x ( k )  arg  xT Ax  xT b  , x ( k )  arg  xT Ax  xT b  x  x  p x x  B 2 2   k 1 k 1 k c Hệ quả: Với giả thiết định lý 2, ta có:  r ( k )  Bk với k  piT r ( k )  với  i  k    B0  B1   Bn  n Ta thấy x( k ) cực tiểu hóa f(x) x0  Bk nên x( n) cực tiểu hóa f(x) n d Thuật tốn: Thuật toán Gradient liên hợp sau: Lấy x(0)  n tính ( Bk chọn cho pk 1 pk A-liên hợp): Khởi đầu, r0  b  Ax(0) , p0  r0 lặp theo k: x( k 1)  x( k )   k pk ,  k  r ( k 1)  r ( k )   k Apk pkT r ( k ) piT Api pk 1  r ( k 1) pkT Ar ( k 1)   k pk ,  k  T (Gram  Schmidt ) pk Apk Ta thấy phương pháp Gradient liên hợp khơng có sai số tính tốn dừng sau không n bước thu nghiệm Tuy nhiên q trình giải có sai số tính tốn nên phương pháp Gradient liên hợp coi phương pháp lặp để tìm nghiệm gần Điều kiện hội tụ phương pháp lặp Giả sử áp dụng Conjugate Gradient với hệ xác định dương Ax = b Khi k   1  A-chuẩn sai số thỏa mãn    với k  x  x0 A     x  xk A Khi   cond ( A)  max 2- số điều kiện chuẩn ma trận A min Hệ số lặp  với  số điều kiện ma trận A Theo đó, ta suy giới hạn số lần lặp lại theo  2 xx A k Nếu   , ta có k  ln    ,    x  x0 A II Chương trình sử dụng thuật tốn Conjugate Gradient để giải hệ nêu ứng dụng vào toán thực tế Ứng dụng để giải hệ phương trình tuyến tính VD: Cần thành phần khác A, B C, để sản xuất lượng hợp chất hóa học A, B C phải hòa tan nước cách riêng biệt trước chúng kết hợp lại để tạo hợp chất hóa học Biết kết hợp dung dịch chứa A với tỉ lệ 1.5 g/cm3 với dung dịch chứa B với tỉ lệ 0.8 g/cm3 dung dịch chứa C với tỉ lệ 1.2 g/cm3 tạo 13,2 g hợp chất hóa học Nếu tỉ lệ A, B, C phương án thay đổi thành tương ứng 0.8, 3.2 g/cm3 (trong thể tích giống nhau), 20.6 g chất hóa học tạo Cuối cùng, tỉ lệ tương ứng 1.2, 4.6 g/cm3, tạo 17.6 g hợp chất Thể tích dung dịch chứa A, B C bao nhiêu? Gọi x, y, z tương ứng thể tích (cm3) phương án chứa A, B C Khi 1.5x khối lượng A trường hợp đầu, 0.8y khối lượng B 1.2z khối lượng C Cộng lại với nhau, ba khối lượng tạo 13.2 g Do đó: 1.5x +0.8 y +1.2z = 13.2 Tương tự cho hai trường hợp lại, ta có hệ phương trình tuyến tính: 1.5 x  0.8 y  1.2 z  13.2  1,5 0,8 1,   x   13,        0.8 x  3.2 y  z  20.6 hay  0,8 3,   y  =  20,  1.2 z  y  4.6 z  17.6  1, 4,   z   17,         x0    Chọn xđầu =  y0  =    z  0  0   clear clf close all clc A = input('Nhap vao ma tran A ') b = input ('Nhap vao ma tran b ') [h,g] = size(b); x = input ('Chon mot gia tri x bat ki '); r = b-A*x; p = b - A*x; i=1; while norm(r) > 1e-3 a = r'*r./(p'*A*p); if h == m = x(1,1); n = x(2,1); s = [m,n]; if i == plot(m,n, '.') hold on end if i > plot([k(1) s(1)],[k(2) s(2)]) hold on end i = i+1; k = [m,n]; end if h m n o s == = x(1,1); = x(2,1); = x(3,1); = [m,n,o] if i == plot3(m,n,o, '.') hold on end if i > plot3([k(1) s(1)],[k(2) s(2)],[k(3) s(3)]) hold on end i = i+1; k = [m,n,o]; x = t = r = bet p = end X = end x + a*p; r'*r; r - a*A*p; = r'*r/t ; r + bet*p; x if h == m = X(1,1); n = X(2,1); plot(m,n,'*') plot([x(1) k(1)],[x(2) k(2)]) hold on xlabel('x') ylabel('y') grid on end if h == m = X(1,1); n = X(2,1); o = X(3,1); plot3(m,n,o,'*') plot3([x(1) k(1)],[x(2) k(2)],[x(3) k(3)]) hold on xlabel('x') ylabel('y') zlabel('z') grid on end Ta kết  x  5.1185  Vậy  y  4.6987  z  1.4694  Ứng dụng xóa mờ hình ảnh (Deblurring Images using the Conjugate Gradient Method) Ngoài ra, phương pháp lặp Conjugate Gradient cịn có ứng dụng việc xóa mờ hình ảnh Để thực điều này, ta dùng matlab để chạy chương trình viết sẵn Sau hồn tất, ta thu kết hình ảnh bên Ảnh gốc Ảnh bị làm mờ Ảnh xoá mờ Applying the Blur: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% function v = psf(sigma,x,y) % returns the value of the point spread function % We're using a Gaussian PSF (truncated far away from % its center the origin) if x >= -8 & x = -8 & y = & i-j

Ngày đăng: 16/08/2022, 22:16

TỪ KHÓA LIÊN QUAN

w