You are on page 1of 75

CHNG 3: H PHNG TRNH I S TUYN TNH

1.KHINIMCHUNG

Trong chng ny chng ta s xt cc phng php s gii cc


phngtrnhistuyntnhdng:
a11x1 + a12 x 2 + + a1n x n = b1
a x + a x + + a x = b
21 1
22 2
2n n
2

a n1x1 + a n2 x 2 + + a nn x n = b n
Ccphngtrnhnycthvitgndidng:

[A][x]=[b]

Trong:
b1
x1
a11 a12 a1n
b
x
a
a 22 a 2n
21
2

[ A] =
[ x] = 2
[ b] =

xn
a n1 a n2 a nn
bn

Tasxt3trnghp:
)sphngtrnhbngsnsnnmatrn[A]lmatrnvung

)sphngtrnhnhhnsns
)sphngtrnhlnhnsns

2.NGHIMCAHPHNGTRNHISTUYNTNH
1.Trnghpkhngsuybin:Khisphngtrnhmbngsnsn,ma
trn[A]vungvtac:

(1)
[ x ] = [ A ]1 [ b]
numatrnAkhngsuybin,nghalnhthccamatrnkhckhng.
CclnhMATLABgiihl(ctsys.m):

clc
A=[12;34];
b=[1;1];
x=A^1*b
%x=inv(A)*b

2.Trnghpsphngtrnhthnsn(nghimcctiuchun):Nus
135

phngtrnhmthnsnsnthnghimkhngduynht.Gismhng
camatrnhs[A]lclpthvectnchiucthphntchthnhhai
thnhphn:

(2)

[ x] = [ x]+ + [ x]
Trongmtmatrnlmatrnkhnggianhngcamatrn[A]vc
vitdidngthpca:

(3)
[ x]+ = [ A]T [ ]
vmatrnkialmatrnkhnggiankhngsaocho:

(4)
[ A ][ x] = 0
Nhvy:

[ A ]([ x ]+ + [ x] ) = [ A ][ A ]T [ ] + [ A ][ x] = [ A ][ A ]T [ ] = [ b]

(5)

Do[A][A]Tlmatrnkhngsuybinmmccbngcchnhnmatrn
mnvimatrnnmnntacthgiiphngtrnhivi[]c:
1

[ ]0 = AAT [ b]

(6)

[ ]0+ = [ A ]T [ ]0 = [ A ]T AAT [ b]

(7)

Thay(6)vo(3)tac:

iunythomnphngtrnh[A][x]=[b].Tuynhinnkhnglnghim
duy nht v nu thm bt k mt vec t [x] tho mn (4) th n s cng l
nghim.MATLABdnglnhpinvgiih(ctpinv.m)

A=[12];
b=3;
x=pinv(A)*b

3.Trnghpsphngtrnhnhiuhnsn(nghimsaisbnhphng
bnht):Nusphngtrnhmlnhnsnsnthkhngtntinghim
thomnyccphngtrnh.Tacgngtmvectnghimcsais[e]
nhnht.

(8)

[ e ] = [ A][ x] [ b]
Vythbitimcatalcctiuhohm:

J = 0.5 e = 0.5 [ A ][ x ] [ b ] = 0.5 [ A ][ x ] [ b] [ A ][ x ] [ b ] (9)


TatmcctiucaJbngcchchoohmtheoxca(9)bngkhng.
1

T
J = [ A ] [ A ][ x ] [ b ] = 0
(10)

[ x ]0 = [ A ]T [ A ] [ A ]T [ b]
x

136

Ch l ma trn [A] c s hng ln hn s ct cho nn khng nghch o


c.Nghimsaisbnhphngbnhttmcnhdnglnh pinvhay
phpchiatri(ctover.m):

A=[1;2];
b=[2.1;3.9];
x=pinv(A)*b
x=A\b
x=(A*A)^1*A*b

tin dng ta vit hm pttt() gii h phng trnh trong c 3


trnghptrn

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

giihphngtrnhtadngchngtrnhctpptt.m:

clearall,clc;
a=[134;257;312];
b=[8146];
x=pttt(a,b)

3.CCPHNGPHPKH
137

1.PhngphpkhGauss:Chngtabitrngccnghimcahkhngi
nutathaymthngbngthptuyntnhcacchngkhc.Taxtmth
phngtrnhistuyntnhcmatrn[A]khngsuybinvim=n=3.
Phngtrnhcdng:
a11x1 + a12 x 2 + a13 x 3 = b1

(1)
a 21x1 + a 22 x 2 + a 23 x 3 = b 2
a x + a x + a x = b
32 2
33 3
3
31 1
)Trchttakhx1rakhiccphngtrnh,ngoitrphngtrnhu
tin,bngcchnhnphngtrnhutinviai1/a11(ilchshng)vtr
imiphngtrnh:
(0)
(0)
(0)
a(0)
11 x1 + a 12 x 2 + a 13 x 3 = b1

(1)
(1)
a(1)

(2)

22 x 2 + a 23 x 3 = b 2

(1)
(1)
a(1)
32 x 2 + a 33 x 3 = b 3

Trong:
a(0)

b(0)
= bi

vii=1,j=1,2,3

i
ij = a ij

a(0)
a(0)
(0)
(1)
(0)
i1
i1
a = a (0) a1j

bi = bi (0)
b(0)
vii,j=2,3
1
a11
a11
Vicnygillytrtia11vphnta11giltr.
)Tiptheotakhx2trongphngtrnhth3ca(2)bngcchlyphng
(1)
trnhth2nhnvi a(1)
i2 / a 22 (i=3)vtriphngtrnhth3:
(1)
ij

(0)
ij

(0)
(0)
(0)
a(0)
11 x1 + a 12 x 2 + a 13 x 3 = b1

(1)
(1)

a(1)

22 x 2 + a 23 x 3 = b 2

(2)
a(2)
33 x 3 = b 3

(3)

Trong:

a(1)
a(1)
(1)
(2)
(1)
i2
i2
bi = bi (1)
b(1)
a = a (1) a 2 j

vii,j=3 (4)

2
a 22
a 22
QutrnhnycgilthuttonkhGausstinvctngqutho
thnh:
1)
a(k
(k)
(k 1)
1)
ik
a ij = a ij (k1) a(k
i, j = k + 1,k + 2,...,m
kj
a kk

(5)
(k 1)
a
1)
1)
ik
b(k)
b(k
i = k + 1,k + 2,...,m
= b(k
(k
i
i
k
1)
a kk
(2)
ij

(1)
ij

thchinthuttonkhGausstadngonmlnh:
138

fork=1:n1
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

Saukhichphngtrnhdngtagictatmnghimddng.Tphng
trnhth3ca(3)tac:
b(2)
3
x 3 = (2)

(6a)
a 33
Thayvophngtrnhth2tac:
(1)
b(1)
2 a 23 x 3
x2 =

(6b)

a(1)
22
vcuicngtphngtrnhthnhttac:
3

1
x1 = (0) b(0)
a(0)

(6c)

1
1j x j
a11
j= 2

Tacngcthtngquthoqutrnhtmnghimbngcchtnhlivtm
nghimbng:
1 (i1) m (i1)

xi = (i1) bi a ij x j
i = m,m 1,...,1

(7)
a ii
j= i +1

vtmnghimbngonmlnh:

fork=n:1:1
b(k)=(b(k)A(k,k+1:n)*b(k+1:n))/A(k,k);
end

NhvyphngphpGaussgmhaibc:

khtheothuttonGauss

tmnghimcaphngtrnhdngtamgic
onmlnhtrohngcvittronghmswaprows():

139

functionv=swaprows(v,i,j)
%Traodoihangivahangjcuamatranv.
%Cuphap:v=swaprows(v,i,j)
temp=v(i,:);
v(i,:)=v(j,:);
v(j,:)=temp;

Taxydnghmgauss()thchinthuttonkhGauss

functionx=gauss(A,B)
%KichthuoccuamatranA,BlaNAxNAvaNAxNB.
%HamnaydunggiaiheptAx=BbangphuongphapkhuGauss
NA=size(A,2);
[NB1,NB]=size(B);
ifNB1~=NA
error(AvaBphaicokichthuoctuongung);
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:NAk+1)])));
ifakx<eps
error(Matransuybienvanghiemkhongduynhat);
end
mx=k+kx1;
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)
140

AB(m,k)=0;
end
end
%Timnghiem
x(NA,:)=AB(NA,NA+1:N);
form=NA1:1:1
x(m,:)=AB(m,NA+1:N)AB(m,m+1:NA)*x(m+1:NA,:);%(2.2.7)
end

giihphngtrnhtadngctgauss.m

clearall,clc
A=[111;211;111];
b=[201];
x=gauss(A,b)

2.PhngphpkhGaussJordan:XthphngtrnhAX=B.Khigiih
bng phng php Gauss ta a n v dngma trn tam gic sau mt lot
bini.PhngphpkhGaussJordancitincchkhGaussbngcch
ahvdng:

[E][X]=[B*]
v khi nghim ca h chnh l [B*]. Trong phng php Gauss Jordan
mibctnhphitnhnhiuhnphngphpGaussnhnglikhngphi
tnhnghim.amatrn[A]vdngmatrn[E]tibcthitaphic
aii=1vaij=0.Nhvytilnkhthitabini:

1.aij=aij/aii(j=i+1,i+2,...,n)

2.k=1,2,...,n

akj=akjaijaki(j=i+1,i+2,...,n)

bk=bkbiaki
gii h phng trnh bng phng php Gauss Jordan ta to ra hm
gaussjordan()

functionx=gaussjordan(A,B)
%KichthuoccuamatranA,BlaNAxvaNAxNB.
%HamnaydunggiaiheAx=BbangthuattoanloaitruGaussJordan
NA=size(A,2);
141

[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;

vdngchngtrnhctgaussjordan.mgiih:

clearall,clc

a=[531;211;111];
b=[9;2;1];
x=gaussjordan(a,b)

4.GIIHPHNGTRNHBNGCCHPHNTCHMATRN
1.Khinimchung: Mtmatrnkhngsuybin[A]gilphntchc
thnhtchhaimatrn[L]v[R]nu:

[A]=[L][R]
Vic phn tch ny, nu tn ti, l khng duy nht. Nu ma trn [L] c cc
phn t nm trn ng cho chnh bng 1, ta c php phn tch Doolittle.
142

Numatrn[R]cccphntnmtrnngchochnhbng1,tacphp
phntchCrout.Nu[R]=[L]T(hay[L]=[R]T)tacphpphntchCholeski.
2.PhntchDoolittle:Taxthphngtrnh[A][X]=[B].Nutaphntch
matrn[A]thnhtchhaimatrn[L]v[R]saocho:

[A]=[L][R]
trong[L]lmatrntamgictriv[R]lmatrntamgicphi.Vima
trnbc3[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
Khihphngtrnhcvitlil:

[L][R][X]=[B]
Tat[R][X]=[Y]vhtrthnh

[L][Y]=[B]
Do[L]lmatrntamgicnntaddngtmc[Y].Saukhic[Y]tatip
tctm[X].Nhvybitonavvicphntchmatrn[A].
giihphngtrnhbngcchphntchmatrntheothuttonDoolittle
tadnghmdoolittlesol():

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:m1)*y(1:m1,:))/l(m,m);
end
%timnghiemmttamgiacphai
x(n,:)=y(n)/r(n,n);
form=n1:1:1
x(m,:)=(y(m)r(m,m+1:n)*x(m+1:n,:))/r(m,m);
end
143

