Tải bản đầy đủ (.pdf) (30 trang)

phương pháp tính nguyễn quốc lân chương 2 hệ phương trình đại số tuyến tính sinhvienzone com

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 (232.56 KB, 30 trang )

Chương 3

om

HỆ PHƯƠNG TRÌNH ĐẠI SỐ

ne

.C

TUYẾN TÍNH

Zo

Trong chương này chúng ta nêu lên một số phương pháp dùng để
giải hệ phương trình đại số tuyến tính
Ax = b,

(3.1)

Si

nh

Vi

en

rất thường gặp trong các bài toán khoa học kó thuật. Ta chỉ xét hệ
gồm n phương trình với n ẩn. Do vậy ma trận hệ số A là ma trận
vuông cấp n, và vectơ nghiệm x cũng như vectơ tự do b là các vectơ


cột n chiều thuộc Rn. Ta luôn giả thiết rằng det A = 0, và do đó bao
giờ hệ cũng có nghiệm duy nhất x = A−1 b. Tuy nhiên việc tìm ma
trận nghòch đảo A−1 đôi khi còn khó khăn gấp nhiều lần so với việc
giải trực tiếp hệ phương trình xuất phát. Dưới đây chúng ta sẽ xét
một số phương pháp thường dùng để giải hệ phương trình (3.1).

3.1 PHƯƠNG PHÁP GAUSS
Trước khi trình bày phương pháp Gauss, chúng ta xét một số
trường hợp đơn giản khi ma trận hệ số A của hệ phương trình (3.1)
có dạng đặt biệt.

SinhVienZone.com

/>

36

HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH

Trường hợp đơn giản nhất là trường hợp hệ phương trình có ma
trận hệ số có dạng đường chéo:


a11
 0
A=
 ···
0

0

a22
···
0

···
···
···
···


0
0 

··· 
ann

bi
,
aii

i = 1, 2, 3, · · · , n

.C

xi =

om

Khi ấy hệ tương đương với n phương trình bậc nhất aii xi = bi, ∀i = 1, n.
Vì det A = a11a22 · · · ann = 0 nên aii = 0, ∀i. Và do đó nghiệm của hệ

có thể được viết dưới dạng:



a12
a22
···
0

···
···
···
···

Zo

a11
 0
A=
 ···
0

ne

Trường hợp thứ hai khi ma trận hệ số A có dạng tam giác trên:

a1n
a2n 

··· 

ann

en

Với giả thiết det A = 0, ta có aii = 0, ∀i = 1, n, và nghiệm của hệ được
cho bởi công thức:

Vi


bn

xn =



ann 

Si

nh

1 



 xk = akk bk −




n

j=k+1

akj xj  ,

(3.2)
k = n − 1, · · · , 1

Cuối cùng khi ma trận hệ số A có dạng tam giác dưới:

SinhVienZone.com



a11
 a21
A=
 ···
an1

0
a22
···
an2

···
···
···
···



0
0 

··· 
ann

/>

3.1 Phương pháp Gauss

37

Tương tự det A = 0 ⇒ aii = 0, ∀i = 1, n, và nghiệm của hệ có dạng:

b1

x1 =



a11 

k−1
1 


akj xj  ,


 xk = akk bk −

(3.3)
k = 2, · · · , n

j=1

.C

om

Thuật toán giải hệ phương trình với ma trận tam giác được thể
hiện trong Chương trình 3.1 và 3.2. Đối số của chương trình gồm: N
là số phương trình và số ẩn, a là ma trận hệ số cấp N × (N + 1), cột
thứ N + 1 là vectơ tự do. Kết quả trả về của chương trình là vectơ
nghiệm x .
Chương trình 3.1. - c3upper : Ma trận hệ số tam giác trên.

ne

function [x] = c3upper(N,a)

if nargin < 2, error('Hàm có tối thiểu 2 đối số');end;
for k=N-1:-1:1
sum = 0;

en

for j=k+1:N


Zo

x(N)=a(N,N+1)/a(N,N);

sum=sum+a(k,j)*x(j);
end;

nh

end;

Vi

x(k)=(a(k,N+1)-sum)/a(k,k);

Si

Chương trình 3.2. - c3lower : Ma trận hệ số tam giác dưới.
function [x] = c3lower(N,a)
if nargin < 2, error('Hàm có tối thiểu 2 đối số');end;

x(1)=a(1,N+1)/a(1,1);
for k=2:N
sum = 0;

SinhVienZone.com

/>

38


HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH
for j=1:k-1
sum=sum+a(k,j)*x(j);
end;
x(k)=(a(k,N+1)-sum)/a(k,k);

end;

.C

om

Bây giờ chúng ta sẽ trình bày phương pháp Gauss để giải hệ
phương trình tổng quát dạng (3.1). Nội dung của phương pháp Gauss
dùng để giải hệ phương trình đại số tuyến tính là sử dụng các phép
biến đổi sơ cấp theo hàng để chuyển về một hệ phương trình mới
tương đương với hệ phương trình cũ mà ma trận hệ số có dạng tam
giác. Các phép biến đổi sơ cấp thường hay sử dụng là:

ne

• Nhân một hàng cho một số khác không.
• Hoán chuyển hai hàng cho nhau.

Zo

• Cộng một hàng cho một hàng khác đã nhân với một số khác
không.


Vi

en

Xét hệ thống phương trình

a11x1 + a12x2



a21x1 + a22x2
...
...



an1x1 + an2x2

sau:

+ ...
+ ...
...
+ ...

