You are on page 1of 19

I.

Phn tch ma trn theo phng php cholesky


Thut ton Choleski cho php phn tch ma trn [A] thnh tch hai ma trn: [A] = [L][L] T 1.Chng trnh
Hm euler(): Gi hm : [X,Y]=euler(fxy,xo,xf,yo,n) u vo : fxy:chui bin vi tn chc nng ca tp tin chc nng c cha f(x,y) xo,xf:gi tr ban u v gi tr cui cng ca bin c lp(v hng) yo:gi tr ban u ca bin ph thuc ti xo(vector ct) n:s khong thi gian s dng gia xo,xf. u ra: X = vector c cha gi tr ca bin c lp Y = c tnh bin ph thuc vo mi gi tr ca bin c lp

2.Hm thc hin function [X, Y] = euler(fxy,xo,xf,yo,n) % %Giai phuong trinh y?(x) = f(x,y(x)) hay y = f(x) if n < 2 n = 2; end h = (xf-xo)/n; X = zeros(n+1,1); M = max(size(yo));% so phuong trinh (so cot cua ma tran Y) Y = zeros(n+1,M); %dat dieu kien dau x = xo; X(1) = x; y = yo; Y(1,:) = y';

II.

Xy dng hm bng phng php Gauss-Jordan

M t phng php. a. tng. Chng ta bit rng cc nghim ca h khng i nu ta thay mt hng bng t hp tuyn tnh cc hng khc. Ta xt mt h phng trnh i s tuyn tnh c ma trn [A] khng suy bin vi m=n=3. Phng trnh c dng:
a11x1+a12x2+a13x3=b1a21x1+a22x2+a23x3=b2a31x1+a32x2+a33x3=b3

(1) Trc ht ta kh x1 ra khi cc phng trnh, ngoi tr phng trnh u tin, bng cch nhn phng trnh u tin vi ai1/a11 (i l ch s hng) v tr i mi phng trnh :
a11(0)x1+a12(0)x2+a13(0)x3=b1(0) a32(1)x2+a33(1)x3=b3(1) a22(1)x2+a23(1)x3=b2(1)

(2)
bi(0)=bi

Trong :
aij(0)=aij aij(1)=aij(0)-ai1(0)a11(0)a1j(0)

vi i=1, j=1,2,3.
bi(1)=bi(0)-ai1(0)a11(0)b1(0)

vi

i,j=2,3. Vic ny gi l ly tr ti a11 gi l tr. Tip theo ta kh x2 trong phng trnh th 3 ca (2) bng cch ly phng trnh th 2 nhn vi ai2(1)/a22(1) (i=3) v tr i phng trnh th 3:
a11(0)x1+a12(0)x2+a13(0)x3=b1(0) a33(2)x3=b3(2) a22(1)x2+a23(1)x3=b2(1)

(3)
bi(2)=bi(1)-ai2(1)a22(1)b2(1)

Trong :
aij(2)=aij(1)-ai2(1)a22(1)a2j(1)

vi i,j=3

(4) Qu trnh ny c gi l thut ton kh Gauss tin v c tng qut ha thnh:


aijk=aijk-1-aikk-1akkk-1akjk-1

i,j =k+1,k+2,.,m.

(5)
bi(k)=bi(k-1)-aik(k-1)akk(k-1)bk(k-1)

i=k+1,k+2,..,m

b.Thut ton thc hin thut ton kh Gauss ta dng on m lnh: 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 phng trnh dng tam gic ta tm nghim d dng. T phng trnh th 3 ca (3) ta c:
x3=b3(2)a33(2)

(6a) (6b) (6c)

Thay vo phng trnh th 2 ta c:


x2=b21-a231x3a221

v cui cng t phng trnh th nht ta c:


x1=1a11(0)b1(0)-j=23a1j(0)xj

Ta cng c th tng qut ha qu trnh tm nghim bng cch tnh li v tm nghim bng:
xi=1aii(i-1)bi(i-1)-j=i+1maij(i-1)xj

i=m,m-1,,1

(7)

