You are on page 1of 13

CC PHNG PHP LP GII H PHNG TRNH I S TUYN TNH

Ni chung c hai phng php gii h phng trnh i s tuyn tnh: phng php trc tip v phng php lp. Cc bi ton k thut thng a v h phng trnh i s tuyn tnh c ma trn [A] tha v ln nn cc phng php lp rt thch hp. Cc phng php lp c chia thnh hai loi: phng php lp tnh v phng php lp ng. Ta xt h phng trnh i s tuyn tnh [A][X] = [B]. Ta a v dng lp: [X] = [C][X] + [D]

Sau mi ln tnh ta c s d: [R] = [B] [A][X] Khi lp t phng trnh ny, cc ma trn [C] v [D] khng i. V vy nn cc phng php xut pht t y gi l cc phng php lp tnh. Cc phng php ny d hiu, d lp trnh nhng khng hiu qu. Cc phng php ny gm c: Phng php lp Jacobi: Phng php ny tnh gi tr ca mt bin da trn gi tr ca cc bin khc. N hi t chm v rt c th khng hi t trong mt s trng hp.

Phng php lp Gauss Seidel: N tng t nh phng php lp


Jacobi nhng khi tnh gi tr ca bin th k ta dng cc gi tr cc bin va c cp nht. Phng php ny hi t nhanh hn phng php lp Jacobi nhng khng nhanh bng cc phng php lp khng n nh. Phng php lp c tng SOR: Phng php ny a ra t phng php Gauss Seidel bng cch a thm h s ngoi suy . Vi c chn ti u, phng php ny hi t nhanh hn phng php Gaus Seidel. Khi = 1 phng php SOR tr thnh phng php Gauss Seidel. Tc hi t ca phng php SOR ph thuc vo Phng php lp c tng i xng SSOR: Phng php ny khng c u im no tri hn SOR. Cc phng php lp khng n nh mi c xy dng, kh hiu, nhng

hiu qu cao. Trong qu trnh lp, vic tnh ton bao hm cc thng tin thay i sau mi bc tnh. Cc phng php ny bao gm: Phng php gradient lin hp CG(Conjugate Gradient): Phng php ny to ra mt dy cc vec t lin hp (hay trc giao) l s d ca 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 phng php ny ph thuc s iu kin ca ma trn (s iu kin ca ma trn o nhy ca nghim ca h phng trnh i s tuyn tnh vi sai s trong s liu. N cho bit chnh xc ca kt qu t php nghch o ma trn v nghim ca h phng trnh i s tuyn tnh). Phng php s d cc tiu MINRES(Minimum Residual) v phng php LQ i xng SYMMLQ(Symmetric LQ) Phng php gradient lin hp dng cho h thng CGNE(Conjugate Gradient on Normal Equations) v CGNR(Conjugate Gradient on Normal Equations minimizing the Residual): Cc phng php ny da trn vic p dng phng php CG vo mt trong hai dng h phng trnh i s tuyn tnh. CNGR dng gii h dng [A]T[A][X] = [B] vi [B] = [A]T[B] CGNE dng gii h dng [A][A]T[Y] = [B] i vi [Y] v sau gii h [X] = [A]T[Y] Khi ma trn [A] khng i xng, khng suy bin th [A][A]T v [A]T[A] i xng, xc nh dng nn c th dng phng php CG. Phng php s d cc tiu tng qut GMRES(Generalized Minimal Residual): Phng php GMRES tnh ton dy cc vec t trc giao v kt hp cc ny bng bi ton bnh phng b nht gii v cp nht. Tuy nhin n i hi lu ton b dy. Do vy phng n khi ng li c dng trong phng php ny. Phng php ny tin dng khi ma trn h s khng i xng. Phng php gradient lin hp kp BiCG(Biconjugate Gradient): Phng php ny to ta hai dy vec t ging nh CG, mt da trn h vi ma trn [A] v mt da trn [A]T.

