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

Tài liệu CHƯƠNG 3: HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH   §1. KHÁI NIỆM CHUNG    ppt

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (569.33 KB, 75 trang )


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

§1.KHÁINIỆMCHUNG
 Trong chương này chúng ta sẽ xét các phương pháp số để giải các
phươngtrìnhđạisốtuyếntínhdạ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ácphươngtrìnhnàycóthểviếtgọndướidạ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






=
⋅⋅⋅








Tasẽxét3trườnghợp:

)sốphươngtrìnhbằngsốẩnsốnênmatrận[A]làmatrậnvuông
)sốphươngtrìnhnhỏhơnsốẩnsố
)sốphươngtrìnhlớnhơnsốẩnsố

§2.NGHIỆMCỦAHỆPHƯƠNGTRÌNHĐẠI S ỐTUYẾNTÍNH
1.Trườnghợpkhôngsuybiến
:Khisốphươngtrìnhmbằngsốẩnsốn,ma
trận[A]vuôngvàtacó:

[] [ ]
[]
1
xAb

= (1)
nếumatrậnAkhôngsuybiến,nghĩalàđịnhthứccủamatrậnkháckhông.
CáclệnhMATLABđểgiảihệlà(
ctsys.m):

clc
A=[12;34];
b=[‐1;‐1];

x=A^‐1*b
%x=inv(A)*b

2.Trườnghợpsốphươngtrìnhíthơnsốẩn(nghiệmcựctiểuchuẩn)
:Nếusố

136
phươngtrìnhmíthơnsốẩnsốnthìnghiệmkhôngduynhất.Giảsửmhàng
củamatrậnhệsố[A]làđộclậpthìvectơnchiềucóthểphântíchthànhhai
thànhphần:

[] [] []
xx x
+−
=+(2)
Trongđómộtmatrậnlàmatrậnkhônggianhàngcủamatrận[A]vàđược
viếtdướidạngtổhợpcủa:
[] [ ][]
T
xA
+
=α(3)
vàmatrậnkialàmatrậnkhônggiankhôngsaocho:

[][]
Ax 0

= (4)
Nhưvậy:


[][] []
(
)
[][][][][] [][][]
[]
TT
Ax x AA Ax AA b
+− −
+= α+ = α= (5)
Do[A][A]
T
làmatrậnkhôngsuybiếnm×mcóđượcbằngcáchnhânmatrận
m
×nvớimatrậnn×mnêntacóthểgiảiphươngtrìnhđốivới[ α]đểcó:
[]
[]
1
0
T
AA b

⎡⎤
α=
⎣⎦
(6)
Thay(6)vào(3)tacó:

[] [][] [ ]
[]
1

0T0T
T
AAAAb

+
⎡⎤
α= α=
⎣⎦
(7)
Điềunàythoảmãnphươngtrình[A][x]=[b].Tuynhiênnókhônglànghiệm
duy nhất vìnếu thêm bấtkì một vectơ[x] thoảmãn (4) thìnó sẽ cũng là
nghiệm.MATLABdùnglệnh
pinvđểgiảihệ(ctpinv.m)


A=[12];
b=3;
x=pinv(A)*b

3.Trườnghợpsốphươngtrìnhnhiềuhơnsốẩn(nghiệmsaisốbìnhphương
bénhất)
:Nếusốphươngtrìnhmlớnhơnsốẩnsốnthìkhôngtồntạinghiệm
thoảmãnđầyđủcácphươngtrình.Tacốgắngtìmvectơnghiệmcósaisố[e]
nhỏnhất.

[] [ ][]
[]
eAxb=−(8)
Vậythìbàitiámcủatalàcựctiểuhoáhàm:


[][]
[]
[][]
[]
[][]
[]
2T
2
J 0.5 e 0.5 A x b 0.5 A x b A x b== −= − −

⎤⎡ ⎤

⎦⎣ ⎦
 (9)
TatìmcựctiểucủaJbằngcáchchođạohàmtheoxcủa(9)bằngkhông.

[][][]
[]
[] [][] []
[]
1
T0TT
J
AAxb0 x AA Ab
x


⎡⎤
=−==
⎡⎤

⎣⎦
⎣⎦

 (10)

137
Chúýlàmatrận[A]cósốhànglớnhơnsốc ộtchonênkhôngnghịchđảo
được.Nghiệmsaisốbìnhphươngbénhấttìmđượcnhớdùnglệnh
pinvhay
phépchiatrá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ườnghợptrên

functionx=pttt(A,B)
%HamnaytimnghiemcuaptAx=B
[M,N]=size(A);
ifsize(B,1)~=M
error(ʹKichthuocAvaBtrongpttt()khongbangnhau!ʹ)

end

ifM==N
x=A^‐1*B;
elseifM<N
x=pinv(A)*B;
else
x=pinv(A)*B;
end


