Phương pháp Gauss – Jordan tìm ma trận nghịch đảo
Nguyễn Thị Thu Hà
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
KHOA TOÁN TIN ỨNG DỤNG
---------***---------
BÁO CÁO BÀI TẬP
LẬP TRÌNH TÍNH TOÁN
Đề tài : Phương pháp Gauss – Jordan tìm ma trận nghịch đảo
Giáo viên hướng dẫn : PGS – TS Nguyễn Hữu Điển
Sinh viên thực hiện : Nguyễn Thị Thu Hà
Lớp : Toán tin 2 – K51
Hà Nội, tháng 11 năm 2009
1
Phương pháp Gauss – Jordan tìm ma trận nghịch đảo
Nguyễn Thị Thu Hà
MỤC LỤC
LỜI NÓI ĐẦU ...............................................................................................................3
NỘI DUNG....................................................................................................................4
I. Bài toán:..................................................................................................................4
II. Phương pháp Gauss – Jordan: ...............................................................................4
III. Các lệnh sử dụng trong chương trình:..................................................................6
1. Chương trình sử dụng mảng 2 chiều để lưu trữ các ma trận..............................6
2. Các lệnh điều khiển của maple: .........................................................................6
3. Lệnh in ra kết quả: .............................................................................................6
IV. Chương trình:.......................................................................................................7
V. Một số ví dụ: .......................................................................................................10
1. Ví dụ 1..............................................................................................................10
2. Thử lại ví dụ 1:.................................................................................................10
3. Ví dụ 2..............................................................................................................11
4. Bài tập 3 ...........................................................................................................11
KẾT LUẬN..................................................................................................................13
TÀI LIỆU THAM KHẢO ...........................................................................................14
2
Phương pháp Gauss – Jordan tìm ma trận nghịch đảo
Nguyễn Thị Thu Hà
LỜI NÓI ĐẦU
Maple là một gói phần mềm toán học thương mại phục vụ cho nhiều
mục đích. Nó phát triển lần đầu tiên vào năm 1980 bởi Nhóm Tính toán
Hình thức tại Đại học Waterloo ở Waterloo, Ontario, Canada.
Từ năm 1988, nó đã được phát triển và thương mại hóa bởi Waterloo
Maple Inc. (còn được biết đến với tên gọi Maplesoft), một công ty
Canada cũng có trụ sở tại Waterloo, Ontario. Phiên bản hiện tại là Maple
13 được phát hành vào tháng 5 năm 2009.
Người dùng có thể nhập biểu thức toán học theo các ký hiệu toán
học truyền thống. Có thể dễ dàng tạo ra những giao diện người dùng tùy
chọn. Maple hỗ trợ cho cả tính toán số và tính toán hình thức, cũng như
hiển thị. Nhiều phép tính số học được thực hiện dựa trên thư viện số học
NAG; trong Maple, các chương trình con NAG đã được mở rộng để cho
phép độ chính xác ngẫu nhiên lớn.
Maple cũng có một ngôn ngữ lập trình cấp cao đầy đủ. Cũng có giao
diện cho những ngôn ngữ khác (C, Fortran, Java, MatLab, và Visual
Basic). Cũng có một giao diện dành cho Excel.
Sau quá trình học tập và nghiên cứu môn học Lập trình tính toán, em
xin trình bày 1 số kết quả đạt được trong việc ứng dụng Maple để lập
trình hướng thủ tục giải bài toán “Tìm ma trận nghịch đảo bằng phương
pháp Gauss – Jordan”
3
Phương pháp Gauss – Jordan tìm ma trận nghịch đảo
Nguyễn Thị Thu Hà
NỘI DUNG
I. Bài toán:
Cho ma trận A = [aij] vuông cấp n, không suy biến (det A # 0). Tìm
ma trận B = [bij] sao cho A.B = E ( E là ma trận đơn vị cấp n).
Ma trận B tìm được gọi là ma trận nghịch đảo của ma trận A.
Ký hiệu B = A-1
II. Phương pháp Gauss – Jordan:
Gọi A = [aij]n , B = A-1 = [Xij]n là ma trận nghịch đảo cần tìm.
Từ I ta có:
⎡ a11 ...... a1i ....... a1 n ⎤
⎢.......... .......... ........ ⎥
⎢
⎥
⎢ a i1 ....... a ii ........ a in ⎥
⎢
⎥
..........
..........
........
⎢
⎥
⎢⎣ a n1 ...... a ni ....... a nn ⎥⎦
⎡ x11 ..... x1 i ..... x1 n ⎤
⎢ .......... .......... ..... ⎥
⎥
⎢
⎢ x i 1 ..... x ii ...... x in ⎥
⎥
⎢
⎢ .......... .......... ..... ⎥
⎢⎣ x n 1 .... x ni ..... x nn ⎥⎦
⎡ 1 ..... 0 ..... 0 ⎤
⎢ .......... ...... ⎥
⎢
⎥
⎢ 0 ..... 1 ..... 0 ⎥
⎢
⎥
⎢ .......... ....... ⎥
⎢⎣ 0 ..... 0 ...... 1 ⎥⎦
Đặt Xi = (x1i, x2i, …., xii, …., xni)t i = 1..n
Ei = (0, 0....,1(i),....0)t , i = 1..n (hàng thứ i là số 1 còn các hàng
khácđều bằng 0 ) thì hệ phương trình trên được viết trong dạng hệ
phương trình ma trận:
AXj = Ej , j = 1..n
(*)
Mỗi hệ gồm n ẩn là vectơ Xj , j = 1..n
Do det A # 0 nên các hệ dạng (*) tồn tại duy nhất nghiệm. Bằng
phương pháp Gauss – Jordan giải n hệ (*) có cùng ma trận A, ta làm như
sau:
Lập ma trận mở rộng Ā gồm ma trận A và ma trận đơn vị E được đặt
kề liền bên phải : Ā = [A | E ] và thực hiện theo các bước:
4
Phương pháp Gauss – Jordan tìm ma trận nghịch đảo
Nguyễn Thị Thu Hà
Bước 1: Giả thiết a11 # 0 . Chọn a11 làm phần tử giải, mọi phần tử của
hàng giải đều chia cho a11, các phần tử của cột giải ( trừ a11) đều bằng 0.
Các phần tử khác được biến đổi theo công thức hình chữ nhật:
aij(1) = aij -
ai1a1 j
a11
∀ij
kể cả các phần tử của ma trận E:
a11
a1j
ai1
aij
Vậy sau bước 1 ta thu được ma trận Ā(1) = [aij(1)] , i = 1..n, j = 1..2n
Bước 2: giả thiết a22(1) # 0 , lặp lại quá trình trên ta được ma trận
Ā(2) = [aij(2)] , i = 1..n, j = 1..2n
Và cứ như thế cho đến bước n ta được ma trận
Ā(n) = [aij(n)] , i = 1..n, j = 1..2n
Thì ma trận, từ cột thứ n +1 đến 2n là ma trận A-1 cần tìm.
5
Phương pháp Gauss – Jordan tìm ma trận nghịch đảo
Nguyễn Thị Thu Hà
III. Các lệnh sử dụng trong chương trình:
1. Chương trình sử dụng mảng 2 chiều để lưu trữ các ma trận
a := array (1..n, 1..n)
2. Các lệnh điều khiển của maple:
_ Câu lệnh if – then – else
> if < điều kiện > then
< thực hiện câu lệnh điều kiện đúng >
else
< thực hiện câu lệnh điều kiện sai >
fi;
_ Câu lệnh while – do
> while < điều kiện > do
< thực hiện các lệnh >
od;
_ Câu lệnh for – do
> for i from < giá trị đầu > to < giá trị cuối> do
< dãy câu lệnh >
od;
3. Lệnh in ra kết quả:
> print(e) ;
6
Phương pháp Gauss – Jordan tìm ma trận nghịch đảo
IV. Chương trình:
> GaussJordan :=proc(n :: integer, a)
Local e, i, j, k, l, m;
e :=array (1..n, 1..n);
#Tu nhap ma tran don vi E:
for i from 1 to n do
for j from 1 to n do
if i = j then
e[i, j] := 1;
else
e[i, j] := 0;
fi;
od;
od;
#Gauss – Jordan:
k := 1;
while k ≤ n do
i := n;
while i ≥ 1 do
if i # k then
7
Nguyễn Thị Thu Hà
Phương pháp Gauss – Jordan tìm ma trận nghịch đảo
Nguyễn Thị Thu Hà
j := 1;
while j ≤ n do
e[i, j] := e[i, j] -
a[i, k ]e[k , j ]
;
a[k , k ]
j := j + 1;
od;
j := n;
while j ≥ 1 do
a[i, j] := a[i, j] j := j – 1;
od;
fi;
i := i – 1;
od;
l :=1;
while l ≤ n do
e[k, l] :=
e[k , l ]
;
a[k , k ]
l := l +1;
od;
8
a[i, k ]a[k , j ]
;
a[k , k ]
Phương pháp Gauss – Jordan tìm ma trận nghịch đảo
l := k + 1;
while l ≤ n do
a[k, l] :=
a[k , l ]
;
a[k , k ]
l := l + 1;
od;
a[k, k] := 1;
m := k + 1;
while m ≤ n do
a[m, k] := 0;
m := m + 1;
od;
k := k + 1;
od;
print(`Ma tran nghich dao can tim: `,e);
end;
Lưu thủ tục: đưa thủ tục thành thư viện ở dạng file
> save GaussJordan, `c:\\GaussJordan.m`;
Sử dụng thủ tục: nạp thư viện có sẵn
> read `c:\\GaussJordan.m`;
9
Nguyễn Thị Thu Hà
Phương pháp Gauss – Jordan tìm ma trận nghịch đảo
Nguyễn Thị Thu Hà
V. Một số ví dụ:
1. Ví dụ 1 ( trang 83 Giáo trình Giải tích số - Tác giả Lê Trọng Vinh)
Tìm ma trận A-1 nếu:
⎡50 107 36 ⎤
A = ⎢⎢25 54 20⎥⎥
⎢⎣ 31 66 21⎥⎦
> n := 3;
> a := array ([[50, 107, 36], [25, 54, 20], [31, 66, 21]]);
> GaussJordan (n, a);
2. Thử lại ví dụ 1:
> b := array ([[-186, 129, 196], [95, -66, -100], [-24, 17, 25]]);
> GaussJordan (n, b);
10
Phương pháp Gauss – Jordan tìm ma trận nghịch đảo
Nguyễn Thị Thu Hà
3. Ví dụ 2 (trang 85 Giáo trình Giải tích số - tác giả Lê Trọng Vinh)
3 − 2⎤
⎡1
⎢
Cho A = ⎢ 3 4 − 5⎥⎥ . Tìm A-1
⎢⎣− 2 − 5 3 ⎥⎦
> n := 3;
> c := array([[1, 3, -2], [3, 4, -5], [-2, -5, 3]]);
> GaussJordan (n, c);
4. Bài tập 3 (trang 119 Giáo trình Giải tích số - tác giả Lê Trọng Vinh)
Tìm ma trận nghịch đảo của ma trận sau:
⎡13 14 6 4 ⎤
⎢ 8 − 1 13 9 ⎥
⎥
A= ⎢
⎢6 7 3 2⎥
⎢
⎥
⎣ 9 5 16 11⎦
> d := 4;
> f := array([[13, 14, 6, 4], [8, -1, 13, 9], [6, 7, 3, 2], [9, 5, 16, 11]]);
> GaussJordan (d, f);
11
Phương pháp Gauss – Jordan tìm ma trận nghịch đảo
Tất cả các ví dụ trên đều đúng so với đáp số!!
12
Nguyễn Thị Thu Hà
Phương pháp Gauss – Jordan tìm ma trận nghịch đảo
Nguyễn Thị Thu Hà
KẾT LUẬN
Qua bài báo cáo này em đã trình bày được cách lập trình trong
Maple để giải quyết bài toán Tìm ma trận nghịch đảo bằng phương pháp
Gauss – Jordan. Từ đó có thể ứng dụng để viết những chương trình khác.
Tuy nhiên chương trình này vẫn còn một hạn chế là chỉ tính toán
được những ma trận có đường chéo khác 0. Trong tương lai em sẽ cải tiến
để chương trình có thể tìm được ma trận nghịch đảo của những ma trận
bất kỳ.
Em xin chân thành cảm ơn PGS – TS Nguyễn Hữu Điển đã hướng
dẫn em hoàn thành bài tập này.
Hà Nội, tháng 11 năm 2009
Sinh viên thực hiện : Nguyễn Thị Thu Hà
Lớp : Toán tin 2 – K51 – ĐH BK HN
13
Phương pháp Gauss – Jordan tìm ma trận nghịch đảo
Nguyễn Thị Thu Hà
TÀI LIỆU THAM KHẢO
Nguyễn Hữu Điển - Hướng dẫn và sử dụng Maple V
Lê Trọng Vinh – Giáo trình giải tích số - NXB KH và KT
Website:
/> /> /> />
14