Thay v trc giao ho mi dy, chng trc giao tng h hai trc giao kp. N rt hu t khi ma trn c ma trn h s khng i xng, khng suy bin. Phng php gn nh s d cc tiu QMR(Quasi Minimal Residual): Phng php QMR dng bnh phng ti thiu gii v cp nht s d BiCG. Phng php ny dng cho h phng trnh c ma trn h s khng i xng. Phng php gradient lin hp bc 2 CGS(Conjugate Gradient Squared): Phng php CGS l mt bin th ca BiCG, dng cp nht dy [A] v [A]T. Phng php ny c u im l khng cn nhn vi ma trn h s chuyn v v c dng cho h phng trnh i s tuyn tnh c ma trn h s khng i xng. Phng php gradient lin hp kp n nh BiCGSTAB(Biconjugate Gradient Stabilized): Phng php BiCGSTAB cng l mt bin th ca BiCG. N c dng cho h phng trnh c ma trn h s khng i xng. Phng php Chebyshev: Phng php ny tnh lp cc a thc vi cc h s c chn cc tiu ho chun ca s d theo ngha min max. Ma trn h s phi xc nh dng. N c dng cho h phng trnh c ma trn h s khng i xng. Ta bit rng tc hi t ca php lp ph thuc rt nhiu vo ph ca ma trn(cc gi tr ring ca ma trn). Do vy php lp thng a thm mt ma 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 preconditioner tt s ci thin s hi t ca phng php lp. Nhiu trng hp, nu khng c preconditioner, php lp s khng hi t. Preconditioner n gin nht chnh l ma trn ng cho m Mi,j = Ai,j nu i = j v cc phn t khc bng zero. Ma trn nh vy gi l ma trn iu kin trc Jacobi. Trong tnh ton, tn ti hai loi ma trn iu kin trc: ma trn [M] xp x ma trn [A] v lm cho vic gii h [M][X] = [B] d hn gii h [A][X] = [B] ma trn [M] xp x [A]1 sao cho ch cn tnh [M][B] l c [X] Phn ln cc ma trn [M] thuc loi th nht. 7. PHNG PHP LP JACOBI Xt h phng trnh AX = F. Bng cch no ta a h phng trnh v dng

X = BX + G trong : B = (bij)n,n G = (g1,g2,...,gn)T Chn vect: X = ( x1(o),x2(o),....,xn(o) )T lm xp x th 0 ca nghim ng v xy dng xp x X(m+1) = BX(m) + G ( m = 0,1,....) Ngi ta chng minh rng nu phng trnh ban u c nghim duy nht v mt trong ba chun ca ma trn B nh hn 1 th dy xp x hi t v nghim duy nht . Cho mt ma trn B, chun ca ma trn B, k hiu B l mt trong 3 s : B 1 = max b ij i j=1 n n B 2 = max b ij j j=1 n n 2 B 3 = b ij i =1 j=1 (Chun ca ma trn quan h ti s hi t ca phng php lp) Ta xy dng hm jacobi() thc hin thut ton trn: 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 = 1e6; kmax = 100; % jacobi(a, b, x0) elseif kmax < 1 tol = max(kmax, 1e16); kmax = 100; %jacobi(a, b, x0, tol) else tol = 1e6; %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 1/ 2

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 gii phng trnh ta chng trnh ctjacobi.m: b = [1 1]; a = [3 2;1 2]; x0 = [0 0]; x = jacobi(a, b, x0, 20)

8. PHNG PHP LP GAUSS SEIDEL


Phng php lp Gauss Seidel c ci tin t phng php Jacobi. Ni dung c bn ca phng php l ch khi tnh nghim xp x th (k+1) ca n xi ta s dng cc xp x th (k+1) tnh ca cc n x1,...,xi1. Gi s cho h [A][X] = [B] th ta c nghim : x i = i + ij x j j= 1 n i = 1,..., n Ly xp x ban u tu x1(o) , x2(o) ,...., xn(o) v tt nhin ta c gng ly chng tng ng vi x1, x2 ,..., xn (cng gn cng tt). Tip theo ta gi s rng bit xp x th k xi(k) ca nghim. Theo Seidel ta s tm xp x th (k+1) ca nghim theo cc cng thc sau : x (1k +1) = 1 + ij x (j k ) j=1 n n

