CHƯƠNG3:CÁCVẤNĐỀVỀMATRẬN
§1.ĐỊNHTHỨCCỦAMATRẬN
Chomộtmatrậnvuôngcấpn.Tacầntìmđịnhthứccủanó.Trướchết
chúngtanhắclạimộtsốtínhchấtquantrọngcủa
địnhthức:
- nếunhântấtcảcácphầntửcủamộthàng(haycột)vớikthìđịnh
thứcđượcnhânvớik
- địnhthứckhôngđổinếutacộngthêmvàomộthàngt
ổhợptuyến
tínhcủacáchàngcònlại.
Tasẽápdụngcáctínhchấtnàyđểtínhđịnhthứccủamộtmatrậncấp4
như sau(phương pháp này có thểmởrộngchomột ma
trận cấpn)bằng
phươngpháptrụ:
⎟
⎟
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎜
⎜
⎝
⎛
=
44434241
34333231
24232221
14131211
aaaa
aaaa
aaaa
aaaa
A
Lấygiátrịtrụlàp
1=a11.Tachiacácphầntửcủahàngthứnhấtchop1=a11thì
địnhthứcsẽlàD/p
1(theotínhchất1)vàmatrậncònlạilà:
⎟
⎟
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎜
⎜
⎝
⎛
′′′
44434241
34333231
24232221
141312
aaaa
aaaa
aaaa
aaa1
Lấyhàng2trừđihàng1đãnhânvớia
21,lấyhàng3trừđihàng1đãnhân
vớia
31vàlấyhàng4trừđihàng1đãnhânvớia41(thayhàngbằngtổhợp
tuyếntínhcủacáchàngcònlại)thìđịnhthứcvẫnlàD/p
1vàmatrậnlà:
⎟
⎟
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎜
⎜
⎝
⎛
′′′
′′′
′′′
′
′
′
444342
343332
242322
141312
aaa0
aaa0
aaa0
aaa1
Lấygiátrịtrụlà
.Tachiacácphầntửcủahàngthứhaichop
222
ap
′
= 2thì
địnhthứcsẽlàD/(p
1p2)vàmatrậncònlạilà:
⎟
⎟
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎜
⎜
⎝
⎛
′′′
′′′
′′′′
′
′
′
444342
343332
2423
141312
aaa0
aaa0
aa10
aaa1
Lấyhàng1trừđihàng2đãnhânvới
12
a
′
,lấyhàng3trừđihàng2đãnhân
với
vàlấyhàng4trừđihàng2đãnhânvới
32
a
′
42
a
′
thìthìđịnhthứcvẫnlà
47
D/(p1p2)vàmatrậnlà:
⎟
⎟
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎜
⎜
⎝
⎛
′′′′
′′′′
′′′′
′′′′
4443
3433
2423
1413
aa00
aa00
aa10
aa01
Tiếptụclấyhàng3rồihàng4làmtrụthìmatrậnsẽlà:
⎟
⎟
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎜
⎜
⎝
⎛
1000
0100
0010
0001
Địnhthứccủamatrận
nàylàD/(p1p2p3p4)=D/(
44332211
aaaa
′′′′′
′
)=1nênđịnh
thứccủamatrậnAlàD=p
1p2p3p4.
Sauđâylàchươngtrìnhtìmđịnhthứccủamộtmatrận:
Chươngtrình3‐1
//tinhdinhthuc
#include<conio.h>
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
voidmain()
{
inti,j,k,n,ok1,ok2,t;
floatd,c,e,f,g,h;
floata[50][50];
chartl;
clrscr();
printf(ʺ**TINHDINHTHUCCAPn**ʺ);
printf(ʺ\nʺ);
printf(ʺ\nʺ);
printf(ʺChocapcuadinhthucn
=ʺ);
scanf(ʺ%dʺ,&n);
printf(ʺNhapmatrana\nʺ);
for(i=1;i<=n;i++)
{
48
printf(ʺDong%d:\nʺ,i);
for(j=1;j<=n;j++)
{
printf(ʺa[%d][%d]=ʺ,i,j);
scanf(ʺ%fʺ,&a[i][j]);
}
printf(ʺ\nʺ);
}
printf(ʺ\nʺ);
printf(ʺMatranamabandanhap\nʺ);
printf(ʺ\nʺ);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf(ʺ%.5f\tʺ,a[i][j]);
printf(
ʺ\nʺ);
}
printf(ʺ\nʺ);
t=1;
flushall();
while(t)
{
printf(ʺCosuamatranakhong(c/k)?ʺ);
scanf(ʺ%cʺ,&tl);
if(toupper(tl)==ʹCʹ)
{
printf(ʺChochisohangcansua:ʺ);
scanf(ʺ%dʺ,&i);
printf(ʺChochisocot
cansua:ʺ);
scanf(ʺ%dʺ,&j);
printf(ʺa[%d][%d]=ʺ,i,j);
scanf(ʺ%fʺ,&a[i,j]);
}
if(toupper(tl)==ʹKʹ)
t=0;
}
printf(ʺMatranabandau\nʺ);
printf(ʺ\nʺ);
for(i=1;i<=n;i++)
{
49
for(j=1;j<=n;j++)
printf(ʺ%.5f\tʺ,a[i][j]);
printf(ʺ\nʺ);
}
printf(ʺ\nʺ);
d=1;
i=1;
ok2=1;
while((ok2)&&(i<=n))
{
if(a[i][i]==0)
{
ok1=1;
k=k+1;
while((ok1)&&(k<=n))
if(a[k,i]!=0)
{
for(j=i;j<=n;j++)
{
c=a[i][j];
a[i][j]=a[k][j];
a[k][j]=c;
}
d=‐d;
ok1=0;
}
else
k=k+1;
if(k>n)
{
printf(ʺ\nʺ);
printf(ʺ**MATRANSUYBIEN**ʺ);
ok2=0;
d=0;
}
}
if(a[i][i]!=0)
{
c=a[i][i];
for(j=i+1;j<=n;j++)
50
a[i][j]=a[i][j]/c;
for(k=i+1;k<=n;k++)
{
c=a[k][i];
for(j=i+1;j<=n;j++)
a[k][j]=a[k][j]‐a[i][j]*c;
}
}
i=i+1;
}
if(ok2)
{
for(i=1;i<=n;i++)
d=d*a[i][i];
printf(ʺ\nʺ);
printf(ʺ**GIATRIDINHTHUCD**ʺ);
printf(ʺ\nʺ);
printf(ʺ%.3fʺ,d);
}
getch();
}
§2.NGHỊCHĐẢOMATRẬN
GọiA
‐1
làmatrậnnghịchđảocủamộtmatrậnAbậcntacóAA
‐1
=E
(trongbiểuthứcnày E làmộtmatrận vuông có cácphầntửtrênđường
chéochínhbằng1).DạngcủamatrậnE,vídụcấp4,là:
⎟
⎟
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎜
⎜
⎝
⎛
=
1000
0100
0010
0001
E
Phương
pháploạitrừđểnhậnđượcmatrậnnghịchđảoA
‐1
đượcthực
hiệnquanhiềugiaiđoạn(n),mỗimộtgiaiđoạngồmhaibước.Đốivớigiai
đoạnthứk:
‐chuẩnhoáphầntửa
kkbằngcáchnhânhàngvớinghịchđảocủanó
‐làmchobằngkhôngcácphầntửphíatrênvàphíadướiđườngchéo
chođếncộtthứk.Khik=nthì
A
(k)
sẽtrởthànhmatrậnđơnvịvàE
trởthành
A
‐1
Vídụ:Tínhmatrậnnghịchđảocủamatrận
51
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎝
⎛
=
211
121
112
A
TaviếtlạimatrậnAvàmatrậnđơnvịtươngứngvớinó:
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎝
⎛
=
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎝
⎛
=
100
010
001
E
211
121
112
A
Giaiđoạn1:Bướca:Nhânhàng1với1/a11,nghĩalàa
,
1j=a1j/a11đốivớidòng
thứnhất,a
,
ij=aijđốivớicácdòngkhác
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎝
⎛
=
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎝
⎛
=
100
010
0021
E
211
121
21211
A
Bướcb:Trừhàng3vàhàng2chohàng1,nghĩalàa
(1)
1j=aij‐ai1aij
đốivớii
≠1.
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎝
⎛
−
−=
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎝
⎛
=
1021
0121
0021
E
23210
21230
21211
A
Giaiđoạn2:Bướca:Lấyhàng2làmchuẩn,nhânhàng2với2/3,đểnguyên
cáchàngkhác
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎝
⎛
−
−=
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎝
⎛
=
1021
03231
0021
E
23210
3110
21211
A
Bướcb:Lấyhàng1trừđihàng2nhân1/2vàlấyhàng3trừđi
hàng2nhân1/2
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎝
⎛
−−
−
−
=
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎝
⎛
=
13131
03231
03132
E
3400
3110
3101
A
Giaiđoạn3:Bướca:Lấyhàng3làmchuẩn,nhânhàng3với3/4,đểnguyên
cáchàngkhác
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎝
⎛
−−
−
−
=
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎝
⎛
=
434141
03231
03132
E
100
3110
3101
A
Bướcb:Lấyhàng1trừđihàng3nhân1/3vàlấyhàng2trừđi
hàng3nhân1/3
52
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎝
⎛
−−
−−
−−
=
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎝
⎛
=
434141
414341
414143
E
100
010
001
A
NhưvậyA
‐1
là:
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎝
⎛
−−
−−
−−
=
−
4/34/14/1
4/14/34/1
4/14/14/3
A
1
Ápdụngphươngphápnàychúngtacóchươngtrìnhsau:
Chươngtrình3‐2
#include<conio.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<ctype.h>
voidmain()
{
inti,j,k,n,t,t1;
floatc,a[50][50],b[50][50];
chartl;
clrscr();
printf(ʺ**MATRANNGHICHDAO**\nʺ);
printf(ʺChobaccuamatrann=ʺ);
scanf(ʺ%dʺ,&n);
printf(ʺVaomatranbandaua\n
ʺ);
for(i=1;i<=n;i++)
{
printf(ʺVaohangthu%d:\nʺ,i);
for(j=1;j<=n;j++)
{
printf(ʺa[%d][%d]=ʺ,i,j);
scanf(ʺ%fʺ,&a[i][j]);
}
printf(ʺ\nʺ);
}
printf(ʺ\nʺ);
53
printf(ʺMatranbandanhap\nʺ);
printf(ʺ\nʺ);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf(ʺ%.5f\tʺ,a[i][j]);
printf(ʺ\nʺ);
}
t=1;
flushall();
while(t)
{
printf(ʺ\nCosuamatrankhong(c/k)?ʺ);
scanf(ʺ%cʺ,&tl);
if(toupper(tl)==ʹCʹ)
{
printf(ʺ
Chochisohangcansua:ʺ);
scanf(ʺ%dʺ,&i);
printf(ʺChochisocotcansua:ʺ);
scanf(ʺ%dʺ,&j);
printf(ʺa[%d][%d]=ʺ,i,j);
scanf(ʺ%fʺ,&a[i][j]);
}
if(toupper(tl)==ʹKʹ)
t=0;
}
printf(ʺ\nMatranbandau\nʺ);
printf(ʺ\nʺ
);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf(ʺ%.5f\tʺ,a[i][j]);
printf(ʺ\nʺ);
}
printf(ʺ\nʺ);
for(i=1;i<=n;i++)
for(j=n+1;j<=2*n;j++)
{
if(j==i+n)
a[i][j]=1;
54
else
a[i][j]=0;
}
i=1;
t1=1;
while(t1&&(i<=n))
{
if(a[i][i]==0)
{
t=1;
k=i+1;
while(t&&(k<=n))
if(a[k][i]!=0)
{
for(j=1;j<=2*n;j++)
{
c=a[i][j];
a[i][j]=a[k][j];
a[k][j]=c;
}
t=0;
}
else
k=k+1;
if(k==n+1)
{
if(a[i][k‐1]==0)
{
printf(ʺMATRANSUYBIEN\nʺ);
t1=0;
}
}
}
if(a[i][i]!=0)
{
c=a[i][i];
for(j=i;j<=2*n;j++)
a[i][j]=a[i][j]/c;
}
for(k=1;k<=n;k++)
55
{
if(k!=i)
{
c=a[k][i];
for(j=i;j<=2*n;j++)
a[k][j]=a[k][j]‐a[i][j]*c;
}
}
i=i+1;
}
if(t1)
{
printf(ʺ\nʺ);
printf(ʺ\nMATRANKETQUA\nʺ);
printf(ʺ\nʺ);
for(i=1;i<=n;i++)
{
for(j=n+1;j<=2*n;j++)
printf(ʺ%.4f\t\tʺ,a[i][j]);
printf(ʺ\nʺ);
}
printf(ʺ\nʺ);
}
getch();
}
Dùngchươngtrìnhtínhnghịchđảocủamatrận:
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎝
⎛
678
789
899
chotakếtquả
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎝
⎛
−−
−
−−
991
9102
121
§3.TÍCHHAIMATRẬN
GiảsửtacómatrậnAmnvàmatrậnBnp.TíchcủaAmnvàBnplàma
trận
CmptrongđómỗiphầntửcủaCmplà:
∑
=
=
n
1k
kjik
ij
bac
Chươngtrìnhdướiđâythựchiệnnhânhaimatrậnvớinhau.
Chươngtrình3‐3
56
#include<conio.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<ctype.h>
#definemax50
voidmain()
{
intn,l,m,i,j,k,t;
floata[max][max],b[max][max],c[max][max];
chartl;
clrscr();
printf(ʺChosohangcuamatrana:ʺ);
scanf(ʺ%dʺ,&n);
printf(ʺChosocotcuamatrana:ʺ);
scanf(ʺ%dʺ,&l);
printf(ʺChosocotcuamatranb:ʺ);
scanf(ʺ%dʺ,&m);
printf(ʺ\nNHAPMATRANA\nʺ);
for(i=1;i<=n;i++)
for(j=1;j<=l;j++)
{
printf(ʺa[%d][%d]=ʺ,i,j);
scanf(ʺ%fʺ,&a[i][j]);
}
printf(ʺ\nʺ);
printf(ʺMatranamabanda
nhap\nʺ);
for(i=1;i<=n;i++)
{
for(j=1;j<=l;j++)
printf(ʺ%10.5fʺ,a[i][j]);
printf(ʺ\nʺ);
}
flushall();
t=1;
while(t)
{
57
printf(ʺCosuamatrankhong(c/k)?ʺ);
scanf(ʺ%cʺ,&tl);
if(toupper(tl)==ʹCʹ)
{
printf(ʺChochisohangcansua:ʺ);
scanf(ʺ%dʺ,&i);
printf(ʺChochisocotcansua:ʺ);
scanf(ʺ%dʺ,&j);
printf(ʺa[%d][%d]=ʺ,i,j);
scanf(ʺ%fʺ,&a[i][j]);
}
if(toupper(tl)==ʹKʹ)
t=0;
}
printf(ʺMatranabandauʺ);
printf(ʺ\nʺ);
for(i=1;i<=n;i++)
{
for(j=1;j<=l;j++)
printf(ʺ%10.5fʺ,a[i][j]);
printf(ʺ\nʺ);
}
printf(ʺ\nʺ);
printf(ʺNHAPMATRANB\nʺ);
for(i=1;i<=l;i++)
for(j=1;j<=m;j++)
{
printf(ʺb[%d][%d]=ʺ,i,j);
scanf(ʺ%fʺ,&b[i][j]);
}
printf(ʺ\nʺ);
printf(ʺMatranbbandanhap\nʺ);
for(i=1;i<=l;i++)
{
for(j=1;j<=m;j++)
printf(ʺ%10.5fʺ,b[i][j]);
printf(ʺ\nʺ);
}
flushall();
58
t=1;
while(t)
{
printf(ʺCosuamatrankhong(c/k)?ʺ);
scanf(ʺ%cʺ,&tl);
if(toupper(tl)==ʹCʹ)
{
printf(ʺChochisohangcansua:ʺ);
scanf(ʺ%dʺ,&i);
printf(ʺChochisocotcansua:ʺ);
scanf(ʺ%dʺ,&j);
printf(ʺb[%d][%d]
=ʺ,i,j);
scanf(ʺ%fʺ,&b[i][j]);
}
if(toupper(tl)==ʹKʹ)
t=0;
}
printf(ʺMatranbbandauʺ);
printf(ʺ\nʺ);
for(i=1;i<=l;i++)
{
for(j=1;j<=m;j++)
printf(ʺ%10.5fʺ,b[i][j]);
printf(ʺ\nʺ);
}
printf(ʺ\nʺ);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
c[i][j]=0;
for(k=1;k<=l;k++)
c[i][j]=c[i][j]+a[i][k]*b[k][j];
}
printf(ʺMatrantichc:\nʺ);
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
printf(ʺ%10.5fʺ,c[i][j]);
printf(ʺ\nʺ);
}
59
getch();
}
Dùngchươngtrìnhtínhtínhhaimatrậntanhậnđượckếtquả
⎟
⎟
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎜
⎜
⎝
⎛
−−
−
−
−
=
⎟
⎟
⎠
⎞
⎜
⎜
⎝
⎛
−
−
×
⎟
⎟
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎜
⎜
⎝
⎛
−
1214
221
11148
105
343
221
35
01
31
12
§4.GIÁTRỊRIÊNGVÀVECTƠRIÊNGCỦAMATRẬN
1.Khái niệm chung
: Trong nghiên cứu lí thuyết vàứngdụng,tagặpbài
toánvềmatrậncấpn.ChomộtmatrậnAcấpn,giátrịλđượcgọilàgiátrị
riêngvàvectơXđượcgọilà
vectơriêngcủamatrậnAnếu:
AX=λX(1)
Vectơriêngphảilà vectơkháckhông.Tươngứngvớimộtgiátrịriêng
cóvôsốvectơriêng.NếuXlàmộtvéctơriêngtươngứngvớigiátrịriêngλ
thìcXcũnglàvectưriênhứngvớ
iλ.Cónhiềuthuậttoántìmgiátrịriêng
vàvectơriêngcủamộtmatrận.GiảsửtacómatrậnA,gọiElàmatrậnđơn
vịthìtheo(1)tacó:
(A‐λE)X=0(2)
và(A‐λE)làmatrậncódạng:
(3)
⎟
⎟
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎜
⎜
⎝
⎛
λ−⋅⋅⋅
⋅⋅⋅
⋅⋅⋅λ−
⋅⋅⋅λ−
nn2n1n
n22221
n11211
aaa
aaa
aaa
Nhưvậydo(2) làhệphương trình tuyếntínhthuần nhất nênđiều
kiệncầnvàđủđểλlàgiátrịriêngcủamatrậntrênlàđịnhthứccủanóbằ
ng
không:
det(A‐λE)=0(4)
Phươngtrình(4)đượcgọilàphươngtrìnhđặctrưngcủamatrậnA.Định
thứcdet(A‐λE)đượcgọilàđịnhthứcđặctrưngcủamatrậnA.Định
thức
PA(λ)củamatrậntrênđượcgọilàđathứcđặctrưngcủamatrậnvuôngA.
Vídụtìmvectơriêngvàtrịriêngcủamatrận:
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎝
⎛
−
−
−
022
113
31
3
TrướchếttatínhđathứcđặctrưngcủamatrậnA:
60
)4)(4(
22
113
313
)(P
2
A
+λλ−=
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎝
⎛
λ−−
−λ−
−λ−
=λ
NghiệmcủaP
A(λ)=0làλ1=4,λ2=2jvàλ3=‐2j.Vìtrườngcơsởlàsốthực
nêntachỉlấyλ=4.Đểtìmvectơriêngtươngứngvớiλ=4tagiảihệ
0
22
113
313
3
2
1
=
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎝
⎛
ξ
ξ
ξ
×
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎝
⎛
λ−−
−λ−
−λ−
tanhậnđượccácgiátrịcủaξ,chúngtạothànhvectơriêngứngvớiλ.
Nhưvậykhikhaitriểnđịnhthứctacómộtđa
thứcbậcncódạng:
P
n(λ)=λ
n
‐p1λ
n‐1
‐p2λ
n‐2
‐∙∙∙‐pn=0
Muốnxácđịnhcáchệsốcủađathứcđặctínhnàytadùngphương pháp
Fadeev‐Leverrier.TaxétmatrậnA:
⎟
⎟
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎜
⎜
⎝
⎛
⋅⋅⋅
⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
⋅⋅⋅
⋅⋅⋅
=
nn2n1n
n22221
n11211
aaa
aaa
aaa
A
TagọivếtcủamatrậnAlàsố:
vet(A)=a
11+a22+∙∙∙+ann
KhiđóthamsốpicủaPn(λ)đượccácđịnhnhưsau:
p
1=vet(B1)với B1=A
p
2=(1/2)vet(B2) với B2=A(B1‐p1E)
p
3=(1/3)vet(B3) với B3=A(B2‐p2E)
Chươngtrìnhtínhcáchệsốp
inhưsau:
Chươngtrình3‐4
//Faddeev_Leverrier;
#include<stdio.h>
#include<conio.h>
#include<ctype.h>
#definemax50
voidmain()
{
61
inti,j,k,m,n,k1,t;
floatvet,c1,d;
chartl;
floatp[max];
floata[max][max],b[max][max],c[max][max],b1[max][max];
clrscr();
printf(ʺChobaccuamatrann=ʺ);
scanf(ʺ%dʺ,&n);
printf(ʺChocacphantucuamatrana:\nʺ);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
printf(ʺa[%d][%d]=ʺ,i,j
);
scanf(ʺ%fʺ,&a[i][j]);
}
printf(ʺ\nʺ);
clrscr();
printf(ʺMatranbandanhapʺ);
printf(ʺ\nʺ);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf(ʺ%10.5fʺ,a[i][j]);
printf(ʺ\nʺ);
}
t=1;
flushall();
while(t)
{
printf(ʺ\nʺ);
printf(ʺCo
suamatrankhong(c/k)?ʺ);
scanf(ʺ%cʺ,&tl);
if(toupper(tl)==ʹCʹ)
{
printf(ʺChochisohangcansua:ʺ);
scanf(ʺ%dʺ,&i);
printf(ʺChochisocotcansua:ʺ);
scanf(ʺ%dʺ,&j);
printf(ʺa[%d][%d]=ʺ,i,j);
62
scanf(ʺ%fʺ,&a[i][j]);
flushall();
}
if(toupper(tl)==ʹKʹ)
t=0;
}
printf(ʺMatranbandauʺ);
printf(ʺ\nʺ);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf(ʺ%10.5fʺ,a[i][j]);
printf(ʺ\nʺ);
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
b[i][j]=a[i][j];
for(k=1;k<=n‐1;k++)
{
vet=0.0;
for(i=1;i<=n;i++)
vet+=b[i][i];
p[k]=vet/k;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(j!=i)
c[i][j]=b[i][j];
if(j==i)
c[i][j]=b[i][j]‐p[k];
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
b[i][j]=0.0;
for(k1=1;k1<=n;k1++)
b[i][j]+=a[i][k1]*c[k1][j];
}
}
vet=0.0;
63
for(i=1;i<=n;i++)
vet+=b[i][i];
p[n]=vet/n;
printf(ʺ\nʺ);
printf(ʺCachesocuadathucdactrung\nʺ);
printf(ʺ\nʺ);
d=1.0;
printf(ʺ%6.2fʺ,d);
for(i=1;i<=n;i++)
{
c1=‐p[i];
printf(ʺ%5c%6.2fʺ,ʹʹ,c1);
}
getch();
}
2.PhươngphápMises:ThuậttoánMisestìmgiátrịriêngl ớnnhấtcủamột
matrậnA.NếumatrậnAlàthựcvàvàmỗitrịriêngbộikcó đủk vectơ
riêngđộclậptuyếntínhthì
việctínhtoánsẽchotagiátrịriênglớnnhất.
MộtvectơVbấtkìcóthểđượcviếtdướidạng:
∑
=
=+⋅⋅⋅++=
n
1i
iinn2211
XvXvXvXvV (5)
TrongđóX1,X2, ,Xnlàcácvectơriêng tươngứngvớicácgiátrịriêng
λ
1,λ2,λ3, ,λnvàv1,v2,v3, ,vnlàcáchằngsố.
KhinhânAvớiVtacó:
AV=Av
1X1+Av2X2+ +AvnXn
do: Av1X1=v1AX1=v1λ1X1;Av2X2=v2AX2=v2λ2X2v.v.
Nên: AV=v
1λ1X1+v2λ2X2+ +vnλnXn
∑∑
==
λ==
n
1i
iii
n
1i
iii
XvXAvAV
LạinhânbiểuthứctrênvớiAtacó:
A
2
V=v1λ1AX1+v2λ2AX2+∙∙∙+vnλnAXn
=v
1λ
2
1X1+v2λ2
2
X2+ +vnλn
2
Xn
vàtiếpđếnlầnthứptacó:
∑
=
λ=
n
1i
i
p
ii
XvAV
Lấyλ
p
1làmthừasốchungtacó:
⎥
⎥
⎦
⎤
⎢
⎢
⎣
⎡
⎟
⎟
⎠
⎞
⎜
⎜
⎝
⎛
λ
λ
+⋅⋅⋅+
⎟
⎟
⎠
⎞
⎜
⎜
⎝
⎛
λ
λ
+
⎟
⎟
⎠
⎞
⎜
⎜
⎝
⎛
λ
λ
+λ=
n
p
1
n
n3
p
1
3
32
p
1
2
211
p
1
p
XvXvXvXvVA
64
Tươngtựtacó:
⎥
⎥
⎦
⎤
⎢
⎢
⎣
⎡
⎟
⎟
⎠
⎞
⎜
⎜
⎝
⎛
λ
λ
+⋅⋅⋅+
⎟
⎟
⎠
⎞
⎜
⎜
⎝
⎛
λ
λ
+
⎟
⎟
⎠
⎞
⎜
⎜
⎝
⎛
λ
λ
+λ=
+++
++
n
1p
1
n
n3
1p
1
3
32
1p
1
2
211
1p
1
1p
XvXvXvXvVA
Khiprấtlớn,vìλ
1>λ2>λ3>, ,λnnên:
∞→→
⎟
⎟
⎠
⎞
⎜
⎜
⎝
⎛
λ
λ
pkhi0
1
i
Dođó:
11
p
1
p
p
XvVAlim
λ
=
∞→
(6)
11
1p
1
1p
p
XvVAlim
++
∞→
λ
=
nghĩalàkhipđủlớnthì:
11
p
1
p
XvVA λ=
11
1p
1
1p
XvVA
++
λ=
dođó:
VAVA
p
1
1p
λ=
+
hay:
(
)
VAVAA
p
1
p
λ=
Nhưvậy
làvéctơriêngcủaAứngvớiλVA
p
1còngiátrịriêngλ1sẽlà:
1
p
1p
p
VA
VA
lim λ=
+
∞→
Trongthựctếđểtránhvượtquádunglượngbộnhớkhiλ
1khálớn,
cácvectơV
kđượcchuẩnhoásaumỗibướcbằngcáchchiacácphầntửcủa
nóchophầntửlớnnhấtm
kvànhậnđượcvectơV
’
k
Nhưvậycácbướctínhsẽlà:
‐chomộtvectơVbấtkì(cóthểlàV={1,1,1, ,1}
T
)
‐tínhV
1=AVvànhậnđượcphầntửlớnnhấtlà m1jtừđótínhtiếpV
′
1
=V
1/m1j
Mộtcáchtổngquát,tạilầnl ặpthứptanhậnđượcvectơVpvàphầntử
lớnnhấtm
pjthìV
’
p=Vp/mpj.
‐tính
vớiv
p1p
VAV
′
=
+
p+1,jlàphầntửthứjcủaVp+1.Tacó:
⎪
⎩
⎪
⎨
⎧
λ=
=
′
+
∞→
∞→
1j,1p
p
1p
p
vlim
XVlim
Vídụ:Tìmgiátrịriênglớnnhấtvàvectơriêngtươngứngcủamatrận:
⎟
⎟
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎜
⎜
⎝
⎛
−−−−
=
26544323
68102
720138
17302417
A
ChọnV={1,1,1,1}
T
tatínhđược
65
V V
1=
AV
V’1 V2=
AV’
1
V’2
1 88‐0.6027‐6.4801‐0.5578
1 48‐0.3288‐5.6580‐0.4870
1 26‐0.1781 0.0818 0.0070
1‐146 1 11.6179 1
λ
11.6179
V3=
AV’
2
V’3 V4=AV’3 V’4 V5=
AV’
4
‐3.9594‐0.5358‐3.6823‐0.5218‐3.5718
‐3.6526‐0.4942‐3.5196‐0.4987‐3.4791
0.0707 0.0096 0.0630 0.0089 0.0408
7.3902 1 7.0573 1 6.9638
λ
7.3902 7.05736.9638
V’
5 V6=
AV’
5
V’6 V7=
AV’
6
V’7
‐0.5129‐3.5341 ‐0.5075‐3.5173‐0.5043
‐0.4996‐3.4809 ‐0.4999‐3.4868‐0.5000
0.0059 0.0250 0.0036 0.0147 0.0021
1 6.9634 1 6.9742 1
λ
6.9634 6.9742
Dùngthuậttoántrêntacóchươngtrìnhsau:
Chươngtrình3‐5
#include<conio.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<ctype.h>
#definemax50
voidmain()
{
inti,j,k,n,t;
66
chartl;
floatt0,t1,epsi,s;
floata[max][max];
floatx0[max],x1[max];
clrscr();
printf(ʺPhuongphaplapluythuatimtririenglonnhat\nʺ);
printf(ʺChosohangvacotcuamatrann=ʺ);
scanf(ʺ%dʺ,&n);
printf(ʺChocacphantucuamatrana:
\nʺ);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
printf(ʺa[%d][%d]=ʺ,i,j);
scanf(ʺ%fʺ,&a[i][j]);
}
printf(ʺ\nʺ);
printf(ʺMatranbandanhap\nʺ);
printf(ʺ\nʺ);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf(ʺ%15.5fʺ,a[i][j]);
printf(ʺ\nʺ);
}
flushall();
t=1;
while(t)
{
printf(ʺ\nCosuamatrankhong(c/k)?ʺ);
scanf(ʺ%cʺ,&tl);
if(toupper(tl)==ʹCʹ)
{
printf(ʺChochisohangcansua:ʺ);
scanf(ʺ%dʺ,&i);
printf(ʺChochisocotcansua:ʺ);
scanf(ʺ%dʺ,&j);
printf(ʺa[%d][%d]=ʺ
,i,j);
scanf(ʺ%fʺ,&a[i][j]);
}
67
if(toupper(tl)==ʹKʹ)
t=0;
}
epsi=1e‐5;
printf(ʺ\nMatranbandau\nʺ);
printf(ʺ\nʺ);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf(ʺ%15.5fʺ,a[i][j]);
printf(ʺ\nʺ);
}
printf(ʺ\nʺ);
for(i=1;i<=n;i++)
x0[i]=1;
k=1;
t=0;
t1=0;
do
{
t0=t1;
for(i=1;i<=n;i++)
{
x1[i]=0;
for(j=1;j<=n;j++)
x1[i]=x1[i]+a[i][j]*x0[j];
}
s=0;
j=0;
for(i=1;i<=n;i++)
if(s<fabs(x1[i]))
{
j=i;
s=fabs(x1[i]);
}
t1=x1[j];
for(i=1;i<=n;i++)
x1[i]=x1[i]/t1;
if(fabs(t1‐t0)<epsi)
{
68
printf(ʺDathuchien%dbuoclap\nʺ,k);
printf(ʺGiatririenglonnhatVmax=%15.5f\nʺ,t1);
printf(ʺVectoriengtuongung\nʺ);
for(i=1;i<=n;i++)
printf(ʺ%.5f\nʺ,x1[i]);
t=1;
}
if(fabs(t1‐t0)>epsi)
{
for(i=1;i<=n;i++)
x0[i]=x1[i];
k=k+1;
}
if(k>max)
t=1;
}
while(t==0);
getch();
}
Dùngchươngtrìnhnàytínhgíatrịriêngvàvectơriêngcủamatrận:
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎝
⎛
−−
−
308
649
012
tanhậnđượcgiátrịriênglà3.0000vàvectơriênglà
x={‐0.75;0.75;1}
T
Nhưchúngtađãnóitrướcđây,phươngphápMises(haycòngọilà
phươngpháplặplũythừa)chỉchophéptìmgiátrịriênglớnnhấtvàvectơ
riêngtương ứngcủamatrận.Đểxácđị
nhcácgiátrịriêngkhác,matrậnA
đượcbiếnđổithànhmộtmatrậnkhácA
1màcácgiátrịriênglàλ2>λ3>
Phương pháp này gọi là phương pháp xuống thang. Sauđây là phương
phápbiếnđổimatrận:
GiảsửX
1làvectơriêngcủamatrậnAtươngứngv ớigiátrịriêngλ1
vàW
1làvectơriêngcủamatrậnA
T
tươngứngvớigiátrịriêngλ1.Từđịnh
nghĩaAX
1=λ1X1taviết:
(A‐λE)X
1=0
TatạomatrậnA
1dạng:
W
X
X
W
AA
T
1
1
1
T
1
1
1
λ
−=
(7)
69
TachúýlàX1W1
T
làmộtmatrậncònW1
TX
1làmộtconsố.Khinhânhaivế
củabiểuthức(7)vớiX
1vàchýýđếntínhkếthợpcủatíchcácmatrậntacó:
0
XAX
X
W
X
W
XAX
X
W
X
X
W
AXXA
1
1
1
1
T
1
1
T
1
1
1
1
1
T
1
1
1
T
1
1
111
=
−=
−=
−=
λ
λ
λ
(8)
A
1chấpnhậngiátrịriêngbằngkhông.
NếuX
2làvectơriêngtươngứngvớigiátrịriêngλ2,thìkhinhânA1
vớiX
2tacó:
X
W
X
W
XAX
X
W
X
X
W
AXXA
1
T
1
2
T
1
1
1
2
2
T
1
1
1
T
1
1
221
λ
λ
−=
−=
(9)
TheođịnhnghĩavìW
1làvectơriêngcủaA
T
nên:
λ
1W1=ATW1(10)
Mặtkhácdo:
(AX)
T
=X
T
A
T
và(AT)
T
=A
Nênkhichuyểnvị(10)tanhậnđược:
(A
T
W1)
T
=λ1W
T
1
Hay:
W
1
T
A=λ1W1
T
(11)
Khinhân(11)vớiX
2tacó:
λ
1W1
T
X2=W1
T
AX2
vàdođịnhnghĩa:
AX
2=λ2X2
nên:
λ
1W1
T
X2=W1
T
λ2X2
Vậythì:
(λ
1‐λ2)W1
TX
2=0
khiλ
1≠λ2thì:
W
1
TX
2=0(12)
Cuốicùngthay(12)vào(9)tacó:
A
1X2=AX2=λ2X2
Nhưvậyλ2làgiátrịriênglớnnhấtcủamatrậnA1vànhưvậycóthể
ápdụngthuậttoánnàyđểtìmcácgiátrịriêngcònlạicủamatrận.Cácbước
tínhtoánnhưsau
‐khiđãcóλ
1vàX1tatìmW1làvectơriêngcủaA
T
ứngvớigiátrị
riêngλ
1(vídụtìmW1bằngcáchgiảiphươngtrình(AT
‐λ1E)W1=0).Từđó
tínhmatrậnA
12theo(7).
70
‐tìmgiátrịriêngvàvectơriêngcủaA1bằngcáchlặplu ỹthừavàcứ
thếtiếptụcvàxuốngthang(n‐1)lầntatìmđủngiátrịriêngcủamatrậnA.
Vídụ:Tìmgiátrịriêngvàvectơriêngcủamatrậnsau:
⎟
⎟
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎜
⎜
⎝
⎛
−−−−
=
26544323
68102
720138
17302417
A
Tađãtìmđượcgiátrịriênglớnnhấtλ
1=7vàmộtvectơriêngtươngứng:
X
1={1,1,0,‐2}
T
.
MatrậnA
T
códạng:
⎟
⎟
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎜
⎜
⎝
⎛
−
−
−
−
=
266717
5482030
43101324
232817
A
và theo phương trình (A
T
‐λ1E)W1 = 0 ta tìmđược vectơ W1 =
{293,695,746,434}
T
TalậpmatrậnmớiA1theo(7):
⎟
⎟
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎜
⎜
⎝
⎛
−−−−
=λ
86814921390586
0000
434746695293
434746695293
120
7
XW
WX
1
T
1
T
11
1
và:
⎟
⎟
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎜
⎜
⎝
⎛
−−−−
−
−
−−
=
6333.240333.330833.381833.11
68102
3167.185167.235417.270917.9
3167.85167.135417.160917.0
A
1
TừmatrậnA
1tatìmtiếpđượcλ2theophéplặpluỹthừavàsauđólạitìm
matrậnA
3vàtìmgiátrịriêngtươngứng.
Chươngtrìnhlặptìmcácgiátrịriêngvàvectơriêng củamatrậnnhư
sau:
Chươngtrình3‐6
#include<conio.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<ctype.h>
#definemax50
71