+
+

a1nxn
a2nxn


=
=

+

annxn

=

b1
b2
...
bn

Si

nh

Do đònh thức của ma trận hệ số A khác không nên một trong các
số a11, a12, . . . , a1n phải khác không. Giả sử a11 = 0. Lấy phương trình
ak1
thứ k với k = 2, n trừ cho phương trình một đã nhân với
, ta được
a11
một hệ mới có dạng như sau:

a11x1 + a12x2 + . . . + a1nxn = b1




(1)
(1)
(1)
a22 x2 + . . . + a2n xn = b2
...
...
...



(1)
(1)
(1)
an2 x2 + . . . + ann xn = bn

SinhVienZone.com

/>

3.1 Phương pháp Gauss

39

(1)

(1)

om


Trong các số a22 , . . . , an2 phải có một số khác không, vì nếu ngược
(1)
lại thì det A = 0, trái với giả thiết. Giả sử a22 = 0. Còn nếu chỉ có
(1)
(1)
ap2 = 0 và a22 = 0 thì ta thực hiện phép hoán chuyển hai phương
trình thứ 2 và thứ p. Tiếp tục biến đổi cho n − 2 phương trình cuối.
Và cứ tiếp tục cho đến phương trình thứ n, ta được hệ phương trình
sau

a1nxn
=
b1
a11x1 + a12x2 + . . . +



(1)
(1)
(1)
a22 x2 + . . . +
a2n xn
=
b2
...
...
...




(n−1)
(n−1)
ann xn = bn

.C

Đây là hệ phương trình có ma trận hệ số có dạng tam giác trên
và có thể giải được bằng công thức (3.2).

x1
2x1
x1



x1

− x2
− 2x2
+ x2
− x2

+
+
+
+

2x3
3x3
x3

4x3

Zo






ne

Ví dụ 3.1. Xét hệ phương trình đại số tuyến tính sau:




x4
3x4

+

3x4

=
=
=
=

−8
−20

−2
4

en

Ma trận hệ số mở rộng có dạng



nh

Vi

A(0)

1 −1
 2 −2
=
 1
1
1 −1

2 −1
3 −3
1
0
4
3



: −8
: −20 

: −2 
:
4

Ta thực hiện các phép biến đổi sau: (h2 = h2 − 2h1 ), (h3 =

Si

h3 − h1 ), (h4 = h4 − h1), khi đó ma trận trở thành

1 −1
2 −1 : −8

0
0
−1
−1 : −4
A(1) = 
 0
2 −1
1 :
6
0
0
2
4 : 12







(1)

Phần tử a22 = 0, do đó để tiếp tục, ta thực hiện phép chuyển đổi

SinhVienZone.com

/>

40

HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH
giữa hàng thứ hai và thứ ba và thu được



A(2)

1
 0
=
 0
0

−1
2

2 −1
0 −1
0
2

−1
1
−1
4


: −8
:
6 

: −4 
: 12

Cuối cùng lấy hàng thứ tư cộng cho hai lần hàng thứ ba ta được:

A(3)

1
 0

=
0
0

−1

2
2 −1
0 −1
0
0

−1
1
−1
2


: −8
:
6 

: −4 
:
4

om



.C

Và sử dụng công thức (3.2) ta có thể dễ dàng tìm được x =

[−7, 3, 2, 2]T .


Zo

ne

Thuật toán giải hệ phương trình bằng phương pháp Gauss được
thể hiện trong Chương trình 3.3. Đối số của chương trình gồm: N là
số phương trình và số ẩn, a là ma trận hệ số cấp N × (N + 1), cột
thứ N + 1 là vectơ tự do. Kết quả trả về của chương trình là vectơ
nghiệm x .

en

Chương trình 3.3. - c3gauss : Phương pháp Gauss.
function [x] = c3gauss(N,a)

Vi

if nargin < 2, error('Hàm có tối thiểu 2 đối số');end
for k=1:N

nh

if a(k,k)==0
flag=0;

for i=k+1:N

Si

if a(i,k)∼=0

flag=1;
for j=1:N+1
tmp=a(k,j);
a(k,j)=a(i,j);
a(i,j)=tmp;

SinhVienZone.com

/>

3.1 Phương pháp Gauss

41

end;
break;
end;
end;
if flag==0
error('Ma trận suy biến.');
end;
end;

om

for i=k+1:N
tmp=a(i,k);
for j=k:N+1

a(i,j)=a(i,j)-tmp*a(k,j)/a(k,k);


.C

end;
end;

ne

end;

Zo

x=c3upper(N,a);

(1)

nh

Vi

en

Trong ví dụ 3.1 ở phần trên, ở bước thứ hai, do a22 = 0 nên ta
phải hoán chuyển hai hàng thứ hai và thứ ba. Để tránh trường hợp
này, ta có thể cải tiến phương pháp Gauss theo hướng như sau. Tại
mỗi bước, khi chọn phần tử để biến đổi, ta sẽ chọn phần tử có trò
tuyệt đối lớn nhất, sao cho không cùng hàng và cột với những phần
tử đã chọn trước. Phần tử như vậy thường được gọi là phần tử chính
hay phần tử trội. Sau đó ta sẽ biến đổi để cho tất cả các phần tử trên
cùng cột của phần tử trội bằng không. Qua n bước như vậy ta sẽ tìm

được nghiệm dễ dàng 1 . Ta minh hoạ phương pháp này bằng ví dụ
sau.

Si