x ( k + 1) 2 = 1 + 21 x i 1 j=1 ( k + 1) 1 + ij x (j k ) j= 2 n ...... x (i k +1) = i + ij x (j k +1) + ij x (j k ) j= i

x (nk +1) = n + ij x (j k +1) + nn x (nk ) j=1 n 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 chng ta xt mt v d c th: Cho h phng trnh : 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 nghim ng ca h l (1 , 1, 1) Ta a v dng thun tin cho php lp : 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 Ly x1(o) = 1.2 ; x2(o) = 0 ; x3(o) = 0 S dng phng php lp Gauss Seidel ta c: x(1) = 1.2 0.1 0 0.1 0 = 1.2 1 (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.2 0.1 1.06 0.1 0.948 = 0.9992 1 (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 v c th tip tc cho n khi hi t. Ta xy dng hm gausseidel() thc hin thut ton trn: function x = gausseidel(a, b, x0, kmax) %Tim nghiem cua he AX = B bang cach lap GaussSeidel. if nargin < 4 kmax = 100; end if nargin < 3 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:na1 tmp = b(m, :) a(m, 1:m1)*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 gii phng trnh ta chng trnh ctgausseidel.m: b = [1 1]; a = [3 2;1 2]; x0 = [0 0]; x = gausseidel(a, b, x0, 20)

9. PHNG PHP LP RICHARDSON


Trong cc php lp ni trn, ma trn [B] khng thay i. By gi ta xt cc phng php lp c [B] thay i.

Phng php n gin nht l phng php lp Richardson. Ta c cng thc lp sau: x(k +1) = x(k) + P 1r(k) Trong l thng s relaxation v s d r(k) c tnh bng: r(k) = b Ax(k) Ma trn lp ln k l: 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 chng minh l php lp Richardson hi t khi: 2Re( i ) 0<< 2 i Ta xy dng hm richardsoniter() thc hin thut ton trn: 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 end end omega = alfa1/2; for i = 1:maxiter r = b a*x; x = x + omega*r; if norm(r) < tol break; end end gii h phng trnh ta dng chng trnh ctrichardsoniter.m alfa1 = alfa;

clear all, clc a = [ 10 1 1;1 10 2; 2 2 10]; b = [12 13 14]; x = [ 0 0 0]; maxiter = 50; tol = 1e6; x = richardsoniter(a, b, x, maxiter, tol)

10. PHNG PHP SOR


Gi s ta dng phng php lp gii h phng trnh tuyn tnh [A][X] = [B] v [Xk] l nghim gn ng. Nh vy ta c vec t s d l: [Rk] = [B] [A][Xk] Nu xp x tt th [Rk] 0. Mt phng php da trn vic gim chun ca vec t d s to ra dy s [Xk] hi t nhanh hn. Phng php SOR(succesive over relaxtion l phng php gii cc phng trnh trong sai s c gim lin tip cho n khi t c sai s mong mun) a vo mt tham s tng tc hi t. Ta kho st ma trn [A] bc n. Ta chia [A] thnh 3 phn: phn ng cho chnh [D], phn bn di ng cho chnh [L] v phn bn trn ng cho chnh [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, nghim ca h phng trnh tuyn tnh, khi cho gi tr ban u [X0] c tnh bng cng thc lp: [Xk+1] = M[Xk] + C Trong : M = ([D] [L])1{ (1 )[D] + [U]} C = ([D] [L])1[B] Khai trin cc phn t ta c: x(k +1) = ( 1 ) x(k) + i i (k +1) (k) bi a ijx j a ijx j a ii j< i j> i Phng php rt hiu qu khi s phng trnh ln. Nu = 1 ta c php lp Gauss Seidel. Ta xy dng hm soriter() thc hin thut ton ny. function y = soriter(a, b, omega, x0, kmax) %cu phap y = soriter(a, b, omega, x0, kmax) % giai he pt bang pp SOR %vao % a, b la cac ma tran he so % x0 la nghiem ban dau % kmax so lan lap max %ra % x la nghiem n = size(a,1); if nargin < 5 kmax = 100; end if nargin < 4 kmax = 100; x0 = zeros(1,n); end if nargin < 3 kmax = 100; x0 = zeros(1,n); omega = 1; end if size(x0, 1) ==1 x0 = x0; end x = x0; kmax = 100; for k = 1: kmax x(1, :) = (1omega)*x(1,:) + omega*(b(1, :) a(1, 2:n)*x(2: n, :))/a(1,1);

for m = 2:n1 tmp = b(m, :) a(m, 1:m1)*x(1: m 1, :) a(m, m + 1:n)*x(m + 1:n,:); x(m, :) = (1 omega)*x(m,:) + tmp*omega/a(m, m); end x(n, :) = (1 omega)*x(n,:) + omega*(b(n,:) a(n,1:n 1)*x(1:n 1,:))/a(n, n); 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 y = x; gii h phng trnh 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 ta dng chng trnh ctsoriter.m clear all, clc a = [ 2 1 0 0 0 0 0 0 0; 1 2 1 0 0 0 0 0 0; 0 1 2 1 0 0 0 0 0; 0 0 1 2 1 0 0 0 0; 0 0 0 1 2 1 0 0 0; 0 0 0 0 1 2 1 0 0; 0 0 0 0 0 1 2 1 0; 0 0 0 0 0 0 1 2 1; 0 0 0 0 0 0 0 1 2]; b = [1; 2; 3; 4; 5; 4; 3; 2; 1]; x0 = [1 1 1 1 1 1 1 1 1 ]; x = soriter(a, b,1.25, x0, 500) 11. PHNG PHP SSOR Nu ma trn h s [A] l i xng th php lp SSOR kt hp hai ln tnh theo SOR sao cho ma trn kt qu ging vi ma trn i xng. c bit ln thc hin SOR u tin l: 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. Nh vy SSOR l lp SOR thun v sau l SOR ngc. Di dng ma trn, php lp SSOR l: [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] l ma trn ca php lp SOR cn [B2] cng tng t nhng i vai tr ca [U] v [L] Ta xy dng hm ssoriter() thc hin thut ton ny: function x = ssoriter(a, b, x1, omega, maxiter, tol) % ham thuc hien thuat toan SSOR if size(x1, 1) == 1 x1 = x1; end n = length(a); d = zeros(n); for i = 1:n d(i, i) = a(i, i); end l = tril(a); for i = 1:n l(i, i) = 0; end; u = triu(a); for i = 1:n u(i, i) = 0; end; u = u; l = l; b1 = inv(d omega*u)*(omega*l + (1 omega)*d); b2 = inv(d omega*l)*(omega*u + (1 omega)*d); for k = 1: maxiter x = b1*b2*x1 + omega*(2 omega)*inv(d omega*u)*d*inv(d omega*l)*b; if norm(x x1) <= tol break; end x1 = x; end

gii h phng trnh ta dng chng trnh ctssoriter.m clear all, clc a = [4 1 1;1 4 2;1 2 4]; b = [ 12 1 5]; maxiter = 50; tol = 1e6; x1 = [0 0 0]; omega = 1.2; x = ssoriter(a, b, x1, omega, maxiter, tol) 12. PHNG PHP ARNOLDI V LANCZOS Mt bin th ca thut ton Arnoldi l thut ton do nh ton hc Hungary Lanczos a ra. Thut ton gm cc bc sau: cho [X0] tnh [R0] = [B] [A][X0] [R ] = R 0 2 v v1 = 0 lp k = 0, 1, 2,..., maxiter w = [ A ] v j v j1 nu j = 1 cho 1v0 0

= w T v j j wj = wj jvj j+1 = w j nu j+1 = 0 thot khi vng lp 2 vj+1 = wj j+1

Tm = tridiag(j, i, j+1) V = [v1, v2,..., vm] y = Tm1 ( e1 ) xm = x0 + Vmym Ta xy dng hm lanczos4sys() thc hin thut ton trn function x = lanczos4sys(a, b, x0, maxiter, tol) % hamf giai he phuong trinh bang thuat toan Lanczos r0 = b a*x0; nres0 = norm(r0, 2); if nres0 ~= 0 V = r0/nres0; Z = V; gamma(1) = 0; beta(1) = 0; k = 1; nres = 1; while k <= maxiter & nres > tol vk = V(:, k); zk = Z(:, k); if k == 1, vk1 = 0*vk; zk1 = 0*zk; else vk1 = V(:, k1); zk1 = Z(:, k1); end alpha(k) = zk*a*vk; tildev = a*vk alpha(k)*vk beta(k)*vk1; tildez = a*zk alpha(k)*zk gamma(k)*zk1; gamma(k+1) = sqrt(abs(tildez*tildev)); if gamma(k+1) == 0

13. PHNG PHP DC LN NHT Ta kho st bi ton tm cc tr ca hm (1) f([X]) = 0.5[X]T[A][X] [B][X] vi [A] l ma trn i xng, xc nh dng. Do f([X]) t cc tr khi gradient f([X]) = [A][X] [B] = 0 nn bi ton tm cc tr tng ng vi vic gii h phng trnh i s tuyn tnh: [A][X] = [B] (2) Ta bit rng gradient l hng hm tng nhanh nht. Nh th mun i n cc tiu ta cho [X], tnh gradient v tm theo hng ngc li cho n khi hm khng gim na. Phng php dc ln nht (steepest descent) thc hin thut ton lp, bt u t [X0]. Ti ln lp th k, nghim c hiu chnh bng: [Xk+1] = [Xk] + k[Rk] (3) Gi tr ca c xc nh bng: T [R k ] [R k ] k = T [ R k ] [ A ][ R k ]

Nh vy thut ton steepest descent l: cho [X0] tnh [R0] = [B] [A][X0] lp k = 1, 2,... T [R k ] [R k ] k = T [ R k ] [ A ][ R k ] [Xk+1] = [Xk] + k[Rk] [Rk+1] = [B] [A][Xk+1] cho n khi hi t Thut ton ny c nhc im l hi t khng nhanh. Ta xy dng hm steepest() thc hin thut ton trn: function x = steepest(a, b, x, maxiter, tol) % Steepest descent r = b a*x; k = 1; while k <= maxiter & norm(r)>tol ar = a*r; alpha = (r*r)/(r*ar); x = x + alpha*r;

r = r alpha*ar;

k = k + 1; end

gii h phng trnh ta dng chng trnh ctsteepest.m clear all, clc a = [4 1 1; 1 4 2;1 2 4]; b = [ 12 1 5]; maxiter = 50; tol = 1e 6; x = [0 0 0]; x = steepest(a, b, x, maxiter, tol) 14. PHNG PHP CG Thut ton gradient lin hp c Hestennes v Stiefel trnh by nm 1952. N thch hp gii cc h phng trnh c ma trn [A] i xng, xc nh dng. N l trng hp c bit ca phng php Lanczos khi ma trn h s i xng, xc nh dng. Phng php gradient thc hin thut ton lp, bt u t [X0]. Ti ln lp th k, nghim c hiu chnh bng: [Xk+1] = [Xk] + k[Sk] (1) di ca k c chn sao cho [Xk+1] cc tiu f([Xk+1]) theo hng tm [Sk]. Nh vy [Xk+1] phi tho mn: [A]([Xk] + k[Sk]) = [B] (2) S d ca php lp l: [Rk] = [B] [A][Xk] (2) Nh vy (4) tr thnh: k[A][Sk] = [Rk] (4) T ta c: Nhn c hai v ca (4) vi [Sk] T [Sk ] [R k ] k = (5) T [ S k ] [ A ][ S k ] Ta chn [Sk] theo gradient lin hp: [Sk+1] = [Rk+1] + k[Sk] (6) Hng s k sao cho hai hng tm lin tip lin hp vi nhau, ngha l:

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

Nh vy thut ton gradient lin hp l: cho [X0] tnh [R0] = [B] [A][X0] [R0] = [S0] lp k = 0, 1, 2,... T [Sk ] [R k ] k = T [ S k ] [ A ][ S 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] cho n khi hi t Ta xy dng hm conjgradient() thc hin thut ton trn function x = conjgradient ( a, b, x1, maxiter, tol ) % giai pt AX = B bang pp gradient lien hop % cu phap

% x = conjgradient ( a, b, x1, maxiter, tol ) if nargin < 5 tol = 1e 6; end if nargin < 4 tol = 1e 6; maxiter = 50; end if size(x1, 1) == 1 x1 = x1; end r1 = b a*x1; s1 = r1; for k = 1:maxiter alfa = (s1*r1)/(s1*a*s1); x2 = x1 + alfa*s1; r2 = b a*x2; if norm(r2) < tol break end beta = (r2*a*s1)/(s1*a*s1); s2 = r2 + beta*s1; s1 = s2; x1 = x2; end x = x2 gii h phng trnh ta dng chng trnh ctconjgradient.m clear all, clc a = [4 1 1; 1 4 2;1 2 4]; b = [ 12 1 5]; maxiter = 50; tol = 1e 6; x1 = [0 0 0]; x = conjgradient(a, b, x1, maxiter, tol); Ta cng c th dng k thut preconditionning cho phng php CG. Thut ton s l: Chn [X0] tnh [R0] = [B] [A][X0] Lp t i = 1, 2,..,maxiter [Zi 1] = [M] 1[Ri 1] i1 = [ R i1 ] [ Z i1 ] T Nu i = 1 [P1] = [Z0] khng th:

i1 i 2 [Pi] = [Zi 1] + i 1[Pi 1] [Qi] = [A][Pi] i1 i = T [Pi ] [Qi ] i1 = [Xi] = [Xi 1] + i[Pi] [Ri] = [Ri 1] i[Qi] cho n khi hi t Ta xy dng hm pcg() thc hin thut ton trn function y = pcg ( a, b, x, M, maxiter, tol ) % giai pt AX = B bang pp gradient lien hop co preconditionner % cu phap % x = conjgradient ( a, b, x1, M, maxiter, tol ) r = b a*x; if nargin < 6 tol = 1e 6; end if nargin < 6 tol = 1e 6; maxiter = 50; end if size(x, 1) == 1 x = x; end for iter = 1 : maxiter z = M\r; rho = ( r * z ); if ( iter == 1 ) p = z; else beta = rho / rho_1; p = z + beta * p;

end q = a * p; alpha = rho / ( p * q ); x = x + alpha * p; r = r alpha*q; if norm(r) < tol break; end rho_1 = rho; end y = x; gii h phng trnh ta dng chng trnh ctpcg.m clear all, clc a = [4 1 1; 1 4 2;1 2 4]; b = [ 12 1 5]; maxiter = 50; tol = 1e 6; x = [0 0 0]; for i = 1:3 M(i, i) = a(i, i); end x = pcg(a, b, x, M, maxiter, tol) 15. PHNG PHP CGNE Ta xt h phng trnh [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(thut ton Craig) gm cc bc: Chn [X0], tnh [R0] = [B] [A][X0] Tnh [S0] = [A]T[R0] [P0] = [S0] Lp cho n khi hi t [Vk] = [A][Pk]

You might also like