Tải bản đầy đủ (.doc) (20 trang)

Ứng dụng của phương pháp gauss, hãy lập trình chương trình tìm ma trận nghịch đảo (lưu ý yêu cầu sinh viên xử lý cả trường hợp phần tự trụ xấp xỉ hoặc bằng 0

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (440.31 KB, 20 trang )

Khoa Công Nghệ Thông Tin – Đại Học Thái Nguyên
Bộ môn khoa học máy tính.
***********0^0**********
BÀI TẬP LỚN MÔN PHƯƠNG PHÁP SỐ
Bài số 6: Ứng dụng của phương pháp Gauss, Hãy lập trình chương
trình tìm ma trận nghịch đảo. (Lưu ý: Yêu cầu sinh viên xử lý cả trường
hợp phần tự trụ xấp xỉ hoặc bằng 0)
Sinh viên thực hiện: Lưu Anh Tuấn.
Lớp : K6A
Thái Nguyên, Tháng 11 năm 2008.
MỤC LỤC
Trang
Mở đầu…………………………………………………………………….3
Chương I: Cơ sở lý thuyết……………………………………………… 7
Chương II: Ví dụ minh họa………………………….…… …………….10
Chương III: Cài đặt thuật toán…………………………………… …….13
2
MỞ ĐẦU
1. Phương pháp số là gì?
Môn phương pháp số (Numerical methods) hay còn gọi là Giải tích số
(Numerical analysí), Phương pháp tính (Computational methods) và rộng hơn là
Toán học tính toán (Computational mathematics, Numerical mathematics) là một
khoa học nghiên cứu cách giải gần đúng, mà chủ yếu là giải bằng số ( nói gọn là
giải số) các phương trình, các bài toán xấp xỉ hàm số và các bài toán tối ưu hóa
( Theo Bách khoa toàn thư về khoa học và kỹ thuật, NXB Mc.graw Hill 1992).
Nói cách khác để thể hiện bản chất hơn, như trong lời giới thiệu bộ sách
“Cẩm nang giải tích số” (Handbook of Numerical analysis) gồm 3 tập do các
chuyên gia hàng đầu thế giới viết từ 1989 đến 1994 (Cỉalet P.G và Lión J.L chủ
biên), Giải tích số là một phần của tóan học mô tả và phân tích các lược đồ số
được sử dụng trên máy vi tính. Mục tiêu của nó là nhận được biểu diễn rõ ràng,
chính xác và trung thực tất cả các thông tin chữa đựng trong các mô hình toán


học. Nó là sự mở rộng tự nhiên của các công cụ cổ điển như lời giải giải tích, các
biến đổi đặc biệt, giải tích hàm cũng như giải tích ổn định và tiệm cận.
Nói có thể gọn hơn môn phương pháp số nghiên cứu các phương pháp
giải các bài toán bắng số trên máy tính. Với mục tiêu và nhiệm vụ như vậy,
phương pháp số và máy tính là một công cụ đắc lực trong việc nghiên cứu các
đối tượng, các quá trình tự nhiên và xã hội.
Như ta biết, để nghiên cứu các hiện tượng tự nhiên và xã hội, chẳng hạn
các hiện tượng như mây, mưa, gió, nhiệt độ, áp suất, các quá trình thủy văn như
dòng chảy, lũ lụt….; hiện tượng biến dạng, nứt nẻ của vật rắn….thay vì các mô
hình vật lý, người ta xây dựng mô hình toán học của các hiện tượng này và
nghiên cứu nó. Chính giải tích số hay phương pháp số thực hiện công đoạn
nghiên cứu các phương pháp, thuật toán sử lý các mô hình toán học trên máy
tính. Chính nó là cơ sở để xây dựng các phần mềm khoa học – mô phỏng máy
tính của các đối tượng vật lý.
3
2. Sự khác biệt của toán tính với toán lý thuyết.
Khi nghiên cứu một bài toán, một mô hình toán học các nhà toán học lý
thuyết thường chỉ quan tâm đến các vấn đề định tính của các bài toán như vấn đề
tồn tại, duy nhất và các tính chất của nghiệm của bài toán, còn các nhà toán tính
thì quan tâm đến việc xây dựng phương pháp, thuật toán để tìm nghiệm trên máy
tính.
Vì thế các vấn đề đặt ra là: Tính khả thi và tính hiệu quả của thuật toán.
Ở đây, một thuật toán được gọi là khả thi nếu nó có thể thực hiện được
trên hệ thống tính toán hiện có hoặc trong tương lại. Còn hiệu quả của thuật toán
ám chỉ chi phí về tài nguyên máy tính, thời gian thực hiện để có được lời giải với
độ chính xác cho trước. Điều kiện cần có cho tính chất trên là sự ổn định của
thuật toán.
Có thể hiểu một cách nôm na, một thuật toán được gọi là ổn định nếu số
tính toán ( do máy tính làm tròn số) không bị khuếch đại trong quá trình tính.
Để hiểu rõ những điều nêu trên, ta xét một ví dụ sau:

Thí dụ 1: ( Tính ổn định) giả sử phân tích tích phân

+
=
1
0
1
dxexI
nn
n
Tích phân từng phần ta đựơc:


−−−
−=−=
1
0
1
11
1
0
1
1
|
n
xnnn
n
nIdxexnexI
Ngoài ra ta có:


≈==

1
0
1
1
3679.0
1
e
dxxeI
x
Như vậy, để tính
n
I
ta thu được công thức truy hồi
2,1
1
≥−=

nnII
nn
3679.0
1
=I
Đến đây, về mặt lý thuyết dường như bài tóan đã được giải quyết và có thể
tính với n bất kỳ lớn hơn 1 trên máy tính. Nhưng thực tế tính trên máy tính lại
không cho ta kết quả mong muốn khi n lớn. Cụ thể là tính trên máy tính với n=25
ta được bảng có kết qủa sau (liệt kê theo từng hàng)
4
0.3679 0.2642 0.2073 0.1709 0.1455

0.1368 0.1124 0.1009 0.0916 0.0839
0.0774 0.0718 0.0669 0.0627 0.0590
0.0555 0.0572 -0.0295 1.5596 -30.1924
635.0403 -
13969.8864
321308.3881 -
7711400.3133
192785008.8325
Nhìn vào bảng trên ta thấy kết quả giảm dần từ 0.3679 (khi n=1) đến
0.0555 (khi n=16), sau đó kết quả thay đổi thất thường và giá trị tuyệt đối tăng
rất nhanh. Điều này hoàn toàn không phù hợp với lý thuyết vì theo lý thuyết thì
∞→→=
n 01 asn
Do

+
=≤≤
1
0
1
1
0
n
dxI
n
n
Hiện tượng kết quả tính toán
n
I
nêu trên là sự không ổn định của thuật

toán: sai số ban đầu khi tính
3679.0
1
1
≈=
e
I
đã bị khuyếch đại trong quá trình
tính. Điều này có thể lý giải như sau:
Thay vì
e
I
1
1
=
ta thu được
δ
+=
1
1
~
II
trong đó
δ
là sai số.
Giả sử các tính toán tiếp theo không mắc phải sai số. Thế thì khi tính cho
n=2 ta được
δδδ
22)21()(21
~

21
~
21112
−=−−=+−=−= IIIII
. Như vậy ta thu được
2
~
I
với sai số
δ
2
~
22
=− II
. Lập luận tương tự ta có thể chứng tỏ rằng ở bứơc thứ n
thay cho giá trị đúng
2
I
ta thu được giá trị gần đúng
2
~
I
với sai số
δ
!
~
nII
nn
=−
.

Do đó, dù
δ
có bé thì n đủ lớn sai số vẫn đủ lớn và ta không thể nhận được giá
trị chấp nhận được là gần đúng cho
n
I
.
Thí dụ 2 (tính khả thi). Cho hệ phương trình đại số tuyến tính
Ax=b (1)
Trong đó A là ma trận vuông cấp n với định thức khác 0. Về lý thuyết có
thể giải hệ bằng công thức Cramer


=
i
i
x
(i=1,…,n) (2)
5
Trong đó
Adet
=∆
, còn
i

nhận được từ

do việc thay đổi cột thứ I bởi
cột tự do b. Nhưng việc tính toán ra nghiệm bằng số cụ thể lại là một việc không
dơn giản.

Theo công thức (2) cần phải tính n+1 định thức cấp n. Mỗi định thức là
tổng n! số hạng, mỗi số hạng là tích của n thừa số. Do vậy, để tính mỗi số hạng
cần thực hiện n-1 phép nhân. Như vậy, tất cả số phép tính nhân cần thực hiện
trong (2) là Q=N!(n+1)(n-1).
Giả sử n=20. Khi đó
20
10*7073.9≈Q
. Nếu tốc độ máy tính là 100 triệu
phép tính/giây thì thời gian thực hiện khối lượng tính toán trên là 2.6965*
9
10
giờ
bằng 3.0782*
5
10
năm. Một thời gian vô cùng lớn. Và như vậy, thuật toán nêu
trên là hoàn toàn không khả thi dù máy tính có tăng tốc độ lên gấp hàng nghìn,
hàng vạn lần.
Ở trên ta mới chỉ xét việc giải một hệ cỡ 20, mà thực tế khoa học và công
nghệ đòi hỏi phải giải các hệ phương trình đại số tuyến tính cỡ hàng vạn, hàng
triệu hoặc hơn thế nữa. Vì thế, cần phải nghiên cứu đề xuất các phương pháp
hiệu quả để có thể giải được các hệ thống phương trình cỡ lớn. Đó là một trong
các nhiệm vụ của ngành phương pháp số.
3.Phương pháp số, các phần mềm toán học và tính toán khoa học.
Thông thường các thuật toán cơ bản của giải tích đại số được tổ chức
thành các thư viện chương trình với các tên gọi là các Package, Toolbox,lib…
Chúng được đưa vào các phần mềm toán học như Mathematica, Maple và đặc
biệt là MATLAB-một môi trường tính toán kĩ thuật và đồ họa nhanh được sử
dụng rất rộng rãi, phục vụ cho nghiên cứu và tính toán kỹ thuật. Ngoài ra, các
phương pháp số giải các lớp bài toán khác nhau của khoa học và công nghệ cũng

đã được lập trình thành các phần mềm chuyên phục vụ giải các lớp bài toán khác
nhau, chẳng hạn bộ chương trình phần tử hữu hạn để giải các bài toán cơ học, bộ
chương trình tính toán thuỷ lực, bộ chương trình tính toán ôi nhiễm khí quyển,…
Các phần mềm trên có tên gọi chung là phần mềm tính toán khoa học.
6
CHƯƠNG I. CƠ SỞ LÝ THUYẾT
1.Thuật toán khử gauss trong giải hệ phương trình tuyến tính
Lịch sử phát triển của loài người đã cho thấy rằng, con người luôn mong
muốn tìm ra những phương pháp và công cụ, để phục vụ cho công việc tính toán
đầy “cực khổ” của mình. Và con người đã thực sự đạt được những thành tựu to
lớn. Nhà toán học người Pháp Laplace đã nói rằng: “việc phát minh ra Lôgarit
(bảng Lôgarit) đã kéo dài tuổi thọ của các nhà tính toán”. Nhưng mãi cho đến khi
phát minh ra máy tính điện tử, con người mới thật sự có được một công cụ hỗ trợ
tính toán đắc lực và hiệu quả. Ngày nay hầu hết các công việc tính toán phức tạp
trong khoa học kỹ thuật đều do máy tính đảm nhiệm. Do đó việc tìm ra và cài đặt
cho máy tính những thuật toán tốt là một yêu cầu thực tế. Một trong những tính
toán cơ bản và hay gặp là giải hệ phương trình tuyến tính (HPTTT).
Một HPTTT được định nghĩa là hệ gồm m phương trình đại số bậc nhất
đối với n ẩn số có dạng như sau:
Hệ phương trình (I) còn được viết dưới dạng ma trận như là:AX=B (II)
Trong đó ma trận A được gọi là ma trận Hệ Số, ma trận B được gọi là ma
trận vế phải, còn ma trận X là ma trận ẩn. Khi số phương trình bằng số ẩn (m=n)
và định thức của ma trận hệ số
)0)(det(0 ≠≠ A
,ta gọi hệ phương trình trên là hệ
Cramer. Thông thường chúng ta hay làm việc với hệ Cramer, nên ở đây ta chỉ
quan tâm đến hệ Cramer và nói đến HPTTT ta mặc định hiểu là hệ Cramer.
Để giải HPTTT chúng ta có nhiều phương pháp, được chia làm hai loại.
Các phương pháp trực tiếp hay phương pháp giải chính xác và các phươngpháp
gián tiếp hay phương pháp lặp. Thuật toán khử Gauss là một phương pháp giải

HPTTT trực tiếp và hẳn là đã rất quen thuộc với mỗi chúng ta. Nó là một phương
7
pháp tốt, thích hợp để cài đặt trên máy tính, được khám phá ra cách đây khoảng
160 năm. Khử Gauss là một thuật toán đã được cài đặt sẵn trongcác thư viện
chương trìnhcủa hầu hết các ngôn ngữ lập trình bậc cao phổ dụng như APL hay
BASIC. Với các HPTTT có số phương trình nhỏ, con người có thể áp dụng thuật
toán Gauss và cho ra kết quả. Nhưng với những HPTTT có số phương trình lớn
hoặc rất lớn rõ ràng con người cần đến sự trợ giúp của Máy Tính. Bây giờ chúng
ta sẽ tìm hiểu cách cài đặt thuật toán khử Gauss trên ngôn ngữ lập trình
MATLAB. Với mục đích tạo ra một chương trình giải các HPTTT lớn phục vụ
cho học tập và nghiên cứu, và quan trọng hơn là rèn luyện kỹ năng cài đặt các
thuật toán toán học. Tư tưởng chính của thuật toán Gauss là bằng các phép biến
đổi tương đương:
1) Nhân hai vế một phương trình của HPTTT với cùng một số khác 0.
2) Cộng một phương trình với phương trình khác sau khi nhân phương
trình đó với một số.
3) Đổi vị trí hai phương trình trong HPTTT cho nhau.
Đưa HPTTT đã cho về hệ tam giác trên, rồi giải HPTTT tam giác trên.
2.Áp dụng phương pháp gauss để tính ma trận nghịch đảo.
Muốn tính ma trận nghịch đảo của ma trận vuông A = [aij], theo
định lý: “Nếu
n
A
µ