Đểgiảihệphươngtrìnhtadùngchươngtrình
ctpptt.m:

clearall,clc;
a=[134;257;312];
b=[8146]ʹ;
x=pttt(a,b)


§3.CÁCPHƯƠNGPHÁPKHỬ

138
1.PhươngphápkhửGauss:Chúngtabiếtrằngcácnghiệmcủahệkhôngđổi
nếutathaymộthàngbằngtổhợptuyếntínhcủacáchàngkhác.Taxétmộthệ
phươngtrìnhđạisốtuyếntínhcómatr
ận[A]khôngsuybiếnvớim=n=3.
Phươngtrìnhcó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ướchếttakhửx1rakhỏicácphươngtrình,ngoạitrừphươngtrìnhđầu 
tiên,bằngcáchnhânphươngtrìnhđầutiênvớia
i1/a11(ilàchỉsốhàng)vàtrừ
đimỗiphươngtrì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ớii=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ớii,j=2,3
Việcnàygọilàlấytrụtạia
11vàphầntửa11gọilàtrụ.
)Tiếptheotakhửx2trongphươngtrìnhthứ3của(2)bằngcáchlấyphương
trìnhthứ2nhânvới
(1) (1)
i2 22
a/a(i=3)vàtrừđiphươngtrìnhthứ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ớii,j=3 (4)
QuátrìnhnàyđượcgọilàthuậttoánkhửGausstiếnvàđượctổngquáthoá
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ựchiệnthuậttoánkhửGausstadùngđoạnmãlệnh:

139

