Phương pháp gauss jordan tìm ma trận nghịch đảo
Trang 1TRƯỜ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
Trang 2MỤ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
Trang 3LỜ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”
Trang 4NỘ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ó:
⎥
⎥
⎥
⎥
⎥
⎥
⎦
⎤
⎢
⎢
⎢
⎢
⎢
⎢
⎣
⎡
nn ni
n
in ii
i
n i
a a
a
a a
a
a a
a
1 1 1 1 11 ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ nn ni n in ii i n i x x x x x x x x x
1 1 1 1 11 ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ 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:
Trang 5Bướ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 -
11
1 1
a
j
a
∀ij
kể cả các phần tử của ma trận E:
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
Trang 6III 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) ;
Trang 7IV 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
Trang 8j := 1;
while j ≤ n do
e[i, j] := e[i, j] -
] , [
] , [ ] , [
k k a
j k e k i
j := j + 1;
od;
j := n;
while j ≥ 1 do
a[i, j] := a[i, j] -
] , [
] , [ ] , [
k k a
j k a k i
j := j – 1;
od;
fi;
i := i – 1;
od;
l :=1;
while l ≤ n do
e[k, l] :=
] , [
] , [
k k a
l k
e ;
l := l +1;
od;
Trang 9
l := k + 1;
while l ≤ n do
a[k, l] :=
] , [
] , [
k k a
l k
a ;
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`;
Trang 10V 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:
A =
⎥
⎥
⎥
⎦
⎤
⎢
⎢
⎢
⎣
⎡
21 66 31
20 54 25
36 107 50
> 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);
Trang 113 Ví dụ 2 (trang 85 Giáo trình Giải tích số - tác giả Lê Trọng Vinh)
⎥
⎥
⎥
⎦
⎤
⎢
⎢
⎢
⎣
⎡
−
−
−
−
3 5 2
5 4 3
2 3 1
-1
> 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:
A =
⎥
⎥
⎥
⎥
⎦
⎤
⎢
⎢
⎢
⎢
⎣
⎡
−
11 16 5 9
2 3 7 6
9 13 1 8
4 6 14 13
> d := 4;
> f := array([[13, 14, 6, 4], [8, -1, 13, 9], [6, 7, 3, 2], [9, 5, 16, 11]]);
> GaussJordan (d, f);
Trang 12Tất cả các ví dụ trên đều đúng so với đáp số!!
Trang 13KẾ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
Trang 14TÀ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:
http://nhdien.wordpress.com/
http://maplesoft.com/
http://vi.wikipedia.org/
http://maplevn2008.wordpress.com/