Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 75 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
75
Dung lượng
569,33 KB
Nội dung
CHƯƠNG 3: HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH §1. KHÁI NIỆM CHUNG Trong chương này chúng ta sẽ xét các phương pháp số để giải các phương trình đại số tuyến tính dạng: ⎧ a11x1 + a12 x + ⋅ ⋅ ⋅ + a1n x n = b1 ⎪ a x + a x + ⋅⋅ ⋅ + a x = b ⎪ 21 22 2n n ⎨ ⋅⋅⋅⋅⋅⋅⋅⋅⋅ ⎪ ⎪a n1x1 + a n2 x + ⋅ ⋅ ⋅ + a nn x n = b n ⎩ Các phương trình này có thể viết gọn dưới dạng: [A] [x] = [b] Trong đó: ⎡ b1 ⎤ ⎡ x1 ⎤ ⎡ a11 a12 ⋅⋅⋅ a1n ⎤ ⎢b ⎥ ⎢x ⎥ ⎢a a 22 ⋅⋅⋅ a 2n ⎥ ⎢ 2⎥ ⎢ 21 ⎥ [ A] = [ x] = ⎢ ⎥ [ b] = ⎢⋅⋅⋅⎥ ⎢⋅ ⋅ ⋅⎥ ⎢ ⋅⋅⋅ ⋅⋅⋅ ⋅⋅⋅ ⋅ ⋅⋅ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎣xn ⎦ ⎣a n1 a n2 ⋅⋅⋅ a nn ⎦ ⎣ bn ⎦ Ta sẽ xét 3 trường hợp: số phương trình bằng số ẩn số nên ma trận [A] là ma trận vng số phương trình nhỏ hơn số ẩn số số phương trình lớn hơn số ẩn số §2. NGHIỆM CỦA HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH 1. Trường hợp khơng suy biến: Khi số phương trình m bằng số ẩn số n, ma trận [A] vng và ta có: (1) [ x ] = [ A ]−1 [ b] nếu ma trận A không suy biến, nghĩa là định thức của ma trận khác không. Các lệnh MATLAB để giải hệ là (ctsys.m): clc A = [1 2;3 4]; b = [‐1;‐1]; x = A^‐1*b %x = inv(A)*b 2. Trường hợp số phương trình ít hơn số ẩn(nghiệm cực tiểu chuẩn): Nếu số 135 phương trình m ít hơn số ẩn số n thì nghiệm khơng duy nhất. Giả sử m hàng của ma trận hệ số [A] là độc lập thì vec tơ n chiều có thể phân tích thành hai thành phần: (2) [ x] = [ x]+ + [ x]− Trong đó một ma trận là ma trận khơng gian hàng của ma trận [A] và được viết dưới dạng tổ hợp của: (3) [ x]+ = [ A]T [ α ] và ma trận kia là ma trận không gian không sao cho: (4) [ A ][ x]− = Như vậy: [ A ]([ x ]+ + [ x]− ) = [ A ][ A ]T [α ] + [ A ][ x]− = [ A ][ A ]T [α ] = [ b] (5) Do [A][A]T là ma trận khơng suy biến m × m có được bằng cách nhân ma trận m × n với ma trận n × m nên ta có thể giải phương trình đối với [α] để có: −1 [ α ]0 = ⎡ AAT ⎤ [ b] ⎣ ⎦ (6) [ α ]0+ = [ A ]T [α ]0 = [ A ]T ⎡ AAT ⎤ [ b] ⎣ ⎦ (7) Thay (6) vào (3) ta có: −1 Điều này thoả mãn phương trình [A][x] = [b]. Tuy nhiên nó khơng là nghiệm duy nhất vì nếu thêm bất kì một vec tơ [x] thoả mãn (4) thì nó sẽ cũng là nghiệm. MATLAB dùng lệnh pinv để giải hệ (ctpinv.m) A = [1 2]; b = 3; x = pinv(A)*b 3. Trường hợp số phương trình nhiều hơn số ẩn(nghiệm sai số bình phương bé nhất): Nếu số phương trình m lớn hơn số ẩn số n thì khơng tồn tại nghiệm thoả mãn đầy đủ các phương trình. Ta cố gắng tìm vec tơ nghiệm có sai số [e] nhỏ nhất. (8) [ e ] = [ A][ x] − [ b] Vậy thì bài tiám của ta là cực tiểu hố hàm: J = 0.5 e = 0.5 [ A ][ x ] − [ b ] = 0.5 ⎡[ A ][ x ] − [ b]⎤ ⎡[ A ][ x ] − [ b ]⎤ (9) ⎣ ⎦ ⎣ ⎦ Ta tìm cực tiểu của J bằng cách cho đạo hàm theo x của (9) bằng khơng. −1 ∂ T J = [ A ] ⎡[ A ][ x ] − [ b ]⎤ = (10) [ x ]0 = ⎡[ A ]T [ A ]⎤ [ A ]T [ b] ⎣ ⎦ ⎣ ⎦ ∂x 2 T 136 Chú ý là ma trận [A] có số hàng lớn hơn số cột cho nên khơng nghịch đảo được. Nghiệm sai số bình phương bé nhất tìm được nhớ dùng lệnh pinv hay phép chia trái (ctover.m): A = [1; 2]; b = [2.1; 3.9]; x = pinv(A)*b x = A\b x = (Aʹ*A)^‐1*Aʹ*b Để tiện dùng ta viết hàm pttt() để giải hệ phương trình trong cả 3 trường hợp trên function x = pttt(A, B) %Ham nay tim nghiem cua pt Ax = B [M, N] = size(A); if size(B,1) ~= M error(ʹKich thuoc A va B trong pttt() khong bang nhau!ʹ) end if M == N x = A^‐1*B; elseif M 2 i i =1 i =1 n Nên phương trình ∑ a i ,jz j = có nghiệm khơng tầm thường. Điều này mâu j=1 thuẫn với điều kiện det(A) ≠ 0. Như vậy zn+1 ≠ 0. Từ điều kiện un+1 trực giao với ai ta có: n (u n +1 ,a i ) = ∑ a i ,jz j + a i ,n +1z n +1 = j=1 Chia hai vế cho zn+1 ta được ∑ n j=1 ⎛ zj ⎞ a i ,j ⎜ ⎟ + a i ,n +1 = z n +1 ⎠ ⎝ Đẳng thức này chứng tỏ xi = zi là nghiệm của (1). Thuật tốn FOM cụ thể z n +1 gồm các bước: ‐ Cho [X0], tính r0 = [B], β = r0 , v1 = r0 / r0 ‐ Lặp cho đến khi hội tụ • wj = [A]vj • trực giao hố Gram ‐ Schmidt • h j+1,j = w j • nếu hj+1,j = 0 thì m = j, kết thúc lặp ‐ y m = H −1 (β e1 ) m ‐ xm = x0 + Vmym Ta xây dựng hàm fom() để thực hiện thuật toán trên: 195 function x = fom(a, b, x0, maxiter, tol) %Giai he pt bang thuat toan FOM i = 1; x = x0(:); r = b ‐ a*x; rnorm = norm(r); rho = rnorm; v (:,i) = r/rho; while ((rnorm/rho > tol) & (i