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

các phương pháp tính gần đúng ma trận nghịch đảo

29 1 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Nội dung

ĐẠI HỌC BÁCH KHOA HÀ NỘIVIỆN TOÁN ỨNG DỤNG VÀ TIN HỌCCÁC PHƯƠNG PHÁP TÍNH GẦN ĐÚNG MATRẬN NGHỊCH ĐẢOHà Minh Dũng - MSSV 20200096GIẢNG VIÊN HƯỚNG DẪNTS... ChomatrậnvuôngA cấpn.Tìmmatrậnng

Trang 1

ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN TOÁN ỨNG DỤNG VÀ TIN HỌC

CÁC PHƯƠNG PHÁP TÍNH GẦN ĐÚNG MATRẬN NGHỊCH ĐẢO

Hà Minh Dũng - MSSV 20200096GIẢNG VIÊN HƯỚNG DẪN

TS Hà Thị Ngọc Yến

Hà Nội, tháng 1, 2022

Trang 2

2.2 Lí do chọn X0= AT∥ ∥A2 3

4.2 Ví dụ 2 (Ma trận chéo trội hàng) 15

4.3 Ví dụ 3 (Ma trận chéo trội cột gần suy biến) 18

4.4 Ví dụ 4 (Ma trận chéo trội cỡ lớn) 20

5 Phân tích và tổng kết các phương pháp 265.1 Nhận xét các ví dụ 26

5.2 Ưu, nhược diểm của các phương pháp 26

5.2.1 Ưu điểm 26

5.2.2 Nhược điểm 26

6 Hướng dẫn sử dụng chương trình 276.1 Phương pháp Newton 27

6.2 Phương pháp Jacobi 27

6.3 Phương pháp Gauss-Seidel 28

Trang 3

1 Đặt vấn đề

1.1 Phát biểu bài toán

Bài toán ChomatrậnvuôngA cấpn.Tìmmatrậnnghịchđảocủa nếucó.A

Trong báo cáo này, ta sẽ nghiên cứu các phương pháp tìm gần đúng ma trận nghịch đảo củamột ma trận thực vuông cấp n

1.2 Lí do cần giải gần đúng ma trận nghịch đảo

Do khuyết điểm của các phương pháp tính đúng ma trận nghịch đảo:Máy tính bắt buộc phải thực hiện tính toán quá nhiều khi cần độ chính xác caoKhông kiểm soát được sai số tính toán do giới hạn tính toán của máy tính

Nên ta đề xuất sử dụng các phương pháp lặp để làm tăng độ chính xác của các ma trậnnghịch đảo có độ chính xác thấp và để kiểm soát sai số dễ dàng hơn.

1.3 Các phương pháp giải

Báo cáo này sẽ trình bày 3 phương pháp giải bao gồm phương pháp Newton có thể áp dụngvới ma trận bất kì và hai phương pháp Jacobi và Gauss-Seidel áp dụng với ma trận chéo trội.

Trang 4

Suy ra

Gk=G2−1= G4

(1)Như vậy, nếu ta chọn xấp xỉ ban đầuX0gần A−1, sao cho

∥G0∥ = ∥E − AX0∥ < 1Thì ∥A−1− Xk∥→0 rất nhanh khi k →∞ hay dãy (Xk) hội tụ và

Kí hiệu λ(A) là giá trị lớn nhất của các trị tuyệt đối của các trị riêngλi(A)của ma trận A.Khi đó, với i bất kì, ta có

AATxi= λi(AAT)xi

Trang 5

Trong đó ilà một vector khác Nhân hai vế với i ta đượcxT

iAATx= xT

iλi(AAT)xi⇔ (xTiA)(xT

iA)T= λi(AAT)xTixi

iA∥2= λi(AAT)∥xi∥⇔ λ AAi( T) =∥x

Trước hết ta sẽ xét trường hợpdet(A) = 0.

Do det(A) = 0 và xi = 0 nên ta suy raλi(AAT) > , ∀i0 Từ đó ta có