fork=1:n‐1
fori=k+1:n
ifA(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

Saukhicóhệphươngtrìnhdạngtagiáctatìmnghiệmdễdàng.Từphương
trìnhthứ3của(3)tacó:

(2)
3
3
(2)
33
b
x
a
=
(6a)
Thayvàophươngtrìnhthứ2tacó:

(1) (1)
2233
2
(1)

22
b
ax
x
a

= (6b)
vàcuốicùngtừphươngtrìnhthứnhấttacó:

3
(0) (0)
111jj
(0)
j2
11
1
xbax
a
=
⎛⎞
=−
⎜⎟
⎝⎠

(6c)
Tacũngcóthểtổngquáthoáquátrìnhtìmnghiệmbằngcáchtính lùivàtìm
nghiệmbằ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ìmnghiệmbằngđoạnmãlệnh:

fork=n:‐1:1
b(k)=(b(k)‐A(k,k+1:n)*b(k+1:n))/A(k,k);
end

NhưvậyphươngphápGaussgồmhaibước:
‐khửtheothuậttoánGauss
‐tìmnghiệmcủaphươngtrìnhdạngtamgiác
Đoạnmãlệnhđểtráohàngđượcviếttronghàm
swaprows():


140

functionv=swaprows(v,i,j)
%Traodoihangivahangjcuamatranv.
%Cuphap:v=swaprows(v,i,j)
temp=v(i,:);
v(i,:)=v(j,:);
v(j,:)=temp;


Taxâydựnghàm
gauss()đểthựchiệnthuậttoánkhửGauss

functionx=gauss(A,B)
%KichthuoccuamatranA,BlaNAxNAvaNAxNB.
%HamnaydunggiaiheptAx=BbangphuongphapkhuGauss
NA=size(A,2);
[NB1,NB]=size(B);
ifNB1~=NA
error(ʹAvaBphai
cokichthuoctuongungʹ);
end
N=NA+NB;
AB=[A(1:NA,1:NA)B(1:NA,1:NB)];
epss=eps*ones(NA,1);
fork=1:NA
%ChontruAB(k,k)
[akx,kx]=max(abs(AB(k:NA,k))./ 
max(abs([AB(k:NA,k+1:NA)epss(1:NA‐k+1)]ʹ))ʹ);
ifakx<eps

error(ʹMatransuybienvanghiemkhongduynhatʹ);

end
mx=k+kx‐1;
ifkx>1%traohangkhican
swaprows(AB,k,mx);
end
%KhuGauss
AB(k,k+1:N)=AB(k,k+1:N)/AB(k,k);
AB(k,k)=1;
form=
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
%Timnghiem
x(NA,:)=AB(NA,NA+1:N);
form=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ảihệphươngtrìnhtadùng
ctgauss.m

clearall,clc
A=
[111;2‐1‐1;11‐1];
b=[201]ʹ;

x=gauss(A,b)

2.PhươngphápkhửGauss‐Jordan:XéthệphươngtrìnhAX=B.Khigiảihệ
bằngphươngphápGausstađưanóvềdạngmatrậntamgiácsaumộtloạt
biếnđổi.PhươngphápkhửGauss‐JordancảitiếncáchkhửGauss
bằngcách
đưahệvềdạng:
 [E][X]=[B
*
]
vàkhiđónghiệmcủa hệchính là  [B
*
].TrongphươngphápGauss‐Jordan
mỗibướctínhphảitínhnhiềuhơnphươngphápGaussnhưnglạikhôngph ải
tínhnghiệm.Đểđưamatrận[A]vềdạngma trận[E]tạibướcthứi
taphảicó
a
ii=1vàaij=0.Nhưvậytạilầnkhửthứitabiế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 rahàm
gaussjordan()

functionx=gaussjordan(A,B)
%KichthuoccuamatranA,BlaNAxvaNAxNB.

%HamnaydunggiaiheAx=BbangthuattoanloaitruGauss‐Jordan
NA=size(A,2);

142
[NB1,NB]=size(B);
ifNB1~=NA
error(ʹAvaBphaicokichthuoctuongungʹ);
end
fori=1:NA
ifA(i,i)==0%traohangneucan
swaprows(A,i,mx);
end
c=A(i,i);
forj=i:NA
A(i,j)=
A(i,j)/c;
end
B(i)=B(i)/c;
fork=1:NA
ifk~=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ùngchươngtrình

ctgaussjordan.mgiảihệ:

clearall,clc
 a=[531;2‐11;1‐1‐1];
b=[9;2;‐1];
x=gaussjordan(a,b)

§4.GIẢIHỆPHƯƠNGTRÌNHBẰNGCÁCHPHÂNTÍCHMATRẬN
1.Kháiniệmchung
:Mộtmatrậnkhôngsuybiến[A]gọilàphântíchđược
thànhtíchhaimatrận[L]và[R]nếu:
 [A]=[L][R]
Việcphântíchnày,nếutồntại,làkhông duynhất.Nếuma
trận[L]cócác
phầntửnằmtrênđườngchéochínhbằng1,tacóphépphântíchDoolittle.

143
Nếumatrận[R]cócácphầntửnằmtrênđườngchéochínhbằng1,tacóphép
phântíchCrout.Nếu[R]=[L]
T
(hay[L]=[R]
T
)tacóphépphântíchCholeski.

2.PhântíchDoolittle:Taxéthệphươngtrình[A][X]=[B].Nếutaphântích
matrận[A]thànhtíchhaimatrận[L]và[R]saocho:
 [A]=[L][R]
trongđó[L]làmatrậntamgiáctráivà[R]làmatrậntam
giácphải.Vởima
trậnbậc3[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ươngtrìnhđượcviếtlạilà:
 [L][R][X]=[B]
Tađặt[R][X]=[Y]vàhệtrởthành
 [L][Y]=[B]
Do[L]làmatrậntamgiácnêntadễdàngtìmđược[Y].Saukhicó
[Y]tatiếp
tụctìm[X].Nhưvậybàitoánđưavềviệcphântíchmatrận[A].

ĐểgiảihệphươngtrìnhbằngcáchphântíchmatrậntheothuậttoánDoolittle
tadùnghàm
doolittlesol():

functionx=doolittlesol(A,b)
%GiaiheAX=B,trongdoA=LU
%nghialaAcodang[L\U].
%Cuphap:x=doolittlesol(A,b)

n=size(A,1);
[l,r]=doolittle(A);
%timnghiemmttamgiactrai
y(1,:)=b(1)/l(1,1);
form=
2:n
y(m,:)=(b(m)‐l(m,1:m‐1)*y(1:m‐1,:))/l(m,m);
end
%timnghiemmttamgiacphai
x(n,:)=y(n)/r(n,n);
form=n‐1:‐1:1
x(m,:)=(y(m)‐r(m,m+1:n)*x(m+1:n,:))/r(m,m);
end

144
Ápdụnghàmdoolittlesol()giảihệphươngtrình:
1
2
3
436x 1
8310x 0
412 10x 0

⎡⎤⎡⎤⎡⎤
⎢⎥⎢⎥⎢⎥
−=
⎢⎥⎢⎥⎢⎥
⎢⎥⎢⎥⎢⎥
−−
⎣⎦⎣⎦⎣⎦


tadùngchươngtrình
ctdoolitle.m:

a=[4‐36;8‐310;‐412‐10];
b=[1;0;0];
x=doolittlesol(a,b)

3.PhântíchCrout:TươngtựnhưthuậttoánDoolittle,tacó thểphântíchma
trận[A]theothuậttoánCroutthànhtíchcủamatrận[L]và[R].Đểgiảihệ
phươngtrìnhbằngcáchphântíchmatrậntheothuậttoán
Crouttadùnghàm
croutsol():

functionx=croutsol(a,b)
%HamdunggiaiheptAX=BbangthuattoanCrout
%Cuphap:x=croutsol(a,b)
n=size(a,1);
[l,r]=crout(a);

y(1,:)=b(1)/l(1,1);
form=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);
form=n‐1:‐1:1
x(m,:)=(y(m)‐r(m,m+1:n)*x(m+1:n,:))/r(m,m);
end



Khigiảiphươngtrìnhtachươngtrình
ctcrout.m:


clearall,clc
a=[4820;61316;2016‐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ươngtrì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ươngtrình][L]
T
[X]=[Y].Taxâydựnghàmcholeskisol()
đểthựchiệnthuậttoánnày:

functionx=choleskisol(a,b)
%GiaiheptbangthuattoanCholeski
%Cuphap:x=choleskisol(a,b)
n=size(a,1);
l=choleski(a);
r=lʹ;
y(1,:)=b(1)/l(1,1);

form=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);
form=n‐1:‐1:1
x(m,:)=(y(m)‐r(m,m+1:n)*x(m+1:n,:))/r(m,m);
end