khả đảo tức là có nghị đảo
1−
A
thì
0)det( ≠A


Ta chỉ cần tìm ma trận B = [bij] sao cho AB = I, khi đó để đơn giản cách
viết ta xét trường hợp ma trận cấp ba:










=
333231
232221
131211
aaa
aaa
aaa
A
8
Ta phải tìm ma trận











=
333231
232221
131211
bbb
bbb
bbb
B
Sao cho:










333231
232221
131211
aaa
aaa
aaa
.











333231
232221
131211
bbb
bbb
bbb
=










100
010
001
Trong đó: I =











100
010
001
là ma trận đơn vị
Đó là ba hệ đại số tuyến tính có chung ma trận hệ số là A. Ta sẽ
giải chúng bằng phương pháp Gauss trong cùng một bảng.
Quy tắc thực hành: Muốn tính ma trận nghịch đảo
1−
A
của ma trận
A bằng phép biến đổi sơ cấp về hàng ta làm như sau:
1) Viết ma trận đơn vị I bên cạnh ma trận A.
2) Áp dụng các phép biến đổi sơ cấp về hàng để đưa dần ma trận A về
ma trận đơn vị I, tác động đồng thời phép biến đổi sơ cấp vào cột ma trận I.
3) Khi A đã được biến đổi thành I thì I trở thành ma trận nghịch đảo
1−
A
.
Lưu ý: Các phần tử
ii