Ví dụ 3.2. Xét hệ phương trình trong ví dụ trước có ma trận hệ số mở rộng

1 Phương

SinhVienZone.com



A(0)

1 −1
 2 −2
=
 1
1
1 −1

2 −1
3 −3
1
0
4
3



: −8
: −20 

: −2 
:
4

pháp này cũng được gọi là phương pháp Gauss-Jordan hay Jordan

/>

42

HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH
(0)

Đầu tiên ta sẽ chọn phần tử chính là phần tử a43 = 4 và thực hiện
các phép biến đổi (4h3 − h4), (4h2 − 3h4), (2h1 − h4 ) ta thu được



A(1)

1 −1 0
 5 −5 0
=
 3
5 0
1 −1 4



: −20
: −92 

: −12 
:
4

−5
−21
−3
3

Bước tiếp theo, phần tử chính được chọn không được nằm trên hàng
(1)

thứ tư và cột thức ba. Đó là phần tử a24 = −21. Tiếp tục thực hiện

om

các phép biến đổi (21h1 − 5h2 ), (7h3 − h2), (7h4 + h2) ta thu được



.C

A(2)


−4

4 0
0 :
40
 5 −5 0 −21 : −92 

=
 16
40 0
0 :
8 
12 −12 28
0 : −64

Tiếp theo phần tử chính được chọn không được nằm trên hàng thứ

ne

hai, thứ tư và cột thứ ba, thứ tư và do đó phần tử chính sẽ là phần tử
(2)

en

Zo

a32 = 40. Thực hiện phép biến đổi (10h1 − h3 ), (8h2 + h3 ), (10h4 +
3h3) ta được


−56 0
0

0 :
392
 56 0
0 −168 : −728 

A(3) = 
 16 40
0
0 :
8 
168 0 280
0 : −616
Cuối cùng phần tử chính không cùng nằm trên hàng và cột của
(3)

Vi

những phần tử chính đã được chọn trước là phần tử a11 = −56.
Thực hiện các phép biến đổi (h2 + h1), (7h3 + 2h1), (h4 + 3h1) ta

Si

nh

có ma trận cuối cùng

A(3)





−56
0
0
0 :
392

0
0
0 −168 : −336 

=

0 280
0
0 :
840 
0
0 280
0 :
560

và hệ phương trình đầu tương đương với hệ sau

SinhVienZone.com


−56x1




−168x4
280x2



280x3

=
=
=
=

392
−336
840
560

/>

3.1 Phương pháp Gauss

43

Từ đây chúng ta cũng suy ra được x = [−7, 3, 2, 2]T .

Thuật toán giải hệ phương trình bằng phương pháp phần tử trội
được thể hiện trong Chương trình 3.4. Đối số của chương trình gồm:
N là số phương trình và số ẩn, a là ma trận hệ số cấp N × (N + 1),
cột thứ N + 1 là vectơ tự do. Kết quả trả về của chương trình là vectơ

nghiệm x .

om

Chương trình 3.4. - c3jordan : Phương pháp phần tử trội.
function [x] = c3jordan(N,a)

if nargin < 2, error('Hàm có tối thiểu 2 đối số'); end
for i=1:N, b(i)=0; end;

.C

for k=1:N
max=0;

ne

for i=1:N
if b(i)==0
for j=1:N

Zo

if max
max=abs(a(i,j)); im=i; jm=j;

end;
end;


en

end;
end;

Vi

if max<=0, error('Ma trận suy biến.'); end;
b(im)=jm; max=a(im,jm);

nh

for j=1:N+1, a(im,j)=a(im,j)/max; end;
for i=1:N

if i∼=im

Si

max=a(i,jm);
for j=1:N+1
a(i,j)=a(i,j)-a(im,j)*max;

end;
end;
end;

SinhVienZone.com

/>


44

HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH

end;
for i=1:N, x(b(i))=a(i,N+1); end;

ne

3.2 PHƯƠNG PHÁP NHÂN TỬ LU

.C

om

Các phương pháp có sử dụng các phép biến đổi sơ cấp cơ bản có
ưu điểm là đơn giản, dễ lập trình. Tuy nhiên nếu phần tử được chọn
để biến đổi gần với không thì phương pháp Gauss có thể cho kết
quả không chính xác. Hơn nữa, nếu các phép toán cộng, trừ, nhân,
chia được làm đúng hoàn toàn, thì các phương pháp trên cho chúng
ta nghiệm đúng của hệ phương trình. Tuy nhiên, khi thực hiện trên
các công cụ tính toán, ta vẫn gặp phải sai số làm tròn. Cho nên các
phương pháp Gauss vẫn được xem như là các phương pháp gần đúng.

en

Zo

Nội dung của phương pháp nhân tử LU là phân tích ma trận hệ

số A thành tích của hai ma trận L và U , trong đó L là ma trận tam
giác dưới và U là ma trận tam giác trên. Khi đó việc giải hệ phương
trình (3.1) sẽ đưa về việc giải hai hệ phương trình Ly = b và U x = y
mà ma trận hệ số là các ma trận tam giác và nghiệm thu được từ các
công thức (3.2) và (3.3). Ta có đònh lí sau đây.
Đònh lí 3.1. Nếu A là ma trận không suy biến, thì bao giờ cũng tồn

nh

Vi

tại một ma trận P không suy biến sao cho ma trận P A phân tích
được thành tích của ma trận tam giác dưới L và ma trận tam giác
trên U , nghóa là P A = LU .

Si