Đểgiảihệphươngtrình

1
1
1
422x 5
22 4x 10
2411x 27

⎡⎤⎡⎤⎡⎤
⎢⎥⎢⎥⎢⎥
−−=−
⎢⎥⎢⎥⎢⎥
⎢⎥⎢⎥⎢⎥

⎣⎦⎣⎦⎣⎦

tadùngchươngtrình
ctcholeski.m:

clearall,clc
a=

[4‐22;‐22‐4;2‐411];
b=[6;‐10;27];
x=choleskisol(a,b)


146
5.PhântíchQR:Taxéthệphươngtrình[A][X]=[B].Phântíchmatrận[A]
thànhtíchcủahaimatrận[Q]và[R]saocho:
 [A]=[Q]*[R]
Trongđó[Q]làmatrậntrựcgiao,nghĩalà[Q]
T
[Q]=[E],và[R]làmatrậntam 
giácphải.Nhưvậyphươngtrìnhtrởthành:
 [Q]*[R]*[X]=[B]
Nhânhaivêcủaphươngtrìnhvới[Q]
T
tacó:
 [Q]
T
[Q]*[R]*[X]=[Q]
T
[B]
hay:
 [R]*[X]=[Q]
T
[B]
Hệphươngtrìnhnàydễdàngtìmnghiệmvỉ[R]làmatrậntamgiác.Khigiải
hệphươngtrìnhtadùngchươngtrình
ctqrsol.m:


clearall,clc
A=[1235;4562;4689;9367];
b=[2468]ʹ;
[q,r]=qrdecomp(A);
c=transpose(q)*b;
x=r\c


§5.CÁCMATRẬNĐẶCBIỆT
1.Matrậnđườngchéobậc3
:Taxéthệphươngtrình[A][X]=[B]với[A]là
matrậnđườngchéocódạng:

[]
11
122
233
34
n1 n
de 0 0 0
cde0 0
0cde 0
A
00cd
000 c d


⋅⋅
⎡⎤
⎢⎥

⋅⋅⋅
⎢⎥
⋅⋅⋅
⎢⎥
=
⎢⎥
⎢⎥
⎢⎥
⎢⎥
⎣⎦
M
MMMMOM
L

Talưucácphầntửkhác0của[A]dướidạngvectơ:

[]
[]
[]
1
11
2
22
n1
n1 n1
n
d
ce
d
ce

cd e
d
ce
d

−−
⎡⎤
⎡⎤ ⎡⎤
⎢⎥
⎢⎥ ⎢⎥
⎢⎥
⎢⎥ ⎢⎥
⎢⎥
== =
⎢⎥ ⎢⎥
⎢⎥
⎢⎥ ⎢⎥
⎢⎥
⎣⎦ ⎣⎦
⎢⎥
⎣⎦
M
MM


147
đểgiảmbớtsốlượngphầntửcầnlưutrữ.
BâygiờtaphântíchmatrậntheothuậttoánDoolittle:
 hàngk‐(c
k‐1/dk‐1)×hàngk‐1→hàngkk=1,2,…,n

và: d
k‐(ck‐1/dk‐1)×ek‐1→dk
Đểhoàntấtthuậtviệcphântích,talưuhệsốλ=ck‐1/dk‐1vàovịtrícủack‐1
trướcđó
 ck‐1/dk‐1→ck‐1
Nhưvậythuậttoánphântíchmatrậnlà:


fork=2:n
lambda=c(k‐1)/d(k‐1);
d(k)=d(k)‐lambda*e(k‐1)
c(k‐1)=lambda;
end

Sauđótatìmnghiệmcủaphươngtrình[L][R][X]=[B]bằngcáchgiảiphương
trình[L][Y]=[B]vàsauđólàphươngtrình[R][X]=[Y].Phươngtrì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ìmnghiệm[Y]bằngcáchthaythếtiếntadùngđoạnlệnh:

y(1)=b(1);
fork=2:n
 y(k)=b(k)‐c(k‐1)*y(k‐1);