a
( i = 1,n) là các phần tử trụ, nếu
ii
a
= 0 thì hệ
suy biến.
9
CHƯƠNG II: VÍ DỤ ÁP DỤNG
VÍ DỤ 1: Tìm ma trận nghịch đảo bằng phương pháp gauss










=
801
352
321
A
Giải:
1 2 3
2 5 3
1 0 8
1 0 0
0 1 0

0 0 1
L1
L2
L3
1 2 3
0 1 -3
0 -2 5
1 0 0
-2 1 0
-1 0 1
L1  L1
-2L1 + L2  L2
-1L1 + L3  L3
1 2 3
0 1 -3
0 0 -1
1 0 0
-2 1 0
-5 2 1
L1  L1
L2  L2
2L2 + L3  L3
1 2 3
0 1 -3
0 0 1
1 0 0
-2 1 0
5 -2 -1
-1L3  L3
L2  L2

L3  L3
1 2 0
0 1 0
0 0 1
-14 6 3
13 -5 -3
5 -2 -1
-3L3 + L1  L1
3L3 + L2  L2
L3 L3
1 0 0
0 1 0
0 0 1
-40 16 9
13 -5 -3
5 -2 -1
-2L2 + L1  L1
L2  L2
L3 L3

10
Vậy:











=

1- 2- 5
3- 5- 13
9 16 40-
1
A
VD 2: Dùng phương pháp Gauss tìm ma trận nghịch đảo của:











