135
CHƯƠNG 3: HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH
§1.KHÁINIỆMCHUNG
Trong chương này chúng ta sẽ xét các phương pháp số để giải các
phươngtrìnhđạisốtuyếntínhdạng:
11 1 12 2 1n n 1
21 1 22 2 2n n 2
n1 1 n2 2 nn n n
ax ax ax b
ax ax ax b
ax ax ax b
+ +⋅⋅⋅+ =
⎧
⎪
++⋅⋅⋅+ =
⎪
⎨
⋅⋅⋅⋅⋅⋅⋅⋅⋅
⎪
⎪
+ +⋅⋅⋅+ =
⎩
Cácphươngtrìnhnàycóthểviếtgọndướidạng:
[A][x]=[b]
Trongđó:
[]
11 12 1n
21 22 2n
n1 n2 nn
aa a
aa a
A
aa a
⋅⋅⋅
⎡⎤
⎢⎥
⋅⋅⋅
⎢⎥
=
⋅⋅⋅ ⋅⋅⋅ ⋅⋅⋅ ⋅⋅⋅
⎢⎥
⎢⎥
⋅⋅⋅
⎣⎦
[]
1
2
n
b
b
b
b
⎡
⎤
⎢
⎥
⎢
⎥
=
⋅
⋅⋅
⎢
⎥
⎢
⎥
⎣
⎦
[]
1
2
n
x
x
x
x
⎡
⎤
⎢
⎥
⎢
⎥
=
⋅⋅⋅
⎢
⎥
⎢
⎥
⎣
⎦
Tasẽxét3trườnghợp:
)sốphươngtrìnhbằngsốẩnsốnênmatrận[A]làmatrậnvuông
)sốphươngtrìnhnhỏhơnsốẩnsố
)sốphươngtrìnhlớnhơnsốẩnsố
§2.NGHIỆMCỦAHỆPHƯƠNGTRÌNHĐẠI S ỐTUYẾNTÍNH
1.Trườnghợpkhôngsuybiến
:Khisốphươngtrìnhmbằngsốẩnsốn,ma
trận[A]vuôngvàtacó:
[] [ ]
[]
1
xAb
−
= (1)
nếumatrậnAkhôngsuybiến,nghĩalàđịnhthứccủamatrậnkháckhông.
CáclệnhMATLABđểgiảihệlà(
ctsys.m):
clc
A=[12;34];
b=[‐1;‐1];
x=A^‐1*b
%x=inv(A)*b
2.Trườnghợpsốphươngtrìnhíthơnsốẩn(nghiệmcựctiểuchuẩn)
:Nếusố
136
phươngtrìnhmíthơnsốẩnsốnthìnghiệmkhôngduynhất.Giảsửmhàng
củamatrậnhệsố[A]làđộclậpthìvectơnchiềucóthểphântíchthànhhai
thànhphần:
[] [] []
xx x
+−
=+(2)
Trongđómộtmatrậnlàmatrậnkhônggianhàngcủamatrận[A]vàđược
viếtdướidạngtổhợpcủa:
[] [ ][]
T
xA
+
=α(3)
vàmatrậnkialàmatrậnkhônggiankhôngsaocho:
[][]
Ax 0
−
= (4)
Nhưvậy:
[][] []
(
)
[][][][][] [][][]
[]
TT
Ax x AA Ax AA b
+− −
+= α+ = α= (5)
Do[A][A]
T
làmatrậnkhôngsuybiếnm×mcóđượcbằngcáchnhânmatrận
m
×nvớimatrậnn×mnêntacóthểgiảiphươngtrìnhđốivới[ α]đểcó:
[]
[]
1
0
T
AA b
−
⎡⎤
α=
⎣⎦
(6)
Thay(6)vào(3)tacó:
[] [][] [ ]
[]
1
0T0T
T
AAAAb
−
+
⎡⎤
α= α=
⎣⎦
(7)
Điềunàythoảmãnphươngtrình[A][x]=[b].Tuynhiênnókhônglànghiệm
duy nhất vìnếu thêm bấtkì một vectơ[x] thoảmãn (4) thìnó sẽ cũng là
nghiệm.MATLABdùnglệnh
pinvđểgiảihệ(ctpinv.m)
A=[12];
b=3;
x=pinv(A)*b
3.Trườnghợpsốphươngtrìnhnhiềuhơnsốẩn(nghiệmsaisốbìnhphương
bénhất)
:Nếusốphươngtrìnhmlớnhơnsốẩnsốnthìkhôngtồntạinghiệm
thoảmãnđầyđủcácphươngtrình.Tacốgắngtìmvectơnghiệmcósaisố[e]
nhỏnhất.
[] [ ][]
[]
eAxb=−(8)
Vậythìbàitiámcủatalàcựctiểuhoáhàm:
[][]
[]
[][]
[]
[][]
[]
2T
2
J 0.5 e 0.5 A x b 0.5 A x b A x b== −= − −
⎡
⎤⎡ ⎤
⎣
⎦⎣ ⎦
(9)
TatìmcựctiểucủaJbằngcáchchođạohàmtheoxcủa(9)bằngkhông.
[][][]
[]
[] [][] []
[]
1
T0TT
J
AAxb0 x AA Ab
x
−
∂
⎡⎤
=−==
⎡⎤
⎣⎦
⎣⎦
∂
(10)
137
Chúýlàmatrận[A]cósốhànglớnhơnsốc ộtchonênkhôngnghịchđảo
được.Nghiệmsaisốbìnhphươngbénhấttìmđượcnhớdùnglệnh
pinvhay
phépchiatrái(
ctover.m):
A=[1;2];
b=[2.1;3.9];
x=pinv(A)*b
x=A\b
x=(Aʹ*A)^‐1*Aʹ*b
Để tiện dùng ta viết hàm
pttt()đểgiải hệ phương trình trong cả 3
trườnghợptrên
functionx=pttt(A,B)
%HamnaytimnghiemcuaptAx=B
[M,N]=size(A);
ifsize(B,1)~=M
error(ʹKichthuocAvaBtrongpttt()khongbangnhau!ʹ)
end
ifM==N
x=A^‐1*B;
elseifM<N
x=pinv(A)*B;
else
x=pinv(A)*B;
end
Đểgiảihệphươngtrìnhtadùngchươngtrình
ctpptt.m:
clearall,clc;
a=[134;257;312];
b=[8146]ʹ;
x=pttt(a,b)
§3.CÁCPHƯƠNGPHÁPKHỬ
138
1.PhươngphápkhửGauss:Chúngtabiếtrằngcácnghiệmcủahệkhôngđổi
nếutathaymộthàngbằngtổhợptuyếntínhcủacáchàngkhác.Taxétmộthệ
phươngtrìnhđạisốtuyếntínhcómatr
ận[A]khôngsuybiếnvớim=n=3.
Phươngtrìnhcódạng:
11 1 12 2 13 3 1
21 1 22 2 23 3 2
31 1 32 2 33 3 3
ax ax ax b
ax ax ax b
ax ax ax b
++=
⎧
⎪
++=
⎨
⎪
++=
⎩
(1)
)Trướchếttakhửx1rakhỏicácphươngtrình,ngoạitrừphươngtrìnhđầu
tiên,bằngcáchnhânphươngtrìnhđầutiênvớia
i1/a11(ilàchỉsốhàng)vàtrừ
đimỗiphươngtrìnhđó:
(0) (0) (0) (0)
11 1 12 2 13 3 1
(1) (1) (1)
22 2 23 3 2
(1) (1) (1)
32 2 33 3 3
ax ax ax b
ax ax b
ax ax b
⎧
++=
⎪
+=
⎨
⎪
+=
⎩
(2)
Trongđó:
(0)
ij ij
aa=
(0)
ii
b
b
=
vớii=1,j=1,2,3
(0)
(1) ( 0) (0 )
i1
ij ij 1j
(0)
11
a
aa a
a
=−
(0)
(1) ( 0 ) ( 0)
i1
ii 1
(0)
11
a
b
bb
a
=− vớii,j=2,3
Việcnàygọilàlấytrụtạia
11vàphầntửa11gọilàtrụ.
)Tiếptheotakhửx2trongphươngtrìnhthứ3của(2)bằngcáchlấyphương
trìnhthứ2nhânvới
(1) (1)
i2 22
a/a(i=3)vàtrừđiphươngtrìnhthứ3:
(0) (0) (0) (0)
11 1 12 2 13 3 1
(1) (1) (1)
22 2 23 3 2
(2) (2)
33 3 3
ax ax ax b
ax ax b
ax b
⎧
++=
⎪
+=
⎨
⎪
=
⎩
(3)
Trongđó:
(1)
(2) (1) (1)
i2
ij ij 2j
(1)
22
a
aa a
a
=−
(1)
(2) (1) (1)
i2
ii 2
(1)
22
a
b
bb
a
=−
vớii,j=3 (4)
QuátrìnhnàyđượcgọilàthuậttoánkhửGausstiếnvàđượctổngquáthoá
thành:
(k 1)
(k) (k 1) (k 1)
ik
ij ij kj
(k 1)
kk
(k 1)
(k) (k1) (k1)
ik
ii k
(k 1)
kk
a
a a a i,j k 1,k 2, ,m
a
a
b
b b i k 1,k 2, ,m
a
−
−−
−
−
−−
−
=− =++
=− =++
(5)
ĐểthựchiệnthuậttoánkhửGausstadùngđoạnmãlệnh:
139
fork=1:n‐1
fori=k+1:n
ifA(i,k)˜=0
lambda=A(i,k)/A(k,k);
A(i,k+1:n)=A(i,k+1:n)‐lambda*A(k,k+1:n);
b(i)=b(i)‐lambda*b(k);
end
end
end
Saukhicóhệphươngtrìnhdạngtagiáctatìmnghiệmdễdàng.Từphương
trìnhthứ3của(3)tacó:
(2)
3
3
(2)
33
b
x
a
=
(6a)
Thayvàophươngtrìnhthứ2tacó:
(1) (1)
2233
2
(1)
22
b
ax
x
a
−
= (6b)
vàcuốicùngtừphươngtrìnhthứnhấttacó:
3
(0) (0)
111jj
(0)
j2
11
1
xbax
a
=
⎛⎞
=−
⎜⎟
⎝⎠
∑
(6c)
Tacũngcóthểtổngquáthoáquátrìnhtìmnghiệmbằngcáchtính lùivàtìm
nghiệmbằng:
m
(i 1) (i 1)
iiijj
(i 1)
ji1
ii
1
x b a x i m,m 1, ,1
a
−−
−
=+
⎛⎞
=− =−
⎜⎟
⎝⎠
∑
(7)
vàtìmnghiệmbằngđoạnmãlệnh:
fork=n:‐1:1
b(k)=(b(k)‐A(k,k+1:n)*b(k+1:n))/A(k,k);
end
NhưvậyphươngphápGaussgồmhaibước:
‐khửtheothuậttoánGauss
‐tìmnghiệmcủaphươngtrìnhdạngtamgiác
Đoạnmãlệnhđểtráohàngđượcviếttronghàm
swaprows():
140
functionv=swaprows(v,i,j)
%Traodoihangivahangjcuamatranv.
%Cuphap:v=swaprows(v,i,j)
temp=v(i,:);
v(i,:)=v(j,:);
v(j,:)=temp;
Taxâydựnghàm
gauss()đểthựchiệnthuậttoánkhửGauss
functionx=gauss(A,B)
%KichthuoccuamatranA,BlaNAxNAvaNAxNB.
%HamnaydunggiaiheptAx=BbangphuongphapkhuGauss
NA=size(A,2);
[NB1,NB]=size(B);
ifNB1~=NA
error(ʹAvaBphai
cokichthuoctuongungʹ);
end
N=NA+NB;
AB=[A(1:NA,1:NA)B(1:NA,1:NB)];
epss=eps*ones(NA,1);
fork=1:NA
%ChontruAB(k,k)
[akx,kx]=max(abs(AB(k:NA,k))./
max(abs([AB(k:NA,k+1:NA)epss(1:NA‐k+1)]ʹ))ʹ);
ifakx<eps
error(ʹMatransuybienvanghiemkhongduynhatʹ);
end
mx=k+kx‐1;
ifkx>1%traohangkhican
swaprows(AB,k,mx);
end
%KhuGauss
AB(k,k+1:N)=AB(k,k+1:N)/AB(k,k);
AB(k,k)=1;
form=
k+1:NA
AB(m,k+1:N)=AB(m,k+1:N)‐AB(m,k)*AB(k,k+1:N);%(2.2.5)
141
AB(m,k)=0;
end
end
%Timnghiem
x(NA,:)=AB(NA,NA+1:N);
form=NA‐1:‐1:1
x(m,:)=AB(m,NA+1:N)‐AB(m,m+1:NA)*x(m+1:NA,:);%(2.2.7)
end
Đểgiảihệphươngtrìnhtadùng
ctgauss.m
clearall,clc
A=
[111;2‐1‐1;11‐1];
b=[201]ʹ;
x=gauss(A,b)
2.PhươngphápkhửGauss‐Jordan:XéthệphươngtrìnhAX=B.Khigiảihệ
bằngphươngphápGausstađưanóvềdạngmatrậntamgiácsaumộtloạt
biếnđổi.PhươngphápkhửGauss‐JordancảitiếncáchkhửGauss
bằngcách
đưahệvềdạng:
[E][X]=[B
*
]
vàkhiđónghiệmcủa hệchính là [B
*
].TrongphươngphápGauss‐Jordan
mỗibướctínhphảitínhnhiềuhơnphươngphápGaussnhưnglạikhôngph ải
tínhnghiệm.Đểđưamatrận[A]vềdạngma trận[E]tạibướcthứi
taphảicó
a
ii=1vàaij=0.Nhưvậytạilầnkhửthứitabiếnđổi:
1.a
ij=aij/aii(j=i+1,i+2, ,n)
2.k=1,2, ,n
a
kj=akj‐aijaki(j=i+1,i+2, ,n)
b
k=bk‐biaki
Để giải hệ phương trình bằng phương pháp Gauss‐Jordan ta tạo rahàm
gaussjordan()
functionx=gaussjordan(A,B)
%KichthuoccuamatranA,BlaNAxvaNAxNB.
%HamnaydunggiaiheAx=BbangthuattoanloaitruGauss‐Jordan
NA=size(A,2);
142
[NB1,NB]=size(B);
ifNB1~=NA
error(ʹAvaBphaicokichthuoctuongungʹ);
end
fori=1:NA
ifA(i,i)==0%traohangneucan
swaprows(A,i,mx);
end
c=A(i,i);
forj=i:NA
A(i,j)=
A(i,j)/c;
end
B(i)=B(i)/c;
fork=1:NA
ifk~=i
c=A(k,i);
A(k,i:NA)=A(k,i:NA)‐A(i,i:NA)*c;
B(k)=B(k)‐B(i)*c;
end
end
end
x=B;
vàdùngchươngtrình
ctgaussjordan.mgiảihệ:
clearall,clc
a=[531;2‐11;1‐1‐1];
b=[9;2;‐1];
x=gaussjordan(a,b)
§4.GIẢIHỆPHƯƠNGTRÌNHBẰNGCÁCHPHÂNTÍCHMATRẬN
1.Kháiniệmchung
:Mộtmatrậnkhôngsuybiến[A]gọilàphântíchđược
thànhtíchhaimatrận[L]và[R]nếu:
[A]=[L][R]
Việcphântíchnày,nếutồntại,làkhông duynhất.Nếuma
trận[L]cócác
phầntửnằmtrênđườngchéochínhbằng1,tacóphépphântíchDoolittle.
143
Nếumatrận[R]cócácphầntửnằmtrênđườngchéochínhbằng1,tacóphép
phântíchCrout.Nếu[R]=[L]
T
(hay[L]=[R]
T
)tacóphépphântíchCholeski.
2.PhântíchDoolittle:Taxéthệphươngtrình[A][X]=[B].Nếutaphântích
matrận[A]thànhtíchhaimatrận[L]và[R]saocho:
[A]=[L][R]
trongđó[L]làmatrậntamgiáctráivà[R]làmatrậntam
giácphải.Vởima
trậnbậc3[L]và[R]códạng:
[] []
11 12 13
21 22 23
31 32 33
100 rrr
Ll 10 R0rr
ll1 00r
⎡⎤ ⎡ ⎤
⎢⎥ ⎢ ⎥
==
⎢⎥ ⎢ ⎥
⎢⎥ ⎢ ⎥
⎣⎦ ⎣ ⎦
Khiđóhệphươngtrìnhđượcviếtlạilà:
[L][R][X]=[B]
Tađặt[R][X]=[Y]vàhệtrởthành
[L][Y]=[B]
Do[L]làmatrậntamgiácnêntadễdàngtìmđược[Y].Saukhicó
[Y]tatiếp
tụctìm[X].Nhưvậybàitoánđưavềviệcphântíchmatrận[A].
ĐểgiảihệphươngtrìnhbằngcáchphântíchmatrậntheothuậttoánDoolittle
tadùnghàm
doolittlesol():
functionx=doolittlesol(A,b)
%GiaiheAX=B,trongdoA=LU
%nghialaAcodang[L\U].
%Cuphap:x=doolittlesol(A,b)
n=size(A,1);
[l,r]=doolittle(A);
%timnghiemmttamgiactrai
y(1,:)=b(1)/l(1,1);
form=
2:n
y(m,:)=(b(m)‐l(m,1:m‐1)*y(1:m‐1,:))/l(m,m);
end
%timnghiemmttamgiacphai
x(n,:)=y(n)/r(n,n);
form=n‐1:‐1:1
x(m,:)=(y(m)‐r(m,m+1:n)*x(m+1:n,:))/r(m,m);
end
144
Ápdụnghàmdoolittlesol()giảihệphươngtrình:
1
2
3
436x 1
8310x 0
412 10x 0
−
⎡⎤⎡⎤⎡⎤
⎢⎥⎢⎥⎢⎥
−=
⎢⎥⎢⎥⎢⎥
⎢⎥⎢⎥⎢⎥
−−
⎣⎦⎣⎦⎣⎦
tadùngchươngtrình
ctdoolitle.m:
a=[4‐36;8‐310;‐412‐10];
b=[1;0;0];
x=doolittlesol(a,b)
3.PhântíchCrout:TươngtựnhưthuậttoánDoolittle,tacó thểphântíchma
trận[A]theothuậttoánCroutthànhtíchcủamatrận[L]và[R].Đểgiảihệ
phươngtrìnhbằngcáchphântíchmatrậntheothuậttoán
Crouttadùnghàm
croutsol():
functionx=croutsol(a,b)
%HamdunggiaiheptAX=BbangthuattoanCrout
%Cuphap:x=croutsol(a,b)
n=size(a,1);
[l,r]=crout(a);
y(1,:)=b(1)/l(1,1);
form=2:n
y(m,:)=(b(m)‐l(m,1:m‐1)*y(1:m‐1,:))/l(m,m);
end
x(n,:)=y(n)/r(n,
n);
form=n‐1:‐1:1
x(m,:)=(y(m)‐r(m,m+1:n)*x(m+1:n,:))/r(m,m);
end
Khigiảiphươngtrìnhtachươngtrình
ctcrout.m:
clearall,clc
a=[4820;61316;2016‐91];
b=[24;18;‐110];
145
x=croutsol(a,b)
4. Phân tích Choleski: Sau khi phân tích ma trận [A] theo thuật toán
Choleski,hệphươngtrình[A][X]=[B]trởthành:
[L][L]
T
[X]=[B]
Trước hêt ta tìm nghiệm của hệ phương trình [L][Y] = [B] và sauđó tìm
nghiệm[X]từhệphươngtrình][L]
T
[X]=[Y].Taxâydựnghàmcholeskisol()
đểthựchiệnthuậttoánnày:
functionx=choleskisol(a,b)
%GiaiheptbangthuattoanCholeski
%Cuphap:x=choleskisol(a,b)
n=size(a,1);
l=choleski(a);
r=lʹ;
y(1,:)=b(1)/l(1,1);
form=2:n
y(m,:)=(b(m)‐l(m,1:m‐1)*y(1:m‐1,:))/l(m,m);
end
x(n,:)=y(n)/r(n,n);
form=n‐1:‐1:1
x(m,:)=(y(m)‐r(m,m+1:n)*x(m+1:n,:))/r(m,m);
end
Đểgiảihệphươngtrình
1
1
1
422x 5
22 4x 10
2411x 27
−
⎡⎤⎡⎤⎡⎤
⎢⎥⎢⎥⎢⎥
−−=−
⎢⎥⎢⎥⎢⎥
⎢⎥⎢⎥⎢⎥
−
⎣⎦⎣⎦⎣⎦
tadùngchươngtrình
ctcholeski.m:
clearall,clc
a=
[4‐22;‐22‐4;2‐411];
b=[6;‐10;27];
x=choleskisol(a,b)
146
5.PhântíchQR:Taxéthệphươngtrình[A][X]=[B].Phântíchmatrận[A]
thànhtíchcủahaimatrận[Q]và[R]saocho:
[A]=[Q]*[R]
Trongđó[Q]làmatrậntrựcgiao,nghĩalà[Q]
T
[Q]=[E],và[R]làmatrậntam
giácphải.Nhưvậyphươngtrìnhtrởthành:
[Q]*[R]*[X]=[B]
Nhânhaivêcủaphươngtrìnhvới[Q]
T
tacó:
[Q]
T
[Q]*[R]*[X]=[Q]
T
[B]
hay:
[R]*[X]=[Q]
T
[B]
Hệphươngtrìnhnàydễdàngtìmnghiệmvỉ[R]làmatrậntamgiác.Khigiải
hệphươngtrìnhtadùngchươngtrình
ctqrsol.m:
clearall,clc
A=[1235;4562;4689;9367];
b=[2468]ʹ;
[q,r]=qrdecomp(A);
c=transpose(q)*b;
x=r\c
§5.CÁCMATRẬNĐẶCBIỆT
1.Matrậnđườngchéobậc3
:Taxéthệphươngtrình[A][X]=[B]với[A]là
matrậnđườngchéocódạng:
[]
11
122
233
34
n1 n
de 0 0 0
cde0 0
0cde 0
A
00cd
000 c d
−
⋅
⋅⋅
⎡⎤
⎢⎥
⋅⋅⋅
⎢⎥
⋅⋅⋅
⎢⎥
=
⎢⎥
⎢⎥
⎢⎥
⎢⎥
⎣⎦
M
MMMMOM
L
Talưucácphầntửkhác0của[A]dướidạngvectơ:
[]
[]
[]
1
11
2
22
n1
n1 n1
n
d
ce
d
ce
cd e
d
ce
d
−
−−
⎡⎤
⎡⎤ ⎡⎤
⎢⎥
⎢⎥ ⎢⎥
⎢⎥
⎢⎥ ⎢⎥
⎢⎥
== =
⎢⎥ ⎢⎥
⎢⎥
⎢⎥ ⎢⎥
⎢⎥
⎣⎦ ⎣⎦
⎢⎥
⎣⎦
M
MM
147
đểgiảmbớtsốlượngphầntửcầnlưutrữ.
BâygiờtaphântíchmatrậntheothuậttoánDoolittle:
hàngk‐(c
k‐1/dk‐1)×hàngk‐1→hàngkk=1,2,…,n
và: d
k‐(ck‐1/dk‐1)×ek‐1→dk
Đểhoàntấtthuậtviệcphântích,talưuhệsốλ=ck‐1/dk‐1vàovịtrícủack‐1
trướcđó
ck‐1/dk‐1→ck‐1
Nhưvậythuậttoánphântíchmatrậnlà:
fork=2:n
lambda=c(k‐1)/d(k‐1);
d(k)=d(k)‐lambda*e(k‐1)
c(k‐1)=lambda;
end
Sauđótatìmnghiệmcủaphươngtrình[L][R][X]=[B]bằngcáchgiảiphương
trình[L][Y]=[B]vàsauđólàphươngtrình[R][X]=[Y].Phươngtrình[L][Y]=
[B]códạng:
1
1
12
2
23
3
34
4
n1 n
n
1000 0y
b
c100 0y
b
0c 10 0y
b
00c0 0y
b
0000c 1y
b
−
⎡
⎤
⎡⎤⎡⎤
⎢
⎥
⎢⎥⎢⎥
⎢
⎥
⎢⎥⎢⎥
⎢
⎥
⎢⎥⎢⎥
=
⎢
⎥
⎢⎥⎢⎥
⎢
⎥
⎢⎥⎢⎥
⎢
⎥
⎢⎥⎢⎥
⎢
⎥
⎢⎥⎢⎥
⎣⎦⎣⎦
⎣
⎦
L
L
L
L
MMMMLML
L
đểtìmnghiệm[Y]bằngcáchthaythếtiếntadùngđoạnlệnh:
y(1)=b(1);
fork=2:n
y(k)=b(k)‐c(k‐1)*y(k‐1);
end
Phươngtrình[R][X]=[Y]códạng:
148
11
11
22
22
33
33
44
4
nn
n
xy
de 00 0
xy
0d e 0 0
xy
00de 0
xy
000d 0
xy
00000d
⎡⎤
⎡
⎤⎡⎤
⎢⎥
⎢
⎥⎢⎥
⎢⎥
⎢
⎥⎢⎥
⎢⎥
⎢
⎥⎢⎥
=
⎢⎥
⎢
⎥⎢⎥
⎢⎥
⎢
⎥⎢⎥
⎢⎥
⎢
⎥⎢⎥
⎢⎥
⎢
⎥⎢⎥
⎣
⎦⎣⎦
⎣⎦
L
L
L
L
LL
MMMMLM
đểtìmnghiệm[X]bằngcáchthaythếlùitadùngđoạnlệnh:
x(n)=y(n);
fork=n‐1:‐1:1
x(k)=(y(k)‐e(k)*x(k+1))/d(k);
end
Taxâydựnghàm
band3()đểphântíchmatrậndạngđườngchéo:
function[c,d,e]=band3(c,d,e)
%PhantichmatranA=[c\d \e].
%Cuphap:[c,d,e]=band3(c,d,e)
n=length(d);
fork=2:n
lambda=c(k‐1)/d(k‐1);
d(k)=d(k)‐lambda*e(k‐1);
c(k‐1)=lambda;
end
Taviếthàm band3sol() dùngđểgiảihệ phươngtrìnhcó ma trận [A] dạng
đườngchéo:
functionx=band3sol(c,d,e,b)
%GiaiheA*x=bvoiA=[c\d\e]latichLU
%Cuphap:x=band3sol(c,d,e,b)
[c,d,e]=band3(c,d,e);
n=length(d);
fork=2:n%thaythetien
b(k)=b(k)‐c(k‐
1)*b(k‐1);
149
end
b(n)=b(n)/d(n);%thaythelui
fork=n‐1:‐1:1
b(k)=(b(k)‐e(k)*b(k+1))/d(k);
end
x=b;
Tadùngchươngtrình
ctband3eq.mđểgiảihệphươngtrình:
clearall,clc
c=
[‐1;‐2;3;3];
d=[67875]ʹ;
e=[222‐2]ʹ;
b=[2;‐3;4;‐3;1];
x=band3sol(c,d,e,b);
2.Matrậnđườngchéođốixứngbậc5:Khigiảiphươngtrìnhviphânthường
bậc4tathườnggặpmộthệphươngtrìnhđạisốtuyếntínhdạngbăngđối
xứngcóbềrộngbằng5.Matrận[A]khiđócó
dạng:
[]
111
1222
1233 3
23 4
n4 n3 n2 n2 n2
n3 n2 n1 n1
n2 n1 n
de f 0 0 0 0
ede f 0 0 0
fede f 0 0
0f e d 0
A
00fedef
000fede
0000fed
−− −−−
−−−−
−−
⎡⎤
⎢⎥
⎢⎥
⎢⎥
⎢⎥
⎢⎥
=
⎢⎥
⎢⎥
⎢⎥
⎢⎥
⎢⎥
⎢⎥
⎣⎦
L
L
L
L
MMM M M M O M
L
L
L
vàtalưumatrận[A]dướidạngvectơ:
150
[]
[]
[]
1
1
11
2
2
n2
n2
n1 n2
n1
n
d
e
df
e
f
def
d
e
df
e
d
−
−
−−
−
⎡⎤
⎡⎤
⎢⎥
⎡
⎤
⎢⎥
⎢⎥
⎢
⎥
⎢⎥
⎢⎥
⎢
⎥
⎢⎥
===
⎢⎥
⎢
⎥
⎢⎥
⎢⎥
⎢
⎥
⎢⎥
⎢⎥
⎣
⎦
⎢⎥
⎢⎥
⎣⎦
⎣⎦
M
M
M
Tathựchiệnthuậttoánbiếnđổimatrận:
hàng(k+1)‐(e
k/dk)×hàngk→hàng(k+1)
hàng(k+2)‐(fk/dk)×hàngk→hàng(k+2)
Cácsốhạngbịthayđổitheothuậttoánnàylà:
d
k+1‐(ek/dk)ek→dk+1
ek+1‐(ek/dk)fk→ek+1
d
k+2‐(fk/dk)fk→dk+2
vàlưutrữlại:
e
k/dk→ekfk/dk→fk
saukhiđãbiếnđổimatrận,tagiảihệphươngtrìnhcómatrậntamgiác.
Hàm
band5()dùngđểphântíchmatrận:
function[d,e,f]=band5(d,e,f)
%A=[f\e\d\e\f].
%Cuphap:[d,e,f]=band5(d,e,f)
n=length(d);
fork=1:n‐2
lambda=e(k)/d(k);
d(k+1)=d(k+1)‐lambda*e(k);
e(k+1)=e(k+1)‐lambda*f(k);
e(k)=lambda;
lambda=f(k)/d(k);
d(k+2)=d(k+2)‐lambda*f(k);
f(k)=lambda;
end
lambda=e(n‐1)/d(n‐1);
d(n)=d(n)‐lambda*e(n‐1);
e(n‐1)=lambda;
151
Taviếthàmband5sol()đểgiảihệphươngtrình:
functionx=band5sol(d,e,f,b)
%GiaiheA*x=bvoiA=[f\e\d\e\f]
%Cuphap:x=band5sol(d,e,f,b)
[e,d,f]=band5(e,d,f);
n=length(d);
b(2)=b(2)‐e(1)*b(1);
fork=3:n
b(k)=b(k)‐e(k‐1)*b(k‐1)‐f(k‐
2)*b(k‐2);
end
Đểgiảihệphươngtrình
1
2
3
4
5
6
1120 0 0 x 4
1231 0 0 x 7
2332 2 0 x 12
0121 2 1 x 7
0022 2 1x 5
0001 1 1 x 1
⎡⎤⎡⎤⎡⎤
⎢⎥⎢⎥⎢⎥
⎢⎥⎢⎥⎢⎥
⎢⎥⎢⎥⎢⎥
=
⎢⎥⎢⎥⎢⎥
⎢⎥⎢⎥⎢⎥
⎢⎥⎢⎥⎢⎥
−
⎢⎥⎢⎥⎢⎥
−
⎣⎦⎣⎦⎣⎦
tadùngchươngtrình
cban5eq.m
clearall,clc
d=[123121]ʹ;
e=[1322‐1]ʹ;
f=[2121]ʹ;
b=[4712751];
x=band5sol(d,e,f,b)
§6.CÁCPHƯƠNGPHÁPLẶPĐỂGIẢIHỆPHƯƠNGTRÌNH
ĐẠISỐTUYẾNTÍNH
Nóichungcóhaiphươngphápgiảihệphươngtrìnhđạisốtuyếntính:
phươngpháptrựctiếpvàphươngpháplặp.Cácbàitoánkĩthuậtthườngđưa
về hệ phương trìnhđại số tuyến tính
có ma trận [A] thưa và lớn nên các
phươngpháplặprấtthíchhợp.
Cácphươngpháplặpđượcchiathànhhailoại:phươngpháplặptĩnh
vàphươngpháplặpđộng.
152
Taxéthệphươngtrìnhđạisốtuyếntính[A][X]=[B].Tađưavềdạng
lặp:
[X]=[C][X]+[D]
Saumỗilầntínhtacósốdư:
[R]=[B]‐[A][X]
Khilặptừphươngtrìnhnày,
cácmatrận[C]và[D]khôngđổi.Vìvậy
nêncácphươngphápxuấtpháttừđâygọilàcácphươngpháplặptĩnh.Các
phươngphápnàydễhiểu,dễlậptrìnhnhưngkhônghiệuqu
ả.
Cácphươngphápnàygồmcó:
•PhươngpháplặpJacobi:Ph ương phápnàytínhgiátrịcủamộtbiến
dựatrêngiátrịcủacácbiếnkhác.Nóhộitụchậmvà rấtcó
thểkhông
hộitụtrongmộtsốtrườnghợp.
•PhươngpháplặpGauss‐Seidel:Nótươngtựnhưphươngpháplặp
Jacobinhưngkhitínhgiátrịcủabiếnthứktadùngcácgiátrịcácbi
ến
vừađượccậpnhật.Phươngphápnàyhộitụnhanhhơnphươngpháp
lặp Jacobi nhưng không nhanh bằngcác phương pháp lặp khôngổn
định.
•PhươngpháplặpcótăngSOR:Ph
ươngphápnàyđưaratừphương
phápGauss‐Seidelbằngcáchđưathêmhệsốngoạisuyω.Vớiωđược
chọntốiưu,phươngphápnàyhộitụnhanhhơnphươngphápGaus‐
Seidel.Khiω=1
phươngphápSORtrởthànhphươngphápGauss‐
Seidel.TốcđộhộitụcủaphươngphápSORphụthuộcvàoω
•PhươngpháplặpcótăngđốixứngSSOR:Phươngphápnàykhôngcó
ưuđiểmnào
trộihơnSOR.
Cácphươngpháplặpkhôngổnđịnhmớiđượcxâydựng,khóhiểu,nhưng
hiệuquảcao.Trongquátrìnhlặp,việctínhtoánbaohàmcácthôngtinthay
đổisaumỗibướ
ctính.
Cácphươngphápnàybaogồm:
• Phương pháp gradient liên hợp CG(Conjugate Gradient): Phương
phápnàytạoramộtdãycácvectơliênhợp(haytrựcgiao)làsốdưcủa
phéplặp.Chúngcũng
làgradientcủamộthàmbậc2màviệctìmcực
tiểu tươngđương với việc giải hệ phương trìnhđại số tuyến tính.
Phương pháp CG rất hiệu quả khi ma trận [A]đố
i xứng, xácđịnh
dương ví chỉ đòi hỏi lưu trữ một số ít phần tử. Tốcđộhội tụ của
phươngphápnàyphụthuộc
sốđiềukiệncủamatrận(sốđiềukiệncủa
matrậnđođộnhạycủanghiệmcủah ệphươngtrìnhđạisốtuyếntính
153
vớisaisốtrongsốliệu.Nóchobiếtđộchínhxáccủakếtquảtừphép
nghịchđảomatrậnvànghiệmcủahệphươngtrìnhđạisốtuyếntính).
•Phươngphápsốdưcựctiểu
MINRES(MinimumResidual)vàphương
phápLQđốixứngSYMMLQ(SymmetricLQ)
•PhươngphápgradientliênhợpdùngchohệthườngCGNE(Conjugate
Gradient on Normal Equations) và CGNR(Conjugate Gradient on
NormalEquationsminimizingtheResidual):Cácphươngphápnàydựa
trênviệcáp
dụngphươngphápCGvàomộttronghaidạnghệphương
trìnhđạisốtuyếntính.
‐CNGRdùnggiảihệdạng[A]
T
[A][X]=[B’]với[B’]=[A]
T
[B]
‐CGNEdùnggiảihệdạng[A][A]
T
[Y]=[B]đốivới[Y]vàsauđó
giảihệ[X]=[A]
T
[Y]
Khimatrận[A]khôngđốixứng,khôngsuybiếnthì[A][A]
T
và[A]
T
[A]
đốixứng,xácđịnhdươngnêncóthểdùngphươngphápCG.
•PhươngphápsốdưcựctiểutổngquátGMRES(GeneralizedMinimal
Residual):PhươngphápGMREStínhtoándãycácvectơtrựcgiaovà
kếthợp
cácnàybằngbàitoánbìnhphươngbénhấtđểgiảivàcậpnhật.
Tuynhiênnóđòihỏilưutoànbộdãy.Dovậyphươngánkhởiđộnglại
được dùngtrongphương pháp này.Phương
phápnày tiệndùng khi
matrậnhệsốkhôngđốixứng.
• Phương pháp gradient liên hợp kép BiCG(Biconjugate Gradient):
PhươngphápnàytạotahaidãyvectơgiốngnhưCG,mộtdựatrênhệ
vớimatr
ận[A]vàmộtd ựatrên[A]
T
.Thayvìtrựcgiaohoámỗidãy,
chúngtrựcgiaotươnghỗhai“trựcgiaokép”.Nórấthữuítkhimatrận
cómatrậnhệsốkhôngđốixứng,khôngsuybiến.
• Phương pháp g
ần như số dư cực tiểu QMR(Quasi‐Minimal
Residual):PhươngphápQMRdùngbìnhphươngtốithiểuđểgiảivà
cậpnhậtsốdưBiCG.Phươngphápnàydùngchohệphươngtrìnhcó
matrậnhệsốkhôngđố
ixứng.
• Phương pháp gradient liên hợp bậc 2 CGS(Conjugate Gradient
Squared):PhươngphápCGSlàmộtbiếnthểcủaBiCG,dùngcậpnhất
dãy[A]và[A]
T
.Phươngphápnàycóưuđiểmlàkhôngcầnnhânvới
matrậnhệsốchuyểnvịvàđượcdùngchohệphươngtrìnhđạisốtuyến
tínhcómatrậnhệsốkhôngđốixứng.
•Phương
phápgradientliênhợpképổnđịnhBiCGSTAB(Biconjugate
GradientStabilized):PhươngphápBiCGSTABcũnglàmộtbiếnthểcủa
154
BiCG.Nóđượcdùngchohệphươngtrìnhcómatrậnhệsốkhôngđối
xứng.
•PhươngphápChebyshev:Phươngphápnàytínhlặpcácđathứcvới
cáchệsốđượcchọnđểc ựctiểuhoáchuẩn
củasốdưtheonghĩamin‐
max.Matrậnhệsốphảixácđịnhdương.Nóđượcdùngchohệphương
trìnhcómatrậnhệsốkhôngđốixứng.
Tabiếtrằngtốcđộhộitụcủaphép
lặpphụthuộcrấtnhiềuvàophổcủama
trận(cácgiátrịriêngcủamatrận).Dovậyphéplặpthườngđưathêmmộtma
trậnthứhaiđểbiếnđổi matrậnhệsốthành
matrậncóphổthíchhợp.Ma
trận biếnđổi như vậy gọi là ma trậnđiều kiện trước(preconditioner). Một
preconditionertốtsẽcảithiệnsựhộitụcủaphươngpháplặp.Nhi
ềutrường
hợp,nếukhôngcópreconditioner,phéplặpsẽkhônghộitụ.Preconditioner
đơngiảnnhấtchínhlàmatrậnđườngchéomàM
i,j=Ai,jnếui=jvàcácphần
tửkhácbằngzero.MatrậnnhưvậygọilàmatrậnđiềukiệntrướcJacobi.
Trongtínhtoán,tồntạihailoạimatrậnđiềukiện
trước:
‐matrận[M]xấpxỉmatrận[A]vàlàmchoviệcgiảihệ[M][X]=[B]dễ
hơngiảihệ[A][X]=[B]
‐matrận[M]xấpxỉ[A]
‐1
saochochỉcầntính[M][B]làcó[X]
Phầnlớncácmatrận[M]thuộcloạithứnhất.
§7.PHƯƠNGPHÁPLẶPJACOBI
XéthệphươngtrìnhAX=F.Bằngcáchnàođótađưah ệphươngtrình
vềdạng
X=BX+G
trongđó:
B=(b
ij)n,n
G=(g
1,g2, ,gn)
T
Chọnvectơ:
X=(x
1
(o)
,x2
(o)
, ,xn
(o)
)
T
làmxấpxỉthứ0củanghiệmđúngvàxâydựngxấpxỉ
X
(m+1)
=BX
(m)
+G(m=0,1, )
Ngườitachứngminhrằngnếuphươngtrìnhbanđầucónghiệmduy
nhấtvàmộttrongbachuẩncủamatrậnBnhỏhơn1thìdãyxấpxỉhộ
itụvề
nghiệmduynhấtđó.ChomộtmatrậnB,chuẩncủamatrậnB,kíhiệu
B là
mộttrong3số:
155
∑
=
=
n
1j
ij
i
1
bmaxB
∑
=
=
n
1j
ij
j
2
bmaxB
2/1
n
1i
n
1j
2
ij
3
bB
⎟
⎟
⎠
⎞
⎜
⎜
⎝
⎛
=
∑∑
==
(Chuẩncủamatrậnquanhệtớisựhộitụcủaphươngpháplặp)
Taxâydựnghàm
jacobi()đểthựchiệnthuậttoántrên:
functionx=jacobi(a,b,x0,kmax)
%TimnghiemcuaptAx=BbangthuattoanJacobi.
%Cuphap:x=jacobi(a,b,x0,kmax)
%hayjacobi(a,b,x0,kmax)
ifnargin<4
tol=1e‐6;
kmax=100;%jacobi(a,b,x0)
elseifkmax<
1
tol=max(kmax,1e‐16);
kmax=100;%jacobi(a,b,x0,tol)
else
tol=1e‐6;%jacobi(a,b,x0,kmax)
end
ifnargin<3
x0=zeros(size(b));end
na=size(a,1);
x=x0;
At=zeros(na,na);
form=1:na
forn=1:na
ifn~=m
At(m,n)=‐a(m,n)/a(m,m);
end
end
Bt(m,:)=b(m,:)/a(m,m);
end
156
fork=1:kmax
x=At*x+Bt;
ifnargout==0,
x
end
ifnorm(x‐x0)/(norm(x0)+eps)<tol
break;
end
x0=x;
end
Đểgiảiphươngtrìnhtachươngtrình
ctjacobi.m:
b=[1‐1]ʹ;
a=[
32;12];
x0=[00]ʹ;
x=jacobi(a,b,x0,20)
§8.PHƯƠNGPHÁPLẶPGAUSS‐SEIDEL
PhươngpháplặpGauss‐SeidelđượccảitiếntừphươngphápJacobi.
Nộidungcơbảncủaphươngpháplàởchỗkhitínhnghiệmxấpxỉthứ(k+1)
củaẩnx
itasửdụngcácxấpxỉthứ(k+1)đãtínhcủacácẩnx1, ,xi‐1.Giảsửđã
chohệ[A][X]=[B]thìtacónghiệm:
n, ,1ixx
j
n
1j
ijii
=α+β=
∑
=
Lấyxấpxỉbanđầutuỳýx
1
(o)
,x2
(o)
, ,xn
(o)
vàtấtnhiêntacốgắnglấychúng
tươngứngvớix
1,x2, ,xn(cànggầncàngtốt).Tiếptheotagiảsửrằngđãbiết
xấp xỉ thứ kx
i
(k)
của nghiệm. Theo Seidel ta sẽ tìm xấp xỉ thứ (k+1) của
nghiệmtheocáccôngthứcsau:
)k(
j
n
1j
ij1
)1k(
1
xx
∑
=
+
α+β=
)k(
j
n
2j
ij
)1k(
1211
)1k(
2
xxx
∑
=
++
α+α+β=
)k(
j
n
ij
ij
1i
1j
)1k(
jiji
)1k(
i
xxx
∑∑
=
−
=
++
α+α+β=
157
)k(
nnn
)1k(
j
1n
1j
ijn
)1k(
n
xxx α+α+β=
+
−
=
+
∑
ThôngthườngphươngphápGauss‐Seidelhộitụnhanhhơnphương
pháp Jacobi nhưng tính toán phức tạp hơn. Dể dễ hiểu phương pháp này
chúngtaxétmộtvídụcụthể:
Chohệphươ
ngtrình:
⎪
⎩
⎪
⎨
⎧
=++
=++
=++
14x10x2x2
13xx10x2
12xxx10
321
321
321
nghiệmđúngcủahệlà(1,1,1)
Tađưavềdạngthuậntiệnchophéplặp:
⎪
⎩
⎪
⎨
⎧
−−=
−−=
−−=
213
312
321
x2.0x2.04.1x
x1.0x2.03.1x
x1.0x1.02.1x
Lấyx
1
(o)
=1.2;x2
(o)
=0;x3
(o)
=0
SửdụngphươngpháplặpGauss‐Seideltacó:
(1)
1
(1)
2
(1)
3
x 1.2 0.1 0 0.1 0 1.2
x 1.3 0.2 1.2 0.1 0 1.06
x 1.4 0.2 1.2 0.2 1.06 0.948
⎧
=−×−×=
⎪
=−×−×=
⎨
⎪
=−×−× =
⎩
(2)
1
(2)
2
(2)
3
x 1.2 0.1 1.06 0.1 0.948 0.9992
x 1.3 0.2 0.9992 0.1 0.948 1.00536
x 1.4 0.2 0.9992 0.2 1.00536 0.999098
⎧
=−× −× =
⎪
=−× −× =
⎨
⎪
=−× −× =
⎩
vàcứthếtiếptụcchođếnkhihộitụ.Taxâydựnghàm
gausseidel()đểthực
hiệnthuậttoántrên:
functionx=gausseidel(a,b,x0,kmax)
%TimnghiemcuaheAX=BbangcachlapGauss–Seidel.
ifnargin<4
kmax=100;
end
ifnargin<3
158
x0=zeros(size(b));
kmax=100;
end
na=size(a,1);
x=x0;
fork=1:kmax
x(1,:)=(b(1,:)‐a(1,2:na)*x(2:na,:))/a(1,1);
form=2:na‐1
tmp=b(m,:)‐a(m,1:m‐1)*x(1:m‐1,:)‐a(m,m+1:na)*x(m+1:na,:);
x(m,:)=tmp/a(m,m);
end
x(na,:)=(b(na,:)‐a(na,1:na‐1)*x(1:na‐1,:))/a(na,na);
err=sqrt(x‐x0)ʹ*(x‐x0);
iferr<eps
break;
end
x0=x;
end
ifk==kmax
fprintf(ʹKhonghoitusau%dlanlapʹ,kmax);
else
fprintf(ʹHoi
tusau%dlanlapʹ,k);
end
Đểgiảiphươngtrìnhtachươngtrình
ctgausseidel.m:
b=[1‐1]ʹ;
a=[
32;12];
x0=[00]ʹ;
x=gausseidel(a,b,x0,20)
§9.PHƯƠNGPHÁPLẶPRICHARDSON
Trongcácphéplặpnóitrên,matrận[B]khôngthayđổi.Bâygiờtaxét
cácphươngpháplặpcó[B]thayđổi.Phươngphápđơngiảnnhấtlàphương
pháplặpRichardson.Tacócôngthứclặp
sau:
(k 1) (k) 1 (k)
xxPr
+−
=+α
159
Trongđóαlàthôngsốrelaxationvàsốdưr
(k)
đượctínhbằng:
(k) (k)
rbAx=−
Matrậnlặplầnklà:
1
kk
BE PA
−
=−α
Như vậy phéplặp Jacobicũng như phéplặp Gauss‐Seidel làtrường hợp
riêngcủaphéplặpRichardsonvớiα=1,P =DhayP=D+L.Ngườitađã
chứngminhlàphép
lặpRichardsonhộitụkhi:
i
2
i
2Re( )
0
λ
<α<
λ
Taxâydựnghàm
richardsoniter()thựchiệnthuậttoántrên:
functionx=richardsoniter(a,b,x,maxiter,tol)
d=eig(a);
k=length(d);
alfa1=abs(2*real(d(1))/(abs(d(1))^2));
forj=2:k
alfa=abs(2*real(d(j))/(abs(d(j))^2));
ifalfa<alfa1
alfa1=alfa;
end
end
omega=alfa1/2;
fori=1:maxiter
r=b‐a*x;
x=x
+omega*r;
ifnorm(r)<tol
break;
end
end
i
Đểgiảihệphươngtrìnhtadùngchươngtrình
ctrichardsoniter.m
clearall,clc
a=[1011;1102;2210];
b=[121314]ʹ;