0 <λi(AA

T)λ(AAT)<1, ∀iĐặt

Trong đó

α= 1∥A∥2= 1

λ AA( T)Ta cóE− AX0= E −αAATlà ma trận đối xứng nên

∥E − AX0∥ =q

<1Như vậy, ma trận X0= AT

∥ ∥A2thỏa mãn điều kiện hội tụ.

Mặt khác, ta xét trường hợp det(A) = 0 Lúc này, phương trình Ax = 0 có nghiệmx0khác0 nên λ0= 0 là một giá trị riêng của ma trậnA.

Từ (2) ta suy raλi(AAT) ≥0, kéo theo

0 ≤λi(AAT)λ(AAT)<1, ∀iSuy ra

|1 −λi(AAT)λ AA( T)|≤1, ∀iĐẳng thức xảy ra khii= 0nên

Trang 6

max|1 − i

λ AA( T)| = 1Mà biến đổi (3) vẫn đúng nên ta có∥E − AX0∥ = 1.Vậy với cách chọn X0= AT

∥ ∥A2thì nếu ma trậnAkhông khả nghịch, ta luôn có∥E−AX0∥ = 1.Mà ngược lại, nếu ma trậnAkhả nghịch thì lại có∥E − AX0∥ < 1 nên dãy (Xk)sẽ luôn hội tụ.

∥A−1∥ − ∥A−1∥qt≤∥A−1∥ − ∥A−1∥∥G0∥t

≤∥A−1∥ − ∥A−1Gt0∥≤∥A−1− A−1Gt

0∥= ∥A−1(E − Gt

0)∥= ∥X0(E + G0+ G2+ +Gt

0)∥= ∥X0∥∥E +G0+G2+ + Gt

0∥≤∥X0∥(∥E∥ + G∥ 0∥ + G∥ 2 ∥ + +∥Gt

0∥)≤∥X0∥(1 +q+ q2+ + qt)

=∥X0∥(1 − q

t+1)1 − qCho t →∞ ta được ∥A−1∥≤∥X0∥

1−q Kết hợp với (1) ta có công thức sai số∥A−1− Xk∥≤∥X0∥q

2k1 − q

Trang 7

q←∥E − AX0∥q2k

← qerror←ε×(1−q)

Bước 2: Nếu q = 1, thông báo ma trận không khả nghịch và trả về ma trận NaNBước 3: Whileq2k :

≥ errorX← X(2E − AX)q2k q

← (2k)2

Bước 4: Trả về ma trận X0

Chươngtrìnhnewton_inverse(A, ,n ε)Input: Ma trận , kích cỡA n, sai số εOutput: Ma trậnX∗xấp xỉ củaA−1

Bước 1: Chương trình tự chọn xấp xỉ đầu X0= AT

∥ ∥A2Bước 2: Trả về newton_iter(A, ,n ε, X0)

Trang 8

3 Các phương pháp tìm gần đúng nghịch đảo của ma trậnchéo trội

i=j aij∥ < ajj∥ (chéo trội cột)

Ý tưởng của các phương pháp này là áp dụng các phương pháp giải gần đúng hệ vuông đểgiải hệ phương trình AX = E trong đóAlà ma trận chéo trội Các phương pháp sẽ được trìnhbày ở đây là:

Phương pháp lặp JacobiPhương pháp lặp Gauss-Seidel

3.2 Phương pháp lặp Jacobi

3.2.1 Lí thuyếtĐặt T = diag a{−1

11, a−1

22, , a−1}, B = E − T A, B1= E − ATCông thức lặp:

Xk+1=BXk+TCông thức sai số:

– Trường hợp chéo trội hàng: Với ∥ ∥B∞≤ q < 1∥Xk− X∗∥

1 − q∥Xk− Xk−1∥1

∥Xk− X∗∥ ≤ λ qk

1 − q∥X1−X0 1∥

Trang 9

3.2.2 Thuật toánHàmcheck_dom(A, n)Input: Ma trận , kích cỡA nOutput: Trả về trạng thái trội 1, −1, 0