Có rất nhiều phương pháp phân tích A = LU , tuy nhiên ta thường
xét trường hợp ma trận L có đường chéo chính bằng 1 và gọi là
phương pháp Doolittle. Khi đó L và U có dạng:




1
0 ··· 0
u11 u12 · · · u1n
 l21



1 ··· 0 
 và U =  0 u22 · · · u2n 
L=
 ··· ··· ··· ··· 
 ··· ··· ··· ··· 
ln1 ln2 · · · 1
0
0 · · · unn

SinhVienZone.com

/>

3.2 Phương pháp nhân tử LU

45

k=1

Ví dụ 3.3. Xét hệ phương trình

+

+

2x2
3x2
x2



+
+

2
2
 −4 −3
2
1

Do đó

0
1

l32

 
0
u11
0 · 0
1
0

u12
u22
0


u13
u23 

u33

u11 = 2; u12 = 2; u13 = −3; l21 = −2; l31 = 1;
u22 = 1; u23 = −2;l32 = −1; u33 = 3.


nh

Vi

1
Ly = b ⇐⇒  −2
1

2
U x = y ⇐⇒  0
0

Si

9
−15
3

en

với

 
−3

1
4  =  l21
2
l31

Zo



=
=
=

ne

Ta phân tích ma trận hệ số

3x3
4x3
2x3

.C


 2x1
−4x1

2x1

om


Các phần tử của hai ma trận L và U được xác đònh theo công thức
sau:

u1j = a1j
(1 j n)


ai1



l
=
(2 i n)
i1


u11


i−1
uij = aij −
lik ukj
(1 < i j)
(3.4)

k=1




j−1


1


l
a
(1 < j < i)
=

lik ukj
ij
 ij
ujj






0 0
9
9
1 0  y =  −15  =⇒ y =  3 
−1 1
3
−3






2 −3
9
2
1 −2  x =  3  =⇒ x =  1 
0
3
−3
−1

Ví dụ 3.4. Hệ phương trình

SinhVienZone.com


x1



2x1
3x1



−x1

+

+

+

x2
x2
x2
2x2

+


+

x3
x3
3x3

+ 3x4
+ x4
+ 2x4
− x4

=
=
=
=

4
1

−3
4

/>

46

HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH
Ta có phân tích của ma trận hệ số A = LU theo phương pháp
Doolittle như sau:



1
0
 2
1
A=
 3
4
−1 −3

0
0
1
0


0
1

1
0
3
 0 −1 −1 −5
0 

0  0
0
3
13
1
0
0
0 −13






Ta có

1
0
 2
1
Ly = b ⇐⇒ 
 3
4
−1 −3


0
0
1
0


0
y1
 y2
0 

0   y3
1
y4






4
  1 
=

  −3 
4

om




1
0
−1 −1
0
3
0
0


3
x1
 x2
−5 

13   x3
−13
x4






4
  −7 
=

  13 

−13

Zo

1
 0
U x = y ⇐⇒ 
 0
0

ne



.C

Ta thu được y = [4, −7, 13, −13]T . Và cuối cùng từ hệ phương trình

ta có nghiệm x = [−1, 2, 0, 1]T .

Vi

en

Thuật toán phân rã LU được thể hiện trong Chương trình 3.5.
Đối số của chương trình gồm: N là số phương trình, a là ma trận hệ
số cấp N × N . Kết quả trả về của chương trình là ma trận tam giác
dưới l và ma trận tam giác trên u .

nh


Chương trình 3.5. - c3LUfactor : Phương pháp nhân tử LU.
function [l,u] = c3LUfactor(N,a)
if nargin < 2, error('Hàm có tối thiểu 2 đối số'); end;

Si

l=zeros(N); u=zeros(N);
for i=1:N, l(i,i)=1; end;
for j=1:N, u(1,j)=a(1,j); end;
if u(1,1)==0, error('Không thể phân tích được.');end;
for i=2:N, l(i,1)=a(i,1)/u(1,1); end;
for i=2:N-1

SinhVienZone.com

/>

3.2 Phương pháp nhân tử LU

47

for j=i:N
sum=0;
for k=1:i-1,sum=sum+l(i,k)*u(k,j);end;
u(i,j)=a(i,j)-sum;
end;
if

