58
CHƯƠNG 2: MA TRẬN
§1.MỘTSỐKHÁINIỆM
(Matrận[A]gọilà đối x ứngnếu[A]
T
=[A]
(Chomộtmatrậnvuông[A],cấpn.Tanóimatrận[A]khôngsuybiến
(nonsingular)nếumatrậncóthểnghịchđảođượchaynóicáchkhác,định
thứccủamatrậnkhác
không.
(Ma trận Hermitelàmột ma trận vuông cócácphần tử là s ố phức
bằngchuyểnvịliênhợpcủanó,nghĩalàphầntửởhàngicộtjbằngsốphức
liên
hợp của phân tử ở hàng j cột i
T
AA
∗
⎡
⎤
⎡⎤
=
⎣⎦
⎣
⎦
. Ví dụ ma trận
[]
32j
A
2j 1
⎡⎤
=
⎣⎦
⎣
⎦⎣⎦
.Vídụma
trận
[]
1j 1j
22
U
1j 1j
22
+−+
⎡⎤
⎢⎥
=
⎢⎥
+−
⎢⎥
⎢⎥
⎣⎦
làmatrậnunita
(Mộtmatrậnchỉcómộtcộtgọilàmộtvectơ
(ChuẩncủamộtvectơX,kíhiệulà X ,làmộtsốthựcthoảmãn:
‐
X >0
‐
cX c X=
Xx
=
=
∑
(Chuẩncủamộtmatrận[A],kíhiệulà A,làmộtsốthựcthoảmãn:
‐
A >0
‐
cA c A=
‐
AB A B+≤ +
‐
AB A B
≤
Tathườngdùngmộttrong3chuẩnsauđây:
‐
n
i,j
1
i
j1
Amaxa
=
=
∑
‐
[][ ][]
T
xAx 0≥
Tađịnhnghĩamatrậnxácđịnhâmvànửaxácđịnhâmmộtcáchtương
tự.
(Hạngcủamatrậnlàcấpcủamatrậnconcủamatrậnấycóđịnhthức
khác không còn mọi ma trận con cấp cao hơnđều cóđịnh thưc bằng
không(matrậnconlàmatrậncóđược
bằngcáchxoámộtsốhàngvàcộtcủa
matrậnbanđầu).
§2.BIẾNĐỔIHOUSEHOLDER
1. Ma trận Householder
: Ta bi ếnđổi ma trận [A] về dạng có các phần tử
thuộcđường chéo chính, các phần tử phía trên và phía dướiđường chéo
chínhkháczero,còncácphầntửcònlạibằngzero(matrậnba
đườngchéo)
bằngcáchdùngphépbiếnđổiHouseholder.
PhépbiếnđổiHouseholderdùngmatrậnHouseholder.
[][]
[][]
=−
T
UU
HE
Q
(1)
60
[][][]
(
)
[]
=− +
TT
T
2
UUU U
UU
E2
QQ
[]
[][]
[
]
()
[
]
[]
=− + =
T
T
2
U2QU
UU
E2 E
QQ
+
⎛⎞
⎪⎪
=− =−
⎨⎬
⎜⎟
⎝⎠
⎪⎪
⎩⎭
T
T
1
UX kI
UU
HX E X E X
QQ
[]
[][][]
[]
[]
(
)
[]
[]
[]
()
+
2
TT
T
2
11 1111
2Q X k I X k I X k X I I X k I I
=+ += +
222
11
k 2 kx k 2( k kx )
Nhưvậy:
[][][][]
[]
=−=− =−
⎡
⎤
⎣
⎦
L
T
1
HX X U kI k 0 0 0
(4)
nghĩalàphépbiếnđổiloạitrừtấtcảcácphầntửcủa[X]trừphầntửđầutiên.
2.BiếnđổiHouseholdermộtmatrậnđốixứng: Bây giờ ta ápdụng phép
biếnđổichomatrận[A]đốixứng:
61
Trongđó[X]làcộtđầutiêncủa[A]vớiphầntửđầutiênbịbỏđi.[A’]cóđược
từ[A]bằngcáchbỏđicộtvàhàngđầutiên.Matrận[H]cấp(n‐1)đượcxây
dựngtheocác
côngthức(1)÷(3).Do(4)tathấyphépbiếnđổinàylàmcột
đầutiêncủa[A]trởthành:
[][]
⎡⎤
⎢⎥
−
⎢⎥
⎡⎤
⎢⎥
=
⎢⎥
⎢⎥
⎣⎦
⎢⎥
⎢⎥
⎣⎦
M
11
11
a
k
a
0
HH
Hàngvà cộtthứ2củamatrận[A]đượcbiếnđổitiếpbằngcáchdùngphép
biếnđổiđốivớiphầnbênphải,phíadướicủamatrận.Phépbiếnđổinàycó
thểbiểudiễnbằng
[]
[]
[]
[
]
→
22
PAP A,trongđó:
[]
[]
[]
[] [ ]
⎡⎤
=
⎢⎥
⎣⎦
T
2
2
E0
a11 a12 a13 a14
a21
a31
a41
[A’]
1 0 0 0
0
0
0
[Q]
×
=
a11 ‐k 0 0
‐k
0
0
[Q][A’]
[Q]
62
[]
[]
[]
[]
[][]
[]
[
]
[]
[]
[] []
[][]
[]
[][]
()
⎛⎞
′′
=− −
⎜⎟
⎝⎠
T
T
UU
HA H E A VU
Q
[]
[][]
[
]
[
]
[]
[][]
()
′′
=− − −
[
]
[
]
[
]
[
]
[
]
′
=−−+
TT T
AVU UV2gUU
Trongđó:
[][]
=
T
UV
g
2Q
(9)
Đặt:[W]=[V]‐g[U](10)
Tathấyngayphépbiếnđổicódạng:
[]
[]
[]
X nếux1>0vàk=‐
[
]
X nếux1<0
‐Cho
−
=+
⎡⎤
⎡⎤
⎣⎦
⎣⎦
L
T
12 ni
Ukxx x
‐Tính
[]
=
2
U
Q
2
‐Tính
[]
[]
[]
′
=
AU
aa k
Taxâydựnghàm
housetrans()đểthựchiệnthuậttoántrên:
functionA=housetrans(A)
%BiendoiHouseholdermatranAthanhmatran
%bađườngchéodang[c\d\c].
%Decocvaddungd=diag(A),c=diag(A,1).
n=size(A,1);
fork=1:n‐2
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=v‐g*u;
A(k+1:n,k+1:n)=A(k+1:n,k+1:n)‐v*uʹ‐
u*vʹ;
A(k,k+1)=‐uMag;
end
k=zeros(n);
fori=1:n
k(i,i)=A(i,i);
end
nn
aaa a
aaa a
0a a a
H
000 a
⎡⎤
⎢⎥
⎢⎥
⎢⎥
=
⎢⎥
⎢⎥
⎢⎥
⎣⎦
L
L
L
MMML M
L
TathựchiệnphépbiếnđổiHouseholdertrênmatrận[A]vàcóđược:
[Q][H][Q’]=[A]
trongđó[Q]làmatrậntrựcgiao(tagọiđâylàphântíchHessenbergmatrận
[A]).
Thuậttoáncóthểtóm
lạinhưsau:
‐Cho[Q]làmatrậnđơnvịcấpn
‐Đặt
+
β=
2
U
2
‐Tính
[] []
[]
[]
′
=−
β
UU
PE
65
‐Tính
[]
[][]
=QQP
‐Tính
[
]
[][ ][]
=APAP
Taxâydựnghàm
hessenberg()đểthựchiệnphépphântíchtrên:
function[H,Q]=hessenberg(a)
[n,n]=size(a);
66
Mộtmatrậnkhôngsuybiến[A]gọilàphântíchđượcthànhtíchhaima
trận[L]và[R]nếu:
[A]=[L][R]
Việcphântíchnày,nếutồntại,làkhôngduynhất.
Nếuma
trận[L]cócácphầntửnằmtrênđườngchéochínhbằng1,tacó
phépphântíchDoolittle.
Nếumatrận[R]cócácphầntửnằmtrênđườngchéochínhb ằng1,ta
cóphépphântíchCrout.
Nếu
[R]=[L]
T
(hay[L]=[R]
T
)tacóphépphântíchCholeski.
Vớimatrậnbậc3,[L]và[R]códạng:
[] []
11 12 13
21 22 23
31 32 33
100 rrr
Ll 10 R0rr
ll1 00r
⎡⎤ ⎡ ⎤
⎢⎥ ⎢ ⎥
==
⎢⎥ ⎢ ⎥
⎢⎥ ⎢ ⎥
22 32 23 32 33
rr r
A0r r
0rl rl r
⎡⎤
⎢⎥
=
⎢⎥
⎢⎥
+
⎣⎦
Sauđótalấyhàngthứhailàmtrụvàthựchiệnbiếnđổi:
hàng3‐l32
×hàng2(khửa32)→hàng3
vàcó:
[]
11 12 13
22223
33
rrr
A0rr
00r
⎡⎤
⎢⎥
=
⎢⎥
⎢⎥
⎣⎦
l(i,i)=A(i,i);
end
§5.PHÂNTÍCHMATRẬNTHEOPHƯƠNGPHÁPCROUT
TươngtựnhưthuậttoánDoolittle,tacóthểphântíchmatrận[A]theo
thuậttoánCroutthànhtíchcủamatrận[L]và[R].Cácmatrậnbậc3theo
Croutcódạng:
[] []
11 12 13
21 22 23
31 32 33
l00 1rr
Lll 0 R01r
lll 001
⎡⎤ ⎡⎤
⎢⎥ ⎢⎥
==
⎢⎥ ⎢⎥
⎢⎥ ⎢⎥
⎣⎦ ⎣⎦
Đểtìml
ijvàrijtathựchiệnphépnhân.Saukhinhântacó:
68
[]
11 11 12 11 13
21 21 12 22 21 13 22 23
31 31 12 32 31 13 32 23 33
j1=aj1/r11(j=1tớin)
vớii=2tớin
∑
−
=
−=
1i
1k
kjik
ijij
rlar (j=itớin)
ii
1i
1k
kijk
ji
ji
r
rla
l
∑
−
=
−
= (j=itớin)
Taxâydựnghàm
crout()đểphântíchmatrậntheothuậttoánCrout:
function[l,r]=crout(a)
11 12 13 11 11 21 31
21 22 23 21 22 22 32
31 32 33 31 32 33 33
aaa l 00lll
aaa ll 00ll
aaa lll 00l
⎡⎤⎡⎤⎡⎤
⎢⎥⎢⎥⎢⎥
=
⎢⎥⎢⎥⎢⎥
⎢⎥⎢⎥⎢⎥
⎣⎦⎣⎦⎣⎦
Saukhithựchiệnphépnhântacó:
2
11 12 13 11 11 21 11 31
22
21 22 23 11 21 21 22 21 31 22 32
222
31 32 33 11 31 21 31 22 32 31 32 33
a a a l ll ll
aaa llll llll
aaa lllllllll
⎡⎤
⎡⎤
⎢⎥
⎢⎥
=+ +
⎢⎥
j
ij ik jk
k1
a l l i j,j 1, ,n j 1,2, ,n
=
==+=
∑
Domatrận[L]làmatrậntamgiáctráinênđốivớicộtthứnhấttacó:
11 11 i1 i1 11
la la/l==
Đốivớicộtkhác,rútl
ijrakhỏitổngtacó:
70
j
1
ij ik jk ij jj
k1
allll
−
=
=+
∑
Nếui=j(phầntửtrênđườngchéo)thì:
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:j‐1),A(j,1:j‐1));
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:j‐1),A(j,1:j‐1)))/A(j,j);
end
end
L=tril(A);
functionf=posdef(M)
%Kiemtralieu
matranMcoxacdinhduonghaykong
isposdef=true;
71
fori=1:length(M)
if(det(M(1:i,1:i))<=0)
[][ ][ ]
[][][]
−
−−
−− − −
−−
= ⋅⋅⋅ = ⋅⋅⋅
= ⋅⋅⋅ =
1
11
n1 n2 1 1 n2 n1
1n2n1
AHH H RH H HR
HHHRQR
(2)
TíchcủatấtcảcácmatrậnHouseholder:
[]
[][ ][ ]
−−
= L
1n2n1
QH H H(3)
khôngnhữngđốixứngmàcòntrựcgiaonhưmỗimatrận[H
k]:
[][]
[][ ][ ]
(
)
Hàm
householder()dùngđểtạoramatrậnHouseholder:
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ʹ;%matran
Householder
Đểphântíchmatrậntadùngchươngtrình
ctqrdecom.m:
clearall,clc
a=[413‐2;1‐241;3412;‐2123];
[q,r]=qrdecom(a)
§8.PHÂNTÍCHQRBẰNGTHUẬTTOÁNQUAYGIVENS
KỹthuậtquayGivenslàmộtphươngphápđểphântích ma trận [A]
thànhtíchcủamatrận[Q]vàmatrận[R]bằngcáchlàmchocácphầntửlần
lượtbằngzerochođếnkhicó được
ma trậntamgiácphải.Ýtưởnglàdùng
mộtmatrậnquayđơngiản2×2đặtdọctheođườngchéochínhcủamộtma
trậnđơnvịvàlàmchomộtphầntửcủa
thìmatrậnquayđểthựchiệnphépquaynàytheochiềukimđồnghồmộtgóc
θlà:
[]
θ
θθ
⎡⎤
=
⎢⎥
−θ θ
⎣⎦
cos sin
Q
sin cos
Trongđó:
θ= =
+
1
22
12
x
cos c
xx
θ= =
+
2
22
12
⎡
⎤
+
⎡⎤⎡ ⎤
+
⎢⎥
===
+
⎢
⎥
⎢⎥⎢ ⎥
⎢⎥
−+
⎣⎦⎣ ⎦
⎢
⎥
⎣
⎦
⎢⎥
⎣⎦
22
12
22
112
22
12
12
212
xx
xcxsx
⎤
⎢
⎥
⎢
⎥
δ
≠≠
⎧
⎢
⎥
⎪
==
⎪
⎢
⎥
==
⎨
⎢
⎥
==
⎪
⎢
⎥
−
⎪
−
==
⎢
⎥
⎩
gg
vàđòihỏi:
c
2
+s
2
=1
Điềunàyđúngvìcos
2
θ+sin
2
θ=1∀θ.Khimatrậnnàyđượcápdụngchoma
trậnm×ntacó:
⎧
δ= ≠
⎪
⎪
⎪
== =+=
⎨
⎪
⎪
=
−+ =
⎪
⎩
∑
∑∑
∑
a
c
aa
Nhưvậytasẽcó:
−+
==
+
jr ir ir jr
jr
22
jr ir
aa ab
b
0
aa
Taxâydựnghàm
givens()đểthựchiệnthuậttoántrên:
function[Q,R]=givens(A);
%PhantichQRbangthuattoanquayGivens
n=size(A,1);
Q=eye(n);
forj=1:n‐1
fori=n:‐1:j+1
z=1/sqrt(A(i‐1,j)^2+A(i,j)^2);
c=A(i‐1,j)*z;
s=A(i,j)*z;
21 1
vyba=−
vớibđượcchọnsaochov
1trựcgiaovớiv2:
12 1 2 1 12 11
vv v(a bv) va bvv 0=−=− =
hay:
12
11
va
b
vv
=
Tiếptụcquátrìnhđếnbướcthứktacó:
k1
ik
kk i
ii
i1
va
va v
vv
−
=
=−
vàr
kkđượcchọnsaocho
k
q1
=
,nghĩalà:
76
kkik
za qr=−
kk
rz=
Taxâydựnghàm
qrgramschmidt()đểthựchiệnthuậttoántrên:
function[Q,R]=qrgramschmidt(A);
%PhantichmtbangthuattoanGram‐Schmidt
[m,n]=size(A);
R(1,1)=norm(A(:,1));
Q(:,1)=A(:,1)/R(1,1);
fork=2:n
R(1:k‐1,k)=Q(1:m,1:k‐1)ʹ*A(1:m,k);
z=A(1:m,k)‐Q(1:m,1:k‐1)*R(1:k‐1,k);
R(k,k)=
norm(z);
Q(1:m,k)=z/R(k,k);
end
Để phân tích một ma trận ta dùng chương trình chương trình
§11.PHÂNTÍCHLQ
Chomatrận[A]
T
,tacóthểphântíchQRmatrậnnàythành:
[A]
T
=[Q1][R1]
Do([Q][R])
T
=[R1]
T
[Q1]
T
nên:
([A]
T
)
T
=[A]=[L][Q]
vàtanhậnđượcphântíchLQcủama trận[A].Taxâydựnghàm
lqdecom()
đểthựchiệnthuậttoánnày:
function[Q,L]=lqdecom(A)
A=Aʹ;
[Q,L]=qrdecom(A);
L=Lʹ;
Q=Qʹ;
2.DạngJordan:Khikhôngthểtìmđượcngiátrịriêngphânbiệt,nghĩalàma
trận[A]khôngcónvectơriêngđộclậptuyếntínhthìmatrận[A]khôngthể
đườngchéohoá.Tuynhiên,nếucóphépbiếnđổ
iđồngdạng[M]biếnđổi[A]
thành[J]:
[A]=[M][J][M]
‐1
Trongđó[J]làmatrậngầnđườngchéo:
[J]=diag(J
1, ,Jn)
[]
i
i
i
i
i
i
10 0
01
J
1
0
λ
⎡⎤
⎢⎥
λ
⎢⎥
λ
⎢⎥
GM(λ
i)=pi,AM(λi)=mithìtacầntìmmi‐pivectơđộclậptuyếntínhđểkết
hợpvớigiátrịriêngnày.Cácvectơnàyđượctạotừcácvectơriêngvàđược
gọilàvectơriêngtổngquáthoácủa[A].Gọiλlàgiá
trịriêng và[x]làvectơ
riêngtươngứng.k‐1vectơriêngtổngquáthoá{[x
1], ,[xk]}đượctạoranhư
sau:
[]
[] []
11
Ax x=λ
[]
[] [][]
221
Ax x x=λ +
M
[]
[] [][ ]
kkk1
Ax x x
−
=λ +
{[x
1], ,[xk]} tạo thànhchuỗi các vec tơ cóvec tơ [x1]đứngđầu.Chuỗinày
tươngứngvớikhốiJordanđơn.
λ
⎣
⎦
L
M
MOOO
KK
LL
LL
Xuấtpháttừvectơtổngquáthoábậckcủa[A]ứngvớiλ,kíhiệulà[x
k]tacó:
[x
k]
[x
k‐1]=([A]‐λ[E])[xk]
M
[xi]=([A]‐λ[E])
k‐i
[xk]
M
[x1]=([A]‐λ[E])
k‐1
[xk]
Chúýlà[x1]làmộtvectơriêngcủa[A]vì:
([A]‐λ[x1])=([A]‐λ[E])([A]‐λ[E])
k‐1
[xk]
Đểphântíchmatrận[A]tadùngthuậttoánFilipovgồmcácbướcsau:
‐Giảsửrằngkíchthướckhônggiancộtcủamatrận[A]làr<n.Phảicó
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
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
82
[M,D]=eig(a);
return
end
M=[];
forkk=1:sdu
e=du(kk);
ameig=sum(ismember(ds,e));
a1=a‐e*I;
ifameig==1
[u,s,v]=svd(a1);
M=[Mv(:,end)];
else
pp=0;
ns=[];