You are on page 1of 77

CHNG 2: MA TRN

1.MTSKHINIM

(Matrn[A]gilixngnu[A]T=[A]
(Chomtmatrnvung[A],cpn.Tanimatrn[A]khngsuybin
(non singular) nu ma trn c th nghch o c hay ni cch khc, nh
thccamatrnkhckhng.

( Ma trn Hermite l mt ma trn vung c cc phn t l s phc


bngchuynvlinhpcan,nghalphnthngictjbngsphc
T

lin hp ca phn t hng j ct i A = A . V d ma trn


2 + j
3
[A] =
lmatrnHermite.
2
j
1

(MatrnHouseholderlmtmatrnvungdng:
2
[ H] = [E ] T [ U ][ U ]T
[U] [U]

Trongvlvectctkhczero
(Matrn[A]giltrcgiaonu[A]T[A]=[E]
T

(Matrnphc[U]gilmatrnunitanu U U = E .Vdma
1 + j 1 + j
2
2
trn [ U ] =
lmatrnunita
+

1
j
1
j

2
2
(Mtmatrnchcmtctgilmtvect
(ChuncamtvectX,khiul X ,lmtsthcthomn:

X >0

cX = c X

X + Y X + Y
GithitX=[x1,x2,,xn]T,tathngdngmttrong3chunsauy:

X 1 = max x j
j

X 2 = x j
j=1

58

X 3 =

xj
2

j=1

(Chuncamtmatrn[A],khiul A ,lmtsthcthomn:
A >0

cA = c A

A + B A + B

AB A B
Tathngdngmttrong3chunsauy:

A 1 = max a i ,j
i

j=1
n

A 1 = max a i ,j
j

A 3 =

i =1

a i ,j
2

i ,j=1

(Matrn[A]gilxcnhdngnuvivect[x]btktac:

[ x]T[ A][ x] > 0

(Matrn[A]gilnaxcnhdngnuvivect[x]btktac:

[ x ]T[ A ][ x] 0

Tanhnghamatrnxcnhmvnaxcnhmmtcchtng
t.
(Hngcamatrnlcpcamatrnconcamatrnycnhthc
khc khng cn mi ma trn con cp cao hn u c nh thc bng
khng(matrnconlmatrnccbngcchxomtshngvctca
matrnbanu).

2.BINIHOUSEHOLDER
1. Ma trn Householder: Ta bin i ma trn [A] v dng c cc phn t
thuc ng cho chnh, cc phn t pha trn v pha di ng cho
chnh khc zero, cn cc phn t cn li bng zero(ma trn ba ng cho)
bngcchdngphpbiniHouseholder.

PhpbiniHouseholderdngmatrnHouseholder.
T
U ][ U ]
[

(1)
[ H] = [ E]
Q
59

Trong:
1
1
2
T
Q = [ U ] [ U ] = [ U ]

2
2
Do[H]ixngnn:

T
T

U ][ U ]
U ][ U ]
[
[
T

[ H] [ H] = [ H][ H] = [ E]
[ E ]

Q
Q

T
T
T
U ][ U ] [ U ] [ U ][ U ] [ U ]
[
= [ E ] 2
+

Q
Q2

(2)

T
T
U ][ U ] [ U ] ( 2Q ) [ U ]
[
= [ E ] 2
+
= [E]
2

Q
Q
Tytathy[H]cnglmatrntrcgiao.

Cho[X]lvectbtkvkhostphpbini[H][X].Chn:

[U]=[X]+k[I1]

(3)
Trong:

k = [X]

[I1 ] = 1

0 L 0

Tac:

T
T

[ U] ([ X ] + k [ I1 ])
U ][ U ]
[
[ H][ X ] = [E]
[ X ]
[ X ] = [ E ]
Q
Q

[ U ] ([ X ]T[ X ] + k [ I1 ] [ X ])
T

= [X]

Nhng:

= [X]

[ U ] ( k 2 + k[ X1 ])
Q

2Q = ([ X ] + k [ I1 ]) ([ X ] + k [ I1 ]) = [ X ] + k [ X ] [ I1 ] + [ I1 ] [ X ] + k 2 [ I1 ] [ I1 ]
T

= k 2 + 2kx1 + k 2 = 2(k 2 + kx1 )


Nhvy:

[ H][ X ] = [ X ] [ U ] = k [ I1 ] = k 0 0 L 0
T

(4)

nghalphpbiniloitrttcccphntca[X]trphntutin.
2. Bin i Householder mt ma trn i xng: By gi ta p dng php
binichomatrn[A]ixng:
1 [ 0 ]T a11 [ X ]T a11
[ X ]T

(5)
P1 [ A ] =
=

X
A
H
X
H
A
0
H
[
]
[
][
]
[
]
[
]
[
]
[
]
[
]

60

Trong[X]lctutinca[A]viphntutinbbi.[A]cc
t[A]bngcchbictvhngutin.Matrn[H]cp(n1)cxy
dng theo cc cng thc (1) (3). Do (4) ta thy php bin i ny lm ct
utinca[A]trthnh:
a11
k
a11

H H = 0
[ ][ ] M

0
Phpbini:

a
P1 [ A ]P1 = 11
[ H ][ X ]

([H][ X ]) [ A]

[ H ][ A][ H ]
T

(6)

sngchohohngutinvctutincamatrn[A].Sbin
icamatrn44l:

1 0 0 0
a11 a12 a13 a14
1 0 0 0
a11 k 0 0

0
0
k
a21

[Q][A]

[Q]
[Q]
0
0
0
a31 [A]

[Q]

0
0
0
a41

Hngvctth2camatrn[A]cbinitipbngcchdngphp
biniiviphnbnphi,phadicamatrn.Phpbininyc
thbiudinbng [ P2 ][ A ][ P2 ] [ A ] ,trong:
[ E 2 ] [ 0 ]T

(7)
[P2 ] =

0
H
[
]
[
]

vi[E2]lmatrnnv22v[H]lmatrn(n2)(n2)ccbng
cchchn[X]t(n2)phntphadicactth2camatrn[A].Thc
hin(n2)phpbini:
[ Ei ] [ 0 ]T

[Pi ] =
i=1,2,...,n2
0
H
[
]
[
]

ccmatrnbangcho(tridiagonal).Tac:

61

U ][ U ]
[ A][ U] U T = A V U T
[

[ ] [ ] [ ][ ]
[ A][H] = [ A] [E]
= [ A]
Q
Q

Trong:
[ A][ U]

(8)
[V] =
Q
Dovy:
T

U ][ U ]
[
T

[ H ][ A ][ H ] = [ E ]
[ A] [ V ][ U ]
Q

T
U ][ U ]
[
T

= [ A ] [ V ][ U ]
[ A] [ V ][ U ]T
Q

= [ A] [ V ][ U ]
T

[ U ] ([ U ]T [ A]) [ U ]([ U]T [ V ])[ U]T


+

= [ A] [ V ][ U ] [ U ][ V ] + 2g [ U ][ U ]
T

Trong:
T
U] [ V]
[
g=

2Q
t:[W]=[V]g[U]

Tathyngayphpbinicdng:

[ H][ A][ H] = [ A] [ W ][ U ]T [ U ][ W ]T

(9)

(10)

(11)

Thuttoncthtmlinhsau:

Cho[A]lmatrnvungcp(ni)cctphndibnphi
camatrn[A]
t X = a i+1,i

a i+ 2 ,i L a n ,i
Tnh [ X ] .Chok= [ X ] nux1>0vk= [ X ] nux1<0

Cho U = k + x1

Tnh Q =

[ U]

x 2 L x n i

2
[ A][ U]
Tnh [ V ] =
Q
T
[U] [ V]
Tnh g =

2Q

62

Tnh[W]=[V]g[U]
T
T
Tnh [ A ] = [ A] [ W ][ U ] [ U ][ W ]

t a i ,i+1 = a i+1,i = k

Taxydnghmhousetrans()thchinthuttontrn:

functionA=housetrans(A)
%BiendoiHouseholdermatranAthanhmatran
%bangchodang[c\d\c].
%Decocvaddungd=diag(A),c=diag(A,1).
n=size(A,1);
fork=1:n2
u=A(k+1:n,k);
uMag=sqrt(dot(u,u));
ifu(1)<0;
uMag=uMag;
end
u(1)=u(1)+uMag;
A(k+1:n,k)=u;%LuuuvaophanduoicuaA.
H=dot(u,u)/2;
v=A(k+1:n,k+1:n)*u/H;
g=dot(u,v)/(2*H);
v=vg*u;
A(k+1:n,k+1:n)=A(k+1:n,k+1:n)v*uu*v;
A(k,k+1)=uMag;
end
k=zeros(n);
fori=1:n
k(i,i)=A(i,i);
end
fori=1:n1
k(i,i+1)=A(i,i+1);
k(i+1,i)=A(i,i+1);
end
A=k;

63

tnh ma trn ba ng cho theo php bin i Householder ta dng


chngtrnhcthousetrans.m:

clearall,clc
a=[1234;2935;3337;4576];
b=householder(a)
d=diag(b)
c=diag(b,1)

3.BINITHNHMATRNHESSENBERG

Numatrn[A]lmatrnixng,phngphpHouseholdercth
c s dng bin i n thnh ma trn ng dng i xng ba ng
cho.Numatrn[A]khngixng,phngphpHouseholderbini
matrn[A]thnhmatrnngdngHessenberg.

MatrnHessenberglmatrncdng:
a 11 a 12 a 13 L a 1,n
a
a 22 a 23 L a 2 n
21

0
a
a
a
L

[ ]=
32
33
2n
M M M L
M

0
0
0 L a nn
TathchinphpbiniHouseholdertrnmatrn[A]vcc:

[Q][H][Q]=[A]
trong[Q]lmatrntrcgiao(tagiylphntchHessenbergmatrn
[A]).
Thuttoncthtmlinhsau:

Cho[Q]lmatrnnvcpn
T

t X = 0 a i+ 2 ,i L a n ,i
Tnh [ X ] .Cho= [ X ] nuai+2,i>0v= [ X ] nuai+2,i<0

Cho U = 0 + x 2 L x n i

[U]

Tnh =

Tnh [ P ] = [ E ]

[ U ][ U]

64

Tnh [ Q] = [ Q][ P ]

Tnh [ A ] = [ P ][ A ][ P ]

Taxydnghmhessenberg()thchinphpphntchtrn:

function[H,Q]=hessenberg(a)
[n,n]=size(a);
q=eye(n);
fork=1:n2
alfa=0;
forj=k+1:n
alfa=alfa+a(j,k)^2;
end
alfa=sign(a(k+1,k))*sqrt(alfa);
u=zeros(1,n);
u(k+1:n)=a(k+1:n,k);
u(k+1)=u(k+1)+alfa;
beta=.5*u*u;
p=eye(n);
fori=1:n
p(i,1:n)=p(i,1:n)(u(i)*u(1:n))/beta;
end
q=q*p;
a=p*a*p;
end
H=a;
Q=q;

phntchmatrntadngchngtrnhcthessenberg.m:

clearall,clc
a=[1234;5674;6489;3579];
[H,Q]=hessenberg(a)

4.PHNTCHMATRNTHEOPHNGPHPDOOLITTLE

65

Mtmatrnkhngsuybin[A]gilphntchcthnhtchhaima
trn[L]v[R]nu:

[A]=[L][R]
Vicphntchny,nutnti,lkhngduynht.
Numatrn[L]cccphntnmtrnngchochnhbng1,tac
phpphntchDoolittle.
Numatrn[R]cccphntnmtrnngchochnhbng1,ta
cphpphntchCrout.
Nu[R]=[L]T(hay[L]=[R]T)tacphpphntchCholeski.
Vimatrnbc3,[L]v[R]cdng:
1 0 0
r11 r12 r13

[ L] = l 21 1 0
[ R ] = 0 r22 r23
l 31 l 32 1
0 0 r33
tmlijvrijtathchinphpnhn.Saukhinhntac:
r12
r13
r11

r13l 21 + r23
[ A ] = r11l 21 r12l 21 + r22

r11l 31 r12 l 31 + r22 l 32 r13l 31 + r23l 32 + r33

BygitathchinphpkhGaussiviphngtrnhtrn.utinta
chnhngthnhtlmtrvthchinphpbini:

hng2l21hng1(kha21)hng2

hng3l31hng1(kha31)hng3
ktqutac:
r13
r11 r12

[ A1 ] = 0 r22 r23

0 r22 l 32 r23l 32 + r33


Sautalyhngthhailmtrvthchinbini:

hng3l32hng2(kha32)hng3
vc:
r11 r12 r13

[ A 2 ] = 0 r22 r23
0 0 r33
Nhvytathyngayrngmatrn[R]lmatrncckhithchin
loitrGausstinmatrn[A]vccphntca[L]lccnhntdngkhi
66

loitraij.iu cnghaltmmatrn[L]v[R]tadngphpkh
Gausstin.Taxydnghmdoolittle()thchinloiphntchDoolittle.

function[l,r]=doolittle(A)
%PhantichmatranAthanhA=L*U
n=size(A,1);
u=zeros(n);
fork=1:n1
fori=k+1:n
ifA(i,k)~=0.0
lambda=A(i,k)/A(k,k);
A(i,k+1:n)=A(i,k+1:n)lambda*A(k,k+1:n);
A(i,k)=lambda;
end
end
end
l=tril(A);
fori=1:n
l(i,i)=1;
end
l=triu(A);
fori=1:n
l(i,i)=A(i,i);
end

5.PHNTCHMATRNTHEOPHNGPHPCROUT
TngtnhthuttonDoolittle,tacthphntchmatrn[A]theo
thut ton Crout thnh tch ca ma trn [L] v [R]. Cc ma trn bc 3 theo
Croutcdng:
l11 0 0
1 r12 r13

[ L ] = l 21 l 22 0
[ R ] = 0 1 r23
l 31 l 32 l 33
0 0 1
tmlijvrijtathchinphpnhn.Saukhinhntac:

67

l11r13
l11 l11r12

[ A ] = l 21 l 21r12 + l 22 l 21r13 + l 22r23

l 31 l 31r12 + l 32 l 31r13 + l 32r23 + l 33


Nhvy:
a11=1.r11+0.0+0.0=r11;
a12=r12;a13=r13

a21=l21r11;
a22=l21r12+r22;a23=l31r11

a31=l31r11;a32=l31r12;
a33=l31r13+l32r23+r33
Mtcchtngquttac:

vij>i: lij=rji=0

vii=1: r1j=a1j(j=1tin)

lj1=aj1/r11(j=1tin)

vii=2tin
i 1

rij = a ij l ik rkj (j=itin)


k =1
i 1

l ji =

a ji l jk rki
k =1

(j=itin)
rii
Taxydnghmcrout()phntchmatrntheothuttonCrout:

function[l,r]=crout(a)
n=size(a,1);
l=zeros(n);
r=zeros(n);
fori=1:n
r(1,i)=a(1,i);
l(i,i)=1.;
l(i,1)=a(i,1)/a(1,1);
end
fork=2:n
r(k,k:n)=a(k,k:n)l(k,1:k)*r(1:k,k:n);
ifk~=n

68

fori=1:n
l(i,k)=(a(i,k)l(i,1:k1)*r(1:k1,k))/r(k,k);
end
end
end

6.PHNTCHMATRNTHEOPHNGPHPCHOLESKI
ThuttonCholeskichophpphntchmatrn[A]thnhtchhaima

trn:

[A]=[L][L]T.
Thuttonnyihi:

[A]lmatrnthc,ixng

[A]lmatrnxcnhdng
Tavung[A]cp3theothuttonCholeski:
a11 a12 a13 l11 0 0 l11 l 21 l 31
a

21 a 22 a 23 = l 21 l 22 0 0 l 22 l 32
a 31 a 32 a 33 l 31 l 32 l 33 0 0 l 33
Saukhithchinphpnhntac:
2
l11l 21
a11 a12 a13 l11

2
2

a
a
a
=
l
l
l
+
l
21
22
23
11
21
21
22

a 31 a 32 a 33 l11l 31 l 21l 31 + l 22 l 32

l11l 31

l 21l 31 + l 22l 32
2
2
2

l 31
+ l 32
+ l 33

Vphilmatrnixng.Cnbngccphntcahaimatrntac:
l11 = a11
l 21 = a 21 / l11
l 31 = a 31 / l11

2
2
2
l 22 = a 22 l 21
l 32 = (a 32 l 21l 31 ) / l 22
l 33 = a 33 l 31 l 32

Tngqut,vimatrncpn,tac:

([L][L] )

ij

= l i1l j1 + l i2 l j2 + + = l ik l jk i j
k =1

Cnbngviphntcamatrn[A]tac:
j

a ij = l ik l jk i = j, j + 1,...,n j = 1,2,...,n
k =1

Domatrn[L]lmatrntamgictrinnivictthnhttac:
l11 = a11
l i1 = a i1 / l11

ivictkhc,rtlijrakhitngtac:
69

j1

a ij = l ik l jk + l ijl jj
k =1

Nui=j(phnttrnngcho)th:
j1

l jj = a jj l 2jk

j = 2,3,...,n

k =1

vphntnmngoingcho:
j1

l ij = a ij l ik l jk
j = 2, 3,..., n
k =1

l jj

i = j + 2, j + 3,...,n

Davothuttontrntaxydnghmcholeski()

functionL=choleski(A)
%PhantichmatranathanhA=LL.
%Cuphap:L=choleski(A)
f=posdef(A);
iff==0
error(Matrankhongxacdinhduong!);
return
end
n=size(A,1);
forj=1:n
temp=A(j,j)dot(A(j,1:j1),A(j,1:j1));
iftemp<0.0
error(Matrankhongxacdinhduong)
end
A(j,j)=sqrt(temp);
fori=j+1:n
A(i,j)=(A(i,j)dot(A(i,1:j1),A(j,1:j1)))/A(j,j);
end
end
L=tril(A);

functionf=posdef(M)
%KiemtralieumatranMcoxacdinhduonghaykong
isposdef=true;

70

fori=1:length(M)
if(det(M(1:i,1:i))<=0)
isposdef=false;
break;
end
end
f=isposdef;%0neusai,1neudung

7.PHNTCHQRBNGTHUTTONHOUSEHOLDER
Chomatrn[A],phntchQRcanchota:

[A]=[Q]*[R]
Trong[Q]lmatrntrcgiaov[R]lmatrntamgicphi.
TadngbiniHouseholdertmccmatrn[Q]v[R].

(1)
[Hn1 ][Hn2 ] [H1 ][ A ] = [ R ]

Nhvy:

1
1
[ A ] = ([ Hn1 ][ H n2 ] [ H1 ]) [ R ] = [ H1 ] [ Hn2 ] [H n1 ][ R ]
1

= [ H1 ] [ H n 2 ][ H n 1 ][ R ] = [ Q ][ R ]

TchcattcccmatrnHouseholder:

[ Q] = [ H1 ]L[ H n 2 ][ H n 1 ]

(2)

(3)

khngnhngixngmcntrcgiaonhmimatrn[Hk]:

[ Q] [Q] = ([H1 ] [Hn2 ][Hn1 ]) [H1 ] [Hn2 ][Hn1 ]

T
T
T
= [ H n 1 ] [ H n 2 ] [ H1 ] [ H1 ] [ H n 2 ][ H n 1 ] = [ E ]
T

Taxydnghmqrdecom()phntchmatrn:

function[Q,R]=qrdecom(A)
%PhantichQR
n=size(A,1);
R=A;
Q=eye(n);
fork=1:n1
H=householder(R(:,k),k);
R=H*R;%Pt.(1)
Q=Q*H;%Pt.(3)

71

end

Hmhouseholder()dngtoramatrnHouseholder:

functionH=householder(x,k)
%TaomatranHouseholder
n=length(x);
tmp=sum(x(k+1:n).^2);
g=sqrt(x(k)^2+tmp);
c=sqrt((x(k)+g)^2+tmp);
u=zeros(n,1);
u(k)=(x(k)+g)/c;
u(k+1:n)=x(k+1:n)/c;
H=eye(n)2*u*u;%matranHouseholder

phntchmatrntadngchngtrnhctqrdecom.m:

clearall,clc
a=[4132;1241;3412;2123];
[q,r]=qrdecom(a)

8.PHNTCHQRBNGTHUTTONQUAYGIVENS
K thut quay Givens l mt phng php phn tch ma trn [A]
thnhtchcamatrn[Q]vmatrn[R]bngcchlmchoccphntln
ltbngzerochonkhiccmatrntamgicphi.tngldng
mtmatrnquayngin22tdctheongchochnhcamtma
trnnvvlmchomtphntcamatrnbngzero.Ccphntca
matrnquayquaymtvectngcchiukimnghmtgcl:
cos sin

[ Q ] = sin cos

Nutamunquayvect[x1x2]Tvmunlmchox2bngzeroriquaytheo
chiukimnghmtgc(hayngcchiukimnghmtgc)trong
:

72

x2

x1
thmatrnquaythchinphpquaynytheochiukimnghmtgc
l:
cos sin

[ Q ] = sin cos

= arctg

Trong:
x1

cos = c =

x +x
2
1

2
2

sin = s =

x2
x +x
2
1

2
2

Do:
x1 x 2 c s
= s c
2
2 x
x
x1 + x 2 2
1

Chlnhmongmun:
x12 + x 22
x12 + x 22
x1 cx1 + sx 2 2
2
Q
=
=
=

x
x
+
[ ] x sx + cx 1 2

0
1
2
2

NuAlmatrnmn,tasxemiugxyrakhitathayccphntca
[Q]vomatrnconxcnhbngccctvhngthi,ccctvhngthj.
Nicchkhctathaymatrn22nydctheongchochnhtimts
im:
1 L 0 L 0 L 0
M O
M M M O M

kl k i, l j
0
c
s
0
L
L
L

c k, l = i; k,l = j

M O M M M
=M M

[ Gkl ] = s k = i; l = j

0 L s L c L 0
s k = j; l = i

M M O M
M M 0
0 L 0 L 0 L 1
Nhvy[G]lmatrnnvmmngoitrccgitrbthayth:

gii=gjj=c

gij=gij=s
iunystoramatrnunita:

[G]T[G]=[E]
nghal:

[ Q ] =

73

lk

g lp = kp

vihi:

c2+s2=1
iunyngvcos2+sin2=1.Khimatrnnycpdngchoma
trnmntac:

kla lp = a kp k i, j
l

b kp = g kla lp = g ila lp = ca ip + sa jp k = i
l
l
g jla lp = sa ip + ca jp k = j
l
Nhvymatrnmichbthayihngivctj.Tachnsvcsaocho
ccphntctrvhngjbngzero:
a jr
a

s= 2

c = 2 ir 2
2
a jr + a ir
a jr + a ir
Nhvytasc:
a jra ir + a ir b jr

= 0
b jr =
a 2jr + a ir2
Taxydnghmgivens()thchinthuttontrn:

function[Q,R]=givens(A);
%PhantichQRbangthuattoanquayGivens
n=size(A,1);
Q=eye(n);
forj=1:n1
fori=n:1:j+1
z=1/sqrt(A(i1,j)^2+A(i,j)^2);
c=A(i1,j)*z;
s=A(i,j)*z;
A(i1:i,:)=[cs;sc]*A(i1:i,:);
Q(i1:i,:)=[cs;sc]*Q(i1:i,:);
end
end
R=A;
74

Q=Q;

phntchmtmatrntadngchngtrnhctgivens.m:

clearall,clc
A=[17243017;813207;21086;23435426];
[Q,R]=givens(A)

9.PHNTCHQRBNGTHUTTONGRAMSCHMIDT

Tacththchinvicphntchmatrn[A]thnhtchccmatrn[Q]
v[R]bngcchtrcgiaohoccctcamatrn[A].Tagiccctcama
trn[A]la1,...,an.Tccvectnytamuncnvecttrcgiaov1,...,vn.Vec
ttrcgiaoutincchnl:

v1 = a1
cvectthhai,tadngy2nhngtrbtiphny2cngchiuviv2.
Nhvytac:

v 2 = y1 ba1
vibcchnsaochov1trcgiaoviv2:
v1v 2 = v1 (a 2 bv1 ) = v1a 2 bv1v1 = 0

hay:
va
b= 1 2

v 1v 1
Tiptcqutrnhnbcthktac:
k 1

vk = ak

vv v
v ia k

i =1

Nhvythuttongmccbc:
a

r11 = a1 , q1 = 1
r11
- lptk=2nn
k 1

q k = a k rik q i rkk

i =1
vi
rik = q iTa k
vrkkcchnsaocho q k = 1 ,nghal:
75


z = a k q k rik
rkk = z

Taxydnghmqrgramschmidt()thchinthuttontrn:
function[Q,R]=qrgramschmidt(A);
%PhantichmtbangthuattoanGramSchmidt
[m,n]=size(A);
R(1,1)=norm(A(:,1));
Q(:,1)=A(:,1)/R(1,1);
fork=2:n

R(1:k1,k)=Q(1:m,1:k1)*A(1:m,k);

z=A(1:m,k)Q(1:m,1:k1)*R(1:k1,k);

R(k,k)=norm(z);

Q(1:m,k)=z/R(k,k);
end

phn tch mt ma trn ta dng chng trnh chng trnh


ctqrgamschmidt.m:

clearall,clc
a=[12345;67890;34567;89012;24681];
[q,r]=qrgramschmidt(a)

10.PHNTCHMATRNTHEOGITRRING

Chomatrn[A],tac:

[A][X]=[X]
Nu ta t [U] lmt ma trn m cc ct ca n l cc vec t ring ca ma
trn[A]vmatrn[]lmatrnngchocccphnttrnngcho
chnhlith:

[A][U]=[][U]
hay:

[A]=[U][][U]1
Dngnycamatrncgildngphntchtheogitrringvvect
ring.Tadngchngtrnhcteigdecom.mphntchmatrn:

clearall,clc
76

a=[135;349;596];
[L,U]=eigjacobi(a)

11.PHNTCHLQ
T

Chomatrn[A] ,tacthphntchQRmatrnnythnh:

[A]T=[Q1][R1]

Do([Q][R])T=[R1]T[Q1]Tnn:

([A]T)T=[A]=[L][Q]
vtanhncphntchLQcamatrn[A].Taxydnghm lqdecom()
thchinthuttonny:

function[Q,L]=lqdecom(A)
A=A;
[Q,L]=qrdecom(A);
L=L;
Q=Q;

phntchmtmatrntadngchngtrnhctlqdecom.m:

clearall,clc
a=[135;246;789];
[Q,L]=lqdecom(a)

12.PHNTCHJORDAN
1.Matrncthngchoho:Matrn[A]gilcthngchoho
nuvchnutntiphpbiningdng[V]saocho[A]=[V][][V]1
trong[]lmatrnngcho[]=diag(1,2,...,n).iukincn
[A]cthng choho l[A]c nvect ringclptuyntnh.iu
kin[A]cthngchohol[A]cngitrringphnbitvkhi
[A]cngitrringphnbitthccvectringtngnglclptuyn
tnh. S ln lp li mi ca gi tr ring i gi l v s i s (algebraic
multiplicity) ca i, k hiu l AM(i ). S vec t ring c lp tuyn tnh
tng ng vi gi tr ring i gi l v s hnh hc (geometric multiplicity)
cai,khiulGM(i).

77

2.DngJordan:Khikhngthtmcngitrringphnbit,nghalma
trn[A]khngcnvectringclptuyntnhthmatrn[A]khngth
ngchoho.Tuynhin,nucphpbiningdng[M]bini[A]
thnh[J]:

[A]=[M][J][M]1
Trong[J]lmatrngnngcho:

[J]=diag(J1,...,Jn)
i 1 0 L 0
0 1 O M
i

[ Ji ] = M O i O M

M O O i 1
M L L 0 i

lkhiJordanvmatrn[J]cgildngJordankinhincamatrn
[A].SkhiJordanbngsvectringclptuyntnhcamatrn[A],
nghalbngGM(i).Cth,mivectringclptuyntnhtngng
vimikhi.Dovynumatrn[A]cccvectringclptuyntnh
thdngJordantrngvidngngchocamatrn[S]1[A][S]=[]trong
[]=diag(1,...,n)v[S]cccctlccvectringca[A]
3. Xy dng dng Jordan ca ma trn [A]: Khi [A] khng c n vec t ring
clptuyntnhtoraccctcamatrn[M]thtacththmccvec
tclptuyntnhvoccvectringtoramatrnny.

Trc ht ta kho st mt gi tr ring i c GM(i) < AM(i). Nu


GM(i)=pi,AM(i)=mithtacntmmipivectclptuyntnhkt
hpvigitrringny.Ccvectnyctotccvectringvc
gilvectringtngquthoca[A].Gilgitrringv[x]lvect
ringtngng.k1vectringtngqutho{[x1],...,[xk]}ctoranh
sau:

[ A ][ x 1 ] = [ x 1 ]

[ A ][ x 2 ] = [ x 2 ] + [ x 1 ]

[ A ][ x k ] = [ x k ] + [ x k1 ]

{[x1],..., [xk]} to thnh chui cc vec t c vec t [x1] ng u. Chui ny


tngngvikhiJordann.

78

1 0 L 0
0 1 0 M

[ A ][ x1 ,K ,x n ] = [ x1 ,K ,x n ] M O O O 0

0 L L 1
0 L L 0
Xutphttvecttngquthobckca[A]ngvi,khiul[xk]tac:

[xk]

[xk1]=([A][E])[xk]

M
[xi]=([A][E])ki[xk]

M
[x1]=([A][E])k1[xk]

Chl[x1]lmtvectringca[A]v:
([A][x1])=([A][E])([A][E])k1[xk]
phntchmatrn[A]tadngthuttonFilipovgmccbcsau:

Gisrngkchthckhnggianctcamatrn[A]lr<n.Phic
rvectclptuyntnh[xi]trongkhnggianctmnlccvectring
hayvectringtngqutho,nghal[A][xi]=[xi]hay[A][xi]=[xi]+[xi1]

Gisrngkhnggiankhngvkhnggianctcamatrn[A]c
phnchungvikchthcp.Mivect[xi]trongjgguankhngca[A]l
mtvectringtngngvi=0,nhvy[A][xi]=0.Byginu[xi]cng
lkhnggianctca[A]th[xi]=[A][yi]vimi[yi]

Cuicngdokchthccakhnggiankhngca[A]lnrvp
caccvectltrongckhnggiankhnglnkhnggianctnncnrp
vect[zi]trongkhnggiankhngmkhngtrongkhnggianct.

Ccvect[xi],[yi]v[zi]tmclclptuyntnh.Chngtonn
ccctca[M]v[J]=[M][A][M]1ldngJordan.
Taxydnghmjordandecom()thchinthuttontrn:

function[M,J]=jordandecom(a)
%TinhphantichJordancuamatranA
%saochoA*M=M*J
small=2*sqrt(eps);
[r,c]=size(a);
79

ifr~=c
error(MatranAphailamatranvuong!)
end
n=r;
ifn==1
J=a;
M=1;
return
end
ifn<1
J=[];
M=[];
return
end
[m,d]=eig(hess(a));
d=sort(diag(d));
tiny=norm(a)*eps;
%lamcacgiatribangzero
p=find(abs(d)<=tiny);
if~isempty(p)
d(p)=0;
end
%A*M=M*J
[M,J]=jord(a,d,small);

function[M,D]=jord(a,d,small)
%TinhphantichJordancuamatranA
norma=sqrt(mean(mean(abs(a))));
tiny=norma*eps;
ifnargin<3
small=(1+norma)*sqrt(eps);
end
[r,c]=size(a);
ifr~=c
error(Aphailamatranvuong!)
80

end
n=r;
I=eye(n);
ifr==1
D=a;
M=1;
return
end
ifr<1
D=[];
M=[];
return
end
condofa=cond(a);
ifcondofa>1e6
Condition_number_of_A=condofa
warning(SodieukiencuaAqualon!);
end
d=d(:);
ifsize(d,1)~=n
d=d
error(Giatririengkhongdung!)
end
da=det(a);
dp=prod(d);
e=abs(abs(da)abs(dp));
ife>sqrt(eps)
disp()
warning(Cacgiatririengcothekhongchinhxac!)
end
ds=flipud(sort(d));
sds=size(ds,1);
du=flipud(unique(ds));
sdu=size(du,1);
ifsdu==sds
81

[M,D]=eig(a);
return
end
M=[];
forkk=1:sdu
e=du(kk);
ameig=sum(ismember(ds,e));
a1=ae*I;
ifameig==1
[u,s,v]=svd(a1);
M=[Mv(:,end)];
else
pp=0;
ns=[];
pp=pp+1;
aa=I;
fork=1:ameig
aa=a1*aa;
nn=size(nulld(aa,small),2);
ns(k)=nn;
end
nsaa=[0;ns(:)];
dns=diff(nsaa);
ifmax(dns)~=dns(1)
Cond_of_A=cond(a)
savejord
M=I;
D=I;
error(Kichthuockhonggiankhongsai)
end
clearec;
ec(1:dns(1))=1;
fork=2:length(dns)
ec(1:dns(k))=ec(1:dns(k))+1;
end
82

ifsum(ec)~=ameig
Cond_of_A=cond(a)
savejord
M=I;
D=I;
error(Kichthuockhonggiankhongsai)
end
k=1;
clearjv;
whilek<=dns(1)
p=find(ec==ec(k));
ifisempty(p)
Cond_of_A=cond(a);
savejord
M=I;
D=I;
error(Kichthuockhonggiankhongsai);
end
aa=I;
form=1:ec(k)
aa=aa*a1;
end
pp=max(size(p));
v=nulld(aa,small);
jv(:,p)=v*(rand(size(v,2),pp)0.5)*16;
k=k+pp;
end
clearv;
fork=1:dns(1)
v(:,1)=jv(:,k);
forp=2:ec(k)
v(:,p)=a1*v(:,p1);
end
vv=fliplr(v(:,1:ec(k)));
M=[Mvv];
83

end
end
end
k=abs(det(M))^(1/n);
M=k*M;
Mi=inv(M);
D=Mi*a*M;
d0=diag(D);
d1=diag(D,1);
D=diag(d0)+diag(d1,1);

functionZ=nulld(A,small)
norma=sqrt(mean(mean(abs(A))));
tiny=norma*eps;
ifnargin<2
small=(1+norma)*sqrt(eps);
end
[m,n]=size(A);
ifm~=n
error(Matranphaivuong!)
end
p=find(abs(A)<tiny);
if~isempty(p)
A(p)=0;
end
[U,S,V]=svd(A,0);
S=diag(S);
s=S;
norma=max(s);
smax=max(s);
ifsmax==0;
smax=1;
end
s=s/smax;
snorm=s;
84

t=find(s>0);
ifisempty(t);
Z=V;
return;
end
p=find(s<tiny);
if~isempty(p)
s(p)=tiny;
end
p=find(s==0);
if~isempty(p)
s(p)=small*min(s(t));
end
logs=log10(s);
sdifflog=diff(logs);
smax=max(sdifflog);
r=find(sdifflog==smax);
ifmin(size(r))>0
r=r(end);
else
r=0;
end
Z=V(:,r+1:n);
ifsnorm==ones(n,1);
Z=zeros(n,0);
end
ifmax(S)<=small;
Z=V;
end

13.PHNTCHMATRNTHEOCCGITRKD

Phntchmatrntheoccgitrkd(kdvalue)cthchintrn
ccmatrnvunghaychnht.Tac:

[Anp]=[Unn][Snp][Vpp]
Trong:
85


[U]T[U]=[Enn]

[V]T[V]=[Epp]
nghalccmatrn[U]v[V]ltrcgiao.
Cc ct ca [U] l cc vec t k d tri, [S] c cc gi tr k d v l ma trn
ngchov[V]Tccchnglccvectkdphi.tnhccmatrn
[U],[S]v[V]tatmccgitrringca[A][A]Tv[A]T[A].Ccvectring
ca[A]T[A]tonnccctca[V].Ccvectringca[A][A]Ttonncc
ct ca [U]. Cc gi tr k d ca [S] l cn bc hai ca cc gi tr ring ca
[A][A]T hay [A]T[A]. Cc gi tr ring trn ng cho ca [S] c sp xp
theothtgimdn.hiucthuttonnytaxtvdsau:
Taxydnghmsvddecomp()thchinthuttonny:

function[U,S,V]=svddecomp(A)
[m,n]=size(A);
if(m>n)
%tacantimcacvectokdphaitruoc
%[VD]=eigs(A*A)
[V,D]=eigs(A*A);
[dummy,perm]=sort(diag(D));
S=diag(sqrt(diag(D(perm,perm))));
V=V(:,perm);
sinv=diag(1./sqrt(diag(D)));
U=(A*V)*sinv;
else
%tacantimcacvectokdtraitruoc
%[UD]=eigs(A*A)
[U,D]=eigs(A*A);
[dummy,perm]=sort(diag(D));
S=diag(sqrt(diag(D(perm,perm))));
U=U(:,perm);
sinv=diag(1./sqrt(diag(D)));
V=sinv*(U*A);
V=V;
end

86

phntchmtmatrntadngchngtrnhctsvddecomp.m:

clearall,clc
%a=[12345;67890;34567;89012;24681];
a=[11;01;10];
[u,s,v]=svddecomp(a)

14.PHNTCHSCHUR

Chomatrnvung[A],cpntaphntchnthnh:

[A]=[T][U][T]*
Trong:
[T] ma trn unita v [T]* l ma trn chuyn v lin hp ca [T](l
chuynvca[T]rilylinhpcaccphnt).
[U]=[]+[N]
[]lmatrnngchocccphntlccgitrringca[A]
[N] ma trn tam gic phi, c cc phn t thuc ng cho chnh
bngzero.
MimatrnvungucthphntchSchur.Tuynhinphntchny
khngduynht.Nu[A]lmatrntrcgiaoth[U]lmatrnngcho
vccctca[T]lccvectringca[A].PhntchSchurkhinycgi
lphntchph.Nu[A]xcnhdng,phntchSchurchnhlphntch
SVD.
phntchmatrntheothuttonSchurtathchinccbcsau:
- Tmgitrring1ca[A]vvectringtngng[v1]
- Chnn1vect[w1],...,[wn1]clptuyntnhvtrcgiaovi[v1]
- To[V1]lmatrncccctl[v1],[w1],...,[wn1]vtnh:

[ V1 ] [ A ][ V1 ] = 01 A
[ 1 ]

Trong[A1]lmatrn(n1)(n1)
- Lpliqutrnhvimatrn[A1]tac:

2

[ V2 ] [ A1 ][ V2 ] =

0 [ A 2 ]
Trong[A2]lmatrn(n2)(n2)

87

- Do [ T2 ] [ A ] [ T2 ] = 0 1
0 0


[ A 2 ]

1
0
vi V
=

Trong [ T2 ] = V1 V
2
2 0 [ V2 ]

- Tiptcqutrnhtatmc[V1],...,[Vn].Cuicng[U]=[T]*[A][T]

T2 = V1 V
2 L Vn
Taxydnghmschurdecom()thchinthuttontrn:

function[T,U]=schurdecom(a)
%PhantichSchurmatranA
n=size(a,1);
v=zeros(n,1);
v(1)=1;
b=zeros(n,n);
b(:,n)=v;
fork=2:n
v=a*v;
b(:,nk+1)=v;
end
c=a*v;
rho=b\c;
rho=[1rho];
lambda=roots(rho);
n=size(lambda,1);
evec=zeros(n);
c=evec;
e=eye(n);
fori=1:n
b=alambda(i)*e;
c=nulld(b);
evec(:,i)=c(:,1);

88

end
p=grams(evec);
T=conj(transpose(p))*a*p;
U=p;

phntchmatrntadngchngtrnhctschur.m:

clearall,clc
a=[1235;4562;4689;9367];
[t,u]=schurdecom(a)
15.NHTHCCAMATRN
Chomtmatrnvungcpn.Tacntmnhthccan.Trcht
chngtanhclimtstnhchtquantrngcanhthc:
- nu nhn tt c cc phn t ca mt hng (hay ct) vi k th nh
thccnhnvik
- nh thc khng i nu ta cng thm vo mt hng t hp tuyn
tnhcacchngcnli.
- nuichhaihngchonhauthnhthcidu
Trckhiinnhnghavnhthctatmhiukhinimvhon
vvphpth.
Chomtdys,nutaichccstrongdychonhauthtathc
hin mt php hon v. V d 123, 132,.. l cc hon v ca dy s {1, 2, 3}.
Trong hon v 12ijn ta ni i lm mt nghch th vi j nu i < j
mi>j.Vdtronghonv1432s4lmvis3mtnghchth,s4
lmvis2mtnghchth,s3lmvis2mtnghchth.Mthonvgi
lchnnutngsnghchthtronghonvlmtschn;mthonv
gilltrongtrnghpngcli.Nhvy1432lmthonvl.
Cho mt dy s, nu ta to ra mt dy s mi bng cch i ch cc
phntchonhauthtathchinmtphpth.
2 1 4 3
Vd p =
lphpthbin2thnh1,1thnh4,4thnh2v3
1
4
2
3

thnh3.
Mtphpthgilchnnutnhchnlcadngtrnvdngdi
nhnhauvltrongtrnghpngcli.Phpthtrnlphpthl.
89

Cho ma trn vung [A] cp n. Cc phn t ca hng th i l ai,1,


ai,2,,ai,n.Ccphntcactthjla1,j,a2,j ,,an,j.Taxemhngthilmt
vec t, k hiu l Ai* v ct th j cng l mt vec t, k hiu l A*j. Vi mi
phpth:
i1 i 2 L i n
p=

(1)

j1 j1 L jn
talptch:
a i1 j1 a i2 j2 Ka in jn

(2)

Trcmitch(2)tatdu+nuvdunuphpth(1)l.Sautalp
tngcan!tchcdunhvy,nghaltng:

(3)
(1)t(p) ai1j1 ai2 j2 Kain jn
p

trong:

t(p)=1nuphpthpl

t(p)=0nuphpthpchn
Tng(4)cgilnhthccamatrnvung[A],cpn.
Ta xy dng hm determinant() tnh nh thc ca ma trn theo nh
ngha:

functiond=determinant(A)
%DETERMINANTtinhdinhthuctheodinhnghia.
[m,n]=size(A);
if(m~=n)
fprintf(\n);
fprintf(Chimatranvuongmoicodinhthuc!\n);
return
end
p=zeros(1,n);
nf=prod([1:n]);
d=0.0;
fori=1:nf
p=nextperm(p);
s=permsign(p);
x=diag(A([1:n],p));

90

d=d+s*prod(x);
end

functionpsign=permsign(p)
%PERMSIGNtravedauphepthe.
%+1,neuphepthechan,
%1,neuphepthele.
n=length(p);
psign=1;
fori=1:n1
j=i;
while(p(j)~=i)
j=j+1;
end
if(j~=i)
temp=p(i);
p(i)=p(j);
p(j)=temp;
psign=psign;
end
end

functionq=nextperm(p)
n=length(p);
q=p;
if(n==1)
q=1;
elseif(q==0)
q=[1:n];
else
i=n1;
while(q(i)>q(i+1))
i=i1;
if(i==0)
break;
91

end
end
if(i==0)
q=[1:n];
else
j=n;
while(q(j)<q(i))
j=j1;
end
t=q(j);
q(j)=q(i);
q(i)=t;
q(i+1:n)=q(n:1:i+1);
end
end

tnhnhthctadngchngtrnhctdeterminant.m:

clearall,clc
%a=[12;35];
a=[135;346;463];
d=determinant(a)

16.TNHNHTHCBNGCCHPHNTCHMATRN
Chomatrn[A].Nu
[A]=[B][C]
th
det[A]=det[B]det[C]
Mtkhcvimtmatrntamgic,vd:
b11 b12 b13 b14
0 b
b23 b 24
22

[ B] =
0 b33 b 34
0

0
0 b 44
0

th

92


det [ B] = b11b 22 b 33 b 44
nghalivimatrntamgic,nhthcbngtchccphnttrnng
chochnh.

Khi phn tch ma trn [A] theo thut ton Doolitte, ta dng chng
trnhctdoodecmp.mtnhnhthccan:

clearall,clc
a=[1234;3457;2385;4914];
[l,r]=doolittle(a);
d=prod(diag(l))*prod(diag(r))

Khiphntchmatrn[A]theothuttonCrout,tadngchngtrnh
ctcrotdecmp.mtnhnhthccan:

clearall,clc
a=[1234;3457;2385;4914];
[l,r]=crout(a);
d=prod(diag(l))*prod(diag(r))

Khi phn tch ma trn [A] theo thut ton Choleski, ta dng chng
trnhctcholdecmp.mtnhnhthccan:

clearall,clc
a=[422;224;2411];
a=pascal(5);
l=choleski(a);
d=prod(diag(l))*prod(diag(l))

17.THUTTONTRCHI
Chomatrn[A]c a1,1 0 .Taxydngmatrn[B]cccphnt
bi ,j = a1,1a i ,j a i ,na n ,j
th:

2n
[ A ] = a1,1
[ B]

nghal:

93


a11
det

a
21

a11

det
n 2
a
det [ A ] = a11
det
31

a11
det
a n1

a12
a 22
a12
a 32

a11
det
a 21
a11
det
a 31
M

a13
a11 a1n
L
det
a

a 23
21 a 2n
a13
a11 a1n
L
det
a

a 33
a
31
3n

L
M

a13
a11 a1n
L
det
a

a n3
n1 a nn

a12
a11
det

a n2
a n1
Taxydnghmchiopivot()thchinthuttontrn:

functiond=chiopivot(a)
%tinhdinhthucbangthuattoanChiopivotalcondensation
ifa(1,1)==0
error(Khongdungphuongphapnaydetinhdinhthucduoc!);
return;
end
c=a(1,1);
n=size(a,1);
if(n<=2)
d=a(1,1)*a(2,2)a(2,1)*a(1,2);
return
end
m=n1;
while(m>=1)
fori=1:m%hang
b(i,1:m)=a(1,1)*a(i+1,2:m+1)a(i+1,1)*a(1,2:m+1);
end
if(m>2)
a=b;
c=c*a(1,1);
clearb;
end
m=m1;
end
d=b(1,1)*b(2,2)b(2,1)*b(1,2);

94

d=d/c;

tnhnhthctadngchngtrnhctchiopivot.m:

clearall,clc
a=[1234;3457;2385;4914];
d=chiopivot(a)

18.THUTTONLAPLACE
tnhnhthctheothuttonLaplace,takhaitrinnhthctheo
hnghayct.Chomatrnvung[A]cpn.Nubihngivctj(tcxo
hngvctchaphntaij)thtacmtmatrncp(n1),nhthcca
ngilnhthcconcp(n1)ngviphntaij(minor),khiulMij.
Ta ch n hng th i v aij l mt phn t ca hng . Trong det[A] ta
gpnhngshngchaaij livtaijlmthaschung,hscank
hiulAijvgilphnbis(cofactor)caphntaij.CofactorAijca
matrn[A]l:

A ij = ( 1)i+ j M ij
nhthcca[A]khikhaitrintheohngl:
n

det [ A ] = a ijA ij
i =1

Taxydnghmcofactor()tnhccphnbis:

functionc=cofactor(A,i,j)
%cacphanbudaisocuamatran
%dungdenghichdaomt
%C=cofactor(A,i,j)travephanbudaisocua
%ngi,cotjcuaA.
ifnargin==3
M=A;
M(i,:)=[];
M(:,j)=[];
c=(1)^(i+j)*det(M);
else

95

[n,n]=size(A);
fori=1:n
forj=1:n
c(i,j)=cofactor(A,i,j);
end
end
end

Saukhiphnbis,taxydnghm cofactordet()tnhnhthcca
[A]

functiond=cofactordet(A)
d=0;
fori=1:size(A,1)
c=cofactor(A,i,1);
d=d+A(i,1)*c;
end

tnhnhthctadngchngtrnhctcofactordet.m:

clearall,clc
a=[1234;3457;2385;4914];
det=cofactordet(a)

19.THUTTONDODGSON
ThuttonccDodgson(Dodgsoncondensation)dngtnhnh
thc ca ma trn vung. N c Charles Ludwidge Dodgson a ra.
tnhnhthccamatrncpnn,taxydngccmatrncp(n1)(n
1)chonmatrncp11lnhthccamatrncntm.

Bcutintaxydngmatrncp(n1)(n1)tccnhthc
caccmatrncon22.Vdvimatrn
5 1 0
2 8 5

0 6 7

96

tacccmatrnconl:
5 1
1 0
2 8
8 5

2 8
8 5
0 6
6 7

Ccmatrnnystoraccphntcamatrn22.Phnthngr,ctc
lnhthccamatrncon22camatrnbanuvihngrvctc
gctrntri.Nhvymatrnmil:
38 5
12 26

Matrnkkctorabngcchlynhthccamatrncon22cama
trn (k+1)(k+1) nh trn v chia n cho phn t tng ng ca ma trn
trungtm,nghalmatrnbihngtrncng,hngdicng,ctbn
phivctbntricamatrn(k+2)(k+2)
Taxydnghmdodgson()thchinthuttontrn:

functiondt=dodgson(a)
ifsize(a,1)~=size(a,2)
error(MatranAphailamttranvuong);
end;
n=size(a,1);
ifn==2
dt=a(1,1)*a(2,2)a(2,1)*a(1,2);
return
end;
ifn==3;
fori=1:n1
b(i,1:n1)=a(i,1:n1).*a(i+1,2:n)a(i+1,1:n1).*a(i,2:n);
end
dt=(b(1,1)*b(2,2)b(2,1)*b(1,2))/a(2,2);
return
end
c=a;
c(:,1)=[];
c(:,n1)=[];
c(1,:)=[];

97

c(n1,:)=[];
fori=1:n1
b(i,1:n1)=a(i,1:n1).*a(i+1,2:n)a(i+1,1:n1).*a(i,2:n);
end
m=size(b,1);
whilem>=2
fori=1:m1
forj=1:m1
d(i,j)=(b(i,j)*b(i+1,j+1)b(i+1,j)*b(i,j+1))/c(i,j);
end
end
ifm>3
c=b;
c(:,1)=[];
c(:,m1)=[];
c(1,:)=[];
c(m1,:)=[];
b=d;
end
m=m1;
end
dt=(d(1,1)*d(2,2)d(2,1)*d(1,2))/b(2,2);

tnhnhthctadngchngtrnhctdodgson.m:

clearall,clc;
a=[1234;5132;4922;6341];
dt=dodgson(a)

20.NGHCHOMATRNBNGCCHDNGMINOR

Chomatrn[A],tac:
A

( a 1 )i ,j = det [j,iA]
Trong:

98

(a )
1

i ,j

lphnthngi,ctjcamatrn[A]1

Ai,jlphnbiscaphntai,jcamatrn[A]
Taxydnghmminorinv()thchinthuttontrn:

functionc=minorinv(a)
%Timmatrannghichdaobangthuattoanminor
n=size(a,1);
ms=det(a);
fori=1:n
fork=1:n
b=cofactor(a,i,k);
c(i,k)=b/ms;
end
end
c=transpose(c);

tmmatrnnghchotadngchngtrnhctminorinv.m:

clearall,clc;
a=[135;349;596];
b=minorinv(a)

21.NGHCHOBNGCCHPHNTCHMATRN

Chomatrn[A[,tacthphntchnthnhmatrntamgicphi[R]
vtamgictri[L]:

[A]=[L][R]
Donhnghamatrnnghcho:

[L]1[L]=[L][L]1=[E]
nn:

[R]=[L]1[L][R]=[L]1[A]
v:

[L]=[L][R][R]1=[A][R]1
Dovy:

[A]=[L][R]=([A][R]1)([L]1[A])=[A][R]1[L]1[A]

99


[A][R]1[L]1=[E]
Ktqul:
[R]1[L]1=[R]1
Vimatrntamgicphi[R],cchngkhinghcholl1,..,lnctnhtheo
cchsau:

Cho[e1],..,[ei],..,[en]lccctcamatrnnv[E]cpn
[e ]

l n = n
a n ,n
1

l i = ([ e i ] a i ,i+1 l i+1 La i ,n l n )

a n ,n
Taxydnghm luinverse()thchinthuttontnhnhthccama
trn[R]:

functionr=luinverse(a)
%Nghichdaomatrantamgiacphai
n=size(a,1);
e=zeros(n,n);
c=zeros(n,1);
l=e;
b=e;
fori=1:n
c(i)=1;
e(:,i)=c;
c(i)=0;
end
l(:,n)=e(:,n)/a(n,n);
fori=n1:1:1
c=zeros(n,1);
fork=i+1:n
c=c+a(i,k)*l(:,k);
end
l(:,i)=(e(:,i)c)/a(i,i);
end
r=l;

100

nghichomatrntamgictadngchngtrnhctluinv.m:

clearall,clc
a=[123;045;002];
r=luinverse(a)

nghchomatrntamgictritadngccquanh:

[L]1=([LT]1)T
v[L]Tslmtmatrntamgicphi.Tadngchngtrnh ctluinverse.m
nghchomatrnthngthng:

clearall,clc
a=[135;349;596];
[l,r]=doolittle(a);
b=luinverse(r)*(luinverse(l))

22.NGHCHOMATRNBNGTHUTTONGAUSSJORDAN
Chomatrn[A]vmatrnnv[E]tngng.Dngcamatrn[E]
cp4,l:
1 0 0 0

0
1
0
0

E=

0 0 1 0

0
0
0
1

Nhvy,vnltacntmmatrn[A]1.Phngphploitrnhn
cmatrnnghcho[A]1 cthchinquangiaion,mimtgiai
ongmhaibc.ivigiaionthk:

chunhophntakkbngcchnhnhngvinghchocan
lmchobngkhngccphntphatrnvphadingcho
chonctthk.Khik=nth[A](k)strthnhmatrnnvv[E]
trthnh[A]1
Taxydngmthmnghchoinvmat():

functionx=invmat(a)
%Nghichdaomatrana

101

%Cuphap:x=invmat(a)
k=size(a,1);
n=k;
b=eye(n);
a=[a,b];
i=1;
whilei<=n
ifa(i,i)~=0
c=a(i,i);
a(i,i:2*n)=a(i,i:2*n)/c;
end

fork=1:n

ifk~=i
c=a(k,i);
a(k,i:2*n)=a(k,i:2*n)a(i,i:2*n)*c;
end
end

i=i+1;
end
x(:,1:k)=a(:,(1+k):(2*k));
nghchomatrn
2 1 1

[ A ] = 1 2 1
1 1 2

tadngchngtrnhctinvmat.m

clearall,clc
a=[211;121;112];
b=invmat(a)

23.NGHCHOBNGTHUTTONMOOREPENROSE

Chomatrn[A]cpmn.MatrnnghchotngquthoMoore
PensorelmatrnnmcMoorearanm1920vsauPensorea
ranm1955.MatrnMoorePensore[B]thomncciukin:

102


[A][B][A]=[A]

[B][A][B]=[B]
Tcciukinnytac:

[B]=[A]T([M][M])1
tnhmatrn[B]tadngchngtrnhctpseudoinv.m:

clearall,clc
a=[34567;36789;23454];
b=a*invmat(a*a)
24.GITRRINGVVECTRINGCAMATRN
Chomatrn[A]vung,cpn.Tagisvhnglgitrringca
matrn[A]v[V]lvectringphica[A]tngngvinu:

[A][V]=[V]

(1)
[V]gilvectringtrica[A]tngngvinu:

[V]T[A]=[V]T
Tacthvitli(1)didng:

([ A ] [ E ]) [ V ] = 0

Ttachnphngtrnhthunnht.Nghimtmthngcahchnh
l[X]=0.Hscnghimkhngtmthngnu:
det ([ A ] [ E ]) = 0

(2)

Khaitrin(2)tanhncphngtrnhctnh:

a1 n + a 2 n 1 + L + a n + a n +1 = 0

Ccnghimicaphngtrnhctnhlccgitrringca[A].Nghim
[Vi]ca:

([ A ] i [ E ]) [ V ] = 0
lccvectringca[A].Taxydnghm nulld()giihphngtrnh
tuyntnhthunnhtny:

functionZ=nulld(A,small)
norma=sqrt(mean(mean(abs(A))));
tiny=norma*eps;
ifnargin<2
small=(1+norma)*sqrt(eps);
end
103

[m,n]=size(A);
ifm~=n
error(Matranphaivuong!)
end
p=find(abs(A)<tiny);
if~isempty(p)
A(p)=0;
end
[U,S,V]=svd(A,0);
S=diag(S);
s=S;
norma=max(s);
smax=max(s);
ifsmax==0;
smax=1;
end
s=s/smax;
snorm=s;
t=find(s>0);
ifisempty(t);
Z=V;
return;
end
p=find(s<tiny);
if~isempty(p)
s(p)=tiny;
end
p=find(s==0);
if~isempty(p)
s(p)=small*min(s(t));
end
logs=log10(s);
sdifflog=diff(logs);
smax=max(sdifflog);
r=find(sdifflog==smax);
104

ifmin(size(r))>0
r=r(end);
else
r=0;
end
Z=V(:,r+1:n);
ifsnorm==ones(n,1);
Z=zeros(n,0);
end
ifmax(S)<=small;
Z=V;
end

25.BININGDNG
Takhostbitonvgitrringcamatrn:

[A][X]=[X]

vi[A]lmatrnixng.Bygitapdngphpbini:

[X]=[P][X]*

vi[P]lmatrnkhngsuybin.
Thay(2)vo(1)vnhnhaivvi[P]1tac:

[ P ]1 [ A ][ P ][ X ] = [ P ]1 [P ][ X ]

(1)
(2)

(3)
hay: [ A ] [ X ] = [ X ]
Trong
[ A ] [ P ][ X ] = [ P ]1 [ A ][ P ]
Dokhngikhithchinphpbininngitrringcamatrn[A]
cngchnhlgitrringcamatrn[A]*.Ccmatrnccnggitrring
cgilmatrnngdngvphpbinigiachnggilphpbin
ingdng.
Phpbiningdngthngdngabitontmgitrring
vdngdgiihn.Gistaccchnotmmatrn[P]mnng
chohomatrn[A],lc(3)cdng:

105

A11
0

A 22
0
M
M

0
0

x1 0
0
L
x1 =
M M
L


L Ann x1 0
L

0
0
0

Nghimcaphngtrnhtrnl:
1 = A11 2 = A22 L n = Ann

1
0
0
0
1
0

[ X1 ] = M
[X2 ] = M L [Xn ] = M



0
0
1


(4)

hay: [ X ] = X 1 X 2 L X n = [ E ]
Theo(2),vectringca[A]l:

[X]=[P][X]*=[P][E]=[P]

(5)
Nhvymatrnbini[P]lmatrnccvectringca[A]vcc
gitrringca[A]lccshngtrnngchoca[A]*.

26.TMGITRRINGBNGCCPHNGPHPLUTHA
1.Phngphpluthavhng:Gismatrnvung[A]cpncngi
trringphnbit:

1 > 2 3 L n

(1)

vccvectringtngng[V1],[V2],...,[Vn]
Tachnmtvect[X]btkcccthnhphnkhczero.Khi[X]sc
biudinbng:

(2)
[ X ] = 1 [ V1 ] + 2 [ V2 ] + L + n [ Vn ]
Do [ A ][ Vn ] = n [ Vn ] nn:
[ A ][ X ] = [ A ] 1 [ V1 ] + [ A ] 2 [ V2 ] + L + [ A ] n [ Vn ]
= 1 [ A ][ V1 ] + 2 [ A ][ V2 ] + L + n [ A ][ Vn ]

= 11 [ V1 ] + 2 2 [ V2 ] + L + n n [ Vn ]

= 1 1 [ V1 ] + 2 2 [ V2 ] + L + n n [ V2 ]
1
1

Lplilnthktac:

106

k
k

2
n

[ X k ] = [ A ] [ X 0 ] = 1 [ V1 ] + 2 [ V2 ] + L + n [ V2 ] (3)
1
1

Khik,do(1)nn(3)hitv[V1]khi10.Vylgitrring1,ctr
tuytilnnht,vvectringtngng[V1],cthtnhbngcchcho
trcmtvect[X0]cccthnhphnkhczerotheohng[V1]vlptheo
thtcsau:
[X ]

(4)

[ X k+1 ] = [ A] k 1 [ V1 ]
[Xk ]
k

k
1

Trong:

[ X ] = max { [ X n ] }
Tchitphthucvolnca 2 1 .
Thuttontmligmccbc:

chovectbanu[X0]

tnh[X1]=[A][X0]
tnh [ X ]
cho[X]= [ X ] = [ X ] [ X ] vlpliccbc24chonkhihit
Taxydnghmeigpower()thchinthuttontrn:

function[lambda,x,iter]=eigpower(A,tol,maxiter,x0)
%Timgiatririenglonnhat
%bangthuatloanlapluythua
[n,m]=size(A);
ifn~=m
error(Chidungchocacmatranvuong);
end
ifnargin==1
tol=1e8;
x0=ones(n,1);
nmax=200;
end
x0=x0/norm(x0);
pro=A*x0;
lambda=x0*pro;
107

err=tol+1;
iter=0;
whileerr>tol*abs(lambda)&abs(lambda)~=0&iter<=nmax
x=pro;
x=x/norm(x);
pro=A*x;
lambdanew=x*pro;
err=abs(lambdanewlambda);
lambda=lambdanew;
iter=iter+1;
end

tnhgitrringvvectringtadngchngtrnhcteigpower.m:

clearall,clc
A=[12345;67890;34567;89012;24681];
[lambdamax,v,iter]=eigpower(A)

2.Phngphpluthanghcho:Phngphpnydngtmgitr
ring c tr tuyt i b nht v vec t ring tng ng bng cch p dng
thuttontrongmc1chomatrn[A]1.tngcaphngphpphnny
datrnphngtrnh:

(5)
[ A ][ V ] = [ V ] [ A ]1 [ V ] = 1 [ V ]
Taxydnghminveigpower()thchinphngtrnhny:

function[lambda,v]=inveigpower(A,tol,maxiter)
B=A^1;
[lambda,v]=eigpower(B,tol,maxiter);
lambda=1/lambda;

tnh gi tr ring c tr tuyt i b nht ta dng chng trnh


ctinveigpower.m:

clearall,clc

108

A=[201;020;102];
tol=1e8;
maxiter=100;
[lambdamin,v]=inveigpower(A,tol,maxiter)

3.Phngphpdchchuyn:Chomatrn[A]ixng.Giscntmgi
trringgnvimtsschotrc.Do:

[A][X]=[X]
nntrhaivchoc[E][X]tac:

([A]s[E])[X]=(s)[X]
hay: [A*][X*]=*[X]
1
1

(6)

X
=
A

1
Dngphngphplpluthacho(6)tanhnc hay

min =
s= =
=s+=s+
Taxydnghmshiftpower()thchinthuttontrn:

function[lambda,v]=shiftpower(A,s)
A=(As*eye(size(A)))^1;
maxiter=150;
tol=1e8;
[lambda,v]=eigpower(A,tol,maxiter);
lambda=1/lambda+s;

tnh gi tr ring ca ma trn gn vi s ta dng chng trnh


ctshiftpower.m:

clearall,clc
A=[201;020;102];
tol=1e8;
maxiter=100;
s=0.5;
109

[lambda,v]=shiftpower(A,s)

27.TMGITRRINGCAMATRNBANG
CHOIXNG
1.DySturm:Saukhithchinbiningdngbngphngphpdng
matrnHouseholdertanhncmatrntridiagonalixng.timcc
gitrringvvectringtngngtacthdngthuttonlpQR.Tuy
nhinphngphpchiai(bisection)cngrthiuqu.
athcctnhcamatrncdng:
c1
0
0
0
L
d1
c
d2
c2
0
0
L
1

c2
d3
c3
0
L
0
Pn ( ) = det ([ A ] [ E ]) =

0
0
c
d
0
L
3
4

M
M
M
M
O
M

0
0
c n 1 d n
L
0
cthtnhvi3(n1)phpnhndngdysau:
P0 ( ) = 1

(1)

P1 () = d1
Pi ( ) = (di )Pi1 ( ) c i21Pi2 ( ) i=2,3,...,n

Ccathc P0 ( ), P1 ( ),...,Pn ( ) tonndySturmccctnhchtsau:

Slnidutrongdy P0 (a), P1 (a),...,Pn (a) bngsnghimca Pn ( )

nhhn

Numtphnt Pi (a) cadylzero,ducanngcviduca


Pi1 (a) .
Taxydnghmsturmseq()toradySturm:

functionp=sturmseq(c,d,lambda)
%ChodaySturmpganvoimatran
%tridiagonalA=[c\d\c]valambda.
%Chuy|Alambda*I|=p(n).
n=length(d)+1;
p=ones(n,1);
p(2)=d(1)lambda;

110

fori=2:n1
p(i+1)=(d(i)lambda)*p(i)(c(i1)^2)*p(i1);
end

Tip theo ta xy dng hm countevals() m s ln i du ca dy


Sturm:

functionnum=countevals(c,d,lambda)
%Tinhsogiatririengnhohonlambdacuamatran
%A=[c\d\c].DungdaySturm
p=sturmseq(c,d,lambda);
n=length(p);
oldsign=1;
num=0;
fori=2:n
psign=sign(p(i));
ifpsign==0;
psign=oldsign;
end
ifpsign*oldsign<0
num=num+1;
end
oldsign=psign;
end

2.nhlGerschgorin:nhlGerschgorinrtcchkhixcnhbinton
cctrnccgitrringcamatrnvung[A]cpn.Bintoncclbin
baolytonbccgitrring.ivimatrnixngth:

a i ri a i + ri i=1,2,...,n
Trong:

ri = a ij

a i = a ii

(2)

Vybintoncccaccgitrringl:
min min(a i ri )
m ax max(a i + ri )

(3)

j=1
j i

111

Taxydnghm gerschgorin()xcnhbintrnvdicaccgitr
ringcamatrnixng:

function[evalmin,evalmax]=gerschgorin(c,d)
%Danhgiacacbiencuagiatririeng
n=length(d);
evalmin=d(1)abs(c(1));
evalmax=d(1)+abs(c(1));
fori=2:n1
eval=d(i)abs(c(i))abs(c(i1));
ifeval<evalmin;
evalmin=eval;
end
eval=d(i)+abs(c(i))+abs(c(i1));
ifeval>evalmax
evalmax=eval;
end
end
eval=d(n)abs(c(n1));
ifeval<evalmin
evalmin=eval;
end
eval=d(n)+abs(c(n1));
ifeval>evalmax
evalmax=eval;
end

Taxydnghmevalbrackets()vyccgitrringnhnhtcamatrn
bangcho.Nchodyr1,r2,...,rm+1trongmion[ri,ri+1]chamt
gitrring.Thuttontrchttmbintoncccaccgitrringtheo
nh l Gerschorin. Phng php chia i kt hp vi dy c tnh ca dy
Sturmcdngxcnhbintrnm,m1,...,1

functionr=evalbrackets(c,d,m)
%NhommgiatririengmincuamatranA=[c\d\c]
112

[evalmin,evalmax]=gerschgorin(c,d);
r=ones(m+1,1);
r(1)=evalmin;
%Timcacgiatririengtheothutugiamdan
fork=m:1:1
%chiadoidoan(evalmin,evalmax)
eval=(evalmax+evalmin)/2;
h=(evalmaxevalmin)/2;
fori=1:100
%Timsogiatririengnhohoneval
numevals=countevals(c,d,eval);
%laichiadoidoanchuaeval
h=h/2;
ifnumevals<k;
eval=eval+h;
elseifnumevals>k;
eval=evalh;
else;
break
end
end
valmax=eval;
r(k+1)=eval;
end

3.Tnhccgitrring:Mtkhitmckhongchaccgitrringta
c th xc nh nghim ca a thc Pn() bng phng php Brent. Ta xy
dnghm eigenvals()tmccgitrringnhnhtcamatrnbang
choixngbngphngphpBrent.

functionevals=eigenvals(c,d,m)
%Tinhmgiatririengbenhatcuaa=[c\d\c].
%cvadphaikhaibaoglobaltrongchuongtrinhgoi
evals=zeros(m,1);
r=evalbrackets(c,d,m);%nhomcacgiatririeng
113

fori=1:m
evals(i)=brent(@func,r(i),r(i+1));
end

Khibitccgitrring,cchttnhttmccvectringtngngl
phng php lu tha nghch o. Ta dng hm invpower() thc hin
cngvicny:

function[eval,evec]=invpower(c,d,s,maxiter,tol)
%TinhcacgiatririengcuaA=[c\d\c]ganvoisva
%vavectoriengtuongungbangphuongphaplapnghichdao.
ifnargin<5;
tol=1.0e6;
end
ifnargin<4;
maxiter=50;
end
n=length(d);
e=c;
d=ds;
[c,d,e]=ludec3(c,d,e);%phantichA*=AsI
x=rand(n,1);
xmag=sqrt(dot(x,x));
x=x/xmag;%chuanhoax
fori=1:maxiter
xold=x;
x=lusol3(c,d,e,x);%giaiheA*x=xOld
xmag=sqrt(dot(x,x));
x=x/xmag;%chuanhoax
xsign=sign(dot(xold,x));%thiensudoidaucuax
x=x*xsign;
%kiemtrtinhhoitu
ifsqrt(dot(xoldx,xoldx))<tol
eval=s+xsign/xmag;
evec=x;
114

return
end
end
error(Quanhieulanlap)

function[c,d,e]=ludec3(c,d,e)
%PhantichmatranAthanhA=[c\d\e].
n=length(d);
fork=2:n
lambda=c(k1)/d(k1);
d(k)=d(k)lambda*e(k1);
c(k1)=lambda;
end

functionx=lusol3(c,d,e,b)
%GiaiheA*x=bvoiA=[c\d\e]
n=length(d);
fork=2:n%thaythetien
b(k)=b(k)c(k1)*b(k1);
end
b(n)=b(n)/d(n);%thaythelui
fork=n1:1:1
b(k)=(b(k)e(k)*b(k+1))/d(k);
end
x=b;

Taxydnghmsymmateig()tmccgitrringvvectring:
function[eigenvalues,eigvec]=symmateig(a)
globalcd
m=size(a,1);
b=housetrans(a);
d=diag(b);
c=diag(b,1);
p=householderp(a);
evals=eigenvals(c,d,m);
115

fori=1:m
s=evals(i)*1.0000001;
eval=invpower(c,d,s);
end
eigenvalues=diag(evals);
n=size(eigenvalues,1);
eigvec=zeros(n);
c=eigvec;
e=eye(n);
fori=1:n
b=aeigenvalues(i,i)*e;
c=nulld(b);
eigvec(:,i)=c(:,1);
end

tm gi tr ring ca mt ma trn i xng bng cch bin i


Householdertadngchngtrnhcthouseholdereig.m:

clearall,clc
globalcd
a=[1234;2765;3690;4503];
[eval,evec]=symmateig(a)
n=size(a,1);

28.TMGITRRINGBNGPHNGPHPQUT

tm cc gi tr ring khc ca ma trn ta dng phng php qut.


Chophngtrnhthunnhtdidngmatrn:

[A][X]=[X]

(1)
Bngphngphplpluthatanhncgitrringlnnht.tm
gitrringlnthhai2tadngphngphpqut.Munvyvectban
u[X0]phichnsaochokhngcngphngvivectringngvigi
trringlnnht1.Vccvectringtothnhcsnn:

(2)

[ X 0 ] = c1 [ X 1 ] + c 2 [ X 2 ] + L + c n [ X n ]

Nhnchaivca(2)vichuynv [ X 1 ] tac:
T

116


hay:

[ X1 ] [ X 0 ] = c1 [ X1 ] [ X1 ]
T

[X ] [X ]
c 1= 1 T 0
[ X1 ] [ X1 ]
T

Bygitachnvectbanul:
T
X 1 ] [ X 0 ][ X 1 ]
[

[ Y0 ] = [ X 0 ] c1 [ X1 ] = [ X 0 ]
T
[ X1 ] [ X1 ]

(3)

(4)

Nhvyvect [ Y0 ] khngtrngphngvi [ X 1 ] vnutadngphplp


cngsutvivectbanu [ Y0 ] nshittigitrringlnth2.

Vect [ Y0 ] trong(4)cthvitdidng:

X 1 ][ X 1 ]
[
[ X 0 ]
[ Y0 ] = [E]
T
X
X
[
]
[
]
1
1

v:

A ][ X 1 ][ X 1 ]
[
[ A ][ Y0 ] = [ A]
[ X 0 ]
T
X
X
[
]
[
]
1
1

= [ D1 ][ X 0 ]

Trong:

[ D1 ] = [ A ]

1[ X 1 ][ X 1 ]

(5)

(6)

(7)

(8)

[ X1 ] [ X1 ]
T

lmatrndngchophplptnhgitrringlnth2ca[A].tnh
gitrringlnth3,th4,...tadngccmatrnchophplplutha:
T
2 [ X 2 ][ X 2 ]

[ D 2 ] = [ D1 ]
T
X
X
[ 2] [ 2]

[ D3 ] = [ D2 ]

3 [ X 3 ][ X 3 ]

[X3 ] [X3 ]
T

Tiptcqutrnhtrnnlntathucccgitrringcamatrn[A].Ta
xydnghmsweeping()thchinthuttontrn:

function[t,s,iter]=sweeping(A)
%functiont=sweeping(A)
%TinhtatcacacgiatririengvavectoriengcuamatranAdoixung
117

n=size(A,1);
t=eye(n);
s=zeros(n);
k=zeros(n,1);
[l,v,iter]=eigpower(A);
t(1,1)=l;
s(:,1)=v;
k(1,1)=iter;
fori=2:n
A=A(l*v*v)/(v*v);
[l,v,iter]=eigpower(A);
t(i,i)=l;
s(:,i)=v;
k(i,1)=iter;
end
iter=max(k);

tnh gi tr ring v vec t ring ca ma trn ta dng chng trnh


ctsweeping.m:

clearall,clc
A=[135;349;596];
%A=[17243017;813207;21086;23435426];
[t,s,iter]=sweeping(A)

29.TMGITRRINGBNGPHNGPHPJACOBI

Phngphpnychophptatmttccgitrringcamatrn[A]
ixng.Tatoramatrntrcgiaochun[V]gmccccvectringsao
cho[V]T[V]=[E];[V]1=[V]Tvdngnbiningdngmatrn[A].
Khi ta s nhn c ma trn ng cho c cc gi tr ring nm trn
ngchochnh:

(1)
[ V ]T [ A ][ V ] = [ V ]1 [ A ][ V ] = [ ]
hiuphngphpJacobi,trchttanhnghamatrnquaypq:

118

0
M

R pq () = 0

0
M

0
M

p
0
0
M

q
0
0
M

0 L
0 L
1 M
0 L
M M
M L
0 L cos L L sin
L L
0 L
0
0
M M
M
M M
M
0 L sin L L cos
M M
M
M M
M

L
L
M
L
L
M
L
M

(2)

Domatrn[R]trcgiaonnccvecthngvctcancngtrcgiaov
chunho:

R pq R pq = E

R pq = R pq

(3)

Nhn trc v sau ma trn [A] vi R pq v R pq to nn bin i ng


dng:
T

A(1) = R pq A R pq

(4)
Chlphpbiningdngkhnglmthayigitrringnnbtk
matrnnocctcclnlp:

A(k+1) = R (k) A(k) R (k)


T

(5)

= R (k) R (k1) L R A R L R (k1) R (k)


ccnggitrring.Hnna,nunlmatrnngcho,ccgitrring
s nm trn ng cho chnh v ma trn c nhn vo bn phi ca ma
trn[A]lmatrn[V]:

(6)

V = R L R (k1) R (k)
Vncnlillmsaobinmatrn(5)thnhmatrnngcho.Cnnh
rngphpbini(4)chlmthayihngvctpvq.
v pq = v qp = a qp (c 2 s 2 ) + (a qq a pp )sc

(7a)
1
= a qpcos 2 + (a qq a pp )sin 2
2
v pn = v np = a pn c + a qn s n p, q

(7b)

119

v qn = v nq = a pn s + a qn c

v pp = a ppc 2 + a qq s 2 + 2a pq sc = a ppc 2 + a qq s 2 + a pq sin 2

v qq = a pps 2 + a qq c 2 2a pq sc = a pps 2 + a qq c 2 a pq sin 2

c=cos,s=sin
Talmcho
v pq = v qp = 0

n p, q

bngcchchncamatrnquay[Rpq()]saocho:
2a pq
1
sin 2
tg2 =

=
cos 2 =

2
cos2
a pp a qq
1 + tg 2

(7c)

(7d)

(7e)

(8)

sin2=tg2cos2

(9)
1 + cos 2
sin 2
cos = cos 2 =
sin =

2
2 cos
chomatrngnmatrnngchosaumilnlp,tacoichshngv
ctcaphntlnnhtnmngoingcholpvqvlmchonbng
zero.
Taxydnghmeigjacobi()tnhccgitrringivccvectringca
mtmatrnixngcpnbngphngphpJacobi.

function[lambda,v]=eigjacobi(A,tol,maxiter)
%PhuongphapJacobichomatranAdoixung
ifnargin<3
maxiter=100;
end
ifnargin<2
tol=1e8;
end
n=size(A,2);
lambda=[];
v=[];
form=1:n
ifnorm(A(m:n,m)A(m,m:n))>eps
error(Matrankhongdoixung!);
end
end
120

v=eye(n);
fork=1:maxiter
form=1:n1
[Am(m),Q(m)]=max(abs(A(m,m+1:n)));
end
[Amm,p]=max(Am);
q=p+Q(p);
ifAmm<eps*sum(abs(diag(lambda)))
break;
end
ifabs(A(p,p)A(q,q))<eps
s2=1;
s=1/sqrt(2);
c=s;
cc=c*c;
ss=s*s;
else
t2=2*A(p,q)/(A(p,p)A(q,q));%Pt.(9a)tg2(theta)
c2=1/sqrt(1+t2*t2);%Pt.(9b)cos2(theta)
s2=t2*c2;%Pt.(9c)sin2(theta)
c=sqrt((1+c2)/2);%Pt.(9d)cos(theta)
s=s2/2/c;%Pt.(9e)sin(theta)
cc=c*c;
ss=s*s;
end
lambda=A;
lambda(p,:)=A(p,:)*c+A(q,:)*s;%Pt.(7b)
lambda(:,p)=lambda(p,:);
lambda(q,:)=A(p,:)*s+A(q,:)*c;%Pt.(7c)
lambda(:,q)=lambda(q,:);
lambda(p,q)=0;
lambda(q,p)=0;%Pt.(7a)
lambda(p,p)=A(p,p)*cc+A(q,q)*ss+A(p,q)*s2;%Pt.(7d)
lambda(q,q)=A(p,p)*ss+A(q,q)*ccA(p,q)*s2;%Pt.(7e)
A=lambda;
121

v(:,[pq])=v(:,[pq])*[cs;sc];
end
lambda=diag(diag(lambda));
tnhccgitrringtadngchngtrnhchngtrnhcteigjacobi.m:

clearall,clc;
a=[135;349;596];
[eigval,eigvec]=eigjacobi(a)

Ccbitonvtlthnganbitongitrringdidng:

[A][X]=[B][X]

(10)
Trong [A] v [B] l cc ma trn i xng cp n. Ta gi s [B] xc nh
dng.Bitonnhvyphiavdngchuntrckhidngthutton
ngchohoJacobi.Do[B]lmatrnixng,xcnhdngnntheo
thuttonCholeskitaphntchnthnhtch2matrn[B]=[L][L]T.Bygi
taavophpbini:

[ X ] = ([L ]1 ) [ Z ]
T

(11)

Thay(11)vo(10)tac:

[ A ] ([ L ]1 ) [ Z ] = [ L][L]T ([ L]1 ) [ Z ]
T

Nhntrchaivvi[L]1tac:

[ L]1 [ A ] ([ L]1 ) [ Z ] = [ L ]1 [ L ][ L]T ([ L ]1 ) [ Z ]


T

Do [ L] [ L ] = [ L] ([ L] )T = [ E] nn:

(12)

[ H][ Z ] = [ Z ]
ldngchuncabitontmgitrringvvectringvi:

(13)

[ H] = [ L]1 [ A ]([ L]1 )T


Tmligiibiton(10)tatheoccbcsau:

dngthuttonCholeskitnh[L]

tnh[L]1

tnh[H]theo(13)

giibiton(12)theothuttonngchohoJacobi

tmvectringtheo(11),gitrringkhngikhibini
Taxydnghmstdform()toramatrn[H]v[T]=([L]1)T

122

function[H,T]=stdform(A,B)
%BiendoiA*x=lambda*B*xthanhH*z=lambda*z
n=size(A,1);
L=choleski(B);
Linv=invert(L);
H=Linv*(A*Linv);
T=Linv;

functionLinv=invert(L)
%nghichdaomatrantamgiactraiL.
n=size(L,1);
forj=1:n1
L(j,j)=1/L(j,j);
fori=j+1:n
L(i,j)=dot(L(i,j:i1),L(j:i1,j)/L(i,i));
end
end
L(n,n)=1/L(n,n);
Linv=L;

30.THUTTONQR

Chomatrn[A]tacthtmcmatrn[Q]v[R]saocho:

[A]=[Q][R]
Trong[Q]lmatrntrcgiaov[R]lmatrntamgicphi.

tmccgatrringcamatrn[A],tathchinphntchQRcho
[A]bngthuttonHouseholderhaythuttonGivens.Sautaxydng
matrn[A1]=[R1][Q1].TiptcphntchQRmatrn[A1]=[Q1][R1]vlixy
dngmatrn[A2]=[R2][Q2]chonkhihit.Thuttonnycthpdng
chomatrnbtk.Tuynhinnshiuquhnnumatrn[A]lmatrn
ba ng cho hay ma trn Hessenberg. Ta xy dng hm qreig() thc
hinthuttontrn:

function[lambda,evec]=qreig(a)
%TinhcacgiatririengbangthuattoanphantichQR
fori=1:500
123

s1=diag(a);
[q,r]=qrdecom(a);
a=r*q;
s2=diag(a);
ifabs(max(s2s1))<1e8
break;
end
end
lambda=diag(a);
n=size(lambda,1);
evec=zeros(n);
c=evec;
e=eye(n);
fori=1:n
b=alambda(i)*e;
c=nulld(b);
evec(:,i)=c(:,1);
end
lambda=diag(lambda);

tm gi tr ring ca mt ma trn i xng bng cch bin i


Householdertadngchngtrnhcthouseholder.m:

clearall,clc
globalcd
a=[1234;2765;3690;4503];
[eval,evec]=symmateig(a)
n=size(a,1);

31.THUTTONRUTISHAUSER

Chomatrn[A]ixng,xcnhdng,tadngthuttonCrout
phntchnthnh:

[A]=[L][R]

(1)
Sautaxydngmatrn:

[A1]=[R][L]

(2)
124

Matrn[A1]sccnggitrringvimatrn[A].Talitiptcphntch
matrn[A1]theothuttonCrout:

[A1]=[L1][R1]

(3)
Vsautaxydngmatrn:

[A2]=[R1][L1]
Tiptcqutrnhtanhncmatrn:

[An]=[Ln][Rn]

[An+1]=[Rn][Ln]
Khi n , [An] tr thnh ma trn tam gic trn c cc phn t trn ng
chochnhlccgitrringcamatrn[A].Phplpnyhitkhi[A]l
matrnxng,xcnhdng.Khi[A]khngxcnhdng,phplp
khngnnh.PhntchCroutcngkhngthchinckhicmtphn
trii=0.Taxydnghmrutishauser()thchinthuttontrn:

function[lambda,evec]=rutishauser(a)
%TinhcacgiatririengbangthuattoanphantichLR
fori=1:500
s1=diag(a);
[l,r]=crout(a);
a=r*l;
s2=diag(a);
ifabs(max(s2s1))<1e8
break;
end
end
lambda=diag(a);
n=size(lambda,1);
evec=zeros(n);
c=evec;
e=eye(n);
fori=1:n
b=alambda(i)*e;
c=nulld(b);
evec(:,i)=c(:,1);
end
125

lambda=diag(lambda);

tnhccgitrringcamatrntadngchngtrnhctrutishauser.m:
clearall,clc
a=[1234;5678;9012;3456];
[lambda,evec]=rutishauser(a)

32.THUTTONFADDEEVLEVERIERSOURIAU

Chomatrn[A]:
a11 a11 L a1n
a
a 22 L a 2n
21

[A] =
M L M
M
a

n1 a n 2 L a nn
Ccgitrringcamatrn[A]lnghimcaathcctrng:

det ([ A ] [ E ]) = 0

(1)

Khikhaitrinnhthctrn,tacathccpn:

Pn ( ) = n p1 n 1 p1 n 1 L pn = 0

Givtcamatrnltngccphnttrnngchochnh:

trace([A])=a11 + a 22 + L + a nn

Cchscaathc(2)cxcnhtheo:
p1 = trace([ B1 ])

[ B1 ] = [ A ]
1
p2 = trace([ B1 ])

[ B2 ] = [ A ]([ B1 ] p1 [E])
2
1
p3 = trace([ B3 ])
[ B 3 ] = [ A ] ([ B 2 ] p2 [ E ] )
3
L

(2)
(3)

1
trace([ Bn ])
[ Bn ] = [ A ]([ Bn1 ] pn1 [E])
n
Giih(3)tacccgitrringca[A].
Taxydnghmfadlev()thchinthuttontrn:

function[lambda,evec]=fadlev(a)
%TimcacgiatririengvavectoriengbangphuongphapFaddeevLeverrier
n=size(a,1);
b=a;
pn =

126

fori=1:n
s=0;
fork=1:n
s=s+b(k,k);
end
p=s/i;
b=a*(bp*eye(n));
r(i+1)=p;
end
r(1)=1;
lambda=roots(r);
n=size(lambda,1);
evec=zeros(n);
c=evec;
e=eye(n);
fori=1:n
b=alambda(i)*e;
c=nulld(b);
evec(:,i)=c(:,1);
end
lambda=diag(lambda);

tmccgitrringcamatrntadngchngtrnhctfaclev.m:

clearall,clc
a=[112314;29352;45678;32167;49682];
[lambda,evec]=fadlev(a)

33.THUTTONKRYLOV
athcctrngcamatrn[A]cdng:
Pn ( ) = n p1 n 1 p1 n 2 L pn = 0

(1)

Tavitli(1)didng:

n 1

Pn ( ) = + pi i
n

(2)

i =0

TheonhlHamiltonKellytacP([A])=0.Xtdylp:
127

v(i+1) = [ A ] v(i)
DoP([A])=0nn:

i=0,1,...,n1

(3)

(4)

(5)

(6)

+1)
v(k
= ([ A ] v(k) )i = a i ,jv(k)
i=1,2,...,nk=0,1,...,n1
i
j

(7)

n 1

([ A ]) v(0) = v(n) + i v(i) = 0


i =0

(i)
t v(i) = v(i)
1 ,...,v n
tac:
n 1

v(n)
+ i v(i) = 0
j

i =0

hay:
1)
v(n
v1(n)
L v(0)
1
1 n 1

= M

M
L
M
M

1)
(0)
(n)
v(n

L v n 0
n
v n
V v(k +1) = [ A ] v(k)
nn:
n

j=1

TmliqutrnhtnhtontheothuttonKrylovnhsau:

Chnv(0)tu,tnh v(k)
i theo(7)

Giih(6)tm
Khitmc tacathcctrng.
Taxydnghmkrylov()thchinthuttontrn:

function[lambda,evec]=krylov(a)
%TimgiatririengbangthuattoanKrylov
n=size(a,1);
v=zeros(n,1);
v(1)=1;
b=zeros(n,n);
b(:,n)=v;
fork=2:n
v=a*v;
b(:,nk+1)=v;
end
c=a*v;

128

rho=b\c;
rho=[1rho];
lambda=roots(rho);
n=size(lambda,1);
evec=zeros(n);
c=evec;
e=eye(n);
fori=1:n
b=alambda(i)*e;
c=nulld(b);
evec(:,i)=c(:,1);
end
lambda=diag(lambda);

tmgitrringcamatrntadngchngtrnhctkrylov.m:

clearall,clc
a=[17243017;813207;21086;23435426];
[lambda,evec]=krylov(a)

34.THUTTONHYMAN

ChomatrnHessenberg[B]vlmtgitrringca[B].Tatm:
(),x1(),x2(),...,xn1()

saocho[X]=[x1(),x2(),...,xn1(),xn]Tvixn=1lnghimcabiton:

( [ B] [ E ] ) [ X ] = [ e1 ]

nghal:
(b1,1 )x1 + b1,2 x 2 + L + b1,n 1 =
b x + (b )x + L + b 1 = 0
2 ,2
2
2 ,n
2 ,1 1

b n ,n 1x n1 + (b n ,n )1 = 0

Thaythngctaccccnghimxn1,xn2,...,x1v().
TheoquytcCramertac:

129

b1,1
b

0
2 ,1

det

0
b
0

n 1,n 1

0
b n ,n 1
0

1 = xn =
det ([ B] [ E ])
( )( 1)n 1 b 2 ,1 L b n ,n 1
=

det ([ B] [ E ])

Do:

( 1)n 1
( ) =
det ([ B] [ E ])
b 2 ,1 L b n ,n 1

athc()chsaikhcathcctrngp()mtnhnthng.Dovyta
cthdng ()tmccgitrringthaychop().Hm alffa()thchin
cngvicny:

functionr=alfa(a);
n=size(a,1);
b=a;
l=1;
fori=2:n
l=l*a(i,i1);
end
sign=(1)^(n1);
fori=1:n
s=0;
fork=1:n
s=s+b(k,k);
end
p=s/i;
b=a*(bp*eye(n));
r(i+1)=p;
end
r(1)=1;
r=sign*r/l;

130

Nuchomtmatrnbtk[A],tacthbiniHouseholdernthnhma
trnHessenberg[B]ngdngvi[A].Saukhicccgitrring,tatmcc
vectringtngng.Hmhyman()thchinthuttonny:

function[lambda,evec]=hyman(a)
%TimcacgiatririengvavectoriengbangphuongphapHyman
b=hessenberg(a);
r=alfa(b);
lambda=roots(r);
n=size(lambda,1);
evec=zeros(n);
c=evec;
e=eye(n);
fori=1:n
b=alambda(i)*e;
c=nulld(b);
evec(:,i)=c(:,1);
end
lambda=diag(lambda);

tmccgitrringvvectringtngngcamtmatrntadng
chngtrnhcthyman.m:

clearall,clc
a=[1234;2523;7141;3237];
[lambda,evec]=hyman(a)

35.TRCGIAOHOARNOLDI

Trongistuyntnh,phngphpArnoldicW.Arnoldiara
nm1951.PhngphplpArnoldisdngtrcgiaohoGramSchmidt
toradyccvecttrcgiao[q1],..,[qn]gilccvectArnoldi.Thut
toncthgmccbc:
- Chovectbtk[q1]c [ q1 ] = 1
- Lptk=2,3,...

131

[A][qk1]=[qk]
forj=1:k1
T

q j q k = h j,k 1
q k = h j,k 1 q j

[ q k ] = h k ,k 1
[ q k ] =

qk

h k ,k 1

Tagi[Qn]lmatrntotnvectArnoldiutin[q1],..,[qn]utinv
[Hn]lmatrn(Hessenbergtrn)tobinhngutinca[H]vc:

[Hn]=[Q]T[A][Q]
Taxydnghmarnoldi()thchinthuttontrn:

function[Hn,Vn]=arnoldi(A);
k=50;
m=size(A,1);
v=rand(m,1);
n=size(A,1);
H=zeros(m+1,m);
V=zeros(n,m+1);
V(:,1)=v/norm(v);
forj=1:m
w=A*V(:,j);
fori=1:j
H(i,j)=V(:,i)*w;
w=wH(i,j)*V(:,i);
end
H(j+1,j)=norm(w);
ifH(j+1,j)<=eps,
break;
end
V(:,j+1)=w/H(j+1,j);
end
Hn=H(1:m,:);

132

Vn=V(:,1:m);

phntchmatrntadngchngtrnhctarnoldi.m:

clearall,clc
A=[7231;2851;35129;1197];
[H,V]=arnoldi(A)

36.TRCGIAOHOLANCZOS

Chomatrn[A]ixng.Taphntchmatrnthnhccmatrn[Q]
v[T]saocho:

[A]=[Q][T][Q]T
vi: [Q][Q]T = [E], ngha l [Q] l ma trn trc giao v [T] l ma trn ba
ngchoixng.ThuttonLanczosgmccbc:
- Chovect[v1]c [ v1 ] = 1
- Chov0=0,0=0.[V]=[v1]
- Lp:
v j+1 = A v j j1 v j1
T

alfa = v j v j+1
v j+1 = v j+1 v j
T

v j+1 = v j+1 V V v j+1


j = v j+1
v j+1 = v j+1 j
[ V ] = V,v j+1

Taxydnghmlanczos()thchinthuttonLanczos
function[T,Q]=lanczos(A);
%thuattoanLanczoschomatrandoixung
n=size(A,1);
Q(:,1)=rand(n,1);
Q(:,1)=Q(:,1)./norm(Q(:,1));
a(1)=Q(:,1)*A*Q(:,1);
Q(:,2)=A*Q(:,1)a(1)*Q(:,1);
133

b(1)=norm(Q(:,2));
Q(:,2)=1./b(1)*Q(:,2);
fori=2:n1
a(i)=Q(:,i)*A*Q(:,i);
Q(:,i+1)=A*Q(:,i)a(i)*Q(:,i)b(i1)*Q(:,i1);
b(i)=norm(Q(:,i+1));
Q(:,i+1)=1./b(i)*Q(:,i+1);
end
a(n)=Q(:,n)*A*Q(:,n);
T=diag(a)+diag(b,1)+diag(b,1);

phntchmatrntadngchngtrnhctlanczos.m:

clearall,clc
A=[4132;1241;3412;2123];
[T,Q]=lanczos(A);

134

You might also like