end

Phươngtrì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ìmnghiệm[X]bằngcáchthaythếlùitadùngđoạnlệnh:

x(n)=y(n);
fork=n‐1:‐1:1
 x(k)=(y(k)‐e(k)*x(k+1))/d(k);
end


Taxâydựnghàm
band3()đểphântíchmatrậndạngđườngchéo:


function[c,d,e]=band3(c,d,e)
%PhantichmatranA=[c\d \e].
%Cuphap:[c,d,e]=band3(c,d,e)
n=length(d);
fork=2:n
lambda=c(k‐1)/d(k‐1);
d(k)=d(k)‐lambda*e(k‐1);
c(k‐1)=lambda;
end

Taviếthàm band3sol() dùngđểgiảihệ phươngtrìnhcó ma trận [A] dạng
đườngchéo:

functionx=band3sol(c,d,e,b)
%GiaiheA*x=bvoiA=[c\d\e]latichLU
%Cuphap:x=band3sol(c,d,e,b)
[c,d,e]=band3(c,d,e);
n=length(d);
fork=2:n%thaythetien
b(k)=b(k)‐c(k‐
1)*b(k‐1);

149
end
b(n)=b(n)/d(n);%thaythelui
fork=n‐1:‐1:1
b(k)=(b(k)‐e(k)*b(k+1))/d(k);
end
x=b;


Tadùngchươngtrình
ctband3eq.mđểgiảihệphươngtrình:

clearall,clc
c=
[‐1;‐2;3;3];
d=[67875]ʹ;
e=[222‐2]ʹ;
b=[2;‐3;4;‐3;1];
x=band3sol(c,d,e,b);

2.Matrậnđườngchéođốixứngbậc5:Khigiảiphươngtrìnhviphânthường
bậc4tathườnggặpmộthệphươngtrìnhđạisốtuyếntínhdạngbăngđối
xứngcóbềrộngbằng5.Matrậ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àtalưumatrận[A]dướidạngvectơ:



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


Tathựchiệnthuậttoánbiếnđổimatrận:
 hàng(k+1)‐(e
k/dk)×hàngk→hàng(k+1)
hàng(k+2)‐(fk/dk)×hàngk→hàng(k+2)
Cácsốhạngbịthayđổitheothuậttoánnàylà:
 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ưutrữlại:
 e
k/dk→ekfk/dk→fk
saukhiđãbiếnđổimatrận,tagiảihệphươngtrìnhcómatrậntamgiác.
 Hàm
band5()dùngđểphântíchmatrận:

function[d,e,f]=band5(d,e,f)
%A=[f\e\d\e\f].
%Cuphap:[d,e,f]=band5(d,e,f)
n=length(d);
fork=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
Taviếthàmband5sol()đểgiảihệphươngtrình:

functionx=band5sol(d,e,f,b)
%GiaiheA*x=bvoiA=[f\e\d\e\f]
%Cuphap:x=band5sol(d,e,f,b)
[e,d,f]=band5(e,d,f);
n=length(d);
b(2)=b(2)‐e(1)*b(1);
fork=3:n
b(k)=b(k)‐e(k‐1)*b(k‐1)‐f(k‐
2)*b(k‐2);
end
Đểgiảihệphươngtrì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
⎡⎤⎡⎤⎡⎤
⎢⎥⎢⎥⎢⎥
⎢⎥⎢⎥⎢⎥
⎢⎥⎢⎥⎢⎥
=
⎢⎥⎢⎥⎢⎥
⎢⎥⎢⎥⎢⎥
⎢⎥⎢⎥⎢⎥

⎢⎥⎢⎥⎢⎥

⎣⎦⎣⎦⎣⎦

tadùngchươngtrình
cban5eq.m

clearall,clc
d=[123121]ʹ;
e=[1322‐1]ʹ;
f=[2121]ʹ;
b=[4712751];
x=band5sol(d,e,f,b)



§6.CÁCPHƯƠNGPHÁPLẶPĐỂGIẢIHỆPHƯƠNGTRÌNH
ĐẠISỐTUYẾNTÍNH
 Nóichungcóhaiphươngphápgiảihệphươngtrìnhđạisốtuyếntính:
phươngpháptrựctiếpvàphươngpháplặp.Cácbàitoánkĩthuậtthườ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ươngpháplặprấtthíchhợp.
 Cácphươngpháplặpđượcchiathànhhailoại:phươngpháplặptĩnh
vàphươngpháplặpđộng.

152
 Taxéthệphươngtrìnhđạisốtuyếntính[A][X]=[B].Tađưavềdạng
lặp:
 [X]=[C][X]+[D]
Saumỗilầntínhtacósốdư:
 [R]=[B]‐[A][X]