tương ứng với ma trậnAchéo trội hàng, chéo trội cột hoặc không chéo trộiBước 1: K ←|diag(A)|

sumRowlà dãy tổng trị tuyệt đối các phần tử trên các hàng củaAtrừ các phần tử trongKsumCollà dãy tổng trị tuyệt đối các phần tử trên các cột củaAtrừ các phần tử trongKBước 2:

Nếu K[i] > sumRow i], ∀i = 1, n, hàm trả về giá trị 1[Nếu K[i] > sumCol i], ∀i = 1, n, hàm trả về giá trị -1[Nếu cả hai trường hợp trên không xảy ra, hàm trả về giá trị 0

Hàmget_norm(A, domStatus)

Input: Ma trận , trạng thái trộiA domStatusOutput: Chuẩn của A theo trạng thái trội

Nếu domStatus = 1, trả về∥ ∥A∞ Nếu không, trả về∥A∥1.

Hàmget_lambda(A, domStatus)

Input: Ma trận , trạng thái trộiA domStatusOutput: Trả về λ = 1 nếu A chéo trội hàng, λ =max a∥ii∥

min a∥ii∥nếu A chéo trội cộtNếu domStatus = 1, trả về giá trị 1

Nếu không, tính K ←|diag(A)|, trả vềmax(Kmin(K)

Trang 10

Góiđánhgiátiênnghiệmpredecessor_iter( 0,B, T domStatus,, λ, q ε, )Input: Ma trận X0, , ,B T domStatus, λ, hệ số q, sai số εOutput: Ma trậnX∗xấp xỉ củaA−1

Bước 1: Tính các giá trị

norm← get_norm((BX0+ T ) −X0,domStatus)X← X0

qk← 1error←ε×(1 q)−

λ norm×

Bước 2: Whileqk> error:X← BX+Tqk←qk× qBước 3: Trả về X

Góiđánhgiáhậunghiệmsuccessor_iter(X0,B, T domStatus,, λ, q ε, )Input: Ma trận X0,B, T domStatus, λ, hệ số q, sai số ε,Output: Ma trậnX∗xấp xỉ củaA−1

Bước 1: Tính các giá trịoldX← X0

newX← BX0+Terror←ε(1−q)

Bước 2: While get_norm(newX− oldX, domStatus) > error:oldX← newX

newX← B × oldX+TBước 3: Trả về newX

Trang 11

Chươngtrìnhjacobi_inverse(A, ,n ε, mode)

Input: Ma trận , kích cỡA n, sai số ε, chế độ đánh giámode

Output: Ma trậnX∗xấp xỉ củaA−1theo chế độ đánh giá tiên nghiệm nếumode= 1.Nếu không, thực hiện theo chế độ đánh giá hậu nghiệm.

Bước 1: domStatus ← check_dom(A, n)

Nếu domStatus = 0, thông báoAkhông chéo trội và dừng chương trìnhBước 2: Tính các giá trị

E←ma trận đơn vị cỡ nT← diag{a−1

11, a−122, , a−1}B← E − T A

λ← get_lambda(A, domStatus)q← get_q(B, E, T , A, domStatus)Bước 3: Chọn chế độ đánh giá

Nếu mode = 1, trả về predecessor_iter(A,B, T domStatus,, λ, q ε, )Nếu không, trả về successor_iter(A, ,B T, domStatus λ, , q, ε)

3.3 Phương pháp lặp Gauss-Seidel

3.3.1 Lí thuyếtĐặt T = diag a{−1

11, a−1

22, , a−1}, B = E − T A, B1= E − ATKí hiệuX(i)là dòng thứ của ma trậni X

Công thức lặp:X( )i

Trang 12

– Trường hợp chéo trội cột: Đặt

q= max

Pi j=1|b1ji|

1 −Pn j=i+1|b1ji|≤∥B1∥1<1S= max

⇒Công thức sai số là:∥Xk− X∗∥ ≤ λq

Input: Ma trận , kích cỡ , trạng thái trộiB n domStatusOutput: Hệ số q

Bước 1: q ← 0Bước 2:

NếudomStatus= 1:For i from 1 to :n

j=i|bij|, q2←Pi−1j=1|bij|q← max(q, q1

1−q2)Nếu không:

For i from 1 to :nq1←Pi

=1|bji|, q2←Pn j=i+1|bji|q← max(q, q1

1−q2)Bước 3:Trả về q

Trang 13

Hàmget_S(B1, n)Input: Ma trậnB1, kích cỡnOutput: Hệ số SBước 1: S ← 0Bước 2: For i from 1 to :n

tmp←Pnj=i+1|b1ji|S← max(S, tmp)Bước 3: Trả về S

Hàmnext_iter(oldX, , ,B T n)Input: Ma trậnoldX, B, T, kích cỡnOutput: Ma trận lặp tiếp theo newXBước 1: For i from 1 to :n

newX( )i

k+1+P(k)j=i+1bijoldX(j)k + T(i)

Bước 2: Trả về newX

Góiđánhgiátiênnghiệmpredecessor_iter(X0, B, T , ,n domStatus λ, , S, q, ε)Input: Ma trận X0, ,B T, kích cỡ n, domStatus, λ, hệ số S, q, sai số εOutput: Ma trậnX∗xấp xỉ củaA−1

Bước 1: Tính các giá trịqk← 1

X← X0

X1← next_iter(X0, B, T , n)norm← get_norm(X1−X0,domStatus)error←ε(1−q)(1−S)

Bước 2: Whileqk> error:

X← next_iter(X, B, T , n)qk←qk× q

Bước 3: Trả về X

Trang 14

Góiđánhgiáhậunghiệmsuccessor_iter(X0, B, T , n, , , S, q, )Input: Ma trận X0, ,B T, kích cỡ n, domStatus, λ, hệ số S, q, sai số εOutput: Ma trậnX∗xấp xỉ củaA−1

Bước 1: oldX ← X0; newX ← next_iter(X0, B, T , n); error ←ε(1−q)(1−S)λ norm×

Bước 2: While get_norm(newX− oldX, domStatus) > error:oldX← newX

newX← next_iter(newX, B, T , n)Bước 3: Trả về newX

Chươngtrìnhgauss_seidel_inverse(A, n, ,ε mode)

Input: Ma trận , kích cỡA n, sai số ε, chế độ đánh giámode

Output: Ma trậnX∗xấp xỉ củaA−1theo chế độ đánh giá tiên nghiệm nếumode= 1.Nếu không, thực hiện theo chế độ đánh giá hậu nghiệm.

Bước 1: domStatus ← check_dom(A, n)

Nếu domStatus = 0, thông báoAkhông chéo trội và dừng chương trìnhBước 2: Tính các giá trị

E←ma trận đơn vị cỡ nT← diag{a−1

11, a−122, , a−1}B← E − T A

λ← get_lambda(A, domStatus)NếudomStatus= 1:

S← 0

q← get_q(B, n, domStatus)Nếu không:

B1← E − ATS← get_S(B1, n)q← get_q(B1, n, domStatus)Bước 3: Chọn chế độ đánh giá

Nếu mode = 1, trả về predecessor_iter(A,B, T n domStatus,, , λ, ,S q ε, )Nếu không, trả về successor_iter(A, ,B T, n domStatus λ, , , S, q, )ε

Trang 16

Gauss-4.2 Ví dụ 2 (Ma trận chéo trội hàng)

Trang 19

4.3 Ví dụ 3 (Ma trận chéo trội cột gần suy biến)

Tìm nghịch đảo ma trận sau:

2 7 1 0 0001.0 4 0 001.Vẫn với sai số là10−10, ta thu được các kết quả sau:

Trang 21

4.4 Ví dụ 4 (Ma trận chéo trội cỡ lớn)

Trang 27

Phương pháp Gauss-Seidel hội tụ nhanh hơn phương pháp Jacobi Điều này là hoàn toànphù hợp với lí thuyết do phương pháp lặp Gauss-Seidel là một cải tiến của phương pháplặp Jacobi.

5.2 Ưu, nhược diểm của các phương pháp

5.2.1 Ưu điểm

Các phương pháp giải gần đúng ma trận nghịch đảo đều giúp ta kiểm soát và cải thiệnsai số tính toán sau một số lần lặp nhất định, đây là điều mà các phương pháp giải đúngkhông làm được.

Với phương pháp Newton, công thức lặp hội tụ rất nhanh và không yêu cầu nhiều với matrận đầu vào, thuật toán lại đơn giản, dễ nhớ.

Trang 28

Bước 1: Nhập sai số vào dòng đầu của file input.txt.

Bước 2: Nhập ma trận cần tìm nghịch đảo vào các dòng sau, lưu ý cần phân tách các giátrị trong cùng một hàng của ma trận bởi dấu cách và xuống dòng khi sang hàng tiếp theo.Bước 3: Chạy chương trình newton.py, chương trình sẽ đưa ra số lần lặp, ma trận nghịchđảo và kết quả kiểm tra nhân ngược Trường hợp ma trận không khả nghịch, chương trìnhsẽ báo lỗi và đưa ra ma trận NaN.

6.2 Phương pháp Jacobi

Đặt các file sau trong cùng một thư mục:Chương trình chính: jacobi.pyFile dữ liệu đầu vào: input.txtCác bước sử dụng:

Bước 1: Nhập chế độ đánh giá vào dòng đầu của file input.txt ( Nhập "1" tương ứng vớichế độ đánh giá tiên nghiệm, nếu không chương trình sẽ chạy theo chế độ đánh giá hậunghiệm)

Bước 2: Nhập sai số vào dòng thứ hai của file input.txt

Bước 3: Nhập ma trận cần tìm nghịch đảo vào các dòng sau, lưu ý cần phân tách các giátrị trong cùng một hàng của ma trận bởi dấu cách và xuống dòng khi sang hàng tiếp theo.Bước 4: Chạy chương trình jacobi.py, chương trình sẽ đưa ra số lần lặp, ma trận nghịchđảo và kết quả kiểm tra nhân ngược Trường hợp ma trận không chéo trội, chương trìnhsẽ báo lỗi và đưa ra ma trận NaN.

Trang 29

6.3 Phương pháp Gauss-Seidel

Đặt các file sau trong cùng một thư mục:Chương trình chính: gauss_seidel.pyFile dữ liệu đầu vào: input.txtCác bước sử dụng:

Bước 1: Nhập chế độ đánh giá vào dòng đầu của file input.txt ( Nhập "1" tương ứng vớichế độ đánh giá tiên nghiệm, nếu không chương trình sẽ chạy theo chế độ đánh giá hậunghiệm)

Bước 2: Nhập sai số vào dòng thứ hai của file input.txt

Bước 3: Nhập ma trận cần tìm nghịch đảo vào các dòng sau, lưu ý cần phân tách các giátrị trong cùng một hàng của ma trận bởi dấu cách và xuống dòng khi sang hàng tiếp theo.Bước 4: Chạy chương trình jacobi.py, chương trình sẽ đưa ra số lần lặp, ma trận nghịchđảo và kết quả kiểm tra nhân ngược Trường hợp ma trận không chéo trội, chương trìnhsẽ báo lỗi và đưa ra ma trận NaN.

Tài liệu

[1] J Douglas (Douglas Faires) Faires, Richard L.Burden - Numericalmethods (2003)[2] Lê Trọng Vinh -Giáotrìnhgiảitíchsố (2007)

[3] Phạm Kỳ Anh -Giảitíchsố (1996)

[4] Jaan Kiusalaas - NumericalMethodsinEngineeringwithPython (2010)

[5] Adi Ben-Israel - ANoteonanIteractiveMethodforGeneralizedInversionofMatrices (1966)[6] Samuel Daniel Conte - Elementarynumericalanalysis,analgorithmicapproach (1980)

Ngày đăng: 29/05/2024, 17:54

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w