pdnghmdoolittlesol()giihphngtrnh:
4 3 6 x 1 1
8 3 10 x = 0

2
4 12 10 x 3 0
tadngchngtrnhctdoolitle.m:

a=[436;8310;41210];
b=[1;0;0];
x=doolittlesol(a,b)

3.PhntchCrout:TngtnhthuttonDoolittle,tacthphntchma
trn [A] theo thut ton Crout thnh tch ca ma trn [L] v [R]. gii h
phngtrnhbngcchphntchmatrntheothuttonCrouttadnghm
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:m1)*y(1:m1,:))/l(m,m);
end
x(n,:)=y(n)/r(n,n);
form=n1:1:1
x(m,:)=(y(m)r(m,m+1:n)*x(m+1:n,:))/r(m,m);
end

Khigiiphngtrnhtachngtrnhctcrout.m:

clearall,clc
a=[4820;61316;201691];
b=[24;18;110];
144

x=croutsol(a,b)

4. Phn tch Choleski: Sau khi phn tch ma trn [A] theo thut ton
Choleski,hphngtrnh[A][X]=[B]trthnh:

[L][L]T[X]=[B]
Trc ht ta tm nghim ca h phng trnh [L][Y] = [B] v sau tm
nghim[X]thphngtrnh][L]T[X]=[Y].Taxydnghm choleskisol()
thchinthuttonny:

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:m1)*y(1:m1,:))/l(m,m);
end
x(n,:)=y(n)/r(n,n);
form=n1:1:1
x(m,:)=(y(m)r(m,m+1:n)*x(m+1:n,:))/r(m,m);
end

giihphngtrnh
4 2 2 x1 5
2 2 4 x = 10

2 4 11 x1 27

tadngchngtrnhctcholeski.m:

clearall,clc
a=[422;224;2411];
b=[6;10;27];
x=choleskisol(a,b)

145

5.PhntchQR:Taxthphngtrnh[A][X]=[B].Phntchmatrn[A]
thnhtchcahaimatrn[Q]v[R]saocho:

[A]=[Q]*[R]
Trong[Q]lmatrntrcgiao,nghal[Q]T[Q]=[E],v[R]lmatrntam
gicphi.Nhvyphngtrnhtrthnh:

[Q]*[R]*[X]=[B]
Nhnhaivcaphngtrnhvi[Q]Ttac:

[Q]T[Q]*[R]*[X]=[Q]T[B]
hay:

[R]*[X]=[Q]T[B]
Hphngtrnhnyddngtmnghimv[R]lmatrntamgic.Khigii
hphngtrnhtadngchngtrnhctqrsol.m:

clearall,clc
A=[1235;4562;4689;9367];
b=[2468];
[q,r]=qrdecomp(A);
c=transpose(q)*b;
x=r\c

5.CCMATRNCBIT
1.Matrnngchobc3:Taxthphngtrnh[A][X]=[B]vi[A]l
matrnngchocdng:
0
d1 e1 0 0
c d e 0
0
2
2
1

0
0 c 2 d 3 e 3

[A] =

M
0
0
c
d
3
4

M
M
M
M
O M

0 0 0 L c n 1 d n
Taluccphntkhc0ca[A]didngvect:
d1
c1
e1
d
2
c
e

[c] =
[e] = 2
[d ] = M
M
M

n 1
e n 1
c n 1

d n
146

gimbtslngphntcnlutr.
BygitaphntchmatrntheothuttonDoolittle:

hngk(ck1/dk1)hngk1hngkk=1,2,,n
v: dk(ck1/dk1)ek1dk
hon tt thut vic phn tch, ta lu h s = ck1/dk1 vo v tr ca ck1
trc

ck1/dk1ck1
Nhvythuttonphntchmatrnl:

fork=2:n

lambda=c(k1)/d(k1);
d(k)=d(k)lambda*e(k1)
c(k1)=lambda;
end

Sautatmnghimcaphngtrnh[L][R][X]=[B]bngcchgiiphng
trnh[L][Y]=[B]vsaulphngtrnh[R][X]=[Y].Phngtrnh[L][Y]=
[B]cdng:
1 0 0 0 L 0 y 1 b1
c
1 0 0 L 0 y 2 b2
1

0 c 2 1 0 L 0 y 3 b3

=
0
0
c
0
0
L
3

y 4 b4
M M M M L M L L


0 0 0 0 c n 1 1 y n bn
tmnghim[Y]bngcchthaythtintadngonlnh:

y(1)=b(1);
fork=2:n

y(k)=b(k)c(k1)*y(k1);
end

Phngtrnh[R][X]=[Y]cdng:

147

d1 e 1
0 d
2

0 0

0 0
M
M

0 0

L 0 x1 y 1
L 0 x2 y2

L 0 x3 y3

=
L 0 x4 y4
L M L L

0 dn xn y n
tmnghim[X]bngcchthaythlitadngonlnh:

x(n)=y(n);
fork=n1:1:1

x(k)=(y(k)e(k)*x(k+1))/d(k);
end

Taxydnghmband3()phntchmatrndngngcho:

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(k1)/d(k1);
d(k)=d(k)lambda*e(k1);
c(k1)=lambda;
end

Ta vit hm band3sol() dng gii h phng trnh c ma trn [A] dng


ngcho:

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(k1)*b(k1);
0
e2
d3
0
M
0

0
0
e3
d4
M
0

148

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;

Tadngchngtrnhctband3eq.mgiihphngtrnh:

clearall,clc
c=[1;2;3;3];
d=[67875];
e=[2222];
b=[2;3;4;3;1];
x=band3sol(c,d,e,b);

2.Matrnngchoixngbc5:Khigiiphngtrnhviphnthng
bc 4 ta thng gp mt h phng trnh i s tuyn tnh dng bng i
xngcbrngbng5.Matrn[A]khicdng:

L
0
0
0
0
d1 e1 f1
e d e
L
f2
0
0
0
1
2
2

L
f3
0
0
f1 e 2 d 3 e 3

L
0 f2 e 3 d 4
0

[A] =
M
M
M
M
M
M
O
M

0 L 0 fn 4 e n 3 d n 2 e n 2 fn2
0 L 0
0 fn3 e n 2 d n 1 e n 1

0
0
fn 2 e n 1 d n
0 L 0

vtalumatrn[A]didngvect:

149

d1
e1
d
f1
1
e

f
2
M
[d ] = [ e ] = M [ f ] = 2
M

d n 2
e

n
2

d n 1
fn 2
e n 1

dn

Tathchinthuttonbinimatrn:

hng(k+1)(ek/dk)hngkhng(k+1)
hng(k+2)(fk/dk)hngkhng(k+2)
Ccshngbthayitheothuttonnyl:

dk+1(ek/dk)ekdk+1
ek+1(ek/dk)fkek+1

dk+2(fk/dk)fkdk+2
vlutrli:

ek/dkekfk/dkfk
saukhibinimatrn,tagiihphngtrnhcmatrntamgic.

Hmband5()dngphntchmatrn:

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:n2
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(n1)/d(n1);
d(n)=d(n)lambda*e(n1);
e(n1)=lambda;
150

Tavithmband5sol()giihphngtrnh:

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(k1)*b(k1)f(k2)*b(k2);
end
giihphngtrnh
1 1 2 0 0 0 x1 4
1 2 3 1 0 0 x 7

2
2 3 3 2 2 0 x 3 12

=
0
1
2
1
2
1

x4 7
0 0 2 2 2 1 x 5 5


0 0 0 1 1 1 x 6 1
tadngchngtrnhcban5eq.m

clearall,clc
d=[123121];
e=[13221];
f=[2121];
b=[4712751];
x=band5sol(d,e,f,b)

6.CCPHNGPHPLPGIIHPHNGTRNH
ISTUYNTNH

Nichungchaiphngphpgiihphngtrnhistuyntnh:
phngphptrctipvphngphplp.Ccbitonkthutthnga
v h phng trnh i s tuyn tnh c ma trn [A] tha v ln nn cc
phngphplprtthchhp.

Cc phng php lp c chia thnh hai loi: phng php lp tnh


vphngphplpng.
151


Taxthphngtrnhistuyntnh[A][X]=[B].Taavdng
lp:

[X]=[C][X]+[D]
Saumilntnhtacsd:

[R]=[B][A][X]
Khilptphngtrnhny,ccmatrn[C]v[D]khngi.Vvy
nnccphngphpxutphttygilccphngphplptnh.Cc
phngphpnydhiu,dlptrnhnhngkhnghiuqu.
Ccphngphpnygmc:
Phng php lp Jacobi: Phng php ny tnh gi tr ca mt bin
datrngitrcaccbinkhc.Nhitchmvrtcthkhng
hittrongmtstrnghp.
PhngphplpGaussSeidel:Ntngtnhphngphplp
Jacobinhngkhitnhgitrcabinthktadngccgitrccbin
vaccpnht.Phngphpnyhitnhanhhnphngphp
lp Jacobi nhng khng nhanh bng cc phng php lp khng n
nh.
Phng php lp c tngSOR: Phng php ny a ra t phng
phpGaussSeidelbngcchathmhsngoisuy.Vic
chntiu,phngphpnyhitnhanhhnphngphpGaus
Seidel.Khi=1phngphpSORtrthnhphngphpGauss
Seidel.TchitcaphngphpSORphthucvo
PhngphplpctngixngSSOR:Phngphpnykhngc
uimnotrihnSOR.
Ccphngphplpkhngnnhmicxydng,khhiu,nhng
hiuqucao.Trongqutrnhlp,victnhtonbaohmccthngtinthay
isaumibctnh.
Ccphngphpnybaogm:
Phng php gradient lin hp CG(Conjugate Gradient): Phng
phpnytoramtdyccvectlinhp(haytrcgiao)lsdca
php lp. Chng cng l gradient ca mt hm bc 2 m vic tm cc
tiu tng ng vi vic gii h phng trnh i s tuyn tnh.
Phng php CG rt hiu qu khi ma trn [A] i xng, xc nh
dng v ch i hi lu tr mt s t phn t. Tc hi t ca
phngphpnyphthuc siukincamatrn(siukinca
matrnonhycanghimcahphngtrnhistuyntnh
152

vi sai s trong s liu. N cho bit chnh xc ca kt qu t php


nghchomatrnvnghimcahphngtrnhistuyntnh).
PhngphpsdcctiuMINRES(MinimumResidual)vphng
phpLQixngSYMMLQ(SymmetricLQ)
PhngphpgradientlinhpdngchohthngCGNE(Conjugate
Gradient on Normal Equations) v CGNR(Conjugate Gradient on
NormalEquationsminimizingtheResidual):Ccphngphpnyda
trnvicpdngphngphpCGvomttronghaidnghphng
trnhistuyntnh.