=
131
232
211
A
Giải:
1 1 2
2 3 2
1 3 -1

1 0 0
0 1 0
0 0 1
L1
L2
L3
1 1 2
0 1 -2
0 2 -3
1 0 0
-2 1 0
-1 0 1
L1  L1
L2 - 2L1 L2
L3 – L1  L3
1 1 2
0 1 -2
0 0 1
1 0 0
-2 1 0
3 -2 1
L1  L1
L2  L2
L3 -2L2  L3
1 1 0
0 1 0
0 0 1
-5 4 -2
4 -3 2
3 -2 1

L1 – 2L3  L1
L2 +2L3 L2
L3  L3
1 0 0
0 1 0
0 0 1
-9 7 -4
4 -3 2
3 -2 1
L1 – L2  L1
L2  L2
L3  L3
Vậy:












−−
=

123
234

479
1
A
VD3: Tìm ma trận nghịch đảo bằng phương pháp gauss:














=
1000
2100
3210
7531
A
11
Giải:
1 3 -5 7
0 1 2 -3
0 0 1 2
0 0 0 1

1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
L1
L2
L3
L4
1 3 -5 0
0 1 2 0
0 0 1 0
0 0 0 1
1 0 0 -7
0 1 0 3
0 0 1 -2
0 0 0 1
L1 – 7L4  L1
L2 + 3L4 L2
L3 – 2L4  L3
L4  L4
1 3 0 0
0 1 0 0
0 0 1 0
0 0 0 1
1 0 5 -17
0 1 -2 7
0 0 1 -2
0 0 0 1
L1 + 5L2  L1
L2 – 2L2  L2