v tm nghim bng on m lnh: for k=n:-1:1 b(k)=(b(k)-A(k,k+1:n)*b(k+1:n)/A(k,k); end

Nh vy phng php Gauss gm hai bc: -kh theo thut ton Gauss -tm nghim ca phng trnh dng tam gic on m ln tro hng c vit trong hm swaprows(): 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 xy dng hm gauss() thc hin thut ton kh Gauss function x=gauss(A,B) % Kch thc ca ma trn A,B l NA x NA v NA x NB. %Hm ny dng gii h pt Ax=B bng phng php kh Gauss NA=size(A,2); [NB1,NB)=size(B); if NB1~=NA error(A v B phi c kch thc tng ng); end N=NA+NB; AB=[A(1:NA,1:NA) B(1:NA,1:NB)]; epss=eps*ones(NA,1); for k=1:NA %Chn tr 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 trn suy bin v nghim khng duy nht); end mx=k+kx-1; if kx>1 % tro hng khi cn 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); AB(m,k)=0; end end %Tm nghim 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,:); end
III.

Phng php lp Gauss-seidel

M t phng php Xt h phng trnh dng:

Biu din h phng trnh trn di dng ma trn sau: [A][x]=[b] Trong :

tng chung ca phng php Gauss-Seidel l a h Ax = b v dng : x = Bx + g. Tc l a h phng trnh trn v dng:

Tng qut vi i=1,2,,n ta vit:

Hay vit gn hn l: x = Bx + g Khi B c gi l ma trn lp v:

Tip theo ta chn xp x ban u ty x10, x20, , xn0 v tt nhin ta c gng ly chng tng ng vi x1, x2, , xn (cng gn cng tt). Tip theo ta gi s rng xp x th k l xi(k) ca nghim bit. Theo Seidel, xp x th (k+1) c tnh theo cng thc:

Qu trnh tnh ton s dng li khi xp x xk ca nghim tha mn: | xik+1 xik |< , vi mi i=1,2,n v sai s cho trc. iu kin hi t ca nghim: H phng trnh c ma trn lp B tha mn mt trong 3 iu kin sau th qu trnh lp s hi t:

M chng trnh Matlab ta xy dng hm gauss_seidel(N,a,x0,eps,maxl) theo tng ca phng php Gauss-Sedel. Trong : N: l hng ca ma trn h phng trnh. a: l ma trn h s ca cc bin. x0: l ma trn xp x ban u ca nghim (ty chn, tuy nhin s phn t phi bng N). eps: l sai s ca nghim tnh theo Gauss-Seidel so vi nghim ng ( ty theo yu cu bi ton). maxl: l s ln lp ln nht function [x,ss,n]=gauss_seidel(N,a,x0,eps,maxl) n=0; kt=0; for l=1:maxl n=n+1;% dem so lan lap tim nghiem for k=1:N sum=0; for j=1:N if j<k, sum=sum+a(k,j)*x(j); elseif j>k, sum=sum+a(k,j)*x0(j); end; end; x(k)=(a(k,N+1)-sum)/a(k,k);%ham lap end; ss=0; for k=1:N

if abs(x(k)-x0(k))>ss ss=abs(x(k)-x0(k));%tinh sai so end; end; if ss<eps kt=1; break; else kt=0; end; for k=1:N x0(k)=x(k); end; end; clc; disp('------ DAU VAO ------') disp('Ma tran he so:') disp(a) fprintf('N= %d, eps= %f, maxl= %d',N,eps,maxl\n) disp(' '\n) disp('------ KET QUA ------') if(kt==1) fprintf(' Nghiem cua he phuong trinh hoi tu sau %d lan lap:',n) else disp(' Chua thoa man sai so, can tang so vong lap') end IV.Phng php lp Richardson 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 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 gii h phng trnh ta dng chng trnh ctrichardsoniter.m clear all, clc a = [ 10 1 1;1 10 2; 2 2 10]; b = [12 13 14]'; x = [ 0 0 0]'; maxiter = 50; tol = 1e-6; x = richardsoniter(a, b, x, maxiter, tol)
V.

Phng php ni suy Lagrange

function l = lagrange(x,y) %Dua vao : x = [x0 x1 ... xn], y = [y0 y1 ... yn] %ket qua: l = He so cua da thuc Lagrange bac n n = length(x)-1; %bac cua da thucl l = 0; for m = 1:n+1 p = 1; for k = 1:n+1 if k ~= m p = conv(p, [1 -x(k)])/(x(m) - x(k)); end end l = l + y(m)*p; a = x(1,1):0.2:x(1,n); hamso=polyval(l,a); plot(x,y,'o',a,hamso); end