CNGRdnggiihdng[A]T[A][X]=[B]vi[B]=[A]T[B]

CGNEdnggiihdng[A][A]T[Y]=[B]ivi[Y]vsau
giih[X]=[A]T[Y]
Khimatrn[A]khngixng,khngsuybinth[A][A]Tv[A]T[A]
ixng,xcnhdngnncthdngphngphpCG.
PhngphpsdcctiutngqutGMRES(GeneralizedMinimal
Residual): Phng php GMRES tnh ton dy cc vec t trc giao v
kthpccnybngbitonbnhphngbnhtgiivcpnht.
Tuynhinnihilutonbdy.Dovyphngnkhingli
c dng trong phng php ny. Phng php ny tin dng khi
matrnhskhngixng.
Phng php gradient lin hp kp BiCG(Biconjugate Gradient):
PhngphpnytotahaidyvectgingnhCG,mtdatrnh
vi ma trn [A] v mt da trn [A]T. Thay v trc giao ho mi dy,
chngtrcgiaotnghhaitrcgiaokp.Nrthutkhimatrn
cmatrnhskhngixng,khngsuybin.
Phng php gn nh s d cc tiu QMR(Quasi Minimal
Residual): Phng php QMR dng bnh phng ti thiu gii v
cpnhtsdBiCG.Phngphpnydngchohphngtrnhc
matrnhskhngixng.
Phng php gradient lin hp bc 2 CGS(Conjugate Gradient
Squared):PhngphpCGSlmtbinthcaBiCG,dngcpnht
dy [A] v [A]T. Phng php ny c u im l khng cn nhn vi
matrnhschuynvvcdngchohphngtrnhistuyn
tnhcmatrnhskhngixng.
PhngphpgradientlinhpkpnnhBiCGSTAB(Biconjugate
GradientStabilized):PhngphpBiCGSTABcnglmtbinthca
153

BiCG.Ncdngchohphngtrnhcmatrnhskhngi
xng.
PhngphpChebyshev:Phngphpnytnhlpccathcvi
cchscchncctiuhochuncasdtheonghamin
max.Matrnhsphixcnhdng.Ncdngchohphng
trnhcmatrnhskhngixng.
Tabitrngtchitcaphplpphthucrtnhiuvophcama
trn(ccgitrringcamatrn).Dovyphplpthngathmmtma
trn th hai bin i ma trn h s thnh ma trn c ph thch hp. Ma
trn bin i nh vy gi l ma trn iu kin trc(preconditioner). Mt
preconditionerttscithinshitcaphngphplp.Nhiutrng
hp,nukhngcpreconditioner,phplpskhnghit.Preconditioner
nginnhtchnhlmatrnngchomMi,j=Ai,jnui=jvccphn
tkhcbngzero.MatrnnhvygilmatrniukintrcJacobi.

Trongtnhton,tntihailoimatrniukintrc:

matrn[M]xpxmatrn[A]vlmchovicgiih[M][X]=[B]d
hngiih[A][X]=[B]

matrn[M]xpx[A]1saochochcntnh[M][B]lc[X]
Phnlnccmatrn[M]thucloithnht.

7.PHNGPHPLPJACOBI
XthphngtrnhAX=F.Bngcchnotaahphngtrnh
vdng

X=BX+G
trong:

B=(bij)n,n

G=(g1,g2,...,gn)T
Chnvect:

X=(x1(o),x2(o),....,xn(o))T
lmxpxth0canghimngvxydngxpx

X(m+1)=BX(m)+G(m=0,1,....)
Ngi ta chng minh rng nu phng trnh ban u c nghim duy
nhtvmttrongbachuncamatrnBnhhn1thdyxpxhitv
nghimduynht.ChomtmatrnB,chuncamatrnB,khiu B l
mttrong3s:
154

B 1 = max b ij

B 2 = max b ij

j=1
n

j=1

1/ 2

n n

B 3 = b ij2
i =1 j=1
(Chuncamatrnquanhtishitcaphngphplp)
Taxydnghmjacobi()thchinthuttontrn:

functionx=jacobi(a,b,x0,kmax)
%TimnghiemcuaptAx=BbangthuattoanJacobi.
%Cuphap:x=jacobi(a,b,x0,kmax)
%hayjacobi(a,b,x0,kmax)
ifnargin<4
tol=1e6;
kmax=100;%jacobi(a,b,x0)
elseifkmax<1
tol=max(kmax,1e16);
kmax=100;%jacobi(a,b,x0,tol)
else
tol=1e6;%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
155

fork=1:kmax
x=At*x+Bt;
ifnargout==0,
x
end
ifnorm(xx0)/(norm(x0)+eps)<tol
break;
end
x0=x;
end
giiphngtrnhtachngtrnhctjacobi.m:

b=[11];
a=[32;12];
x0=[00];
x=jacobi(a,b,x0,20)

8.PHNGPHPLPGAUSSSEIDEL
Phng php lpGauss Seidel c ci tin t phng phpJacobi.
Nidungcbncaphngphplchkhitnhnghimxpxth(k+1)
canxitasdngccxpxth(k+1)tnhcaccnx1,...,xi1.Gis
choh[A][X]=[B]thtacnghim:

x i = i + ij x j

i = 1,..., n

j= 1

Lyxpxbanutux1(o),x2(o),....,xn(o) vttnhintacgnglychng
tngngvix1,x2,...,xn(cnggncngtt).Tiptheotagisrngbit
xp x th k xi(k) ca nghim. Theo Seidel ta s tm xp x th (k+1) ca
nghimtheocccngthcsau:
n

x (1k +1) = 1 + ij x (j k )

j=1

( k + 1)
2

= 1 + 21 x

( k + 1)
1

+ ij x (j k )

......

x (i k +1) = i + ij x (j k +1) + ij x (j k )

......

j= 2

i 1

j=1

j= i

156

n 1

x (nk +1) = n + ij x (j k +1) + nn x (nk )


j=1

Thng thng phng php Gauss Seidel hi t nhanh hn phng


php Jacobi nhng tnh ton phc tp hn. D d hiu phng php ny
chngtaxtmtvdcth:

Chohphngtrnh:
10 x 1 + x 2 + x 3 = 12

2 x 1 + 10x 2 + x 3 = 13
2 x + 2x + 10 x = 14
2
3
1
nghimngcahl(1,1,1)
Taavdngthuntinchophplp:
x 1 = 1.2 0.1x 2 0.1x 3

x 2 = 1.3 0.2 x 1 0.1x 3


x = 1.4 0.2 x 0.2 x
1
2
3
Lyx1(o)=1.2;x2(o)=0;x3(o)=0
SdngphngphplpGaussSeideltac:
x(1)
1 = 1.2 0.1 0 0.1 0 = 1.2
(1)

x 2 = 1.3 0.2 1.2 0.1 0 = 1.06


(1)
x 3 = 1.4 0.2 1.2 0.2 1.06 = 0.948

x(2)
1 = 1.2 0.1 1.06 0.1 0.948 = 0.9992
(2)

x 2 = 1.3 0.2 0.9992 0.1 0.948 = 1.00536


(2)
x 3 = 1.4 0.2 0.9992 0.2 1.00536 = 0.999098

vcthtiptcchonkhihit.Taxydnghm gausseidel()thc
hinthuttontrn:

functionx=gausseidel(a,b,x0,kmax)
%TimnghiemcuaheAX=BbangcachlapGaussSeidel.
ifnargin<4
kmax=100;
end
ifnargin<3
157

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:na1
tmp=b(m,:)a(m,1:m1)*x(1:m1,:)a(m,m+1:na)*x(m+1:na,:);
x(m,:)=tmp/a(m,m);
end
x(na,:)=(b(na,:)a(na,1:na1)*x(1:na1,:))/a(na,na);
err=sqrt(xx0)*(xx0);
iferr<eps
break;
end
x0=x;
end
ifk==kmax
fprintf(Khonghoitusau%dlanlap,kmax);
else
fprintf(Hoitusau%dlanlap,k);
end

giiphngtrnhtachngtrnhctgausseidel.m:

b=[11];
a=[32;12];
x0=[00];
x=gausseidel(a,b,x0,20)

9.PHNGPHPLPRICHARDSON

Trongccphplpnitrn,matrn[B]khngthayi.Bygitaxt
ccphngphplpc[B]thayi.Phngphpnginnhtlphng
phplpRichardson.Taccngthclpsau:
x(k +1) = x(k) + P 1r(k)

158

Tronglthngsrelaxationvsdr(k)ctnhbng:
r(k) = b Ax(k)

Matrnlplnkl:
B k = E k P 1 A

Nh vy php lp Jacobi cng nh php lp Gauss Seidel l trng hp


ring ca php lp Richardson vi = 1, P = D hay P = D + L. Ngi ta
chngminhlphplpRichardsonhitkhi:
2Re( i )

0<<

2
i
Taxydnghmrichardsoniter()thchinthuttontrn:

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=ba*x;
x=x+omega*r;
ifnorm(r)<tol
break;
end
end
i

giihphngtrnhtadngchngtrnhctrichardsoniter.m

clearall,clc
a=[1011;1102;2210];
b=[121314];
159

x=[000];
maxiter=50;
tol=1e6;
x=richardsoniter(a,b,x,maxiter,tol)

10.PHNGPHPSOR
Gi s ta dng phng php lp gii h phng trnh tuyn tnh
[A][X]=[B]v[Xk]lnghimgnng.Nhvytacvectsdl:
[Rk]=[B][A][Xk]
Nuxpxttth[Rk]0.Mtphngphpdatrnvicgimchunca
vectdstoradys[Xk]hitnhanhhn.PhngphpSOR(succesive
over relaxtion l phng php gii cc phng trnh trong sai s c
gimlintipchonkhitcsaismongmun)avomtthams
tngtchit.

Ta kho st ma trn [A] bc n. Ta chia [A] thnh 3 phn: phn ng


chochnh[D],phnbndingchochnh[L]vphnbntrnng
chochnh[U].

a11 a12 L a1n a11 0 L 0


a
a 22 L a 2n 0 a 22 L 0
21
=

O M
M M
M O M
M

0 L a nn
a n1 a n 2 L a nn 0

0
L 0 0 a12 L a1n
0
a
0
0 L a 2n
L 0 0
21

M
O M M O
M
M
M