L3  L3
L4  L4
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
1 -3 11 -38
0 1 -2 7
0 0 1 -2
0 0 0 1
L1 -3L2  L1
L2  L2
L3  L3
L4  L4

Vậy:















−−
=

1000
2100
7210
381131
1
A
12
CHƯƠNG III: CÀI ĐẶT THUẬT TOÁN
1. Giao diện chương trình:
2. Mã nguồn:
function varargout = gaussltimmatrandao(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename,
'gui_Singleton', gui_Singleton,
'gui_OpeningFcn',
@gaussltimmatrandao_OpeningFcn,
'gui_OutputFcn',
@gaussltimmatrandao_OutputFcn,
'gui_LayoutFcn', [] ,
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State,
varargin{:});

else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


function gaussltimmatrandao_OpeningFcn(hObject, eventdata,
handles, varargin)
handles.output = hObject;
13

% Update handles structure
guidata(hObject, handles);

function varargout = gaussltimmatrandao_OutputFcn(hObject,
eventdata, handles)
varargout{1} = handles.output;
function giai_Callback(hObject, eventdata, handles)
a=get(handles.matran, 'string'); %gan gia tri o o nhap matran
vao bien a
n=get(handles.soN, 'string');
a=str2num(a); % doi ki tu string ra so
n=str2num(n);
clc; %xoa man hinh
fprintf('Ma tran da cho: ');
a %in ma tran a
b=eye(n); %b la ma tran don vi
c=zeros(n); %c la ma tran 0
d=zeros(n); %d la ma tran 0
fprintf('Bai giai');