Khilặptừphươngtrìnhnày,
cácmatrận[C]và[D]khôngđổi.Vìvậy
nêncácphươngphápxuấtpháttừđâygọilàcácphươngpháplặptĩnh.Các
phươngphápnàydễhiểu,dễlậptrìnhnhưngkhônghiệuqu
ả.
Cácphươngphápnàygồmcó:
•PhươngpháplặpJacobi:Ph ương phápnàytínhgiátrịcủamộtbiến
dựatrêngiátrịcủacácbiếnkhác.Nóhộitụchậmvà rấtcó
thểkhông
hộitụtrongmộtsốtrườnghợp.
•PhươngpháplặpGauss‐Seidel:Nótươngtựnhưphươngpháplặp
Jacobinhưngkhitínhgiátrịcủabiếnthứktadùngcácgiátrịcácbi
ến
vừađượccậpnhật.Phươngphápnàyhộitụnhanhhơnphươngpháp

lặp Jacobi nhưng không nhanh bằngcác phương pháp lặp khôngổn
định.
•PhươngpháplặpcótăngSOR:Ph
ươngphápnàyđưaratừphương
phápGauss‐Seidelbằngcáchđưathêmhệsốngoạisuyω.Vớiωđược
chọntốiưu,phươngphápnàyhộitụnhanhhơnphươngphápGaus‐
Seidel.Khiω=1
phươngphápSORtrởthànhphươngphápGauss‐
Seidel.TốcđộhộitụcủaphươngphápSORphụthuộcvàoω
•PhươngpháplặpcótăngđốixứngSSOR:Phươngphápnàykhôngcó
ưuđiểmnào
trộihơnSOR.
Cácphươngpháplặpkhôngổnđịnhmớiđượcxâydựng,khóhiểu,nhưng
hiệuquảcao.Trongquátrìnhlặp,việctínhtoánbaohàmcácthôngtinthay
đổisaumỗibướ
ctính.
Cácphươngphápnàybaogồm:
• Phương pháp gradient liên hợp CG(Conjugate  Gradient): Phương
phápnàytạoramộtdãycácvectơliênhợp(haytrựcgiao)làsốdưcủa
phéplặp.Chúngcũng
làgradientcủamộthàmbậc2màviệctìmcự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ươngphápnàyphụthuộc
sốđiềukiệncủamatrận(sốđiềukiệncủa
matrậnđođộnhạycủanghiệmcủah ệphươngtrìnhđạisốtuyếntính

153

vớisaisốtrongsốliệu.Nóchobiếtđộchínhxáccủakếtquảtừphép
nghịchđảomatrậnvànghiệmcủahệphươngtrìnhđạisốtuyếntính).
•Phươngphápsốdưcựctiểu
MINRES(MinimumResidual)vàphương
phápLQđốixứngSYMMLQ(SymmetricLQ)
•PhươngphápgradientliênhợpdùngchohệthườngCGNE(Conjugate
Gradient on Normal Equations) và CGNR(Conjugate Gradient on
NormalEquationsminimizingtheResidual):Cácphươngphápnàydựa
trênviệcáp
dụngphươngphápCGvàomộttronghaidạnghệphương
trìnhđạisốtuyếntính.
‐CNGRdùnggiảihệdạng[A]
T
[A][X]=[B’]với[B’]=[A]
T
[B]
‐CGNEdùnggiảihệdạng[A][A]
T
[Y]=[B]đốivới[Y]vàsauđó
giảihệ[X]=[A]
T
[Y]
Khimatrận[A]khôngđốixứng,khôngsuybiếnthì[A][A]
T
và[A]
T
[A]
đốixứng,xácđịnhdươngnêncóthểdùngphươngphápCG.
•PhươngphápsốdưcựctiểutổngquátGMRES(GeneralizedMinimal
Residual):PhươngphápGMREStínhtoándãycácvectơtrựcgiaovà

kếthợp
cácnàybằngbàitoánbìnhphươngbénhấtđểgiảivàcậpnhật.
Tuynhiênnóđòihỏilưutoànbộdãy.Dovậyphươngánkhởiđộnglại
được dùngtrongphương pháp này.Phương
phápnày tiệndùng khi
matrậnhệsốkhôngđốixứng.
• Phương pháp gradient liên hợp kép BiCG(Biconjugate Gradient):
PhươngphápnàytạotahaidãyvectơgiốngnhưCG,mộtdựatrênhệ
vớimatr
ận[A]vàmộtd ựatrên[A]
T
.Thayvìtrựcgiaohoámỗidãy,
chúngtrựcgiaotươnghỗhai“trựcgiaokép”.Nórấthữuítkhimatrận
cómatrậnhệsốkhôngđốixứng,khôngsuybiến.
• Phương pháp g
ần như số dư cực tiểu QMR(Quasi‐Minimal
Residual):PhươngphápQMRdùngbìnhphươngtốithiểuđểgiảivà
cậpnhậtsốdưBiCG.Phươngphápnàydùngchohệphươngtrìnhcó
matrậnhệsốkhôngđố
ixứng.
• Phương pháp gradient liên hợp bậc 2 CGS(Conjugate Gradient
Squared):PhươngphápCGSlàmộtbiếnthểcủaBiCG,dùngcậpnhất
dãy[A]và[A]
T
.Phươngphápnàycóưuđiểmlàkhôngcầnnhânvới
matrậnhệsốchuyểnvịvàđượcdùngchohệphươngtrìnhđạisốtuyến
tínhcómatrậnhệsốkhôngđốixứng.
•Phương
phápgradientliênhợpképổnđịnhBiCGSTAB(Biconjugate
GradientStabilized):PhươngphápBiCGSTABcũnglàmộtbiếnthểcủa