0 L
0
a n1 a n 2 L 0 0

Khi cho gi tr ca tham s , thng chn trong khong 0 < < 2,


nghimcahphngtrnhtuyntnh,khichogitrbanu[X0]ctnh
bngcngthclp:

[Xk+1]=M[Xk]+C
Trong:

M=([D][L])1{(1)[D]+[U]}

C=([D][L])1[B]
Khaitrinccphnttac:
160

+1)
= ( 1 ) x(k)
+
x(k
i
i

(k +1)
(k)
bi a ijx j a ijx j
a ii
j< i
j> i

Phngphprthiuqukhisphngtrnhln.Nu=1tacphplp
GaussSeidel.
Taxydnghmsoriter()thchinthuttonny.

functiony=soriter(a,b,omega,x0,kmax)
%cuphapy=soriter(a,b,omega,x0,kmax)
%giaiheptbangppSOR
%vao
%a,blacacmatranheso
%x0langhiembandau
%kmaxsolanlapmax
%ra
%xlanghiem
n=size(a,1);
ifnargin<5
kmax=100;
end
ifnargin<4
kmax=100;
x0=zeros(1,n);
end
ifnargin<3
kmax=100;
x0=zeros(1,n);
omega=1;
end
ifsize(x0,1)==1
x0=x0;
end
x=x0;
kmax=100;
fork=1:kmax
x(1,:)=(1omega)*x(1,:)+omega*(b(1,:)a(1,2:n)*x(2:n,:))/a(1,1);
161

form=2:n1
tmp=b(m,:)a(m,1:m1)*x(1:m1,:)a(m,m+1:n)*x(m+1:n,:);
x(m,:)=(1omega)*x(m,:)+tmp*omega/a(m,m);
end
x(n,:)=(1omega)*x(n,:)+omega*(b(n,:)a(n,1:n1)*x(1:n1,:))/a(n,n);
err=sqrt((xx0)*(xx0));
iferr<eps
break;
end
x0=x;
end
ifk==kmax
fprintf(Khonghoitusau%dlanlap,kmax);
else
fprintf(Hoitusau%dlanlap,k);
end
y=x;
giihphngtrnh
10 x 1 + x 2 + x 3 = 12

2 x 1 + 10x 2 + x 3 = 13
2 x + 2x + 10 x = 14
2
3
1
tadngchngtrnhctsoriter.m

clearall,clc
a=[210000000;
121000000;
012100000;
001210000;
000121000;
000012100;
000001210;
000000121;
000000012];
b=[1;2;3;4;5;4;3;2;1];
x0=[111111111];
162

x=soriter(a,b,1.25,x0,500)

11.PHNGPHPSSOR
Nu ma trn h s [A] l i xng th php lp SSOR kt hp hai ln
tnhtheoSORsaochomatrnktqugingvimatrnixng.cbit
lnthchinSORutinl:
xk=([D][L])1{[U]+(1)[D]}xk1+([D][L])1[B]
Ln thc hin SOR th hai cc n s c cp nht theo hng ngc li.
NhvySSORllpSORthunvsaulSORngc.

Didngmatrn,phplpSSORl:
[Xk]=[B1][B2][Xk1]+(2)([D][U])1[D]([D][L])1[B]
Trong:

[B1]=([D][U])1{[L](1)[D]}

[B2]=([D][L])1{[U](1)[D]}
[B2]lmatrncaphplpSORcn[B2]cngtngtnhngivai
trca[U]v[L]
Taxydnghmssoriter()thchinthuttonny:

functionx=ssoriter(a,b,x1,omega,maxiter,tol)
%hamthuchienthuattoanSSOR
ifsize(x1,1)==1
x1=x1;
end
n=length(a);
d=zeros(n);
fori=1:n
d(i,i)=a(i,i);
end
l=tril(a);
fori=1:n
l(i,i)=0;
end;
u=triu(a);
fori=1:n
u(i,i)=0;
end;
163

u=u;
l=l;
b1=inv(domega*u)*(omega*l+(1omega)*d);
b2=inv(domega*l)*(omega*u+(1omega)*d);
fork=1:maxiter
x=b1*b2*x1+omega*(2omega)*inv(domega*u)*d*inv(domega*l)*b;
ifnorm(xx1)<=tol
break;
end
x1=x;
end
giihphngtrnhtadngchngtrnhctssoriter.m

clearall,clc
a=[411;142;124];
b=[1215];
maxiter=50;
tol=1e6;
x1=[000];
omega=1.2;
x=ssoriter(a,b,x1,omega,maxiter,tol)

12.PHNGPHPARNOLDIVLANCZOS
Mt bin th ca thut ton Arnoldi l thut ton do nh ton hc
HungaryLanczosara.Thuttongmccbcsau:
cho[X0]
tnh[R0]=[B][A][X0]
[R ]
= R 0 2 v v1 = 0

lpk=0,1,2,...,maxiter

w = [ A ] v j v j1 nuj=1cho1v00

= w Tj v j

wj=wjjvj
j+1 = w j nuj+1=0thotkhivnglp
2

164

vj+1=

wj
j+1

Tm=tridiag(j,i,j+1)
V=[v1,v2,...,vm]
y= Tm1 ( e1 )
xm=x0+Vmym

Taxydnghmlanczos4sys()thchinthuttontrn

functionx=lanczos4sys(a,b,x0,maxiter,tol)
%hamfgiaihephuongtrinhbangthuattoanLanczos
r0=ba*x0;
nres0=norm(r0,2);
ifnres0~=0
V=r0/nres0;
Z=V;
gamma(1)=0;
beta(1)=0;
k=1;
nres=1;
whilek<=maxiter&nres>tol
vk=V(:,k);
zk=Z(:,k);
ifk==1,
vk1=0*vk;
zk1=0*zk;
else
vk1=V(:,k1);
zk1=Z(:,k1);
end
alpha(k)=zk*a*vk;
tildev=a*vkalpha(k)*vkbeta(k)*vk1;
tildez=a*zkalpha(k)*zkgamma(k)*zk1;
gamma(k+1)=sqrt(abs(tildez*tildev));
ifgamma(k+1)==0
165

k=maxiter+2;
else
beta(k+1)=tildez*tildev/gamma(k+1);
Z=[Z,tildez/beta(k+1)];
V=[V,tildev/gamma(k+1)];
end
ifk~=maxiter+2
ifk==1
Tk=alpha;
else
Tk=diag(alpha)+diag(beta(2:k),1)+diag(gamma(2:k),1);
end
yk=Tk\(nres0*[1,0*[1:k1]]);
xk=x0+V(:,1:k)*yk;
nres=abs(gamma(k+1)*[0*[1:k1],1]*yk)*norm(V(:,k+1),2)/nres0;
k=k+1;
end
end
else
x=x0;
end
ifk==maxiter+2
niter=k;
else
niter=k1;
end

giihphngtrnhtadngchngtrnhctlanczos.m

clearall,clc
a=[135;324;546];
b=[9915];
maxiter=50;
tol=1e6;
x0=[000];
x=lanczos4sys(a,b,x0,maxiter,tol)
166

13.PHNGPHPDCLNNHT
Takhostbitontmcctrcahm

(1)
f([X])=0.5[X]T[A][X][B][X]
vi[A]lmatrnixng,xcnhdng.
Dof([X])tcctrkhigradientf([X])=[A][X][B]=0nnbitontmcc
trtngngvivicgiihphngtrnhistuyntnh:
[A][X]=[B]

(2)
Tabitrnggradientlhnghmtngnhanhnht.Nhthmunin
cc tiu ta cho [X], tnh gradient v tm theo hng ngc li cho n khi
hmkhnggimna.Phngphpdclnnht(steepestdescent)thc
hinthuttonlp,btut[X0].Tilnlpthk,nghimchiuchnh
bng:

[Xk+1]=[Xk]+k[Rk]

(3)
Gitrcacxcnhbng:
T
R k ] [R k ]
[
k =

T
R
A
R
[
]
[ k]
[ k]

Nhvythuttonsteepestdescentl:

cho[X0]
tnh[R0]=[B][A][X0]
lpk=1,2,...
T
R k ] [R k ]
[

k =

T
R
A
R
[ k ] [ ][ k ]

[Xk+1]=[Xk]+k[Rk]

[Rk+1]=[B][A][Xk+1]
chonkhihit
Thuttonnycnhcimlhitkhngnhanh.
Taxydnghmsteepest()thchinthuttontrn:
functionx=steepest(a,b,x,maxiter,tol)
%Steepestdescent
r=ba*x;
k=1;
whilek<=maxiter&norm(r)>tol
ar=a*r;
alpha=(r*r)/(r*ar);
x=x+alpha*r;
167

r=ralpha*ar;
k=k+1;
end

giihphngtrnhtadngchngtrnhctsteepest.m

clearall,clc

a=[411;142;124];
b=[1215];
maxiter=50;
tol=1e6;
x=[000];
x=steepest(a,b,x,maxiter,tol)

14.PHNGPHPCG
Thut ton gradient lin hp c Hestennes v Stiefel trnh by nm
1952.Nthchhpgiicchphngtrnhcmatrn[A]ixng,xc
nhdng.NltrnghpcbitcaphngphpLanczoskhimatrn
hsixng,xcnhdng.
Phngphpgradientthchinthuttonlp,btut[X0].Tiln
lpthk,nghimchiuchnhbng:

[Xk+1]=[Xk]+k[Sk]

(1)
dicakcchnsaocho[Xk+1]cctiuf([Xk+1])theohngtm[Sk].
Nhvy[Xk+1]phithomn:

[A]([Xk]+k[Sk])=[B]

(2)
Sdcaphplpl:

[Rk]=[B][A][Xk]

(2)
Nhvy(4)trthnh:

k[A][Sk]=[Rk]

(4)
T
Nhnchaivca(4)vi[Sk] tac:
T
Sk ] [R k ]
[
k =

(5)

T
[ S k ] [ A ][ S k ]
Tachn[Sk]theogradientlinhp:

[Sk+1]=[Rk+1]+k[Sk]

(6)
Hngsksaochohaihngtmlintiplinhpvinhau,nghal:
168

[ S k + 1 ] [ A ][ S k ] = 0
T
Nhvy ([ R k +1 ] + k [ S k ]) [ A ][ S k ] = 0 ,nn:
T
R k + 1 ] [ A ][ S k ]
[

k =

T
S
A
S
[ k ] [ ][ k ]
T

(7)

(8)

Nhvythuttongradientlinhpl:

cho[X0]
tnh[R0]=[B][A][X0]
[R0]=[S0]
lpk=0,1,2,...
T
Sk ] [R k ]
[

k =

T
S
A
S
[
]
[ k]
[ k]

[Xk+1]=[Xk]+k[Sk]
[Rk+1]=[B][A][Xk+1]
T
R k + 1 ] [ A ][ S k ]
[
k =

T
[ S k ] [ A ][ S k ]

[Sk+1]=[Rk+1]+k[Sk]
chonkhihit
Taxydnghmconjgradient()thchinthuttontrn

functionx=conjgradient(a,b,x1,maxiter,tol)
%giaiptAX=Bbangppgradientlienhop
%cuphap
%x=conjgradient(a,b,x1,maxiter,tol)
ifnargin<5
tol=1e6;
end
ifnargin<4
tol=1e6;
maxiter=50;
end
ifsize(x1,1)==1
x1=x1;
end
r1=ba*x1;

169

s1=r1;
fork=1:maxiter
alfa=(s1*r1)/(s1*a*s1);
x2=x1+alfa*s1;
r2=ba*x2;
ifnorm(r2)<tol
break
end
beta=(r2*a*s1)/(s1*a*s1);
s2=r2+beta*s1;
s1=s2;
x1=x2;
end
x=x2

giihphngtrnhtadngchngtrnhctconjgradient.m

clearall,clc
a=[411;142;124];
b=[1215];
maxiter=50;
tol=1e6;
x1=[000];
x=conjgradient(a,b,x1,maxiter,tol);

TacngcthdngkthutpreconditionningchophngphpCG.Thut
tonsl:

Chn[X0]

tnh[R0]=[B][A][X0]

Lpti=1,2,..,maxiter

[Zi1]=[M]1[Ri1]

i1 = [ R i1 ] [ Z i1 ]

Nui=1

[P1]=[Z0]
khngth:

170

i1

i 2

[Pi]=[Zi1]+i1[Pi1]
[Qi]=[A][Pi]
i1

i =
T
[Pi ] [Qi ]

i1 =

[Xi]=[Xi1]+i[Pi]

[Ri]=[Ri1]i[Qi]

chonkhihit

Taxydnghmpcg()thchinthuttontrn

functiony=pcg(a,b,x,M,maxiter,tol)
%giaiptAX=Bbangppgradientlienhopcopreconditionner
%cuphap
%x=conjgradient(a,b,x1,M,maxiter,tol)

r=ba*x;
ifnargin<6
tol=1e6;
end
ifnargin<6
tol=1e6;
maxiter=50;
end
ifsize(x,1)==1
x=x;
end
foriter=1:maxiter
z=M\r;
rho=(r*z);
if(iter==1)
p=z;
else
beta=rho/rho_1;
p=z+beta*p;
171

end
q=a*p;
alpha=rho/(p*q);
x=x+alpha*p;
r=ralpha*q;
ifnorm(r)<tol
break;
end
rho_1=rho;
end
y=x;

giihphngtrnhtadngchngtrnhctpcg.m

clearall,clc
a=[411;142;124];
b=[1215];
maxiter=50;
tol=1e6;
x=[000];
fori=1:3
M(i,i)=a(i,i);
end
x=pcg(a,b,x,M,maxiter,tol)

15.PHNGPHPCGNE

Taxthphngtrnh

[A][X]=[B]
Khi ma trn [A] khng i xng v khng suy bin th [A][A]T s i
xng v xc nh dng nn c th p dng thut ton CG. Thut ton
CGNE(thuttonCraig)gmccbc:

Chn[X0],tnh[R0]=[B][A][X0]

Tnh[S0]=[A]T[R0]

[P0]=[S0]

Lpchonkhihit

[Vk]=[A][Pk]
172

[S ] [S ]
k = k 1 T k1
[ Vk1 ] [ Vk1 ]
T

[Xk]=[Xk1]+k[Pk1]
[Rk]=[Rk1]k[Vk]
[Sk]=[A]T[Rk]
T
Sk ] [Sk ]
[
k =

T
[ S k1 ] [S k1 ]

[Pk]=[Sk]+k[Pk1]
Taxydnghmcgne()thchinthuttontrn

functionx=cgne(a,b,x0,maxiter,tol);
%HamnaythuchienthuattoanCGNE
x=x0(:,:);
i=1;
r=ba*x;
s=a*r;
p=s;
delta1=norm(s)^2;
rnorm=norm(r);
rho=rnorm;
while((rnorm/rho>tol)&(i<maxiter))
v=a*p;
alfa=delta1/norm(v)^2;
x=x+alfa*p;
r=ralfa*v;
rnorm=norm(r);
s=a*r;
delta2=norm(s)^2;
beta=delta2/delta1;
p=s+beta*p;
delta1=delta2;
i=i+1;
end

giihphngtrnhtadngchngtrnhctcgne.m
173

clearall,clc
a=[134;257;312];
b=[8146];
maxiter=50;
tol=1e6;
x0=[000];
x=cgne(a,b,x0,maxiter,tol)

16.PHNGPHPCGNR

Khi ma trn h s [A] khng i xng ta khng dng c phng


phpCG.Vvytacnbinihphngtrnhdngcphngphp
CG.Xthphngtrnh:

[A][X]=[B]
Taahvdng:

[A]T[M][A][X]=[A]T[M][B]
hay
X = B
A


v B i xng nn c th dng c phng php
vi cc ma trn A


CG.ThuttoncaphngphpCGNRl:
X vv=r

Cho[X0]tnh r = B A
0

Lpchonkhihit
rkT rk

k = T

v ([A]v
)
k

x k +1 = x k k v k

v
rk+1 = rk k A
k
rkT rk
k = T

rk 1rk1
v k +1 = rk+1 + k v k

Taxydnghmcgnr()thchinthuttontrn

functionx=cgnr(a,b,x,maxiter,tol)
%dungthuattoancgnrdergiaihephuongtrinh
n=size(a,1);
174

m=ones(n,1);
m=diag(m);
m=1.2*m;
am=a*m*a;
bm=a*m*b;
r=bmam*x;
v=r;
delta1=norm(r)^2;
fork=1:maxiter
ifnorm(r)<tol
break
end
alfa=norm(r)^2/(v*(am*v));
x=x+alfa*v;
r=ralfa*am*v;
delta2=norm(r)^2;
beta=delta2/delta1;
v=r+beta*v;
delta1=delta2;
end

giihphngtrnhtadngchngtrnhctcgnr.m

clearall,clc
a=[134;257;312];
b=[8146];
maxiter=50;
tol=1e6;
x=[000];
x=cgnr(a,b,x,maxiter,tol)

17.PHNGPHPCGLS

PhngphpCGLScngdnggiicchphngtrnhcma
trnhskhngixngvicchtnhsaochotngbnhphngsdb
nht.Dovytaphicho [ A ][ X ] [ B] 2 min.ThuttonCGLSgmccbc
sau:
175

Cho[X0]tnh [ r ] = [ B] [ A ][ X 0 ] ,[d]=[A]T[r]v=[d]T[d]

Lpchonkhihit
k 1

k =
([A][d ])T ([A][d ])

x k +1 = x k kd k

rk+1 = rk k[ A ] d k

s k = [ A ] rk
sTk s k
k = T

s k1s k1

d k+1 = s k + kd k
Taxydnghmcgls()thchinthuttontrn.

functionx=cgls(a,b,x,maxiter,tol)
r=ba*x;
d=a*r;
rho1=d*d;
forj=1:maxiter
ad=a*d;
alpha=rho1/(ad*ad);
x=x+alpha*d;
r=ralpha*ad;
s=a*r;
rho2=s*s;
beta=rho2/rho1;
rho1=rho2;
d=s+beta*d;
ifnorm(r)<1e6
break;
end
end

giihphngtrnhtadngchngtrnhctcgls.m

clearall,clc
a=[134;257;312];
`

176

b=[8146];
maxiter=50;
x=[000];
tol=1e6;
x=cgls(a,b,x,maxiter,tol)

Nudngkthutpreconditionningvimatrn[m]ththuttonsl:
Cho[X0]
2
tnh [ r ] = [ B] [ A ][ X 0 ] ,[p]=[m]1[A]T[r],[s]=[p]v = s 2

Lpchonkhihit

tk=[s]1pk

qk=[A]tk

k = k 2
qk 2

x k +1 = x k k t k

rk+1 = rk k q k

s k+1 = [ m ] ([ A ] rk+1 )

k +1 = k +1
k
pk+1 = s k +1 + k pk
1

Taxydnghmcglsp()thchinthuttontrn.

functionx=cglsp(a,b,x,maxiter,tol)
%giaihebgthuattoanCGLScopreconditionning
n=size(a,1);
m=ones(n,1);
m=diag(m);
m=1.*m;
r=ba*x;
p=inv(m)*(a*r);
s=p;
k=1;
gamma1=norm(s)^2;
whilek<=maxiter&norm(r)>tol
177

t=inv(m)*p;
q=a*t;
alfa=gamma1/(norm(q)^2);
x=x+alfa*t;
r=ralfa*q;
s=inv(m)*(a*r);
gamma2=norm(s)^2;
beta=gamma2/gamma1;
gamma1=gamma2;
p=s+beta*p;
k=k+1;
end

18.PHNGPHPBiCG
Phng php gadient lin hp khng thch hp cho h phng trnh
khngixngvccvectsdkhngthtrcgiaovimtstlnlp.
Phngphpgradientlinhpkpthaythdyvectdtrcgiaobnghai
dytrcgiaotngh.
Khicpnhtsdtadngmatrn[A]Tthaychomatrn[A].Nhvy
tac:
T
R% i = R% i1 i A P% i
[R i ] = [R i1 ] i [ A ][Pi ]


vhaidyhngtm:
P% i = R% i1 + i1 P% i1

[Pi ] = [R i1 ] + i1 [Pi1 ]

Vicchn:
T
T
R% i1 R i1
R% i R i

i = T
i = T

P% i A Pi
R% i1 R i1


bomquanhtrcgiaokp:
T
T
R% i R j = P% i A Pj = 0 nuij

Taxydnghmbiconjgrad()thchinthuttontrn

functionx=biconjgrad(a,b,x,maxiter,tol)
%hamthuchienthuattoangradientlienhopkep
ifsize(x,1)==1
x=x;

178

end
r=ba*x;
rn=r;
fori=1:maxiter
z=r;
zn=rn;
rho=z*rn;
ifrho==0
error(Khongdungduocphuongphapnay!);
break;
end
ifi==1
p=z;
pn=zn;
else
beta=rho/rho1;
p=z+beta*p;
pn=zn+beta*pn;
end
q=a*p;
qn=a*pn;
alfa=rho/(pn*q);
x=x+alfa*p;
r=ralfa*q;
rn=rnalfa*qn;
ifnorm(r)<=tol
break
end
rho1=rho;
end

giihphngtrnhtadngchngtrnhctbiconjgrad.m

clearall,clc
a=[411;142;124];
b=[1215];
179

maxiter=50;
tol=1e6;
x=[000];
x=biconjgrad(a,b,x,maxiter,tol)

19.PHNGPHPBiCGSTAB

Phngphpgradientlinhpkpnnhcxydnggiicc
hphngtrnhtuyntnhkhngixng.Thuttongmcccbcsau:

chovectnghimbanutnh[X0]tatnh[R0]=[B][A][X0]

tachn R% .ngiintachn R% = [ R 0 ]

thchinccbclp
T

i1 = R% [ R i1 ]

nui=1th [ P1 ] = [ R 0 ]

i1 = i1 i1
i2 i1

[ Pi ] = [ R i1 ] + i1 ([ Pi1 ] + i1 [ Vi1 ])

nuciukintrctagiih M P = Pi


Vi = A P
i 1
i =

T
R% Vi

[ S ] = [ R i1 ] i [ Vi ]
kimtrachunca[S].Nunhth X i = X i1 + i P v

dng
giihphngtrnh M S = S

T = A S

T
[T ] [S]
i =
[ T ]T [ T ]
X i = X i1 + i P + i S


[ R i ] = [ S ] i [ T ]

chonkhihit
Taxydnghmbicgstab()thchinthuttonny
180

functionx=bicgstab(a,b,x,maxiter,tol)
%hamdunggiaiheptbangppgradientkepondinh
ifsize(x,1)==1
x=x;
end
iter=0;
r=ba*x;
err=norm(r);
if(err<tol)
fprintf(Hoitusau%dlanlap,iter);
return
end
omega=1.0;
rm=r;
foriter=1:maxiter
rho=rm*r;
if(rho==0.0)
fprintf(Khongsudungduocphuongphapnay);
break
end
if(1<iter)
beta=(rho/rho1)*(alfa/omega);
p=r+beta*(pomega*v);
else
p=r;
end
ph=p;
v=a*ph;
alfa=rho/(rm*v);
s=ralfa*v;
if(norm(s)<tol)
fprintf(Pheplaphoitusau%dlanlap,iter);
x=x+alfa*ph;
resid=norm(s);
err=norm(s);
break;
181

end
sh=s;
t=a*sh;
omega=(t*s)/(t*t);
x=x+alfa*ph+omega*sh;
r=somega*t;
err=norm(r);
if(err<=tol)
fprintf(Pheplaphoitusau%dlanlap,iter)
break
end
if(omega==0.0)
fprintf(Khongdungduocphuongphapnay);
break
end
rho1=rho;
end

giiphngtrnhtadngchngtrnhctbicgstab.m

clearall,clc
a=[411;142;124];
b=[1215];
maxiter=50;
tol=1e6;
x=[000];
x=bicgstab(a,b,x,maxiter,tol)

20.PHNGPHPCGS

Phngphpgradientlinhpbc2cSonneveldara.Nlmt
binthcaphngphpBiCG.Thuttongmcccbcsau:

chovectnghimbanutnh[X0]tatnh[R0]=[B][A][X0]
T

tachn R% saocho R 0 R% 0 .ngiintachn R% = [ R 0 ]

thchinccbclp
T

i1 = R% [ R i1 ]
182

nui=1th [ P1 ] = [ U1 ] = [ R 0 ]

i1 = i1
i 2
[ U i ] = [ R i1 ] + i1 [ Qi1 ]

[ Pi ] = [ U i ] + i1 ([ Qi1 ] + i1 [ Pi1 ])

nuciukintrctagiih [ M ] P = [ Pi ]

= A P
V

i1
i =

R V


Qi = U i i V

= U + Q
giihphngtrnh M U
i i

X i = X i1 + i U

= A U

R i = R i1 i A Q

chonkhihit
Taxydnghmconjgradsq()thchinthuttontrn:

functionx=conjgradsq(a,b,x,maxiter,tol)
%hamthuchienthuattoangradientlienhopbachai
ifsize(x,1)==1
x=x;
end
r=ba*x;
rn=r;
fori=1:maxiter
rho=rn*r;
ifrho==0
error(Khongdungduocphuongphapnay!);
break;
end
ifi==1

183

u=r;
p=u;
else
beta=rho/rho1;
u=r+beta*q;
p=u+beta*(q+beta*p1);
end
pm=p;
vm=a*pm;
alfa=rho/(rn*vm);
q=ualfa*vm;
um=u+q;
x=x+alfa*um;
qm=a*um;
r=ralfa*qm;
ifnorm(r)<=tol
break
end
rho1=rho;
p1=p;
end

giihphngtrnhtadngchngtrnhctconjgradsq.m:
clearall,clc
a=[411;142;124];
b=[1215];
maxiter=50;
tol=1e6;
x=[000];
x=conjgradsq(a,b,x,maxiter,tol)

21.PHNGPHPMINRES

Phngphpnynhmcctiuhosd[R]=[B][A][X].Phplp
tmnghimcahphngtrnhchobi:

x(k+1)=x(k)+kp(k)
184

vip(k)lhngtm.

Sdcaphplp:

r(k+1)=r(k)k[A][R(k)]+kbk1[A]p(k1)
Cchscchntngtnhtrcgiao.Nu[A]ixng,tathyrngs
dccctiuhovtacthuttonMINRES.Thuttoncthgmcc
bcsau:

Cho[X0],tnh:
[R]=[B][A][X0],0= R 0 ,v=0;vnew=[R0]/0,new=0

c=0,s=0,cnew=1,snew=0
p=0,pnew=0
Lpvik=1,2,

%thuttonLanczostmTk
=new
[vold]=[v];[v]=[vnew]
[vnew]=[A][v][vold]
=[vnew]T[v]
[vnew]=[vnew][v]
new = v new
v new
v = new

%dngphpquaytrnctcuicaTk
clod=c,sold=s,c=cnew,s=snew
1=slod
2=c.clod+s
% 3 = c sc old
%loitrTk(k+1,k)
= % 3 + new
new

= 3 + new

%
c new = 3

s new = new

3=
%TnhPk
2

185

pold=p,p=pnew
v 1pold 2 pold

pnew =
3
%tnhx
x=x+cnewpnew
%iukinngnglp
=snew

chonkhi
0
Taxydnghmminres()thchinthuttonny.

functionx=minres(a,b,x,maxiter,tol)
k=0;
r=ba*x;
gamma0=norm(r);
v=0;
vnew=r/gamma0;
gamma=gamma0;
betanew=0;
c=1;
s=0;
cnew=1;
snew=0;
p=0;
pnew=0;
fork=1:maxiter
beta=betanew;
vold=v;
v=vnew;
vnew=a*vbeta*vold;
alfa=vnew*v;
vnew=vnewalfa*v;
betanew=norm(vnew);
vnew=vnew/betanew;
cold=c;
sold=s;
186

c=cnew;
s=snew;
rho1=sold*beta;
rho2=c*cold*beta+s*alfa;
rhon3=c*alfas*cold*beta;
tho=abs(rhon3)+abs(beta);
nuy=tho*sqrt((rhon3/tho)^2+(betanew/tho)^2);
cnew=rhon3/nuy;
snew=betanew/nuy;
rho3=nuy;
pold=p;
p=pnew;
pnew=(vrho1*poldrho2*p)/rho3;
x=x+cnew*gamma*pnew;
gamma=snew*gamma;
ifabs(gamma)/gamma0<tol
break;
end
end

giihtadngchngtrnhctminres.m

clearall,clc
a=[1135;1224;3232;5424];
b=[1091015];
maxiter=50;
tol=1e6;
x=[0000];
x=minres(a,b,x,maxiter,tol)

22.PHNGPHPQMR

Phng php gn nh cc tiu ho s d (quasi minimal residual


QMR)cFreudvNachtigalara.Thuttoncthcaphngphp
gmccbc:

Chox0,tnhR0=BAx0

v% (1) = R 0 ,giih M1y = v% 1


187

% (1) vdbngR0
1 = y 2 ,chn w
% (1)
Giih M T2 z = w
0=1,0=1
Lpchonkhihit
nu(i)=0hayi=0thkhngdngphngphpny

v(i) = v% (i) / i , y = y / i
% (i) / i , z = z / i
w(i) = w
i = z T y ,nui=0thkhngdngphngphpny
giih M 2 y% = y
giih M1T z% = z
nui=1

* p(1) = y% , q(1) = z%
khngth

* p(i) = y% ( i i / i1 ) p(i1)

* q (i) = z% ( i i / i1 ) q (i1)

p% = Ap(i)
i = q(i)T p% ,nui=0thkhngdngphngphpny
i = i / i ,nui=0thkhngdngphngphpny

v% (i+1) = p% i v(i)
giih M1y = v% (i+1)
i+1 = y 2
% (i+1) = ATq(i) i w(i)
w
% (i+1)
giih M T2 z = w
i+1 = z 2

i = i+1 /( i1 i )
i = 1 + i2 ,nui=0thkhngdngphngphpny
i = i1i i /(i i21 )
nui=1th

* d(1) = 1p(1) , s(1) = 1p%


khngth

* d(i) = i p(i) + (i1 i )2 d(i1)

* s(i) = i p% + (i1 i )2 s(i1)


188

x(i)=x(i1)+d(i)
r(i)=r(i1)s(i)
Taxydnghmqmr()thchinthutton:

functionx=qmr(a,x,b,maxiter,tol)
%qmr.mgiaihephuongtrinhax=btheothuattoan
%QMRcodungpreconditioning.
r=ba*x;
error=norm(r);
if(error<tol)
return
end
n=size(a,1);
M=ones(n,1);
M=diag(M);
M=1.2*M;
[M1,M2]=lu(M);
vn=r;
y=M1\vn;
rho=norm(y);
wn=r;
z=M2\wn;
xi=norm(z);
gamma=1.0;
eta=1.0;
theta=0.0;
foriter=1:maxiter,
if(rho==0.0|xi==0.0)
error(Khongdungduocphuongphapnay)
break;
end
v=vn/rho;
y=y/rho;
w=wn/xi;
z=z/xi;
delta=z*y;
189

if(delta==0.0)
error(Khongdungduocphuongphapnay)
break
end
yn=M2\y;
zn=M1\z;
if(iter>1),
p=yn(xi*delta/ep)*p;
q=zn(rho*delta/ep)*q;
else
p=yn;
q=zn;
end
pn=a*p;
ep=q*pn;
if(ep==0.0)
error(Khongdungduocphuongphapnay)
break
end
beta=ep/delta;
if(beta==0.0)
error(Khongdungduocphuongphapnay)
break
end
vn=pnbeta*v;
y=M1\vn;
rho1=rho;
rho=norm(y);
wn=(a*q)(beta*w);
z=M2\wn;
xi=norm(z);
gamma1=gamma;
theta1=theta;
theta=rho/(gamma1*beta);
gamma=1.0/sqrt(1.0+(theta^2));
if(gamma==0.0)
190

error(Khongdungduocphuongphapnay)
break
end
eta=eta*rho1*(gamma^2)/(beta*(gamma1^2));
if(iter>1),
d=eta*p+((theta1*gamma)^2)*d;
s=eta*pn+((theta1*gamma)^2)*s;
else
d=eta*p;
s=eta*pn;
end
x=x+d;
r=rs;
error=norm(r);
if(error<=tol)
break
end
end

giihphngtrnhtadngchngtrnhctqmr.m:

clearall,clc
a=[411;142;124];
b=[1215];
maxiter=50;
tol=1e6;
x=[000];
x=qmr(a,b,x,maxiter,tol)

23.PHNGPHPGMINRES
Phngphpnythngdnggiihphngtrnhcmatrnh
skhngsuybin,khngixng.Phngphpnymrngphngphp
MINRESchohkhngixng.GingnhphngphpMINRES,phng
phpnytoramtdyccvecttrcgiaocdng:
w(i) = Av(i)
fork=1,..,i
191

w(i) = w(i) ( w(i) v(k) ) v(k)

end
v(i+1) = w(i) / w(i)
CclnlptheoGMINREScdng:

x(i)=x(0)+y1v(1)++yiv(i)
Thuttoncthgmccbcsau:

Chox(0)

TnhrthphngtrnhMr=bAx(0)

Lpchonkhihit

v(1) = r / r 2

s = r 2e1
fori=1,2,..,m
giihMw=Av(i)

fork=1,..,i
hk,i=(w,v(k))

w=whk,iv(k)

end
h i+1,i = w 2

v(i+1) = w/h i+1,i


dngbiniJ1,,Ji1cho(h1,,hi+1,i)
cpnhtx,m
end
Taxydnghmgmres()thchinthuttontrn:
functionx=gmres(a,b,x,restart,maxiter,tol)
%GiaihephuongtrinhbangthuattoanGMINRES
n=size(a,1);
M=ones(n,1);
M=diag(M);
M=1.2*M;
r=M\(ba*x);
error=norm(r);
if(error<tol)
return
end
192

[n,n]=size(a);
m=restart;
V(1:n,1:m+1)=zeros(n,m+1);
H(1:m+1,1:m)=zeros(m+1,m);
cs(1:m)=zeros(m,1);
sn(1:m)=zeros(m,1);
e1=zeros(n,1);
e1(1)=1.0;
foriter=1:maxiter
r=M\(ba*x);
V(:,1)=r/norm(r);
s=norm(r)*e1;
fori=1:m
w=M\(a*V(:,i));
fork=1:i
H(k,i)=w*V(:,k);
w=wH(k,i)*V(:,k);
end
H(i+1,i)=norm(w);
V(:,i+1)=w/H(i+1,i);
fork=1:i1
temp=cs(k)*H(k,i)+sn(k)*H(k+1,i);
H(k+1,i)=sn(k)*H(k,i)+cs(k)*H(k+1,i);
H(k,i)=temp;
end
[cs(i),sn(i)]=rotmat(H(i,i),H(i+1,i));
temp=cs(i)*s(i);
s(i+1)=sn(i)*s(i);
s(i)=temp;
H(i,i)=cs(i)*H(i,i)+sn(i)*H(i+1,i);
H(i+1,i)=0.0;
error=abs(s(i+1));
if(error<=tol)
y=H(1:i,1:i)\s(1:i);
x=x+V(:,1:i)*y;
break;
193

end
end
if(error<=tol)
break
end
y=H(1:m,1:m)\s(1:m);
x=x+V(:,1:m)*y;
r=M\(ba*x);
s(i+1)=norm(r);
error=s(i+1)/bnrm2;
if(error<=tol)
break
end;
end

giihphngtrnhtadngchngtrnhctgmres.m:

clearall,clc
a=[134;257;312];
b=[8146];
maxiter=50;
tol=1e6;
x=[000];
restart=5;
x=gmres(a,b,x,restart,maxiter,tol)

24.PHNGPHPFOM

Full Orthogonalisation Method (FOM) l phng php trc giao ho


matrnhs[A].Taxthphngtrnh[A][X]=[B]vimatrn[A]khng
suybin.tai,n+1=bivaj=(ai1,..,ain,ai,n+1)tasinh:
n

a
j=1

i ,j

x j + a i ,n +1 = 0

(1)

H(n+1)vectgm {a i }i=1 van+1clptuyntnh.Tapdngqutrnh


n

trcgiaohochody {a i }i=1 bngcchtu1=a1,v1=u1/ u1 .Nichung


n +1

194

k 1

u k = c k ,i v i v v k = u k / u k .Cngthctnhtonsl:
i =1

u k = a k (a k ,v i )v i

i =1

v = u / u ; v = a / a
k
k
1
1
1
k

(2)

Gi s vec t un+1 c cc thnh phn (z1, z2,, zn+1). Nu zn+1 = 0 th t iu


kinun+1trcgiaoviaitac:
n

a
j=1

Do

i ,j

zj = 0
n +1

u n +1 = z = z i2 > 0
2

2
i

i =1

i =1

Nn phng trnh a i ,jz j = 0 c nghim khng tm thng. iu ny mu


j=1

thunviiukindet(A) 0.Nhvyzn+1 0.Tiukinun+1trcgiao


viaitac:
n

(u n +1 ,a i ) = a i ,jz j + a i ,n +1z n +1 = 0
j=1

Chiahaivchozn+1tac

j=1

zj
a i ,j
+ a i ,n +1 = 0
z
n +1

ngthcnychngt xi =

zi
lnghimca(1).ThuttonFOMcth
z n +1

gmccbc:

Cho[X0],tnhr0=[B], = r0 , v1 = r0 / r0
Lpchonkhihit
wj=[A]vj
trcgiaohoGramSchmidt
h j+1,j = w j

nuhj+1,j=0thm=j,ktthclp
y m = H m1 ( e1 )
xm=x0+Vmym

Taxydnghmfom()thchinthuttontrn:
195

functionx=fom(a,b,x0,maxiter,tol)
%GiaiheptbangthuattoanFOM
i=1;
x=x0(:);
r=ba*x;
rnorm=norm(r);
rho=rnorm;
v(:,i)=r/rho;
while((rnorm/rho>tol)&(i<=maxiter))
v(:,i+1)=a*v(:,i);
h(1:i,i)=v(:,1:i)*v(:,i+1);
v(:,i+1)=v(:,i+1)v(:,1:i)*h(1:i,i);
h(i+1,i)=norm(v(:,i+1));
v(:,i+1)=v(:,i+1)/h(i+1,i);
x=x0+v(:,1:i)*(h(1:i,1:i)\[rho;zeros(i1,1)]);
r=ba*x;
rnorm=norm(r);
i=i+1;
end
i

giihphngtrnhtadngchngtrnhctfom.m:

clearall,clc
a=[134;257;312];
b=[8146];
maxiter=50;
tol=1e6;
x0=[000];
x=fom(a,b,x0,maxiter,tol)

25.PHNGPHPLSQR

PhngphpLSQRLeastSquaresQRdoPaigevSaunderaravo
nm1982.PhngphpLSQRtngngviphngphpCGLSnhng
choktqutthnivicchphngtrnhcmatrnhsciukin
196

xu. Trc ht ta cn ch l bi ton bnh phng b nht [A][X] = [B]


tngngvihphngtrnhtuyntnhdng:
[ E ] [ A ] [ R ] [ B]

(1)


=
T
X
0
[
]
[
]
A
0
[
]
[
]

Toramtcstrcgiaovi(1)vivectbanu:
1 [ B]
w1 =


[ B] 2 [ 0 ]
1 [ B]
tacvectthhai

.Saukhitrcgiaohonviw1vchun
B 2 [ A ]T [ B]
hoktqutacvectcstrcgiaothhai:
[ B]
1
w2 =

T
[ A ]T [ B] 2 [ A ] [ B]

vtiptc.

ThuttonLSQRgiihphngtrnhAx=bgmccbcsau:

Chox0,tnh 1 = b , u1 = b 2 1 , v = A T u1 , = v 2 , w1 = v1 = v

% = , % =
1

Lpchonkhihit:

u = Av i i u i , 1 = u 2 , u i+1 = u i+1

v = A T u i+1 i+1v i , i+1 = v 2 , v i+1 = v i+1


i = % i2 + i2+1
c i = % i i
si = i+1 i
i+1 = si i+1
% i+1 = c i i+1
i = c i% i
% i+1 = si % i
xi = xi1 + (i i )w i
w i+1 = v i+1 (i+1 i )w i
Taxydnghmlsqr()thchinthuttontrn:

functionx=lsqr(A,b,maxiter)
%GiaihephuongtrinhbangphuongphapLSQR.
197

%min ||Axb||.
s=1;
tol=1e6;
[m,n]=size(A);
X=zeros(n,maxiter);
UV=0;
eta=zeros(maxiter,1);
rho=eta;
c2=1;
s2=0;
xnorm=0;
z=0;
%ChuanbilapLSQR.
v=zeros(n,1);
x=v;
beta=norm(b);
if(beta==0)
error(Vephaiphaikhackhong)
end
u=b/beta;
if(UV)
U(:,1)=u;
end
r=A*u;
alpha=norm(r);
v=r/alpha;
if(UV)
V(:,1)=v;
end
phi_bar=beta;
rho_bar=alpha;
w=v;
fori=2:maxiter+1
alpha_old=alpha;
beta_old=beta;
%TinhA*valpha*u.
198

p=A*valpha*u;
beta=norm(p);
u=p/beta;
%TinhA*ubeta*v.
r=A*ubeta*v;
alpha=norm(r);
v=r/alpha;
%LuuUvaVneucan
if(UV)
U(:,i)=u;
V(:,i)=v;
end
rrho=pythag(rho_bar,beta);
c1=rho_bar/rrho;
s1=beta/rrho;
theta=s1*alpha;
rho_bar=c1*alpha;
phi=c1*phi_bar;
phi_bar=s1*phi_bar;
%Tinhchuancuanghienvasodu;
delta=s2*rrho;
gamma_bar=c2*rrho;
rhs=phidelta*z;
z_bar=rhs/gamma_bar;
eta(i1)=pythag(xnorm,z_bar);
gamma=pythag(gamma_bar,theta);
c2=gamma_bar/gamma;
s2=theta/gamma;
z=rhs/gamma;
xnorm=pythag(xnorm,z);
rho(i1)=abs(phi_bar);
%Capnhatnghiem
x=x+(phi/rrho)*w;
w=v(theta/rrho)*w;
ifrho(i1)<tol
break;
199

end
end
i

functionx=pythag(y,z)
%tinhsqrt(y^2+z^2).
rmax=max(abs([y;z]));
if(rmax==0)
x=0;
else
x=rmax*sqrt((y/rmax)^2+(z/rmax)^2);
end

giihphngtrnhtadngchngtrnhctlsqr.m:

clearall,clc
maxiter=50;
A=[134;257;312];
b=[8146];
x=lsqr(A,b,maxiter)

26.PHNGPHPSYMMLQ
LinquannphngphpMINRESvCGlthuttonSYMMLQdo
PaigevSaundersara.Taxthphngtrnh[A][X]=[B]vi[A]lma
trnixngnhngkhngcnxcnhdng.Tachnnghimbanul
1[v1]={B], 1 = [ B] 2 . Ti ln lp th k caphng php CG ta c c xk
saocho[rk]=[B][A][Xk]trcgiao.Do[Vk]lcstrcgiaonntactht
[Xk]=[Vk][yk]vc:
T
[rk]=[B][A][Vk][yk]=1[v1][Vk][Tk][yk] k+1 ([ e ] [ y k ]) [ v k+1 ] (1)
Do [ Vk ] [ rk ] = 0 nnnhn(1)vi [ Vk ] vdng [ Vk ] [ v k +1 ] = 0 v [ Vk ] v1= e1 ta
T

c:

0 = [ Vk ] [ rk ] = 1e1 [ Tk ][ y k ]
T

(2)

giih(2),PaigevSaundersnghthchinphpphntchLQ:

[ Tk ] = [Lk ][ Qk ]
T

[Qk ] T[Qk ] = [E]

200

vi [ L k ] l ma trn tam gic v [ Q k ] l ma trn trc giao. Thut ton


SYMMLQgmccbcsau:

Chox0

Tnhx=xo,r=bAx, = r , v = r

=0, % = 0 ,c=1,s=0,k=

vold=0,w=v,g=0,g% = 0
Lpkhik<tol:

v% = Av v old
= v * v% , v% = v% v
= v% , v old = v , v = v% /
l = s c% , l = s
1

% = s% c , % = c
l 0 = % 2 + 2
c = % l 0 ,s = l 0
g% = g l1g, g = l 2g, g = g% l 0
x = x + (gc)w +(gs)v
w=swcv
k = g% 2 + g 2
Taxydnghmsymmlq()thchinthuttonny:

functionx=symmlq(A,b,x,maxiter,tol)
%HamthuchienthuatoanSYMMLQvoiAlamatrandoixung
[m,n]=size(A);
n2b=norm(b);
xmin=x;
imin=0;
tolb=tol*n2b;
r=bA*x;
normr=norm(r);
normrmin=normr;
v=r;
vold=r;
u=vold;
v=u;
201

beta1=vold*v;
beta1=sqrt(beta1);
vv=v/beta1;
wbar=vv;
v=A*vv;
alpha=vv*v;
v=v(alpha/beta1)*vold;
numer=vv*v;
denom=vv*vv;
v=v(numer/denom)*vv;
volder=vold;
vold=v;
u=vold;
v=u;
betaold=beta1;
beta=vold*v;
beta=sqrt(beta);
gammabar=alpha;
deltabar=beta;
gamma=sqrt(gammabar^2+beta^2);
cs=gammabar/gamma;
sn=beta/gamma;
zeta=beta1/gamma;
epsilonzeta=0;
normrcgcs=abs(beta1*sn);
if(cs==0)
normrcg=Inf;
else
normrcg=normrcgcs/abs(cs);
end
stag=0;
fori=1:maxiter
vv=v/beta;
w=cs*wbar+sn*vv;
stagtest=zeros(n,1);
ind=(x~=0);
202

stagtest(ind)=w(ind)./x(ind);
stagtest(~ind&(w~=0))=Inf;
if(zeta==0)|(abs(zeta)*norm(stagtest,inf)<eps)
stag=stag+1;
else
stag=0;
end
x=x+zeta*w;
wbar=sn*wbarcs*vv;
v=A*vv;
v=v(beta/betaold)*volder;
alpha=vv*v;
v=v(alpha/beta)*vold;
volder=vold;
vold=v;
u=vold;
v=u;
betaold=beta;
beta=vold*v;
if(beta<0)
break
end
beta=sqrt(beta);
delta=cs*deltabar+sn*alpha;
deltazeta=delta*zeta;
gammabar=sn*deltabarcs*alpha;
epsilon=sn*beta;
deltabar=cs*beta;
gamma=sqrt(gammabar^2+beta^2);
csold=cs;
snzeta=sn*zeta;
cs=gammabar/gamma;
sn=beta/gamma;
epszdelz=epsilonzeta+deltazeta;
epsilonzeta=epsilon*zeta;
zeta=epszdelz/gamma;
203

mrcg=norm((csold*epszdelz/gammabarsnzeta)*vold);
normr=sqrt(epszdelz^2+epsilonzeta^2);
normrcgcs=normrcgcs*abs(sn);
if(cs==0)
normrcg=Inf;
else
normrcg=normrcgcs/abs(cs);
end
if(normr<=tolb)
r=bA*x;
normr=norm(r);
if(normr<=tolb)
break
end
end
if(normrcg<=tolb)
xcg=x+(epszdelz/gammabar)*wbar;
r=bA*xcg;
normrcg=norm(r);
if(normrcg<=tolb)
x=xcg;
break
end
end
if(stag>=2)
break
end
if(normr<normrmin)
normrmin=normr;
xmin=x;
imin=i;
end
end
r=bA*x;
normr=norm(r);
i
204

gii h phng trnh bng thut ton SYMMLQ ta dng chng trnh
ctsymmlq.m:

clearall,clc
A=[1241;2315;4116;1565];
b=[8111217];
maxiter=50;
x=[000];
tol=1e12;
x=symmlq(A,b,x,maxiter,tol)

27.PHNGPHPCHEBYSHEV

Tnh hi t ca phng php lp ph thuc vo tnh cht ca ph


ngha l ca cc gi tr ring ca ma trn [A]. ci thin tnh cht ny
ngitathngbinihphngtrnhtuyntnhbngmtphpbini
tuyntnhthchhp.Qutrnhnycgilthtrc(preconditioner).V
dnumatrn[M]xpxmatrnhs[A]theomtcchno,hc
bini

[M]1[A][X]=[M]1[B]
scnghimnhhphngtrnh[A][X]=[B]nhngtnhchtphcahs
camatrn[M]1[A]cththunlihn.
Taxtphngtrnhvi[A]lmatrnixng,xcnhdng.Lc
phcamatrn[A]snmtrongon[min, max]vi min, maxlccgi
trringlnnhtvnhnhtca[M]1[A].Thuttontmnghiml:
cho[X0],tnh[R0]=[B][A][X0]
chnthams vcsaochophca[A]nmtrnon[dc,d+c]
haytrongellipctiuimdckhngchagcto
vtnhvin=1,2,...,nchonkhihit:

[Z]=[M]1[R]
2

=
[P]=[Z]khin=1
d
2
c n 1
1

n =
n =
[Pn ] = [Z n ] + [Pn1 ] khin2

d n
2

[ X n+1 ] = [ X n ] + n [Pn ]
[Rn+1]=[Rn]n[A][Pn]

205

Taxydnghmchebyiter()thchinthuttontrn:

functionx=chebyiter(A,x,b,M,maxiter,tol)
%Cuphapx=chebyiter(A,x,b,M,maxiter,tol)
%DungpplapChebyshevdegiaiheptA*x=b.
%A(n,n)matrandoixung,xacdinhduong
%X(n),vectonghiembandau
%B(n),vephai
%M,matranpreconditioner
%choMbangmtdonvineukhongthutruoc
%X(n),nghiem
ifsize(x,1)==1
x=x;
end
r=bA*x;
eigs=eig(inv(M)*A);
eigmax=max(eigs);
eigmin=min(eigs);
c=(eigmaxeigmin)/2.0;
d=(eigmax+eigmin)/2.0;
fori=1:maxiter
z=M\r;
if(i==1)
p=z;
alfa=2.0/d;
else
beta=(c*alfa/2.0)^2;
alfa=1.0/(dbeta);
p=z+beta*p;
end
x=x+alfa*p;
r=ralfa*A*p;
err=norm(r);
if(err<=tol)
break
end
206

end

Tadngchngtrnhctchebyiter.mgiihphngtrnh:

clearall,clc;

n=10;

A=zeros(n,n);

fori=1:n

A(i,i)=3.0;

end
fori=1:n1
A(i,i+1)=1;

end

fori=1:n1
A(i+1,i)=1;

end

x=[1:n];

b=A*x;

x=ones(n,1);

M=2.0*eye(n);

maxiter=50;

tol=1e6;

y=chebyiter(A,x,b,M,maxiter,tol);

fprintf(Nghiemcuahephuongtrinh\n);
fprintf(%f\n,y)
28.PHNGPHPQR
Taphntchmatrnhs[A]thnh:

[A]=[Q][R]
Do [Q]T[Q]=[E]
nn:

[A][X]=[Q][R][X]=[B]

[Q]T[A][X]=[Q]T[Q][R][X]=[R][X]=[Q]T[B]
Do[R]lmatrntamgictrnnntatmnghimddng.Taxydnghm
givens()thchinphpquayGivens:

207

function[c,s,r]=givens(x,y);
%tinhc,s,rsaocho[cs][x]=[r]
%[sc][y]=[0]
%voic*c+s*s=1;
if(y==0)
c=1;
s=0;
r=x;
else
if(abs(x)>=abs(y))
t=y/x;
r=sqrt(1+t*t);
c=1/r;
s=t*c;
r=x*r;
else
t=x/y;
r=sqrt(1+t*t);
s=1/r;
c=t*s;
r=y*r;
end
end

Tip theo ta xy dng hm qrgivens() thc hin vic tm nghim ca h


phngtrnhbngthuttonphntchQRnhphpquayGivens:

functionx=qrgivens(A,b);
[m,n]=size(A);
tau=zeros(n,1);
%R=[A(1:n+1,:)b(1:n+1)];
R=[A(1:n,:)b(1:n)];
forj=2:n
fori=1:j1
[c,s,r]=givens(R(i,i),R(j,i));
R(i,i)=r;
208

R(j,i)=0;
t=c*R(i,i+1:n+1)+s*R(j,i+1:n+1);
R(j,i+1:n+1)=s*R(i,i+1:n+1)+c*R(j,i+1:n+1);
R(i,i+1:n+1)=t;
end
end
fork=n+2:m,
a=[A(k,:)b(k)];
fori=1:n+1
[c,s,r]=givens(R(i,i),a(i));
R(i,i)=r;
a(i)=0;
t=c*R(i,i+1:n+1)+s*a(i+1:n+1);
a(i+1:n+1)=s*R(i,i+1:n+1)+c*a(i+1:n+1);
R(i,i+1:n+1)=t;
end
end
x=R(1:n,n+1);
forj=n:1:2
x(j)=x(j)/R(j,j);
x(1:j1)=x(1:j1)R(1:j1,j)*x(j);
end
x(1)=x(1)/R(1,1);

giihphngtrnhtadngchngtrnhctqrgivens.m:

clearall,clc
A=[121;211;113];
b=[245];
x=qrgivens(A,b)

209

You might also like