z=[a b] %in ra z la ma tran a va ma tran don vi b
for i=1:n
if a(i,i)==0 %xet xem he co suy bien hay ko?
fprintf('He suy bien');
msgbox('He suy bien, ko tinh duoc','Bao Cao')
break %thoat vo dieu kien neu he suy bien
end
aii=a(i,i);
for j=1:n
a(i,j)=a(i,j)/aii; %chia ca phan tu cua a o hang
thu i cho aii
b(i,j)=b(i,j)/aii; %chia ca phan tu cua b o hang
thu i cho aii
c(j)=a(i,j); %luu lai gia tri cac phan tu cua ma
tran a
%o hang thu i vao ma tran c hang thu i
d(j)=b(i,j); %luu lai gia tri cac phan tu cua ma tran b
o hang thu i vao ma tran d hang thu i
end
for ii=i+1:n
heso=-a(ii,i); %lay he so de nhan
for j=1:n
a(ii,j)=a(ii,j)+c(j)*heso; %bien doi he so cua
a(i+1,j)
b(ii,j)=b(ii,j)+d(j)*heso; %bien doi he so cua
a(i+1,j)
end
end

z=[a b] %in ra ma tran z sau moi lan bien doi


14
end
%sau khi tinh xong o tren, ma tran a chuyen thanh ma tran
tam giac
%tren,ma tran b chua tinh den ket qua.
%
% Bat dau qua trinh tinh ben doi ma tran a ve ma tran don
vi
%
i=n;
c=zeros(n);
d=zeros(n);
while i>=1 %vi ko dung duoc vong lap for tu so lon den
so be
%nen ta phai dung vong lap while
%qua trinh tinh toan tuong tu
j=n;
while j>=1
c(j)=a(i,j);
d(j)=b(i,j);
j=j-1;
end
ii=i-1;
while ii>=1
heso=-a(ii,i);
j=n;
while j>=1
a(ii,j)=a(ii,j)+c(j)*heso;
b(ii,j)=b(ii,j)+d(j)*heso;

j=j-1;
end
ii=ii-1;
end
z=[a b]
i=i-1;
end

fprintf('Ma tran nghich dao la ');
x=b %ket qua ma tran nghich dao la ma tran b.
set(handles.kq,'string', num2str(x));

% Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
close
function soN_Callback(hObject, eventdata, handles)
function soN_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function matran_Callback(hObject, eventdata, handles)
function matran_CreateFcn(hObject, eventdata, handles)
15
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
Ví dụ minh họa:
VD1: Tìm ma trận nghịch đảo:











=
801
352
321
A
Nhập giá trị cho ma trận A: [1 2 3;2 5 3;1 0 8]
Nhập giá trị cho n: 3
Tính, Kết quả hiện ra:










−−
−−


125
3513
91640
Quá trình tính trong matlab:
Ma tran da cho:
a =
1 2 3
2 5 3
1 0 8
Bai giai
z =
1 2 3 1 0 0
2 5 3 0 1 0
1 0 8 0 0 1
z =
1 2 3 1 0 0
0 1 -3 -2 1 0
0 -2 5 -1 0 1
z =
1 2 3 1 0 0
0 1 -3 -2 1 0
0 0 -1 -5 2 1
z =
16
1 2 3 1 0 0
0 1 -3 -2 1 0
0 0 1 5 -2 -1
z =
1 2 0 -14 6 3

0 1 0 13 -5 -3
0 0 1 5 -2 -1
z =
1 0 0 -40 16 9
0 1 0 13 -5 -3
0 0 1 5 -2 -1
z =
1 0 0 -40 16 9
0 1 0 13 -5 -3
0 0 1 5 -2 -1
Ma tran nghich dao la
x =
-40 16 9
13 -5 -3
5 -2 -1
VD2: Tìm ma trận nghịc đảo bằng phương pháp Gauss:












=
2654

7536
1254
6532
A
Nhập giá trị cho A: [2 3 5 6;4 5 2 1;6 3 5 7;4 5 6 2]
Nhập giá trị cho n: 4
Tính, kết quả:













−−−
−−
−−
2088.00220.00769.01978.0
3022.00055.02692.00495.0
1209.01978.10307702198
0522.02445.00192.02995.0
Quá trình giải trong matlab.
17
Ma tran da cho:

a =
2 3 5 6
4 5 2 1
6 3 5 7
4 5 6 2
Bai giai
z =
2 3 5 6 1 0 0 0
4 5 2 1 0 1 0 0
6 3 5 7 0 0 1 0
4 5 6 2 0 0 0 1
z =
1.0000 1.5000 2.5000 3.0000 0.5000 0 0 0
0 -1.0000 -8.0000 -11.0000 -2.0000 1.0000 0 0
0 -6.0000 -10.0000 -11.0000 -3.0000 0 1.0000 0
0 -1.0000 -4.0000 -10.0000 -2.0000 0 0 1.0000
z =
1.0000 1.5000 2.5000 3.0000 0.5000 0 0 0
0 1.0000 8.0000 11.0000 2.0000 -1.0000 0 0
0 0 38.0000 55.0000 9.0000 -6.0000 1.0000 0
0 0 4.0000 1.0000 0 -1.0000 0 1.0000
z =
1.0000 1.5000 2.5000 3.0000 0.5000 0 0 0
0 1.0000 8.0000 11.0000 2.0000 -1.0000 0 0
0 0 1.0000 1.4474 0.2368 -0.1579 0.0263 0
0 0 0 -4.7895 -0.9474 -0.3684 -0.1053 1.0000
z =
1.0000 1.5000 2.5000 3.0000 0.5000 0 0 0
0 1.0000 8.0000 11.0000 2.0000 -1.0000 0 0
0 0 1.0000 1.4474 0.2368 -0.1579 0.0263 0

0 0 0 1.0000 0.1978 0.0769 0.0220 -0.2088
z =
18
1.0000 1.5000 2.5000 0 -0.0934 -0.2308 -0.0659 0.6264
0 1.0000 8.0000 0 -0.1758 -1.8462 -0.2418 2.2967
0 0 1.0000 0 -0.0495 -0.2692 -0.0055 0.3022
0 0 0 1.0000 0.1978 0.0769 0.0220 -0.2088
z =
1.0000 1.5000 0 0 0.0302 0.4423 -0.0522 -0.1291
0 1.0000 0 0 0.2198 0.3077 -0.1978 -0.1209
0 0 1.0000 0 -0.0495 -0.2692 -0.0055 0.3022
0 0 0 1.0000 0.1978 0.0769 0.0220 -0.2088
z =
1.0000 0 0 0 -0.2995 -0.0192 0.2445 0.0522
0 1.0000 0 0 0.2198 0.3077 -0.1978 -0.1209
0 0 1.0000 0 -0.0495 -0.2692 -0.0055 0.3022
0 0 0 1.0000 0.1978 0.0769 0.0220 -0.2088
z =
1.0000 0 0 0 -0.2995 -0.0192 0.2445 0.0522
0 1.0000 0 0 0.2198 0.3077 -0.1978 -0.1209
0 0 1.0000 0 -0.0495 -0.2692 -0.0055 0.3022
0 0 0 1.0000 0.1978 0.0769 0.0220 -0.2088
Ma tran nghich dao la
x =
-0.2995 -0.0192 0.2445 0.0522
0.2198 0.3077 -0.1978 -0.1209
-0.0495 -0.2692 -0.0055 0.3022
0.1978 0.0769 0.0220 -0.2088
>>
VD3: trường hợp phần tử trụ bằng 0:











=
023
205
320
A
Nhập A: [0 2 3;5 0 2;3 2 0]
Nhập n: 3
Kết quả:
19
Hệ suy biến không tính được.
20

×