154
BiCG.Nóđượcdùngchohệphươngtrìnhcómatrậnhệsốkhôngđối
xứng.
•PhươngphápChebyshev:Phươngphápnàytínhlặpcácđathứcvới
cáchệsốđượcchọnđểc ựctiểuhoáchuẩn
củasốdưtheonghĩamin‐
max.Matrậnhệsốphảixácđịnhdương.Nóđượcdùngchohệphương
trìnhcómatrậnhệsốkhôngđốixứng.
Tabiếtrằngtốcđộhộitụcủaphép
lặpphụthuộcrấtnhiềuvàophổcủama
trận(cácgiátrịriêngcủamatrận).Dovậyphéplặpthườngđưathêmmộtma
trậnthứhaiđểbiếnđổi matrậnhệsốthành
matrậncóphổthíchhợ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
preconditionertốtsẽcảithiệnsựhộitụcủaphươngpháplặp.Nhi
ềutrường
hợp,nếukhôngcópreconditioner,phéplặpsẽkhônghộitụ.Preconditioner
đơngiảnnhấtchínhlàmatrậnđườngchéomàM
i,j=Ai,jnếui=jvàcácphần
tửkhácbằngzero.MatrậnnhưvậygọilàmatrậnđiềukiệntrướcJacobi.
 Trongtínhtoán,tồntạihailoạimatrậnđiềukiện
trước:
‐matrận[M]xấpxỉmatrận[A]vàlàmchoviệcgiảihệ[M][X]=[B]dễ
hơngiảihệ[A][X]=[B]
‐matrận[M]xấpxỉ[A]
‐1
saochochỉcầntính[M][B]làcó[X]
Phầnlớncácmatrận[M]thuộcloạithứnhất.


§7.PHƯƠNGPHÁPLẶPJACOBI
XéthệphươngtrìnhAX=F.Bằngcáchnàođótađưah ệphươngtrình
vềdạng
 X=BX+G
trongđó:
 B=(b
ij)n,n
 G=(g
1,g2, ,gn)
T

Chọnvectơ:
 X=(x
1
(o)
,x2
(o)
, ,xn
(o)
)
T

làmxấpxỉthứ0củanghiệmđúngvàxâydựngxấpxỉ
 X
(m+1)
=BX
(m)
+G(m=0,1, )
Ngườitachứngminhrằngnếuphươngtrìnhbanđầucónghiệmduy
nhấtvàmộttrongbachuẩncủamatrậnBnhỏhơn1thìdãyxấpxỉhộ

itụvề
nghiệmduynhấtđó.ChomộtmatrậnB,chuẩncủamatrậnB,kíhiệu
B là
mộttrong3số:

155


=
=
n
1j
ij
i
1
bmaxB 


=
=
n
1j
ij
j
2
bmaxB 

2/1
n
1i

n
1j
2
ij
3
bB








=
∑∑
==

(Chuẩncủamatrậnquanhệtớisựhộitụcủaphươngpháplặp)
Taxâydựnghàm
jacobi()đểthựchiệnthuậttoántrên:

functionx=jacobi(a,b,x0,kmax)
%TimnghiemcuaptAx=BbangthuattoanJacobi.
%Cuphap:x=jacobi(a,b,x0,kmax)
%hayjacobi(a,b,x0,kmax)
ifnargin<4
tol=1e‐6;
kmax=100;%jacobi(a,b,x0)
elseifkmax<

1
tol=max(kmax,1e‐16);
kmax=100;%jacobi(a,b,x0,tol)
else
tol=1e‐6;%jacobi(a,b,x0,kmax)
end
ifnargin<3
x0=zeros(size(b));end
na=size(a,1);
x=x0;
At=zeros(na,na);
form=1:na
forn=1:na
ifn~=m
At(m,n)=‐a(m,n)/a(m,m);
end
end
Bt(m,:)=b(m,:)/a(m,m);
end

156
fork=1:kmax
x=At*x+Bt;
ifnargout==0,
x
end
ifnorm(x‐x0)/(norm(x0)+eps)<tol
break;
end
x0=x;