u(i,i)==0,error('Không


thể

phân

tích

được.');end;
for j=i+1:N

om

sum=0;

for k=1:i-1,sum=sum+l(j,k)*u(k,i);end;
l(j,i)=(a(j,i)-sum)/u(i,i);
end;

.C

end;

sum=0; for k=1:N-1,sum=sum+l(N,k)*u(k,N); end;

Zo

ne

u(N,N)=a(N,N)-sum;


Phương pháp phân rã LU áp dụng rất hiệu quả trong trường hợp
ma trận hệ số có dạng ba đường chéo:

en



a12
a22
a32
···
0
0

nh

Vi




A=




a11
a21
0
···

0
0

0
a23
a33
···
0
0

···
···
···
···
···
···



0
0
0
···

0
0
0
···

an−1,n−1

an,n−1

an−1,n
an,n









Si

Khi đó phân rã Doolittle cho ta


1

 l21

L=
 0
 ···
0

SinhVienZone.com

0

1
l32
···
0

0
0
1
···
0

···
···
···
···
···

0
0
0
···
1










 và U = 





u11
0
0
···
0

u12
u22
0
···
0

0
u23
u33
···
0

···
···
···
···
···


0
0
0
···
un,n

/>








48

HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH
Khi ấy từ công thức (3.4) ta có

a21

u = a11; u12 = a12; l21 =
;

 11
u11
ui,i = ai,i − li,i−1ui−1,i; ∀i = 2, 3, . . ., n


a

 ui,i+1 = ai,i+1; li+1,i = i+1,i ; ∀i = 2, 3, . . ., n − 1
ui,i

ne

.C

om

Để thể hiện thuật toán Doolittle trong trường hợp ma trận hệ số
có dạng ba đường chéo, thay vì đưa vào ma trận A, ta đưa vào ba
vectơ: a chứa các phần tử trên đường chéo chính của A, b là đường
chéo nằm trên đường chéo chính và c là đường chéo nằm dưới
đường chéo chính, vectơ tự do là d . Chương trình trên MatLab được
thể hiện trong chương trình 3.6. Kết quả trả về là vectơ nghiệm x .

Chương trình 3.6. - c3tridiag : Ma trận ba đường chéo.

Zo

function [x]=c3tridiag(N,a,b,c,d)

if nargin < 5, error('Ham co toi thieu 5 doi so.'); end;
for i=2:N-1

en

u(1)=a(1);v(1)=b(1);l(1)=c(1)/u(1);y(1)=d(1);

u(i)=a(i)-l(i-1)*v(i-1);
v(i)=b(i);

Vi

l(i)=c(i)/u(i);

y(i)=d(i)-l(i-1)*y(i-1);

nh

end;

u(N)=a(N)-l(N-1)*v(N-1);
y(N)=d(N)-l(N-1)*y(N-1);

Si

x(N)=y(N)/u(N);
for i=N-1:-1:1
x(i)=(y(i)-v(i)*x(i+1))/u(i);

end;

SinhVienZone.com

/>

3.3 Phương pháp Choleski


49

3.3 PHƯƠNG PHÁP CHOLESKI

om

Đây là trường hợp đặt biệt của phương pháp nhân tử LU, và được
dùng cho trường hợp ma trận hệ số A đối xứng và xác đònh dương.
Ma trận vuông A được gọi là đối xứng nếu AT = A. Có thể nói rằng
ma trận A là đối xứng nếu các phần tử của nó đối xứng với nhau qua
đường chéo chính, nghóa là aij = aji, ∀i, j = 1, n. Còn ma trận A là
xác đònh dương nếu ∀x ∈ Rn , x = 0 : xT Ax > 0. Để kiểm tra tính xác
đònh dương của một ma trận, ta thường dùng đònh lí sau đây.
Đònh lí 3.2. Một ma trận là xác đònh dương khi và chỉ khi tất cả các

đònh thức con chính của nó đều dương.


1 1 −1
0  có ∆1 = |1| = 1 > 0,
Ví dụ 3.5. Xét ma trận A =  1 2
−1 0
4
1 1 −1
1 1
∆2 =
= 1 > 0 và ∆3 =
1 2
0 = 2 > 0. Do đó
1 2

−1 0
4
A là xác đònh dương.

en

Zo

ne



.C

Trong đó đònh thức con chính cấp k, 1 k n của ma trận là đònh
thức con thu được từ k hàng và k cột đầu tiên của ma trận đó.

Vi

Ta có đònh lí Choleski:

Đònh lí 3.3. Ma trận A là đối xứng và xác đònh dương khi và chỉ khi

nh

tồn tại một ma trận B tam giác dưới, khả đảo sao cho A = BB T .

Si

Khi đó ma trận tam giác dưới B có thể tìm được theo công thức

sau:

ai1


b11 = a11; bi1 =
(2 i n)


b11



i−1


bii = aii −
b2ik
(1 < i n)
(3.5)
k=1


j−1



1

 bij =

aij −
(1 < j < i)
bik bjk

bjj
k=1

SinhVienZone.com

/>

50

HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH
Ví dụ 3.6. Xét hệ phương trình


 

x1
1
1 1 −1
0   x2  =  2  = b
Ax =  1 2
−1 0
4
3
x3



1 1 −1
0  là đối xứng và xác đònh dương,
Vì ma trận A =  1 2
−1 0
4
nên từ công thức (3.5) ta có thể xác đònh các hệ số bij , i > j của
ma trận tam giác dưới B như sau

om



Vi

en

Zo

ne

.C


b11 = 1, b21 = 1, b31 = −1, b22 = 1, b32 = 1, b33 = 2


1 0
0
và do đó A = BB T với B =  1 1 √0 . Hệ phương trình
−1 1

2
By = b
. Ta được
xuất phát sẽ tương đương với hai hệ
BT x = y




 
1
1 0
0
1

1 
By = b ⇔  1 1 √0  y =  2  ⇒ y =  3 

3
−1 1
2
2






1
1 1 −1

3

1 
B T x = y ⇔  0 1 √1  x =  3  ⇒ x =  −1/2 .

3/2
0 0
2
2

Si

nh

Thuật toán phân rã Choleski được thể hiện trong Chương trình
3.7. Đối số của chương trình gồm: N là cấp của ma trận, a là ma
trận hệ số đối xứng và xác đònh dương. Kết quả trả về của chương
trình là ma trận tam giác dưới b .
Chương trình 3.7. - c3choleski : Phương pháp Choleski.
function [b] = c3choleski(N,a)
if nargin < 2, error('Hàm có tối thiểu 2 đối số'); end;
for i=1:N

SinhVienZone.com

/>

3.3 Phương pháp Choleski

51


for j=1:N
if a(i,j) ∼ = a(j,i)
error('Ma trận không đối xứng.');
end;
end;
end;
b=zeros(N);
end;
b(1,1)=sqrt(a(1,1));
for i=2:N, b(i,1)=a(i,1)/b(1,1); end;
for k=2:N

om

if a(1,1)<=0, error('Ma trận không xác đònh dương.');

.C

ak=0; for j=1:k-1, ak=ak+b(k,j)*b(k,j); end;
ak=a(k,k)-ak;
end;
for i=k+1:N
ak=0;
for j=1:k-1

Zo

b(k,k)=sqrt(ak);


ne

if ak<=0, error('Ma trận không xác đònh dương.');

en

ak=ak+b(i,j)*b(k,j);
end;

nh

end;

Vi

b(i,k)=(a(i,k)-ak)/b(k,k);
end;

Si

Trong thực tế, ứng dụng của phương pháp Choleski để giải hệ
phương trình đại số tuyến tính, ta chỉ cần tính đối xứng và không
cần tính xác đònh dương của ma trận hệ số A. Khi đó các phần tử
của ma trận tam giác B có thể là những số phức (sử dụng đơn vò ảo

i = −1). Tuy nhiên, kết quả tính toán cuối cùng sẽ cho chúng ta
nghiệm thực của hệ phương trình ban đầu.

SinhVienZone.com


/>

52

HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH
Ví dụ 3.7. Xét hệ phương trình

 


1
1 2 −1
x1
0   x2  =  1  = b
Ax =  2 1
1
x3
−1 0
1


Từ công thức (3.5) ta có thể xác đònh các hệ số bij , i > j của ma
trận tam giác dưới B như sau

Ta có

om


2

2
b11 = 1, b21 = 2, b31 = −1, b22 = i 3, b32 = √ , b33 = √
i 3
3


1
 
0
1
1


− √
0 
i 3
 1 ⇒y=
y
=

2
2 
 i2 3


1

i 3
3
3





1
2
−1
1

2 
1 


 0 i 3 √ 
 − √ 
T
B x=y⇔
x =  i 3 
i
3



2 
2


0
0
3

3
và ta có nghiệm của hệ phương trình là x1 = 0, x2 = 1, x3 = 1.
0








Zo

ne

1
 2
By = b ⇔ 

−1

.C



en

3.4 CHUẨN VECTƠ VÀ CHUẨN MA TRẬN

Vi


Xét không gian tuyến tính thực Rn . Chuẩn của vectơ x ∈ Rn là
một số thực, ký hiệu là x , thoả các điều kiện sau đây:
(i) ∀x ∈ Rn, x

0, x = 0 ⇔ x = 0

nh

(ii) ∀x ∈ Rn , ∀λ ∈ R, λx = |λ| . x

Si

(iii) ∀x, y ∈ Rn , x + y
x + y . Điều kiện này thường được gọi là
bất đẳng thức tam giác.
Trong Rn có thể có rất nhiều chuẩn, tuy nhiên chúng ta chỉ xét
chủ yếu hai chuẩn thường dùng sau đây: ∀x = [x1, x2, . . ., xn]T ∈ Rn
n

x

1

= |x1 | + |x2| + · · · + |xn| =

|xk |

(3.6)


k=1

SinhVienZone.com

/>

3.4 Chuẩn vectơ và chuẩn ma trận
x



53
(3.7)

= max(|x1 | , |x2| , . . . , |xn|) = max |xk |
k=1,n

Việc kiểm tra các công thức (3.6) và (3.7) thoả các điều kiện (i),
(ii), (iii) là đơn giản và dành cho bạn đọc.
Bây giờ chúng ta đònh nghóa chuẩn ma trận tương ứng với chuẩn
vectơ.
Đònh nghóa 3.1. Chuẩn ma trận tương ứng với chuẩn vectơ được xác

Ax
x

A = max Ax = max
x =0

.C


x =1

om

đònh theo công thức:

ne

Ví dụ 3.8. Xác đònh chuẩn của ma trận A =
với chuẩn một của vectơ. Với mọi x =
1

Ax

2
4

x1
x2

tương ứng

∈ R2 , sao cho

= |x1| + |x2| = 1, ta có
1

Zo


x

1
3

(3.8)

= |x1 + 2x2| + |3x1 + 4x2|
1

= 6.

en

Do đó A

4 |x1| + 6 |x2| = 4 + 2 |x2 |

Từ công thức (3.8) ta dễ dàng suy ra được rằng: Ax

A

6

x

Vi

Đònh lí 3.4. Chuẩn ma trận theo công thức (3.8) tương ứng với chuẩn


Si

nh

vectơ được xác đònh như sau:
A

n
1

= max

1 j n

|aij |

(3.9)

|aij |

(3.10)

i=1
n

A



= max


1 i n

j=1

(m)
Đònh nghóa 3.2. Xét dãy các vectơ {x(m) }∞
∈ Rn. Ta nói
m=0 với x

dãy các vectơ này hội tụ về vectơ x khi m → +∞ nếu và chỉ nếu
x(m) − x → 0 khi m → +∞ (hội tụ theo chuẩn).

SinhVienZone.com

/>

54

HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH
Khi đó ta ký hiệu lim x(m) = x và chuẩn có thể lấy một chuẩn
m→∞

bất kỳ trong các công thức (3.6) hoặc (3.7). Ta cũng có thể nói dãy
vectơ {x(m) } hội tụ về x theo chuẩn đã cho. Ta có đònh lí sau đây:
Đònh lí 3.5. Để dãy các vectơ {x(m) } hội tụ tới vectơ x khi m → +∞
(m)

theo chuẩn thì điều kiện cần và đủ là dãy {xk } hội tụ về xk , ∀k = 1, n
(hội tụ theo toạ độ).


A−1


b = Ax

A

x

ne

Từ đây chúng ta dễ dàng suy ra được

∆b

.C

∆x = A−1∆b

om

Bây giờ xét hệ phương trình Ax = b(det A = 0) có nghiệm x = A−1 b.
Cho b một số gia ∆b, khi đó nghiệm x tương ứng sẽ có số gia là ∆x,
và A∆x = ∆b ⇔ ∆x = A−1 ∆b. Ta có

∆x
x

∆b

b

Zo

A . A−1

Số

en

k(A) = Cond(A) = A . A−1

(3.11)

được gọi là số điều kiện của ma trận A. Ta có thể chứng tỏ được rằng
k(A)

+∞

Vi

1

nh

Số điều kiện của ma trận đặc trưng cho tính ổn đònh của hệ thống
phương trình đại số tuyến tính. Giá trò của k(A) càng gần với 1 thì
hệ càng ổn đònh. Số điều kiện càng lớn thì hệ càng mất ổn đònh.

Si


Ví dụ 3.9. Xét hệ phương trình Ax = b với A =

b=

3
3.01

. Dễ thấy hệ có nghiệm là x =

1
1

1 2
1 2.01



. Bây giờ xét hệ

3
−17
. Nghiệm của hệ bây giờ là x
˜=
.
3.1
10
1. Do đó b ≈ ˜b, nhưng x và x
˜
Ta nhận thấy k∞ (A) = 1207.01


x = ˜b với ˜b =

khác nhau rất xa.

SinhVienZone.com

/>

3.5 Phương pháp lặp

55

3.5 PHƯƠNG PHÁP LẶP
Kó thuật lặp dùng để giải hệ phương trình đại số tuyến tính (3.1)
cũng tương tự như phương pháp lặp đã xét trong chương 2. Muốn thế,
chúng ta chuyển hệ (3.1) về dạng tương đương x = T x + c với T là một
ma trận vuông cấp n và c là một vectơ đã biết. Xuất phát từ vectơ
ban đầu x(0), ta xây dựng một dãy các vectơ {x(m) }∞
m=0 theo công thức
lặp

om

x(m) = T x(m−1) + c
với m = 1, 2, 3, . . .. Ta có đònh lí sau đây:

T < 1 thì dãy lặp các vectơ xác đònh theo công
thức (3.12) sẽ hội tụ về nghiệm x của hệ với mọi vectơ lặp ban đầu
x(0). Khi đó ta có các công thức đánh giá sai số như sau:


ne

.C

Đònh lí 3.6. Nếu

(3.12)

T m
1− T

T
1− T

x(m) − x(m−1)

(3.13)

(3.14)

en

x(m) − x

x(1) − x(0)

Zo

x(m) − x


Vi

Bây giờ chúng ta sẽ xét một dạng ma trận hệ số của hệ phương
trình Ax = b mà có thể chuyển dễ dàng về dạng x = T x + c.

nh

Đònh nghóa 3.3. Ma trận A được gọi là ma trận đường chéo trội

Si

nghiêm ngặt nếu nó thoả mãn điều kiện sau đây:
n

|aij | < |aii |

(3.15)

j=1,j=i

Chúng ta có thể dễ dàng kiểm tra rằng nếu A là ma trận đường
chéo trội nghiêm ngặt thì det A = 0 và aii = 0, ∀i = 1, n. Xét hệ
phương trình (3.1) với A là ma trận đường chéo trội nghiêm ngặt. Ta

SinhVienZone.com

/>

56


HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH


0
0 
−
··· 
ann
· · · −a1n
· · · −a2n
···
···
· · · −ann




=


om

phân tích ma trận A theo dạng

 
a11 a12 · · · a1n
a11 0 · · ·
 a21 a22 · · · a2n   0 a22 · · ·
 

A =
 ··· ··· ··· ···  =  ··· ··· ···
0 ···
 an1 an2 · · · ann
 0
0
0
··· 0
0 −a12
 −a21

0
··· 0 
0
− 0
−
 ···

 ···
···
··· ···
···
−an1 −an2 · · · 0
0
0
= D−L−U

Zo

ne


.C

Chú ý rằng do aii = 0, ∀i = 1, n nên det D = 0. Và như vậy tồn tại ma
trận nghòch đảo:

 1
0
···
0

 a11


1

0
···
0 

D−1 = 
a22


 ··· ··· ··· ··· 

1 
0
0
···

ann
Khi đó hệ

(3.16)

en

Ax = b ⇐⇒ (D − L − U )x = b

Vi

Bây giờ chúng ta sẽ xét một vài phương pháp để chuyển hệ phương
trình (3.1) về dạng x = T x + c.

nh

Từ hệ (3.16) ta có Dx = (L + U )x + b. Do tồn tại D−1 nên
x = D−1 (L + U )x + D−1 b. Ký hiệu Tj = D−1 (L + U ) và cj = D−1 b. Khi
đó công thức lặp theo (3.12) sẽ có dạng
m = 1, 2, 3, . . .

(3.17)

Si

x(m) = Tj x(m−1) + cj ,

Phương pháp lặp dựa trên công thức lặp (3.17) được gọi là phương

pháp Jacobi. Dạng tường minh của công thức (3.17) như sau:

(m)

xi

SinhVienZone.com



i−1
n
1 
(m−1)
(m−1)

=
aij xj

aij xj
+ bi
aii
j=1
j=i+1

(3.18)

/>

3.5 Phương pháp lặp

57


với i = 1, 2, . . ., n. Ta có
n
n

TJ



= D

−1

(L + U )



= max
i=1,n

j=1,j=i

|aij |
aij
j=1,j=i
= max
<1
aii
|aii|
i=1,n


Ví dụ 3.10. Xét hệ phương trình

+
+
+

x2
10x2
x2


+
+

x3
x3
10x3

=
=
=

.C


 10x1
x1

−x1


om

do A là ma trận đường chéo trội nghiêm ngặt. Vậy TJ ∞ < 1, nghóa
là phương pháp Jacobi luôn hội tụ với mọi vectơ lặp ban đầu x(0) .

7
8
9

Với vectơ lặp ban đầu x(0) = (0, 0, 0)T , hãy tính vectơ x(3) và đánh

ne

giá sai số của nó. Ta có


0.0 −0.1
0.1
Tj =  −0.1
0.0 −0.1 
0.1 −0.1
0.0

Zo



Do đó:







0.7
0.71
= Tj x(0) + cj =  0.8 ; x(2) = Tj x(1) + cj =  0.64 ;
0.89
 0.9 
0.725
= Tj x(2) + cj =  0.640 . Ta có Tj ∞ = 0.2. Vì vậy
0.907

Si

nh

Vi

x(3)


0.7
và cj =  0.8 
0.9

en

x(1)




x(3) − x



0.2
x(3) − x(2)
1 − 0.2



= 0.0043

Ví dụ 3.11. Hệ phương trình Ax = b cho bỡi

SinhVienZone.com


10x1



−x1
2x1






+


x2
11x2
x2
3x2

+

+


2x3
x3
10x3
x3

+ 3x4
− x4
+ 8x4

=
=
=
=

6
25

−11
15

/>

58

HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH
có nghiệm duy nhất x = [1, 2, −1, 1]T . Để chuyển từ hệ Ax = b về
dạng x = Tj x + cj , ta biến đổi như sau


x1



x2
x3



x4

=
=
=
=

0.100x2 − 0.200x3 + 0.600
0.091x1 + 0.091x3 − 0.273x4 + 2.273

0.200x1 + 0.100x2 + 0.100x4 − 1.100
−0.375x2 + 0.125x3 + 1.875

Khi đó ma trận Tj và vectơ cj có dạng:



0
0.100 −0.200
0
0.600
 0.091

 2.273
0
0.091
−0.273
,c = 
Tj = 
 −0.200
0.100
0
0.100  j  −1.100
0 −0.375
0.125
0
1.875
Chọn chuẩn vô cùng và ta có Tj

.C


om





=






1
< 1. Do đó phương pháp
2

ne

lặp hội tụ. Chọn x(0) = [0, 0, 0, 0]T . Bảng sau đây cho chúng ta kết
quả tính toán sau 10 lần lặp.

1
2
3
4
5
0.6000
1.0473

0.9326
1.0152
0.9890
2.2727
1.7159
2.0533
1.9537
2.0114
−1.1000 −0.8052 −1.0493 −0.9681 −1.0103
1.8750
0.8852
1.1309
0.9739
1.0214

m
(m)
x1
(m)
x2
(m)
x3
(m)
x4

6
7
8
9
10

1.0032
0.9981
1.0006
0.9997
1.0001
1.9922
2.0023
1.9987
2.0004
1.9998
−0.9945 −1.0020 −0.9990 −1.0004 −0.9998
0.9944
1.0036
0.9989
1.0006
0.9998

Si

nh

Vi

en

Zo

m
(m)
x1

(m)
x2
(m)
x3
(m)
x4

Quá trình lặp dừng lại dựa theo đánh giá:

x(10) − x



1/2
x(10) − x(9)
1 − 1/2

Trong khi sai số thực sự là x(10) − x

SinhVienZone.com





= 8.0 × 10−4 < 10−3

= 0.0002.

/>


3.5 Phương pháp lặp

59

Phương pháp lặp Jacobi được thể hiện trong Chương trình 3.8.
Đối số của chương trình gồm: N là cấp của ma trận, a là ma trận
hệ số cấp N ×(N+1 ), x0 là vectơ lặp ban đầu, eps là sai số (giá trò
mặc đònh là 10−6) và maxit là số lần lặp tối đa cho phép. Kết quả
trả về của chương trình là vectơ lặp x , sai số ss và số lần lặp thực
tế n .
Chương trình 3.8. - c3jacobi : Phương pháp Jacobi.

om

function [x,ss,n]=c3jacobi(N,a,x0,eps,maxit)
if nargin < 5, maxit = 100; end;
if nargin < 4, eps = 1.0E-6; end;

.C

if nargin < 3, error('Hàm có ít nhất 3 đối số.'); end;
n=0;
for l=1:maxit

ne

n=n+1;
for k=1:N
for j=1:N


Zo

sum=0;

if j∼=k, sum=sum+a(k,j)*x0(j);end;
end;

Vi

ss=0;

en

x(k)=(a(k,N+1)-sum)/a(k,k);
end;
for k=1:N

if abs(x(k)-x0(k))>ss

nh

ss=abs(x(k)-x0(k));

end;

Si

end;


if ssfor k=1:N, x0(k)=x(k); end;

end;

Trong công thức (3.18), để tính các toạ độ của vectơ lặp x(m) ,

SinhVienZone.com

/>

×