VI.

Ni suy newton

Ta xy dng hm newton() ni suy: function [n,DD] = newton(x,y) %Dua vao : x = [x0 x1 ... xN] % y = [y0 y1 ... yN] %Lay ra: n = he so cua da thuc Newton bac N N = length(x) - 1; DD = zeros(N + 1, N + 1); DD(1:N + 1, 1) = y'; for k = 2:N + 1 for m = 1: N + 2 - k DD(m,k) = (DD(m + 1, k - 1) - DD(m, k - 1))/(x(m + k - 1) - x(m)); end end a = DD(1, :); n = a(N+1); for k = N:-1:1 n = [n a(k)] - [0 n*x(k)]; end Cho hm di dng bng: x -2 -1 1 2 4 y -6 0 0 6 60 Ta dng chng trnh ctnewton.m ni suy: clear all, clc x = [-2 -1 1 2 4]; y = [-6 0 0 6 60]; a = newton(x, y) yx = polyval(a, 2.5) VII. Phng php lp n Gi s phng trnh (1) c a v dng tng ng: x = g(x) (2) t gi tr xo no gi l gi tr lp u tin ta lp dy xp x bng cng thc: xn = g(xn-1) (3) vi n = 1,2,....

Hm g(x) c gi l hm lp. Nu dy xn khi n th ta ni php lp (3) hi t. Ta c nh l: Xt phng php lp (3), gi s: - [a, b] l khong cha nghim ca phng trnh (1) tc l ca (2) - mi xn tnh theo (3) u thuc [a, b] - g(x) c o hm tho mn : g(x) <=q<1 a<x<b (4) trong q l mt hng s th phng php lp (3) hi t Ta c th minh ho php lp trn bng hnh v sau. Ta xy dng hm simpiter() lp function [x, err, xx] = simpiter(g, x0, tolx, maxiter) % giai pt x = g(x) tu x0 bang cah lap %vao : g, x0 = ham va gia tri dau % tolx = sai so mong muon % maxiter = so lan lap max %ra: x = nghiem % err = sai so |x(k) - x(k - 1)| % xx = cac gia tri trung gian if nargin < 4 maxiter = 100; end if nargin < 3 tolx = 1e-6; end xx(1) = x0; for k = 2:maxiter xx(k) = feval(g, xx(k - 1)); err = abs(xx(k) - xx(k - 1)); if err < tolx break; end end x = xx(k); if k == maxiter fprintf('Khong hoi tu sau %d lan lap\n', maxiter)

else fprintf('Hoi tu sau %d lan lap\n',k) end tnh li v d trn ta dng chng trnh ctsimpiter4_2.m clear all, clc f = inline('-0.5*((x - 1).^2 - 3)'); [x, ss, xx] = simpiter(f, 0.5,.00001,200) VIII. Tnh o hm bc cao Ta xy dng hm diffn() tnh o hm ti bc 5: function df = diffn(f, n, x) % Tinh dao ham cap n cua f tai x if n>5 error('Ham chi tinh duoc dao ham den bac 5'); return; end; N = 5; xo = x; T(1) = feval(f,xo); h = 0.005; tmp = 1; for i = 1:N tmp = tmp*h; c = difapx(i,[-i i]); %he so cua dao ham dix = c*feval(f,xo + [-i:i]*h)'; T(i+1) = dix/tmp; %dao ham end df = T(n+1); h = 0.005; tmp = 1; for i = 1:N tmp = tmp*h; c = difapx(i,[-i i]); %he so cua dao ham dix = c*feval(f,xo + [-i:i]*h)'; %/h^i; %dao ham T(i+1) = dix/tmp; %he so cua chuoi Taylor end

df = T(n+1); tnh o hm ca hm ta dng chng trnh ctdiffn.m clear all, clc f = inline('x.^2 + atan(x)','x'); df = diffn(f, 5, 0)

IX. Phng php Euler A. M t phng php 1.nh ngha Phng php chui Taylor cp p=1 c gi l phng php Euler xi+1 = xi + h, yi+1 = yi + hf(xi, yi) V phng din hnh hc,nghim gn ng cho bi phng php Euler c minh ha bi mt ng gp khc m on u tin trng vi tip tuyn vi ng cong nghim ti x0. 2.Phng php Gi s ta c phng trnh vi phn:
y'x=fx,yya=