end

Đểgiảiphươngtrìnhtachươngtrình
ctjacobi.m:

 b=[1‐1]ʹ;
a=[
32;12];
x0=[00]ʹ;
x=jacobi(a,b,x0,20)

§8.PHƯƠNGPHÁPLẶPGAUSS‐SEIDEL
PhươngpháplặpGauss‐SeidelđượccảitiếntừphươngphápJacobi.
Nộidungcơbảncủaphươngpháplàởchỗkhitínhnghiệmxấpxỉthứ(k+1)
củaẩnx
itasửdụngcácxấpxỉthứ(k+1)đãtínhcủacácẩnx1, ,xi‐1.Giảsửđã
chohệ[A][X]=[B]thìtacónghiệm:
n, ,1ixx
j
n
1j
ijii
=α+β=

=

Lấyxấpxỉbanđầutuỳýx
1
(o)
,x2

(o)
, ,xn
(o)
vàtấtnhiêntacốgắnglấychúng
tươngứngvớix
1,x2, ,xn(cànggầncàngtốt).Tiếptheotagiảsửrằngđãbiết
xấp xỉ thứ kx
i
(k)
 của nghiệm. Theo Seidel ta sẽ tìm xấp xỉ thứ (k+1) của
nghiệmtheocáccôngthứcsau:

)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ôngthườngphươngphápGauss‐Seidelhộitụnhanhhơnphươ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úngtaxétmộtvídụcụthể:
 Chohệphươ
ngtrình:







=++
=++
=++
14x10x2x2
13xx10x2
12xxx10
321
321
321

nghiệmđúngcủahệlà(1,1,1)
Tađưavềdạngthuậntiệnchophéplặp:






−−=
−−=
−−=
213
312
321
x2.0x2.04.1x
x1.0x2.03.1x
x1.0x1.02.1x

Lấyx

1
(o)
=1.2;x2
(o)
=0;x3
(o)
=0
SửdụngphươngpháplặpGauss‐Seideltacó:

(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ếptụcchođếnkhihộitụ.Taxâydựnghàm
gausseidel()đểthực
hiệnthuậttoántrên:

functionx=gausseidel(a,b,x0,kmax)
%TimnghiemcuaheAX=BbangcachlapGauss–Seidel.
ifnargin<4
kmax=100;
end
ifnargin<3

158
x0=zeros(size(b));

kmax=100;
end
na=size(a,1);
x=x0;
fork=1:kmax
x(1,:)=(b(1,:)‐a(1,2:na)*x(2:na,:))/a(1,1);
form=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);
iferr<eps
break;
end
x0=x;
end
ifk==kmax
fprintf(ʹKhonghoitusau%dlanlapʹ,kmax);
else
fprintf(ʹHoi
tusau%dlanlapʹ,k);
end

Đểgiảiphươngtrìnhtachươngtrình
ctgausseidel.m:

 b=[1‐1]ʹ;
a=[
32;12];

x0=[00]ʹ;
x=gausseidel(a,b,x0,20)

§9.PHƯƠNGPHÁPLẶPRICHARDSON
 Trongcácphéplặpnóitrên,matrận[B]khôngthayđổi.Bâygiờtaxét
cácphươngpháplặpcó[B]thayđổi.Phươngphápđơngiảnnhấtlàphương
pháplặpRichardson.Tacócôngthứclặp
sau:

(k 1) (k) 1 (k)
xxPr
+−
=+α 

159
Trongđóαlàthôngsốrelaxationvàsốdưr
(k)
đượctínhbằng:

(k) (k)
rbAx=− 
Matrậnlặplầnklà:

1
kk
BE PA

=−α

Như vậy phéplặp Jacobicũng như phéplặp Gauss‐Seidel làtrường hợp

riêngcủaphéplặpRichardsonvớiα=1,P =DhayP=D+L.Ngườitađã
chứngminhlàphép
lặpRichardsonhộitụkhi:

i
2
i
2Re( )
0
λ
<α<
λ

Taxâydựnghàm
richardsoniter()thựchiệnthuậttoántrên:

functionx=richardsoniter(a,b,x,maxiter,tol)
d=eig(a);
k=length(d);
alfa1=abs(2*real(d(1))/(abs(d(1))^2));
forj=2:k
alfa=abs(2*real(d(j))/(abs(d(j))^2));
ifalfa<alfa1
alfa1=alfa;
end
end
omega=alfa1/2;
fori=1:maxiter
r=b‐a*x;
x=x

+omega*r;
ifnorm(r)<tol
break;
end
end
i

Đểgiảihệphươngtrìnhtadùngchươngtrình
ctrichardsoniter.m

clearall,clc
a=[1011;1102;2210];
b=[121314]ʹ;

×