V cn tm nghim ca n.Ta chia on[xo,x] thnh n phn bi cc im chia x0 < x1 < x2 <...< xn = x Theo cng thc khai trin Taylor mt hm ln cn xi ta c:

(1) Nu (xi+1-xi) kh b th ta c th b qua cc s hng (xi+1-xi)2 v cc s hng bc cao y(xi+1) = y(xi) + (xi+1 xi)y(xi)

Trng hp cc mc cch u : (xi-1 xi) = h = (x x0)/ n th ta nhn c cng thc Euler n gin: yi+1=yi+hf(xi,yi) (2) V mt hnh hc ta thy (1) cho kt qu cng chnh xc nu bc h cng nh . B. Chng trnh ci t 1.Chng trnh
Hm euler(): Gi hm : [X,Y]=euler(fxy,xo,xf,yo,n) u vo : fxy:chui bin vi tn chc nng ca tp tin chc nng c cha f(x,y) xo,xf:gi tr ban u v gi tr cui cng ca bin c lp(v hng) yo:gi tr ban u ca bin ph thuc ti xo(vector ct) n:s khong thi gian s dng gia xo,xf. u ra: X = vector c cha gi tr ca bin c lp Y = c tnh bin ph thuc vo mi gi tr ca bin c lp

2.Hm thc hin function [X, Y] = euler(fxy,xo,xf,yo,n)

% %Giai phuong trinh y?(x) = f(x,y(x)) hay y = f(x) if n < 2 n = 2; end h = (xf-xo)/n; X = zeros(n+1,1); M = max(size(yo));% so phuong trinh (so cot cua ma tran Y) Y = zeros(n+1,M); %dat dieu kien dau x = xo; X(1) = x; y = yo; Y(1,:) = y'; for i = 1:n if nargin(fxy)>1; k1 = h*feval(fxy,x,y); else k1 = h*feval(fxy,x); end y = y + k1; x = x + h; X(i+1) = x; Y(i+1,:) = y'; end function dy = f1(t,y) dy = zeros(3,1); dy(1) = y(2)*y(3); dy(2) = -y(1)*y(3); dy(3) = -0.51*y(1)*y(2);
X.

Phng php newton(BT ti u)

Vic tm im cc tiu ca hm f(x) tng ng vi vic xc nh x gradient g(x) ca hm f(x) bng zero. Nghim ca g(x) = 0 c th tm c bng c dng phng php Newton cho h phng trnh phi tuyn. Hm newtons(x) dng tm nghim ca phng trnh g(x) = 0 l: function [x, fx, xx] = newtons(f, x0, tolx, maxiter) h = 1e-4; tolfun = eps; EPS = 1e-6;

fx = feval(f, x0); nf = length(fx); nx = length(x0); if nf ~= nx error('Kich thuoc cua g va x0 khong tuong thich!'); end if nargin < 4 maxiter = 100; end if nargin < 3 tolx = EPS; end xx(1, :) = x0(:).'; for k = 1: maxiter dx = -jacob(f, xx(k, :), h)\fx(:);%-[dfdx]-1*fx xx(k + 1, :) = xx(k, :) + dx.'; fx = feval(f, xx(k + 1, :)); fxn = norm(fx); if fxn < tolfun | norm(dx) < tolx break; end end x = xx(k + 1, :); if k == maxiter fprintf('Ket qua tot nhat sau %dlan lap\n', maxiter) end function g = jacob(f, x, h) %Jacobian cua f(x) if nargin < 3 h = 1e-4; end h2 = 2*h; n = length(x); x = x(:).'; I = eye(n); for n = 1:n g(:, n) = (feval(f, x + I(n, :)*h) - feval(f, x - I(n,:)*h))'/h2; end tm cc tiu ca hm bng phng php Newtons ta dng chng trnh ctnewtons.m:

clear all, clc f = inline('x(1).^2 - x(1)*x(2) - 4*x(1) + x(2).^2 - x(2)'); g = inline('[(2*x(1) - x(2) -4) ( 2*x(2) - x(1) - 1)]'); x0 = [0.1 0.1]; tolx = 1e-4; maxiter = 100; [xo, fo] = newtons(g, x0, tolx, maxiter)

You might also like