matlab co ban

474
  1 CHƯƠ NG 1: MATLAB CƠ  BN §1. CÁC TOÁN TỬ  CƠ  BN CA MATLAB 1. Các toán t ử  cơ  bn: Matlab là mt phn mm cao c p dùng để gii các bài toán. Để khở i động MATLAB ta b m đúp vào icon ca nó. Các file MATLAB có d ng * .m và ch ch y trong môi tr ườ ng MATLAB. MATLAB x  s li u nh ư là ma tr n. Khi ta đánh lnh vào ca s l nh, nó s đượ c thi hành ngay và k ết qu hi n lên màn hình.  Nếu ta không mu n cho k ết qu hin lên màn hình thì sau l nh ta đặt thêm du “;”.  Nếu lnh quá dài, không v a mt dòng dòng có th  đánh lnh trên nhi u dòng và cui mi dòng đặt thêm du ... r i xung dòng. Khi so n tho lnh ta có th dùng các phím tt :  Ctrl-P gi li lnh tr ướ c đó  Ctrl-N gi lnh sau  Ctrl-B lùi l i mt kí t   Ctrl-F tiến lên mt kí t  Ctrl- Ctrl-R sang phi mt t Ctrl- Crtl-L sang phi mt t home Ctrl-A v đầu dòng end Ctrl-E v cui dòng esc Ctrl-U xoá dòng del Ctrl-D xoá kí t  ti ch con nháy đứng  backspace Ctrl-H xoá kí t  tr ướ c ch con nháy đứng  Các phép toán c ơ  bn ca MATLAB gm: + cng - tr  * nhân / chia phi \ chia trái ^ lu tha chuyn v ma tr n hay s phc liên hợ  p  Các toán t  quan h : < nh hơ n <= nh hơ n hay bng > lớ n hơ n >= lớ n hơ n hoc bng == bng ~= không bng  Các toán t  logic : & | or ~ not  Các hng :

Upload: hung13579

Post on 09-Jul-2015

292 views

Category:

Documents


0 download

TRANSCRIPT

CHNG 1: MATLAB C BN1. CC TON T C BN CA MATLAB 1. Cc ton t c bn: Matlab l mt phn mm cao cp dng gii cc bi ton. khi ng MATLAB ta bm p vo icon ca n. Cc file MATLAB c dng *.m v ch chy trong mi trng MATLAB. MATLAB x l s liu nh l ma trn. Khi ta nh lnh vo ca s lnh, n s c thi hnh ngay v kt qu hin ln mn hnh. Nu ta khng mun cho kt qu hin ln mn hnh th sau lnh ta t thm du ;. Nu lnh qu di, khng va mt dng dng c th nh lnh trn nhiu dng v cui mi dng t thm du ... ri xung dng. Khi son tho lnh ta c th dng cc phm tt : Ctrl-P gi li lnh trc Ctrl-N gi lnh sau Ctrl-B li li mt k t Ctrl-F tin ln mt k t Ctrl- Ctrl-R sang phi mt t Ctrl- Crtl-L sang phi mt t home Ctrl-A v u dng end Ctrl-E v cui dng esc Ctrl-U xo dng del Ctrl-D xo k t ti ch con nhy ng backspace Ctrl-H xo k t trc ch con nhy ng Cc php ton c bn ca MATLAB gm: + cng tr * nhn / chia phi \ chia tri ^ lu tha chuyn v ma trn hay s phc lin hp Cc ton t quan h : < nh hn ln hn >= ln hn hoc bng == bng ~= khng bng Cc ton t logic : & v | or ~ not Cc hng :1

pi i j eps realmin realmax inf NaN

3.14159265 s o tng t i sai s 2-52 s thc nh nht 2-1022 s thc ln nht 21023 v cng ln Not a number

2. Nhp xut d liu t dng lnh: MATLAB khng i hi phi khai bo bin trc khi dng. MATLAB phn bit ch hoa v ch thng. Cc s liu a vo mi trng lm vic ca MATLAB c lu li sut phin lm vic cho n khi gp lnh clear all. MATLAB cho php ta nhp s liu t dng lnh. Khi nhp ma trn t bn phm ta phi tun theo cc quy nh sau : ngn cch cc phn t ca ma trn bng du , hay du trng dng du ; kt thc mt hng bao cc phn t ca ma trn bng cp du ngoc vung [ ] nhp cc ma trn sau:

1 2 4 A = 3 2 5 1 5 3 ta dng cc lnh:

B = 1 4 2 1

1 C = 4 7

A = [ 1 2 3; 3 -2 4; 1 5 3] B = [ 1 4 2 1] C = [ 1; 4; 7] 3. Nhp xut d liu t file: MATLAB c th x l hai kiu file d liu: file nh phn *.mat v file ASCII *.dat. lu cc ma trn A, B, C di dng file nh phn ta dng lnh: save ABC A B C v np li cc ma trn A, B bng lnh: load ABC A B Nu mun lu s liu ca ma trn B di dng file ASCII ta vit: save b.dat B /ascii2

Ta vit chng trnh ct1_1.m nh sau: clear A = [1 2 3; 4 5 6] B = [3; -2; 1]; C(2) = 2; C(4) = 4 disp(Nhan phim bat ky de xem nhap/xuat du lieu tu file) save ABC A B C %luu A,B & C duoi dang MAT-file co ten ABC.mat clear(A, C) %xoa A va C khoi bo nho load ABC A C %doc MAT - file de nhap A va C vao bo nho save b.dat B /ascii %luu B duoi dang file ASCII co ten b.dat clear B load b.dat %doc ASCII b x = input(Nhap x:) format short e x format rat, x format long, x format short, x 4. Nhp xut d liu t bn phm: Lnh input cho php ta nhp s liu t bn phm. V d: x = input(Nhap x: ) Lnh format cho php xc nh dng thc ca d liu. V d: format rat % so huu ti format long % so s c 14 chu so sau dau phay format long e % so dang mu format hex % so dang hex format short e %so dang mu ngan format short %tro ve so dang ngan (default) Mt cch khc hin th gi tr ca bin v chui l nh tn bin vo ca s lnh MATLAB. Ta cng c th dng disp v fprintf hin th cc bin. V d: disp('Tri so cua x = '), disp(x) Ta vit chng trnh ct1_2.m nh sau:3

clc f = input('Nhap nhiet do Fahrenheit[F]:'); c = 5/9*(f - 32); fprintf('%5.2f(do Fahrenheit) la %5.2f(do C).\n', f, c) fid = fopen('ct1_2.dat', 'w'); fprintf(fid, '%5.2f(do Fahrenheit) la %5.2f(do C).\n', f, c); fclose(fid); Trong trng hp ta mun nhp mt chui t bn phm, ta cn phi thm k t s vo i s. V d: ans = input('Ban tra loi hoac : ','s') 5. Cc hm ton hc: a. Cc hm ton hc c bn: exp(x) hm e x sqrt(x) cn bc hai ca x log(x) logarit t nhin log10(x) logarit c s 10 abs(x) modun ca s phc x angle(x) argument ca s phc a conj(x) s phc lin hp ca x imag(x) phn o ca x real(x) phn thc ca x sign(x) du ca x cos(x) sin(x) tan(x) acos(x) asin(x) atan(x) cosh(x) coth(x) sinh(x) tanh(x) acosh(x) acoth(x) asinh(x) atanh(x) b. Cc hm ton hc t to: MATLAB cho php ta to hm ton hc v lu n vo mt file dng nh l hm c sn ca MATLAB. V d ta cn to hm: 1 f1 (x) = 1 + 8x 24

v hm:2 x1 + 4x 2 5 f1 (x1 ,x 2 ) 2 f2 (x) = = 2x 2 2x 3x 2.5 f2 (x1 ,x 2 ) 1 1 2

Mun th ta to ra file f1.m nh sau: function y = f1(x) y = 1./(1+8*x.^2); v file f2.m: function y = f2(x) y(1) = x(1)*x(1)+4*x(2)*x(2) -5; y(2) = 2*x(1)*x(1)-2*x(1)-3*x(2) -2.5; Khi nhp lnh f1(2) ta c gi tr ca hm f1 ti x = 2. Khi nhp lnh f2([2 4]) ta c gi tr ca hm f2 ti x1 = 2 v x2 = 4. Lnh feval(f1, 2) v feval(f2, [2 4]) cng cho kt qu tng t. Cch th hai biu din mt hm ton hc mt bin trn dng lnh l to ra mt i tng inline t mt biu thc chui. V d ta c th nhp t dng lnh hm nh sau: f1 = inline(1./(1 + 8*x.^2),x); f1([0 1]), feval(f1, [0 1]) Ta cng c th vit: f1 = '1./(1 + 8*x.^2)'; x = [0 1]; eval(f1) Nu hm l a thc ta ch cn nhp ma trn cc h s t s m cao nht. V d vi a thc P4(x) = x4 + 4x3 + 2x + 1 ta vit: P = [1 4 0 2 1] nhn hai a thc ta dng lnh conv; chia 2 a thc ta dng lnh deconv. Mun tnh tr s ca a thc ta dng lnh polyval v lnh polyvalm dng khi a thc l ma trn. c. Cc lnh x l hm: Lnh fplot v th hm ton hc gia cc gi tr cho. V d: fplot(f1, [-5 5 ])5

grid on Cho mt hm ton hc mt bin, ta c th dng lnh fminbnd ca MATLAB tm cc tiu a phng ca hm trong khong cho. V d: f = inline('1./((x - 0.3).^2+0.01) + 1./((x - 0.9).^2 + 0.04) - 6 '); x = fminbnd(f, 0.3, 1) Lnh fminsearch tng t hm fminbnd dng tm cc tiu a phng ca hm nhiu bin. Ta c hm 3 bin lu trong file three_var.m nh sau: function b = three_var(v) x = v(1); y = v(2); z = v(3); b = x.^2 + 2.5*sin(y) - z^2*x^2*y^2; By gi tm cc tiu i vi hm ny bt u t x = -0.6 , y = -1.2 v z = 0.135 bng cc lnh: v = [-0.6 -1.2 0.135]; a = fminsearch('three_var', v) Lnh fzero dng tm im zero ca hm mt bin. V d tm gi tr khng ca hm ln cn gi tr -0.2 ta vit: f = inline('1./((x - 0.3).^2 + 0.01) + 1./((x - 0.9).^2 + 0.04) - 6'); a = fzero(f, -0.2) Zero found in the interval: [-0.10949, -0.264]. a= -0.1316 6. Cc php ton trn ma trn v vec t: a. Khi nim chung: Gi s ta to ra cc ma trn a v b bng cc lnh: a = [1 2 3; 4 5 6]; b = [3 -2 1]; Ta c th sa i chng: A = [a; 7 8 9] B = [b; [1 0 -1]]'6

Ton t dng chuyn v mt ma trn thc v chuyn v lin hp mt ma trn phc. Nu ch mun chuyn v ma trn phc, ta dng thm ton t . ngha l phi vit .. V d: C = [1 + 2*i X = C' Y = C. 2 - 4*i; 3 + i 2 - 2*j];

b. Ch s: Phn t hng i ct j ca ma trn mn c k hiu l A(i, j). Tuy nhin ta cng c th tham chiu ti phn t ca mng nh mt ch s, v d A(k) vi k = i + (j - 1)m. Cch ny thng dng tham chiu vec t hng hay ct. Trong trng hp ma trn y th n c xem l ma trn mt ct di to t cc ct ca ma trn ban u. Nh vy vit A(5) c ngha l tham chiu phn t A(2, 2). xc nh kch thc ca mt ma trn ta dng lnh length(tr v kch thc ln nht) hay size(s hng v ct). V d: c = [1 2 3 4; 5 6 7 8]; length(c) [m, n] = size(c) c. Ton t : : Ton t : l mt ton t quan trng ca MATLAB. N xut hin nhiu dng khc nhau. V d: 1:10 to mt vec t hng cha 10 s nguyn t 1 n 10. Lnh: 100: -7: 50 to mt dy s t 100 n 51, gim 7 mi ln. Lnh: 0: pi/4: pi to mt dy s t 0 n pi, cch u nhau pi/4 Cc biu thc ch s tham chiu ti mt phn ca ma trn. Vit A(1:k, j) l tham chiu n k phn t u tin ca ct j. Ngoi ra ton t : tham chiu ti tt c cc phn t ca mt hng hay mt ct. V d: B = A(:, [1 3 2 ]) to ra ma trn B t ma trn A bng cch i th t cc ct t [1 2 3] thnh [1 3 2]7

d. To ma trn bng hm c sn: MATLAB cung cp mt s hm to cc ma trn c bn: zeros to ra ma trn m cc phn t u l zeros z = zeros(2, 4) ones to ra ma trn m cc phn t u l 1 x = ones(2, 3) y = 5*ones(2, 2) rand to ra ma trn m cc phn t ngu nhin phn b u d = rand(4, 4) randn to ra ma trn m cc phn t ngu nhin phn b trc giao e = randn(3, 3) magic(n) to ra ma trn cp n gm cc s nguyn t 1 n n2 vi tng cc hng bng tng cc ct n phi ln hn hay bng 3. pascal(n) to ra ma trn xc nh dng m cc phn t ly t tam gic Pascal. pascal(4) eye(n) to ma trn n v eye(3) eye(m, n) to ma trn n v m rng eye(3, 4) e. Lp ghp: Ta c th lp ghp(concatenation) cc ma trn c sn thnh mt ma trn mi. V d: a = ones(3, 3) b = 5*ones(3, 3) c = [a + 2; b] f. Xo hng v ct : Ta c th xo hng v ct t ma trn bng dng du []. xo ct th 2 ca ma trn b ta vit: b(:, 2) = []8

Vit x(1: 2: 5) = [] ngha l ta xo cc phn t bt u t n phn t th 5 v cch 2 ri sp xp li ma trn. g. Cc lnh x l ma trn: Cng : X= A + B Tr : X= A - B Nhn : X= A * B : X.*A nhn cc phn t tng ng vi nhau Chia : X = A/B lc X*B = A : X = A\B lc A*X = B : X=A./B chia cc phn t tng ng vi nhau Lu tha : X = A^2 : X = A.^2 Nghch o : X = inv(A) nh thc : d = det(A) 7. To s ngu nhin: MATLAB c cc lnh to s ngu nhin l rand v randn to ra cc s ngu nhin theo phn b Gauss. rand(m, n) to ra ma trn cc s ngu nhin phn b ng nht. randn(m, n) to ra ma trn cc s ngu nhin theo phn b chun Gauss. rand(3, 3) randn(3, 3) 8. Cc lnh dng lp trnh: a. Cc pht biu iu kin if, else, elseif: C php ca if: if end Nu cho kt qu ng th phn lnh trong thn ca if c thc hin. Cc pht biu else v leseif cng tng t. V d: Ta xt chng trnh) ct1_4. m on tui nh sau: clc disp(Xin chao! Han hanh duoc lam quen); x = fix(30*rand); disp(Tuoi toi trong khoang 0 - 30); gu = input(Xin nhap tuoi cua ban: ); if gu < x disp(Ban tre hon toi); elseif gu > x9

disp(Ban lon hon toi); else disp(Ban bang tuoi toi); end b. switch: C php ca switch nh sau : switch case n1 : case n2 : ............... case nn : otherwise : end c. while: vng lp while dng khi khng bit trc s ln lp. C php ca n nh sau: while end Xt chng trnh in ra chuoi Xin chao ln m hnh vi s ln nhp t bn phm ct1_5.m nh sau: clc disp('xin chao'); gu = input('Nhap so lan in: '); i = 0; while i ~= gu disp(['Xin chao' i]); i=i+1 end d. for: vng lp for dng khi bit trc s ln lp. C php nh sau: for = : : Ta xy dng chng trnh on s ct1_6.m: clc x = fix(100*rand); n = 7; t = 1; for k = 1:7 num = int2str(n); disp(['Ban co quyen du doan ', num, ' lan']); disp('So can doan nam trong khoang 0 - 100'); gu = input('Nhap so ma ban doan: ');10

if gu < x disp('Ban doan nho hon'); elseif gu > x disp('So ban doan lon hon'); else disp('Ban da doan dung. Xin chuc mung'); t = 0; break; end n = n - 1; end if t > 0 disp('Ban khong doan ra roi'); numx = int2str(x); disp(['Do la so: ', numx]); end e. break: pht biu break kt thc vng lp for hay while m khng quan tm n iu kin kt thc vng lp tho mn hay cha. 2. HO TRONG MATLAB 1. Cc lnh v: MATLAB cung cp mt lot hm v biu din cc vec t s liu cng nh gii thch v in cc ng cong ny. plot ha 2-D vi s liu 2 trc v hng v tuyn tnh plot3 ha 3-D vi s liu 2 trc v hng v tuyn tnh polar ho trong h to cc loglog ho vi cc trc logarit semilogx ho vi trc x logarit v trc y tuyn tnh semilogy ho vi trc y logarit v trc x tuyn tnh plotyy ho vi trc y c nhn bn tri v bn phi 2. To hnh v: Hm plot c cc dng khc nhau ph thuc vo cc i s a vo. V d nu y l mt vec t th plot(y) to ra mt ng thng quan h gia cc gi tr ca y v ch s ca n. Nu ta c 2 vec t x v y th plot(x, y) to ra th quan h gia x v y. t = [0: pi/100: 2*pi] y = sin(t); plot(t, y) grid on polar(t, y)

11

3. c t kiu ng v: Ta c th dng cc kiu ng v khc nhau khi v hnh. Mun th ta chuyn kiu ng v cho hm plot. Ta vit chng trnh ct1_7.m to ra th hm hnh sin: t = [0: pi/100: 2*pi]; y = sin(t); plot(t, y, . ) % v bng ng chm chm grid on 4. c t mu v kch thc ng v: c t mu v kch thc ng v ta dng cc tham s sau: LineWidth rng ng thng,tnh bng s im MarkerEdgeColor mu ca cc cnh ca khi nh du MarkerFaceColor mu ca khi nh du MarkerSize kch thc ca khi nh du Mu c xc nh bng cc tham s: M r g b c Mu red green blue cyan M m y k w Mu magenta yellow black white

Cc dng im nh du xc nh bng: M + o * d ^ > p Kiu nh du du cng vng trn du sao ht kim cng im tam gic hng ln tam gic sang phi ng gic M . x s v < h Kiu nh du im ch thp hnh vung im tam gic hng xung tam gic sang tri lc gic

Cc dng ng thng xc nh bng: M -Kiu ng ng lin ng t nt M : -. Kiu ng ng chm chm ng chm gch

Ta xt chng trnh ct1_8.m nh sau: x = -pi : pi/10 : pi;12

y = tan(sin(x)) - sin(tan(x)); plot(x, y, '--rs, 'LineWidth', 2, 'MarkerEdgeColor', 'k',... 'MarkerFaceColor', 'g', 'MarkerSize', 10) Chng trnh ny s v ng cong y = f(x) c cc c t sau : - ng v l ng t nt(--) - khi nh du hnh vung (s), ng v mu (r) - ng v rng 2 point - cc cnh ca khi nh mu en - khi nh du mu green - kch thc khi nh du 10 point 5. Thm ng v vo th c: lm iu ny ta dng lnh hold. Khi ta nh lnh hold on th MATLAB khng xo th ang c. N thm s liu vo th mi ny. Nu phm vi gi tr ca th mi vt qu cc gi tr ca trc to c th n s nh li t l xch. 6. Ch v cc im s liu: v cc im nh du m khng ni chng li vi nhau ta dng c t ni rng khng c cc ng ni gia cc im, ngha l ta gi hm plot ch vi c t mu v im nh du. Ta xt chng trnh ct1_9.m nh sau: x = -pi : pi/10 : pi; y = tan(sin(x)) - sin(tan(x)); plot(x, y, 's', 'MarkerEdgeColor', 'k') 7. V cc im v ng: v c cc im nh du v ng ni gia chng ta cn m t kiu ng v kiu im. Ta xt chng trnh ct1_10.m: x = 0:pi/15:4*pi; y = exp(2*sin(x)); plot(x, y, '-r', x, y, 'ok') dng v ng cong y = f(x) c ng ni lin, mu . im nh du l ch o c mu en. 8. V vi hai trc y: Lnh plotyy cho php to mt th c hai trc y. Ta cng c th dng plotyy cho gi tr trn hai trc y c kiu khc nhau nhm tin so snh. Ta xt chng trnh ct1_11.m: t = 0:900; A = 1000; b = 0.005; a = 0.005;13

z2 = sin(b*t); z1 = A*exp(-a*t); [haxes, hline1, hline2] = plotyy(t, z1, t, z2,'semilogy', 'plot'); 9. V ng cong vi s liu 3 - D: Nu x, y, z l 3 vec t c cng di th plot3 s v ng cong 3D. Ta vit chng trnh ct1_12.m: t = 0:pi/50:10*pi; plot3(sin(t),cos(t),t) axis square; grid on 10. t cc thng s cho trc: Khi ta to mt hnh v, MATLAB t ng chn cc gii hn trn trc to v khong cch nh du da trn s liu dng v. Tuy nhin ta c th m t li phm vi gi tr trn trc v khong cch nh du theo ring. Ta c th dng cc lnh sau: axis t li cc gi tr trn trc to axes to mt trc to mi vi cc c tnh c m t get v set cho php xc nh v t cc thuc tnh ca trc to ang c gca tr v trc to c MATLAB chn cc gii hn trn trc to v khong cch nh du da trn s liu dng v. Dng lnh axis c th t li gii hn ny. C php ca lnh: axis[ xmin , xmax , ymin , ymax] Ta xt chng trnh ct1_13.m nh sau: x = 0:0.025:pi/2; plot(x, tan(x), '-ro') axis([0 pi/2 0 5]) MATLAB chia vch trn trc da trn phm vi d liu v chia u. Ta c th m t cch chia nh thng s xtick v ytick bng mt vec t tng dn. V d xt chng trnh ct1_14.m: x = -pi: .1: pi; y = sin(x); plot(x, y) set(gca, 'xtick', -pi :pi/2:p); set(gca, 'xticklabel', {'-pi', '-pi/2', '0', 'pi/2', 'pi'}) 11. Ghi nhn ln cc trc to : MATLAB cung cp cc lnh ghi nhn ln ho gm : title thm nhn vo ho14

xlabel thm nhn vo trc x ylabel thm nhn vo trc y zlabel thm nhn vo trc z legend thm ch gii vo th text hin th chui vn bn v tr nht nh gtext t vn bn ln ho nh chut \bf bold font \it italics font \sl oblique font (ch nghing) \rm normal font Cc k t c bit xem trong String properties ca Help. Ta dng cc lnh xlabel , ylabel , zlabel thm nhn vo cc trc to . Ta c th thm vn bn vo bt k ch no trn hnh v nh hm text. Ta c chng trnh ct1_15.m: x = -pi: .1: pi; y = sin(x); plot(x, y) xlabel('t = 0 to 2\pi', 'Fontsize', 16) ylabel('sin(t)', 'Fontsize', 16) title('\it{Gia tri cua sin tu zero n 2 pi}', 'Fontsize', 16) text(3*pi/4, sin(3*pi/4),'\leftarrowsin(t ) = 0.707', 'FontSize', 12) 12. nh v vn bn trn hnh v: Ta c th s dng i tng vn bn ghi ch cc trc v tr bt k. MATLAB nh v vn bn theo n v d liu trn trc. V d v hm y = Aet vi A = 0.25 , t = 0 n 900 v = 0.005 ta vit chng trnh ct1_16.m: t = 0: 900; plot(t, 0.25*exp(-0.005*t)) plot(t, y) text(300, .25*exp(-.005*300),... '\bullet\leftarrow\fontname{times}0.25{\ite}^{- 0.005{\itt}} tai,... {\itt} = 300', 'FontSize', 14)%ghi chu tai t = 300 Tham s HorizontalAlignment v VerticalAlignment nh v vn bn so vi cc to x, y, z cho. 13. ho c bit: a. Khi v vng: ho khi v vng biu din s liu l vec t hay ma trn. MATLAB cung cp cc hm ho khi v vng : bar hin th cc ct ca ma trn m*n nh l m nhm, mi nhm c n bar15

hin th cc ct ca ma trn m*n nh l m nhm, mi nhm c n bar nm ngang bar3 hin th cc ct ca ma trn m*n nh l m nhm, mi nhm c n bar dng 3D bar3h hin th cc ct ca ma trn m*n nh l m nhm, mi nhm c n bar dng 3D nm ngang Mc nh, mi phn t ca ma trn c biu din bng mt bar. Ta xt chng trnh ct1_17.m: y= [5 2 1 6 7 3 8 6 3 5 5 5 1 5 8];

barh

bar(y) b. M t d liu trn trc: Ta dng cc hm xlabel v ylabel m t cc d liu trn trc. Ta xt chng trnh ct1_18.m: nhdo = [29 23 27 25 20 23 23 27]; ngay = 0: 5: 35; bar(ngay, nhdo) xlabel('Ngay') ylabel('Nhiet do (^{o}C)') set(gca,'YLim',[15 30],'Layer','top') grid on set(gca,'YLim',[15 30]) Mc nh,phm vi gi tr ca trc y l t 0 n 30. xem nhit trong khong t 15 n 30 ta thay i phm vi gi tr ca trc y: set(gca,'YLim',[15 30],'Layer','top') v trn th, phm vi gi tr ca trc y thay i. c. Xp chng th: Ta c th xp chng s liu trn th thanh bng cch to ra mt trc khc trn cng mt v tr v nh vy ta c mt trc y c lp vi b s liu khc. TCE = [515 420 370 250 135 120 60 20]; nhdo = [29 23 27 25 20 23 23 27]; ngay = 0:5:35; bar(ngay, nhdo) xlabel('Ngay')16

ylabel('Nhiet do (^{o}C)') xp chng mt s liu ln mt th thanh trn, c trc th 2 cng v tr nh trc th nht ta vit: h1 = gca; v to trc th 2 v tr trc th nht trc nht v b s liu th 2: h2 = axes('Position',get(h1,'Position')); plot(days,TCE,'LineWidth',3) trc th 2 khng gy tr ngi cho trc th nht ta vit: set(h2,'YAxisLocation','right','Color','none','XTickLabel',[]) set(h2,'XLim',get(h1,'XLim'),'Layer','top') ghi ch ln th ta vit: text(11,380,'Mat do','Rotation',--55,'FontSize',16) ylabel('TCE Mat do (PPM)') title('Xep chong do thi','FontSize',16) (lu trong ct1_19.m) d. ho vng: Hm area hin th ng cong to t mt vec t hay t mt ct ca ma trn. N v cc gi tr ca mt ct ca ma trn thnh mt ng cong ring v t y vng khng gian gia cc ng cong v trc x. ta xt chng trnh ct1_20.m: Y = [5 1 2 837 968 555 4 2 3]; area(Y) hin th th c 3 vng, mi vng mt ct. cao ca mi th vng l tng cc phn t trong mt hng. Mi ng cong sau s dng ng cong trc lm c s. hin th ng chia li ta dng lnh: set(gca,'Layer','top') set(gca,'XTick',1:5) grid on f. th pie: th pie hin th theo t l phn trm ca mt phn t ca mt vec t hay mt ma trn so vi tng cc phn t. Cc lnh pie v pie3 to ra th 2D v 3D. ta xt chng trnh ct1_21.m: X = [19.3 22.1 51.6;17

34.2 70.3 82.4; 61.4 82.9 90.8; 50.5 54.9 59.1; 29.4 36.3 47.0]; x = sum(X); explode = zeros(size(x)); [c,offset] = max(x); explode(offset) = 1; h = pie(x,explode) %A = [ 1 3 6]; %pie3(A) Khi tng cc phn t trong i s th nht bng hay ln hn 1, pie v pie3 chun ho cc gi tr. Nh vy cho vec t x, mi phn c din tch xi / sum( x i ) vi xi l mt phn t ca x. Gi tr c chun ho m t phn nguyn ca mi vng. Khi tng cc phn t trong i s th nht nh hn 1, pie v pie3 khng chun ho cc phn t ca vec t x. Chng v mt phn pie. x = [.19 .22 .41]; pie(x) g. Lm hnh chuyn ng: Ta c th to ra hnh chuyn ng bng 2 cch to v lu nhiu hnh khc nhau v ln lt hin th chng v v xo lin tc mt i tng trn mn hnh,mi ln v li c s thay i. Vi cch th nht ta thc hin hnh chuyn ng qua 3 bc: dng hm moviein dnh b nh cho mt ma trn ln nhm lu cc khung hnh. dng hm getframes to cc khung hnh. dng hm movie hin th cc khung hnh. Sau y l v d s dng movie quan st hm fft(eye(n)).Ta to chng trnh ct1_22.m nh sau : axis equal M = moviein(16, gcf); set(gca, 'NextPlot', 'replacechildren') h = uicontrol('style', 'slider', 'position',[100 10 500 20], 'Min', 1, 'Max', 16) for j = 1:16 plot(fft(eye(j + 16))) set(h, 'Value', j) M(:, j) = getframe(gcf); end clf; axes('Position', [0 0 1 1]);18

movie(M, 30) Bc u tin to hnh nh chuyn ng l khi gn ma trn. Tuy nhin trc khi gi hm moviein, ta cn to ra cc trc to c cng kch thc vi kch thc m ta mun hin th hnh. Do trong v d ny ta hin th cc s liu cch u trn vng trn n v nn ta dng lnh axis equal xc nh t l cc trc. Hm moviein to ra ma trn ln cha 16 khung hnh. Pht biu: set(gca, 'NextPlot', 'replacechildren') ngn hm plot a t l cc trc v axis normal mi khi n c gi. Hm getframe khng i s tr li cc im nh ca trc hin hnh hnh hin c. Mi khung hnh gm cc s liu trong mt vec t ct. Hm getframe(gcf) chp ton b phn trong ca mt ca s hin hnh. Sau khi to ra hnh nh ta c th chy chng mt s ln nht nh v d 30 ln nh hm movie(M, 30) . Mt phng php na to hnh chuyn ng l v v xo, ngha l v mt i tng ho ri thay i v tr ca n bng cch thay i to x, y v z mt lng nh nh mt vng lp. Ta c th to ra cc hiu ng khc nhau nh cc cch xo hnh khc nhau. Chng gm: none MATLAB khng xo i tng khi n di chuyn background MATLAB xo i tng bng cch v n c mu nn xor MATLAB ch xo i tng Ta to ra M-file c tn l ct1_23.m nh sau: A = [ -8/3 0 0; 0 -10 10; 0 28 -1 ]; y = [35 -10 -7]'; h = 0.01; p = plot3(y(1), y(2), y(3),'.', ... 'EraseMode', 'none', 'MarkerSize', 5); axis([0 50 -25 25 -25 25]) hold on for i = 1:4000 A(1,3) = y(2); A(3,1) = -y(2); ydot = A*y; y = y + h*ydot; set(p, 'XData', y(1), 'YData', y(2), 'ZData', y(3)) % thay doi toa do drawnow i = i + 1; end 13. ho 3D:19

a.Cc lnh c bn: Lnh mesh v surf to ra li v mt 3D t ma trn s liu. Gi ma trn s liu l z m mi phn t ca n z(i, j) xc nh tung ca mt th mesh(z) to ra mt li c mu th hin mt z cn surf(z) to ra mt mt c mu z. b. th cc hm hai bin: Bc th nht th hin hm 2 bin z=f(x,y) l to ma trn x v y cha cc to trong min xc nh ca hm. Hm meshgrid s bin i vng xc nh bi 2 vec t x v y thnh ma trn x v y. Sau ta dng ma trn ny nh gi hm. Ta kho st hm sin(r)/r. tnh hm trong khong -8 v 8 theo x v y ta ch cn chuyn mt vec t i s cho meshgrid: [x,y] = meshgrid(-8:.5:8); r = sqrt(x.^2 + y.^2) + 0.005; ma trn r cha khong cch t tm ca ma trn. Tip theo ta dng hm mesh v hm. z = sin(r)./r; mesh(z) c. th ng ng mc: Cc hm contour to, hin th v ghi ch cc ng ng mc ca mt hay nhiu ma trn. Chng gm: clabel to cc nhn s dng ma trn contour v hin th nhn contour hin th cc ng ng mc to bi mt gi tr cho trc ca ma trn Z. contour3 hin th cc mt ng mc to bi mt gi tr cho trc ca ma trn Z. contourf hin th th contour 2D v t mu vng gia 2 cc ng contourc hm cp thp tnh ma trn contour Hm meshc hin th contour v li v surfc hin th mt contour. [X,Y,Z] = peaks; contour(X,Y,Z,20) Mi contour c mt gi tr gn vi n. Hm clabel dng gi tr ny hin th nhn ng ng mc 2D. Ma trn contour cha gi tr clabel dng cho cc ng contour 2D. Ma trn ny c xc nh bi contour, contour3 v contourf. hin th 10 ng ng mc ca hm peak ta vit: Z = peaks; [C,h] = contour(Z,10); clabel(C,h) title({'Cac contour co nhan','clabel(C,h)'})20

Hm contourf hin th th ng ng mc trn mt mt phng v t mu vng cn li gia cc ng ng mc. kim sot mu t ta dng hm caxis v colormap. Ta vit chng trnh ct1_26.m: Z = peaks; [C, h] = contourf(Z, 10); caxis([-20 20]) colormap autumn; title({'Contour co to mau', 'contourf(Z, 10)'}) Cc hm contour(z, n) v contour(z, v) cho php ta ch r s lng mc contour hay mt mc contour cn v no vi z l ma trn s liu, n l s ng contour v v l vec t cc mc contour. MATLAB khng phn bit gia vec t mt phn t hay i lng v hng. Nh vy nu v l vec t mt phn t m t mt contour n mt mc hm contour s coi n l s lng ng contour ch khng phi l mc contour. Ngha l, contour(z, v) cng nh contour(z, n). hin th mt ng ng mc ta cn cho v l mt vec t c 2 phn t vi c hai phn t bng mc mong mun. V d to ra mt ng ng mc 3D ca hm peaks ta vit chng trnh ct1_27.m: xrange = -3: .125: 3; yrange = xrange; [X,Y] = meshgrid(xrange, yrange); Z = peaks(X, Y); contour3(X, Y, Z) hin th mt mc Z = 1, ta cho v l [1 1] v = [1 1] contour3(X, Y, Z, v) Hm ginput cho php ta dng chut hay cc phm mi tn chn cc im v. N tr v to ca v tr con tr. V d sau s minh ho cc dng hm ginput v hm spline to ra ng cong ni suy hai bin. Ta to mt M-file c tn ct1_28.m nh sau: disp('Chuot phai tro cac diem tren duong ve') disp('Chuot trai tro diem cuoi cua duong ve') axis([0 10 0 10]) hold on x = []; y = []; n = 0;21

but = 1; while but = =1 [xi,yi,but] = ginput(1); plot(xi, yi, 'go') n = n + 1; x(n, 1) = xi; y(n,1) = yi; end t = 1:n; ts = 1: 0.1: n; xs = spline(t, x, ts);

22

ys = spline(t, y, ts); plot(xs, ys, 'c-'); hold off 14. V cc vect: C nhiu hm MATLAB dng hin th cc vec t c hng v vec t vn tc. Ta nh ngha mt vec t bng cch dng mt hay 2 i s. Cc i s m t thnh phn x v thnh phn y ca vec t. Nu ta dng 2 i s th i s th nht s m t thnh phn x v i s th ha m t thnh phn y. Nu ta ch dng mt i s th MATLAB x l n nh mt s phc, phn thc l thnh phn x v phn o l thnh phn y. Cc hm v vec t gm: compass v cc vc t bt u t gc to ca h to cc feather v cc vec t bt u t mt ng thng quiver v cc vec t 2D c cc thnh phn (u, v) quiver3 v cc vec t 3D c cc thnh phn (u, v, w) a. Hm compass: Ta xt v d v hng v tc gi. Cc vec t xc nh hng (gc tnh bng ) v tc gi (km/h) l: hg = [45 90 90 45 360 335 360 270 335 270 335 335]; td = [6 6 8 6 3 9 6 8 9 10 14 12]; Ta bin i hng gi thnh radian trc khi bin i n thnh to vung gc. hg1 = hg * pi/180; [x, y] = pol2cart(hg1, td); compass(x, y) v to ra ghi ch trn th: gc = {'Huong gio v suc gio tai san bay Da Nang') text(28, 15, gc) b. Hm feather: Hm feather hin th cc vec t bt u t mt ng thng song song vi trc x. V d to ra cc vec t c gc t 900 n 00 v cng di ta vit chng trnh ct1_30.m: theta = 90: 10: 0; r = ones(size(theta)); trc khi v, chuyn cc s liu sang to vung gc v tng ln thnh r d nhn:26

[u, v] = pol2cart(theta*pi/180, r*10); feather(u, v) axis equal Nu i s l s phc z th feather coi phn thc l x v phn o l y. Ta xt chng trnh ct1_31.m: t = 0: 0.3: 10; s = 0.05 + i; Z = exp(s*t); feather(Z) c. Hm quiver: Hm quiver hin th cc vec t cc im cho trong mt phng. Cc vec t ny c xc nh bng cc thnh phn x v y. V d to ra 10 contour ca hm peaks ta dng chng trnh ct1_32.m: n = 2.0: .2: 2.0; [X,Y,Z] = peaks(n); contour(X, Y, Z, 10) By gi dng hm gradient to cc thnh phn ca vec t dng lm i s cho quiver: [U, V] = gradient(Z, .2); t hold on thm ng contour: hold on quiver(X,Y,U,V) hold off d. Hm quiver3: Hm quiver3 hin th cc vec t c cc thnh phn (u,v,w) ti im (x, y, z). V d ta biu din qu o ca mt vt c nm i theo t. Phng trnh ca chuyn ng l: at 2 z( t) = v 0 t + 2 Ta vit chng trnh ct1_33.m. Trc ht ta gn vn tc ban u v gia tc a: v0 = 10; % Van toc ban dau a = 32; % gia toc Tip theo tnh z ti cc thi im:27

t = 0:.1:1; z = vz*t + 1/2*a*t.^2; Tnh v tr theo hng x v y: vx = 2; x = vx*t; vy = 3; y = vy*t; Tnh cc thnh phn ca vec t vn tc v hin th bng cc dng quiver3: u = gradient(x); v = gradient(y); w = gradient(z); scale = 0; quiver3(x, y, z, u, v, w, scale) axis square 3. GIAO DIN HO 1. Khi nim chung: tin dng ta c th to nn giao din ho(GUI - Graphic User Interface) gia ngi dng v MATLAB. Trong giao din ny ta c th xut d liu di 2 dng: vn bn v ho. Mi mt GUI c mt hay nhiu layout(din mo). Vic to GUI to nn mt cng c ho phc v nhp xut d liu mt cch trc gic, rt thun tin. Ngoi ra c th dng GUI gim st cc qu trnh, hin th cc i tng. 2. Nhp xut k t, s liu ra GUI: a. To khung hnh: Ta xt cc lnh sau(ct1_35.m):

28

f = input('Nhap nhiet do(do K): '); c = (f - 32)*5/9; fprintf(1,'nhiet do(do C) la: %g\n', c) Ba dng lnh trn thc hin cc cng vic sau: - nhp gi tr u vo - thc hin php tnh quy i nhit - xut kt qu ra mn hnh By gi ta tm cch ci cc dng lnh trn sao cho chng thc hin trn khun kh mt khung ho c dng nh trn Cc lnh sau(ct1_36.m) thc hin cng vic trn: set(gcf,'DefaultUicontrolUnit', 'Normalized') frame_1 = uicontrol(gcf, 'Style', 'Frame',... 'Position', [0.1 0.1 0.8 0.3]); frame_2 = uicontrol(gcf, 'Style', 'Frame',... 'Position', [0.1 0.6 0.8 0.3]); set(frame_1, 'BackgroundColor', [0.5 0.5 0.5]); set(frame_2, 'BackgroundColor', [0.5 0.5 0.5]); text_f = uicontrol(gcf, 'Style', 'Text',... 'String', 'Fahrenheit: ',... 'Position', [0.3 0.7 0.2 0.05],'HorizontalAlignment','Left'); edit_f = uicontrol(gcf, 'Style', 'Edit',... 'String', '168.0',... 'Position', [0.6 0.7 0.1 0.05 ],... 'HorizontalAlignment', 'Right',... 'Callback', 'ct1_38'); text_c1 = uicontrol(gcf,'Style', 'Text',... 'String', 'Celcius: ',... 'Position', [0.3 0.3 0.2 0.05],... 'HorizontalAlignment', 'Left'); text_c2 = uicontrol(gcf,'Style', 'Text',... 'String', '100.0',... 'Position', [0.6 0.3 0.1 0.05],... 'HorizontalAlignment', 'Left'); By gi ta s xem cc lnh trn hot ng nh th no. Cc lnh sau: set(gcf,'DefaultUicontrolUnit', 'Normalized') frame1 = uicontrol(gcf,'Style', 'Frame',... 'Position', [0.1 0.1 0.8 0.3]);29

frame2 = uicontrol(gcf,'Style', 'Frame',... 'Position', [0.1 0.6 0.8 0.3]); set(frame1,'BackgroundColor', [0.5 0.5 0.5]); set(frame2,'BackgroundColor', [0.5 0.5 0.5]); to hai khung hnh ch nht trong ca s Figure hin hnh vi nn mu xm. Hai khung (Frames) c to cc gc di tri l (0.1, 0.1) v (0.1, 0.6), cng chiu cao 0.3 n v v b rng 0.8 n v. n v c tnh bng % ca kch c ngoi ca Figure. Vy ta c th din gii nh sau: - Khung th nht c gc tri di ti im c to 10% chiu ngang v 10% chiu cao ca khung ngoi Figure. - Khung th 2 c gc tri pha di ti im c to ng vi 10% chiu ngang v 60% chiu cao ca khung ngoi Figure. - C hai khung c chiu cao bng 30% chiu cao v b ngang bng 80% b ngang ca khung ngoi Figure. b. Dng lnh edit v text nhp xut k t v s liu: Trn y ta dng lnh uicontrol to v xc nh v tr hai khung hnh. on lnh sau s dng uicontrol vit chui k t Fahrenheit ln khung bn trn: text_ f = uicontrol(gcf,'Style','Text','String','Fahrenheit: ',... 'Position',[0.3 0.7 0.2 0.05],'HorizontalAlignment','Left'); Chui k t Fahrenhaeit c t vo ng v tr dn tri ca c Position ghi trong on chng trnh trn. on lnh sau dng Edit vit chui k t 68.0 vo v tr bn cnh ca Fahrenheit. Chui k t c v tr dn phi trong (Position Box). edit_f = uicontrol(gcf,'Style', 'Edit',... 'String', '168.0',... 'Position', [0.6 0.7 0.1 0.05 ],... 'HorizontalAlignment', 'Right',... 'Callback', 'ct1_38'); Do s dng edit, chui k t 68.0 l chui c th vit li c trc tip trn GUI. Sau khi nhn nt trn, gi tr mi vit li c tip nhn v MATLAB s gi lnh vit trong phn callback ct1_38.m. Cui cng ta cn phi dng uicontrol to ta chui text, hin th chui Celcius v 20.0 trong khung bn di. text_c1 = uicontrol(gcf,'Style','Text','String','Celcius: ',... 'Position',[0.3 0.3 0.2 0.05],'HorizontalAlignment','Left'); text_c2 = uicontrol(gcf,'Style','Text','String','20.0','Position',...30

[0.6 0.3 0.1 0.05],'HorizontalAlignment','Left'); c. T ng cp nht gi tr ln GUI: hon thin v d GUI ta thc hin chng trnh vi nhim v tnh quy i t K sang C v t ng in kt qu vo cc bn cnh chui Celcius. on m sau phc v mc ch callback (hon tr gi tr) c lu vo file ct1_38.m v c ni dung nh sau: f = get(edit_f, 'String'); f = str2num(f); c = ( f - 32)*5/9; c = num2str(c); set(text_c2, 'String',c); on m trn nhn gi tr do lnh uicontrol edit c vo di dng chui (string) v sau : - bin i t dng string sang dng s - tnh quy i t nhit fahrenheit sang nhit celcius - bin i t s sang string - xut kt qu di dng string ra GUI nh text_c2 3. Nhp s liu t thanh trt: Ngoi cch nhp s liu t bn phm, ta c th nhp s liu t thanh trt. Ta mun to ra mt giao din nh sau:

Trong giao din ny, con trt s lm thay i gi tr nhit ua vo v nhit quy i tnh theo C cng s thay i tng ng. Cc lnh to ra giao din ny (ct1_37.m) l: set(gcf, 'DefaultUicontrolUnit', 'Normalized') frame_1 = uicontrol(gcf, 'Style', 'Frame', 'Position', [0.1 0.1 0.8 0.3]); frame_2 = uicontrol(gcf, 'Style', 'Frame', 'Position', [0.1 0.6 0.8 0.3]);31

set(frame_1, 'BackgroundColor' ,[0.5 0.5 0.5]); set(frame_2, 'BackgroundColor', [0.5 0.5 0.5]); text_ f = uicontrol(gcf, 'Style', 'Text', 'String', 'Fahrenheit: ','Position',... [0.3 0.7 0.2 0.05], 'HorizontalAlignment', 'Left'); edit_f = uicontrol(gcf, 'Style', 'Edit',... 'String', '168.0'.,,, 'Position', [0.6 0.7 0.1 0.05 ],... 'HorizontalAlignment', 'Right',... 'Callback', 'ct1_38'); text_c1 = uicontrol(gcf,'Style', 'Text',... 'String', 'Celcius: ',... 'Position', [0.3 0.3 0.2 0.05],... 'HorizontalAlignment', 'Left'); text_c2 = uicontrol(gcf,'Style', 'Text',... 'String', '100.0',... 'Position', [0.6 0.3 0.1 0.05],... 'HorizontalAlignment', 'Left'); slider_f = uicontrol(gcf,'Style', 'Slider',... 'Min', 32.0, 'Max', 212.0,... 'Value', 68.0,... 'Position', [0.6 0.8 0.2 0.05],... 'Callback', 'ct1_39; ct1_38'); to thanh trt ta dng lnh: slider_f = uicontrol(gcf,'Style','Slider','Min',32.0,'Max',212.0,... 'Value',68.0,'Position',[0.6 0.8 0.2 0.05],... 'Callback','ct1_39; ct1_38'); Nh vy Callback c th gi mt chui cc lnh MATLAB, phn cch nhau bng du chm than hay du phy. Chui callback gi ct1_39.m: f = get(slider_f,'Value'); f = num2str(f); set(edit_f,'String',f,'CallBack','ct1_40; ct1_38'); vi tc dng nhp nhit gi ti Value ca slider_f vo v tr bn cnh cha chui Fahrenheit. Sau Callback gi tip ct1_38.m tnh quy i gi tr nhit v gn vo cnh chui Celcius. File ct1_40.m nh sau: f = get(edit_f,'String'); f = str2num(f);32

set(slider_f,'Value',f); c nhim v cp nht gi tr gi ti Value ca slider_f ri sau ct1_38.m lm nt phn vic cn li: tnh i nhit v gn vo v tr cnh cha chui Celcius. 4. Chn la khi xut s liu: a. Khi nim chung: Ngoi kh nng xut d liu c nh theo kiu string hay kiu s, ta c th xut d liu theo mt danh mc no . minh ho, ta to file ct1_41.m nh sau: f = input('Nhap nhiet do: '); r = f + 459.7; c = (f - 32)*5/9; k = c + 273.15; choice = input(['Nhap 1 cho Rankie', '2 cho Celcius', '3 cho Kelvin: ']); if choice = = 1 fprintf(1, 'Nhiet do (do R) la: %g\n', r); elseif choice = = 2 fprintf(2, 'Nhiet do (do C) la: %g\n', c); elseif choice = = 3 fprintf(2, 'Nhiet do (do C) la: %g\n', c); end T ca s lnh, nhp lnh ct1_41 th MATLAB s hi nhit v ch quy i ri hin th kt qu. Tuy nhin cng c GUI ca MATLAB cho php ta thc hin vic la chn thun li hn. Ta c th chn mt trong 4 phng xut d liu sau y: - dng popupmenu - dng list box - dng radio button - dng check box b. Dng popupmenu: Ta to ra giao din nh sau:

33

Cc lnh thc hin cng vic trn (ct1_42.m) l: set(gcf, 'DefaultUicontrolUnit', 'Normalized') frame_1 = uicontrol(gcf, 'Style', 'Frame',... 'Position', [0.1 0.1 0.8 0.3]); frame_2 = uicontrol(gcf, 'Style', 'Frame',... 'Position', [0.1 0.6 0.8 0.3]); set(frame_1, 'BackgroundColor', [0.5 0.5 0.5]); set(frame_2, 'BackgroundColor' ,[0.5 0.5 0.5]); text_f = uicontrol(gcf,'Style', 'Text',... 'String', 'Fahrenheit: ',... 'Position', [0.3 0.7 0.2 0.05],... 'HorizontalAlignment', 'Left'); edit_f = uicontrol(gcf,'Style', 'Edit',... 'String',...'168.0',... 'Position', [0.6 0.7 0.1 0.05 ],... 'HorizontalAlignment', 'Right',... 'Callback', 'ct1_38'); popup_c = uicontrol(gcf,... 'Style','Popupmenu',... 'String','Rankine|Celcius|Kelvin',... 'Value',2,... 'Position',[0.3 0.3 0.2 0.05],... 'Callback','ct1_43; ct1_45'); text_c2 = uicontrol(gcf, 'Style', 'Text',... 'String', '100.0',... 'Position', [0.6 0.3 0.1 0.05],... 'HorizontalAlignment', 'Left'); slider_f = uicontrol(gcf, 'Style', 'Slider',...34

'Min', 32.0, 'Max', 212.0,... 'Value', 68.0,... 'Position', [0.6 0.8 0.2 0.05],... 'Callback', 'ct1_39; ct1_45'); Khi kch chut vo Popupmenu , c ba kh nng chn la s xut hin. Tip tc nhy chut vo mt trong 3 kh nng , Popupmenu bin mt ch cn li n v c chn. Khi dng chut ko thanh trt frame pha trn, ta c c gi tr quy i sang n v c chn hin th pha di. Trong on m trn, gi tr Value t sn l 2. Khi Callback gi ct1_43.m: choice = get(popup_c,Value); th gi tr ca bin choice c a ti Value. Sau Callback gi tip ct1_45.m xem kt qu gi trong choice. File ct1_45.m nh sau: f = get(edit_f, 'String'); f = str2num(f); r = f + 459.7; c = (f - 32)*5/9; k = c + 273.15; choice = input(['Nhap 1 cho Rankie', '2 cho Celcius', '3 cho Kelvin: ']); if choice = = 1 t = r; elseif choice = = 2 t = c; elseif choice = = 3 t=k end t = num2str(t); set(text_c2, 'String',t); Bng cch thay Popupmenu bng Radiobutton uicontrol ta c phng n Radiobutton. Giao din s c dng:

35

Cc lnh thc hin cng vic ny (ct1_46.m) l: set(gcf, 'DefaultUicontrolUnit', 'Normalized') frame_1 = uicontrol(gcf, 'Style', 'Frame', 'Position', [0.1 0.1 0.8 0.3]); frame_2 = uicontrol(gcf, 'Style', 'Frame', 'Position', [0.1 0.6 0.8 0.3]); set(frame_1,'BackgroundColor', [0.5 0.5 0.5]); set(frame_2,'BackgroundColor', [0.5 0.5 0.5]); text_f = uicontrol(gcf, 'Style', 'Text', 'String', 'Fahrenheit: ','Position',... [0.3 0.7 0.2 0.05], 'HorizontalAlignment', 'Left'); edit_f = uicontrol(gcf, 'Style', 'Edit', 'String','168.0', 'Position',... [0.6 0.7 0.1 0.05 ], 'HorizontalAlignment',... 'Right', 'Callback','ct1_41'); strings = ['Rankine'; 'Celcius'; 'Kelvine']; show = [ 0; 1; 0]; ys = [ 3; 2; 1]*0.075 + 0.075; for i = 1:3 radio_c(i) = uicontrol(gcf,... 'Style', 'Radiobutton',... 'String', strings(i),... 'Value', show(i),... 'Position', [0.3 ys(i) 0.2 0.05],... 'Callback', 'ct1_47; ct1_45'); end text_c2= uicontrol(gcf, 'Style', 'Text', 'String','100.0', 'Position',...36

[0.6 0.3 0.1 0.05], 'HorizontalAlignment', 'Left'); slider_f = uicontrol(gcf, 'Style', 'Slider', 'Min',32.0, 'Max', 212.0,... 'Value', 68.0, 'Position', [0.6 0.8 0.2 0.05],... 'Callback', 'ct1_39; ct1_45'); File ct1_47.m: for i = 1:3 if gcbo = = radio_c(i) choice = i; set(radio_c(i), 'Value', 1); elseif set(radio_c(i), 'Value', 0); end; end; on lnh trn l mt vng lp, so snh s (handle) Callback thu c (gi tr do hm gcbo tr v) vi handle ca mi nt. Nt no c s trng s c ng (turn on, Value = 1) v nt no khc s s b ngt (turn off,Value = 0). Cui cng Callback gi ct1_45.m thc hin vic tnh quy i c chn v hin th kt qu. im khc duy nht l khi chn, Popupmenu ch cha mt phn t th radiobutton c th ng thi cha nhiu phn t. Cui cng ta xt phng n dng listbox. Giao din cn to nh sau:

Cc m to ra giao din trn (ct1_48.m) l: set(gcf, 'DefaultUicontrolUnit', 'Normalized') frame_1 = uicontrol(gcf, 'Style', 'Frame', 'Position', [0.1 0.1 0.8 0.3]);37

frame_2 = uicontrol(gcf, 'Style', 'Frame', 'Position', [0.1 0.6 0.8 0.3]); set(frame_1, 'BackgroundColor', [0.5 0.5 0.5]); set(frame_2, 'BackgroundColor', [0.5 0.5 0.5]); text_f = uicontrol(gcf, 'Style', 'Text', 'String', 'Fahrenheit: ', 'Position',... [0.3 0.7 0.2 0.05], 'HorizontalAlignment', 'Left'); edit_f = uicontrol(gcf, 'Style', 'Edit', 'String', '168.0', 'Position',... [0.6 0.7 0.1 0.05 ], 'HorizontalAlignment',... 'Right', 'Callback', 'ct1_38'); listbox_c = uicontrol(gcf,... 'Style', 'Listbox',... 'String', 'Rankine|Celcius|Kelvin',... 'Value', 2,... 'Position', [0.3 0.3 0.2 0.05],... 'Callback', 'ct1_49;ct1_45'); text_c2 = uicontrol(gcf, 'Style', 'Text', 'String', '100.0', 'Position',... [0.6 0.3 0.1 0.05], 'HorizontalAlignment', 'Left'); slider_f = uicontrol(gcf, 'Style', 'Slider', 'Min',32.0, 'Max', 212.0,... 'Value', 68.0, 'Position', [0.6 0.8 0.2 0.05],... 'Callback', 'ct1_39; ct1_45'); 5. Cng c ho to GUI a. To GUI bng cng c ho: Trn y ta xem xt cch to GUI bng phng php th cng. Ta c th to GUI bng cng c ho. Khi nhp lnh guide ta gi trnh ho (Graphics User Interface Development Environment) son tho layout. Kt qu u tin l ta c mt layout rng nh sau:Sontho thuctnh Chyth

Alignment

Sonmenu

Vngthit k Ccphnt

38

Vic u tin l ta thit k giao din mong mun. Ta s dng chut ko cc phn t cn dng t bn tri v th vo layout rng bn phi. Ta c th dch chuyn cc phn t ny cc v tr mong mun v cn chnh bng cng c Alignment. Vi mi phn t ta cn xc nh thuc tnh cho n bng cch bm p vo phn t hay bm vo cng c son tho thc tnh Sau khi thit k xong ta lu n li. Lc ny MATLAB t ng to ra file *.fig dng lu giao din va to v file *.m cha cc m lnh cn thc hin. Vic cui cng l vit cc m lnh vo file *.m. Trong qu trnh thit k ta c th chy th xem sau mi bc thit k t yu cu cha bng cch bm vo chy th b. Mt s v d to GUI: m s ln bm chut: Ta thit k mt giao din nh sau:

Ta mun l khi bm chut, s ln bm s c m v ghi li. Trc ht ta gi guide v c c mt layout rng. Vo Property Inspector ( son tho thuc tnh) v ghi vo Name chui "ct1_52" v chp nhn thuc tch Tag mc nh ca n l figure1; dng Font ch mc nh, c ch 12, bold. Ta dng Edit Text ghi li s ln bm. Ta vo Property Inspector ri chn String. Ta nhp vo ny chui "So lan bam chuot: 0". Ta ghi vo Tag chui "editmot" v cng dng Font ch mc nh, c ch 12 v bold. Tip theo ko Pushbutton vo layout v son tho thuc tnh cho n vi Font ch mc nh, c ch 12, bold. Trong thuc tnh String ghi chui " Bam chuot"; ghi v Tag chui "pushbuttonmot". Nh vy l ta thit k xong. By gi ta lu li vi tn l ct1_52.fig v ct1_52.m. Nhim v tip theo l ghi cc lnh cn thit vo file ct1_52.m. File ny c MATLAB t ng to ra. Ta phi thm vo cc m lnh khi bm chut th s ln bm c th hin trn Edit Text. Ta s ghi cc m lnh ny vo phn: function varargout = pushbuttonmot_Callback(h, eventdata, handles, varargin)39

do lnh cn c thc hin khi gi pushbutton. Ni dung ca ct1_52.m l: function varargout = Ct1_52(varargin) if nargin = = 0 fig = openfig(mfilename,'reuse'); set(fig, 'Color', get(0, 'defaultUicontrolBackgroundColor')); handles = guihandles(fig); guidata(fig, handles); if nargout > 0 varargout{1} = fig; end elseif ischar(varargin{1}) try [varargout{1:nargout}] = feval(varargin{:}); catch disp(lasterr); end end function varargout = pushbuttonmot_Callback(h, eventdata, handles, varargin) persistent dem;%bien dem la persistent de no ton tai giua lan goi ham if isempty(dem) dem = 0; end dem = dem + 1; str = sprintf('So lan bam chuot: %d',dem); set(handles.editmot,'String',str); Chuyn i t Fahrenheit sang Celcius: Ta thit k mt GUI chuyn i nhit . Giao din c dng nh sau:

40

Thuc tnh ca Layout c ghi Name: ct1_53 cn cc thuc tnh khc l mc nh. Ta dng hai Frame vi cc Tag l frmmot v frame2. Cc thuc tnh khc chp nhn gi tr mc nh. Edit Text th nht c cc thuc tnh FontName: Arial, FontSize: demi, FntWeight: demi, String: Fahrenheit, Tag: editmot cn cc thuc tnh khc l mc nh. Edit Text th hai c cc thuc tnh FontName: Arial, FontSize: demi, FntWeight: demi, String: trng, Tag: edithai cn cc thuc tnh khc l mc nh. Edit Text th ba c cc thuc tnh FontName: Arial, FontSize: demi, FntWeight: demi, String: Celcius, Tag: editba cn cc thuc tnh khc l mc nh. Edit Text th t c cc thuc tnh FontName: Arial, FontSize: demi, FntWeight: demi, String: trng, Tag: editbon cn cc thuc tnh khc l mc nh. Sau khi thit k xong, lu n vi tn ct3_18.fig. MATLAB to thm ct1_53.m. By gi ta cn vit m cho n. Nhim v ca on m l khi ta nhp nhit Fahrenheit vo Edit text th hai th trong Edit Text th 4 phi xut hin gi tr nhit Celcius tng ng. Do vy ni dung ca ct1_53.m l: function varargout = Ct1_53(varargin) if nargin == 0 % LAUNCH GUI fig = openfig(mfilename,'reuse'); set(fig,'Color',get(0,'defaultUicontrolBackgroundColor')); handles = guihandles(fig); guidata(fig, handles); if nargout > 0 varargout{1} = fig; end elseif ischar(varargin{1}) try [varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard catch disp(lasterr); end end function varargout = edithai_Callback(h, eventdata, handles, varargin) f = get(handles.edithai,'String'); f = str2num(f); c = (f - 32)*5/9; c = num2str(c); set(handles.editbon,'String',c);41

Trong on m cn vit nm trong on: function varargout = edithai_Callback(h, evendata, handles, varargin) Cc lnh khc l do MATLAB t ng to ra. Dng slider nhp s liu: Ta dng v d chuyn i nhit trn nhng by gi s thm slider thay i nhit u vo. Giao din s c dng:

Nh vy ta cn 5 phn t, trong c mt phn t l slider v 4 phn t Edit Text. Layout c thuc tnh Name: ct1_54, cn cc thuc tnh khc ta chp nhn gi tr mc nh. Slider c thuc tnh Max: 1.0 v Min: 0.0. Edit Text th nht c thuc tnh FontSize: 12, FntWeight: bold, String: Fahrenheit cn cc thuc tnh khc chp nhn gi tr mc nh. Edit Text th 2 c thuc tnh FontSize: 12, FntWeight: bold, String: trng. Edit Text th 3 c thuc tnh FontSize: 12, FntWeight: bold, String: Celcius. Edit Text th 4 c thuc tnh FontSize: 12, FntWeight: bold, String: trng. (Cc thuc tnh m ta khng nhc n c ngha l chp nhn gi tr mc nh). Layout c lu vi tn ct1_54.fig. By gi ta vit m cho phn ct1_54.m m MATLAB t ng to ra. Nhim v ca n l nhn gi tr thay i t con trt, cp nht cho Edit Text 2 v Edit Text 4. Ta c ni dung ca ct1_54.m: function varargout = ct1_54(varargin) if nargin = = 0 fig = openfig(mfilename,'reuse'); handles = guihandles(fig); guidata(fig, handles);42

if nargout > 0 varargout{1} = fig; end elseif ischar(varargin{1}) try [varargout{1:nargout}] switchyard catch disp(lasterr); end end

=

feval(varargin{:});

%

FEVAL

function varargout = slider1_Callback(h, eventdata, handles, varargin) f = get(handles.slider1,'Value');%nhan gia tri tu con truot f = f*180 + 32;%tinh ra do Fahrenheit a = num2str(f);%bien lai thanh chuoi set(handles.edit2,'String',a);%ghi vao o do Fahrenheit b = (f-32)*5/9;%doi thanh do Celcius b = num2str(b);%doi lai thanh chuoi set(handles.edit4,'String',b);%ghi vao o do Celcius Xut s liu c la chn: Ta vn dng v d trn nhng by gi nhit quy i c th c tnh theo thang nhit Kenvine, Celcius hay Rankine. c th chn la ta dng mt trong cc phng n: Popupmenu, Rdiobutton, Listbox hay Checkbox. Giao din khi dng Popupmenu nh sau:

Nh vy l ta cn mt Slider, ba Edit Text v mt Popupmenu. Layout c thuc tnh Name: ct13_55. Slider c thuc tnh Max: 1 v Min: 043

Edit Text th nht c thuc tnh FontSize: 12, FntWeight: bold v String: Fahrenheit. Edit Text th hai c thuc tnh FontSize: 12, FntWeight: bold v String trng. Edit Text th 3 c thuc tnh FontSize: 12, FntWeight: bold v String trng. Popupmenu c thuc tnh FontSize: 12, FontWeight: bold. ghi vo thuc tnh String ta bm p chut vo icon ca n v vit 3 dng: Kelvine, Celcius v Rankine. File c lu vi tn ct1_55.fig. Vn cn li l vit m trong file ct1_55.m. M cn thc hin nhn gi tr t Slider, xem Popupmenu no c chn hin th nhit tng ng. File ct1_55.m nh sau: function varargout = ct1_55(varargin) if nargin == 0 % LAUNCH GUI fig = openfig(mfilename,'reuse'); set(fig,'Color',get(0,'defaultUicontrolBackgroundColor')); handles = guihandles(fig); guidata(fig, handles); if nargout > 0 varargout{1} = fig; end elseif ischar(varargin{1}) try [varargout{1:nargout}] = feval(varargin{:}); catch disp(lasterr); end end function varargout = slider1_Callback(h, eventdata, handles, varargin) f = get(handles.slider1,'Value'); f = f*180 + 32; a = num2str(f); set(handles.edit2,'String',a); r = f + 495.7; c = (f - 32)*5/9; k = c + 273.15; chon = get(handles.popupmenu1,'Value'); if chon = = 1 t = k; elseif chon = = 2 t = c;44

elseif chon = = 3 t = r; end t = num2str(t); set(handles.edit3,'String',t); Tip theo ta xt trng hp dng listbox. Thay v dng Popupmenu ta dng Listbox. Cc phn t khc v thuc tnh ca n khng thay i. Thuc tnh Name ca Layout l ct1_56. Ta vo String ca Listbox v ghi vo 3 dng Kelvine, Celcius v Rankine. Giao din nh sau:

File c lu vi tn ct1_56.fig. Tip theo vit lnh cho ct1_56.m. Ta c file ny nh sau: function varargout = ct1_56(varargin) if nargin = = fig = openfig(mfilename,'reuse'); set(fig,'Color',get(0,'defaultUicontrolBackgroundColor')); handles = guihandles(fig); guidata(fig, handles); if nargout > 0 varargout{1} = fig; end elseif ischar(varargin{1}) try [varargout{1:nargout}] = feval(varargin{:}); catch disp(lasterr); end45

end function varargout = slider1_Callback(h, eventdata, handles, varargin) f = get(handles.slider1,'Value'); f = f*180 + 32; a = num2str(f); set(handles.edit2,'String',a); r = f + 495.7; c = (f - 32)*5/9; k = c + 273.15; chon = get(handles.listbox1,'Value'); if chon = = 1 t = k; elseif chon = = 2 t = c; elseif chon = = 3 t = r; end t = num2str(t); set(handles.edit3,'String',t); Ta tip tc xt phng n dng Radiobutton. Giao din c dng:

Ta dng ba Radiobutton thay cho Listbox. Radiobutton th nht c thuc tnh FontSize: 12, FntWeight: bold v String: Rankine. Radiobutton th 2 c thuc tnh FontSize: 12, FntWeight: bold v String: Celcius. Radibutton th 3 c thuc tnh FontSize: 12, FntWeight: bold v String: Kelvine. Cc phn t khc v thuc tnh ca chng vn nh c. Layout c thuc tnh Name: ct1_57. Lu GUI vi tn ct1_57.fig. Tip theo ta vit cc m lnh trong ct1_57.m:46

function varargout = ct1_57(varargin) if nargin = = 0 fig = openfig(mfilename,'reuse'); set(fig,'Color',get(0,'defaultUicontrolBackgroundColor')); handles = guihandles(fig); guidata(fig, handles); if nargout > 0 varargout{1} = fig; end elseif ischar(varargin{1}) try [varargout{1:nargout}] = feval(varargin{:}); catch disp(lasterr); end end function mutual_exclude(off) set(off,'Value',0); function varargout = slider1_Callback(h, eventdata, handles, varargin) global chon f = get(handles.slider1,'Value'); f = f*180 + 32; a = num2str(f); set(handles.edit2,'String',a); r = f + 495.7; c = (f - 32)*5/9; k = c + 273.15; if chon = = 1 t = r; elseif chon = = 2 t = c; elseif chon == 3 t = k; end t = num2str(t); set(handles.edit3,'String',t); function varargout = radiobutton1_Callback(h, eventdata, handles, varargin)

47

global chon; off = [handles.radiobutton2, handles.radiobutton3]; mutual_exclude(off); chon = 1; function varargout = radiobutton2_Callback(h, eventdata, handles, varargin) global chon; off = [handles.radiobutton1, handles.radiobutton3]; mutual_exclude(off); chon = 2; function varargout = radiobutton3_Callback(h, eventdata, handles, varargin) global chon; off = [handles.radiobutton1, handles.radiobutton2]; mutual_exclude(off); chon = 3; on lnh: function mutual_exclude(off) set(off,'Value',0); lm cho 3 nt lnh tr thnh mt nhm. Cc cu lnh: off = [handles.radiobutton1, handles.radiobutton2]; mutual_exclude(off); lm cho khi chn mt nt Radiobutton ny th khng chn c nt khc na. Cui cng ta xt phng n dng Checkbox. Giao din nh sau:

Cng nh phng n dng Radiobutton, ta dng ba Checkbox. Checkbox th nht c thuc tnh FontSize: 12, FntWeight: bold v String: Rankine.

51

Checkbox th hai c thuc tnh FontSize: 12, FntWeight: bold v String: Celcius. Checkbox th ba c thuc tnh FontSize: 12, FntWeight: bold v String: Kelvine. Cc phn t khc khng co g thay i. Ta lu file vi tn ct1_58.fig. Tip theo ta vit m lnh cho ct1_58.m: function varargout = ct1_58(varargin) if nargin = = 0 fig = openfig(mfilename,'reuse'); set(fig,'Color',get(0,'defaultUicontrolBackgroundColor')); handles = guihandles(fig); guidata(fig, handles); if nargout > 0 varargout{1} = fig; end elseif ischar(varargin{1}) try [varargout{1:nargout}] = feval(varargin{:}); catch disp(lasterr); end end function mutual_exclude(off) set(off,'Value',0); function varargout = slider1_Callback(h, eventdata, handles, varargin) global chon f = get(handles.slider1,'Value'); f = f*180 + 32; a = num2str(f); set(handles.edit2,'String',a); r = f + 495.7; c = (f - 32)*5/9; k = c + 273.15; if chon = = 1 t = r; elseif chon = = 2 t = c; elseif chon = = 3 t = k; end t = num2str(t); set(handles.edit3,'String',t); function varargout = checkbox1_Callback(h, eventdata, handles, varargin)52

global chon; off = [handles.checkbox2, handles.checkbox3]; mutual_exclude(off); chon = 1; function varargout = checkbox2_Callback(h, eventdata, handles, varargin) global chon; off = [handles.checkbox1, handles.checkbox3]; mutual_exclude(off); chon = 2; function varargout = checkbox3_Callback(h, eventdata, handles, varargin) global chon; off = [handles.checkbox2, handles.checkbox1]; mutual_exclude(off); chon = 3; GUI c dng ho: Ta xy dng mt GUI dng v th hm y=tsin(t). Giao din nh sau:

Ta dng mt Axes, bn Pushbutton to nn giao din ny. Khi nhn Plot, th ca hm y = tsin(t) c v. Khi nhn Grid on, th c chia li. Khi nhn Grod off, li b xo. Nhn Close ng th. Layout c thuc tnh Name: ct1_59, HandleVisibility: callback. Cc Pushbutton u c thuc tnh FontSize: 12, FntWeight: bold v cc String l cc tn lnh. GUI c lu vi tn file l ct1_59.fig. Tip theo ta son tho lnh cho ct1_59.m: function varargout = ct1_59(varargin) if nargin = = 0 fig = openfig(mfilename,'reuse'); handles = guihandles(fig); guidata(fig, handles);53

if nargout > 0 varargout{1} = fig; end elseif ischar(varargin{1}) try [varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard catch disp(lasterr); end end function varargout = pushbutton1_Callback(h, eventdata, handles, varargin) grid on function varargout = pushbutton2_Callback(h, eventdata, handles, varargin) grid off function varargout = pushbutton3_Callback(h, eventdata, handles, varargin) close function varargout = pushbutton4_Callback(h, eventdata, handles, varargin) t = 0:0.01:20; y = t.*sin(t); plot(t,y); Tip theo ta xt mt GUI c giao din nh sau:

Nhim v ca GUI l v th ca hm peaks theo cc dng khc nhau( mesh, surf v contour) vi cc Colormap khc nhau(hsv, hot, gray, prism, cool, winter v summer). Vic v cc dng th thc hin nh cc Pushbutton. Vic chn Colormap thc hin nh Listbox.54

Layout c thuc tnh Name: ct1_60 v thuc tnh HandleVisbility: on. Cc Pushbutton u c thuc tnh FontSize: 12 v FntWeight: bold. Ta lu GUI vi tn ct1_60.fig. M trong ct1_60.m gm: function varargout = ct1_60(varargin) if nargin = = 0 fig = openfig(mfilename,'reuse'); set(fig,'Color',get(0,'defaultUicontrolBackgroundColor')); handles = guihandles(fig); guidata(fig, handles); if nargout > 0 varargout{1} = fig; end elseif ischar(varargin{1}) try [varargout{1:nargout}] = feval(varargin{:}); catch disp(lasterr); end end function varargout = pushbutton1_Callback(h, eventdata, handles, varargin) z = peaks(40); chon = get(handles.listbox1,'Value'); if chon = =1 colormap(hsv(256)); elseif chon = =2 colormap(hot(256)); elseif chon = =3 colormap(gray(256)); elseif chon = =4 colormap(prism(256)); elseif chon = =5 colormap(cool(256)); elseif chon = =6 colormap(winter(256)); elseif chon = =7 colormap(summer(256)); end mesh(z); function varargout = pushbutton2_Callback(h, eventdata, handles, varargin) z = peaks(40); chon = get(handles.listbox1,'Value'); if chon = =155

colormap(hsv(256)); elseif chon = =2 colormap(hot(256)); elseif chon = =3 colormap(gray(256)); elseif chon = =4 colormap(prism(256)); elseif chon = =5 colormap(cool(256)); elseif chon = =6 colormap(winter(256)); elseif chon = =7 colormap(summer(256)); end surf(z); function varargout = pushbutton3_Callback(h, eventdata, handles, varargin) z = peaks(40); chon = get(handles.listbox1,'Value'); if chon = =1 colormap(hsv(256)); elseif chon = =2 colormap(hot(256)); elseif chon = =3 colormap(gray(256)); elseif chon = = 4 colormap(prism(256)); elseif chon = = 5 colormap(cool(256)); elseif chon = = 6 colormap(winter(256)); elseif chon = = 7 colormap(summer(256)); end contour(z); GUI c dng ho: Ta xy dng mt GUI dng menu. Giao din ca GUI nh sau:

56

Menu Draw gm cc menu con Mesh, Contour v Close. GUI c lu trong file ct1_61.fig v chng trnh c lu trong file ct1_61.m: function varargout = ct1_61(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @ct1_61_OpeningFcn, ... 'gui_OutputFcn', @ct1_61_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end handles.output = hObject; function varargout = ct1_61_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; function mnumesh_Callback(hObject, eventdata, handles) z = peaks(40); mesh(z); function Untitled_3_Callback(hObject, eventdata, handles) z = peaks(40); contour(z); function mnuclose_Callback(hObject, eventdata, handles)57

clf close function mnudraw_Callback(hObject, eventdata, handles)

58

CHNG 2: MA TRN1. MT S KHI NIM Ma trn [A] gi l i xng nu [A]T = [A] Cho mt ma trn vung [A], cp n. Ta ni ma trn [A] khng suy bin (non singular) nu ma trn c th nghch o c hay ni cch khc, nh thc ca ma trn khc khng. Ma trn Hermite l mt ma trn vung c cc phn t l s phc bng chuyn v lin hp ca n, ngha l phn t hng i ct j bng s phc lin hp ca 2 + j T 3 phn t hng j ct i A = A . V d ma trn [ A ] = l ma trn 1 2 j Hermite. Ma trn Householder l mt ma trn vung dng: 2 [ H] = [E ] T [ U ][ U ]T [U] [U] Trong v l vec t ct khc zero Ma trn [A] gi l trc giao nu [A]T[A] = [E] T Ma trn phc [U] gi l ma trn unita nu U U = E . V d ma trn 1 + j 1 + j 2 [ U] = 2 l ma trn unita 1+ j 1 j 2 2 Mt ma trn ch c mt ct gi l mt vec t Chun ca mt vec t X, k hiu l X , l mt s thc tho mn: - X >0 - cX = c X - X+Y X + Y Gi thit X = [x1, x2,,xn]T, ta thng dng mt trong 3 chun sau y: - X 1 = max x jj

- X 2 = xjj=1

n

- X3=

xj=1

n

2 j

Chun ca mt ma trn [A], k hiu l A , l mt s thc tho mn: - A >059

- cA = c A - A+B A + B - AB A B Ta thng dng mt trong 3 chun sau y: - A 1 = max a i ,ji j=1n

n

- A 1 = max a i ,jj i =1

- A3=

i ,j=1

ai ,j

n

2

Ma trn [A] gi l xc nh dng nu vi vec t [x] bt k ta c: [ x]T[ A][ x] > 0 Ma trn [A] gi l na xc nh dng nu vi vec t [x] bt k ta c: [ x]T[ A][ x] 0 Ta nh ngha ma trn xc nh m v na xc nh m mt cch tng t. Hng ca ma trn l cp ca ma trn con ca ma trn y c nh thc khc khng cn mi ma trn con cp cao hn u c nh thc bng khng(ma trn con l ma trn c c bng cch xo mt s hng v ct ca ma trn ban u). 2. BIN I HOUSEHOLDER 1. Ma trn Householder: Ta bin i ma trn [A] v dng c cc phn t thuc ng cho chnh, cc phn t pha trn v pha di ng cho chnh khc zero, cn cc phn t cn li bng zero(ma trn ba ng cho) bng cch dng php bin i Householder. Php bin i Householder dng ma trn Householder. [ U ][ U ]T (1) [ H] = [ E] Q Trong : 1 1 2 T (2) Q = [ U] [ U] = [ U] 2 2 Do [H] i xng nn:

[ U ][ U ]T E [ U][ U]T [ H] [ H] = [ H][ H] = [ E] [ ] Q Q T T [ U ][ U]T + [ U ] [ U][ U ] [ U ] = [ E] 2 Q Q2T

(

)

60

Q Q T y ta thy [H] cng l ma trn trc giao. Cho [X] l vec t bt k v kho st php bin i [H][X]. Chn: [U] = [X] + k[I1] Trong : T k = [X] 0 [I1 ] = 1 0 Ta c: T [ U ][ U ]T X = E [ U] ([ X ] + k [I1 ]) X [ H][ X ] = [E] [ ] [ ] [ ] Q Q = [X] Nhng:

[ U ][ U ]T + [ U] ( 2Q ) [ U ]T = E = [E] 2 [ ] 2

(3)

[ U ] ([ X ]T[ X ] + k [I1 ] [ X ])T

QT 2

= [X]

[ U ] ( k 2 + k[ X1 ])QT

2Q = ([ X ] + k [ I1 ]) ([ X ] + k [ I1 ]) = [ X ] + k [ X ] [ I1 ] + [ I1 ] [ X ] + k 2 [ I1 ] [ I1 ]T T

(

)

= k 2 + 2kx1 + k 2 = 2(k 2 + kx1 )

Nh vy: T 0 (4) [ H][ X ] = [ X ] [ U ] = k [ I1 ] = k 0 0 ngha l php bin i loi tr tt c cc phn t ca [X] tr phn t u tin. 2. Bin i Householder mt ma trn i xng: By gi ta p dng php bin i cho ma trn [A] i xng: 1 [ 0 ]T a11 [ X ]T a11 [ X ]T (5) P1 [ A ] = = [ 0] [ H] [ X ] [ A] [ H][ X ] [ H][ A] Trong [X] l ct u tin ca [A] vi phn t u tin b b i. [A] c c t [A] bng cch b i ct v hng u tin. Ma trn [H] cp (n -1) c xy dng theo cc cng thc (1) (3). Do (4) ta thy php bin i ny lm ct u tin ca [A] tr thnh: a11 k a11 H H = 0 [ ][ ] 0 Php bin i:

61

T a11 ([H][ X ]) [ A] (6) P1 [ A ]P1 = H ][ X ] [ H ][ A][ H ] [ s ng cho ho hng u tin v ct u tin ca ma trn [A]. S bin i ca ma trn 44 l:

1 0 0 0 a11 a12 a13 a14 1 0 0 0 a11 k 0 0 0 0 k a21 0 a31 [A] = 0 [Q][A] [Q] [Q] 0 [Q] 0 0 0 a41 Hng v ct th 2 ca ma trn [A] c bin i tip bng cch dng php bin i i vi phn bn phi, pha di ca ma trn. Php bin i ny c th biu din bng [P2 ][ A ][P2 ] [ A ] , trong : [ E 2 ] [ 0 ]T (7) [P2 ] = [0] [ H] vi [E2] l ma trn n v 22 v [H] l ma trn (n - 2)(n - 2) c c bng cch chn [X] t (n - 2) phn t pha di ca ct th 2 ca ma trn [A]. Thc hin (n - 2) php bin i: [ Ei ] [ 0 ]T [Pi ] = i = 1, 2,..., n - 2 [0] [H] c c ma trn ba ng cho(tridiagonal). Ta c: [ U ][ U ]T = A [ A][ U ] U T = A V U T [ ] [ ] [ ][ ] [ A][H] = [ A] [E] [ ] Q Q Trong :

[V] =Do vy:

[ A][ U]Q

(8)

[ U ][ U ]T A V U T [ H][ A][ H] = [ E ] [ ] [ ][ ] Q [ U ][ U ]T A V U T ] [ V ][ U ]T = [A [ ] [ ][ ] Q

(

)

(

)Q

= [ A] [ V ][ U ] T T

[ U ] ([ U ]T [ A]) [ U ]([ U ]T [ V ])[ U ]TQT

+

= [ A] [ V ][ U ] [ U ][ V ] + 2g [ U ][ U ]

T

62

Trong : (9) 2Q t: [W] = [V] - g[U] (10) Ta thy ngay php bin i c dng: (11) [ H][ A][ H] = [ A] [ W ][ U ]T [ U ][ W ]T Thut ton c th tm li nh sau: - Cho [A] l ma trn vung cp (n - i) c c t phn di bn phi ca ma trn [A] - t X = a i+1,i a i+ 2 ,i a n ,i - Tnh [ X ] . Cho k = [ X ] nu x1 > 0 v k = - [ X ] nu x1 < 0 - Cho U = k + x1 x 2 x n i 2 [U] - Tnh Q = 2 [ A][ U] - Tnh [ V ] = Q [ U ]T[ V ] - Tnh g = 2Q - Tnh [W] = [V] - g[U] T T - Tnh [ A ] = [ A] [ W ][ U ] [ U ][ W ] - t a i ,i+1 = a i+1,i = k Ta xy dng hm housetrans() thc hin thut ton trn: function A = housetrans(A) % Bien doi Householder ma tran A thanh ma tran % ba ng cho dang[c\d\c]. % De co c va d dung d = diag(A), c = diag(A,1). n = size(A, 1); for k = 1:n-2 u = A(k+1:n, k); uMag = sqrt(dot(u, u)); if u(1) < 0; uMag = -uMag; end u(1) = u(1) + uMag; A(k+1:n, k) = u; % Luu u vao phan duoi cua A.T T

[ U ]T [ V ] g=

63

H = dot(u, u)/2; v = A(k+1:n,k+1:n)*u/H; g = dot(u, v)/(2*H); v = v - g*u; A(k+1:n, k+1:n) = A(k+1:n, k+1:n) - v*u' - u*v'; A(k, k+1) = -uMag; end k = zeros(n); for i = 1:n k(i, i) = A(i, i); end for i = 1:n-1 k(i, i+1) = A(i, i+1); k(i+1, i) = A(i, i+1); end A = k; tnh ma trn ba ng cho theo php bin i Householder ta dng chng trnh cthousetrans.m: clear all, clc a = [ 1 2 3 4; 2 9 3 5; 3 3 3 7; 4 5 7 6]; b = householder(a) d = diag(b) c = diag(b, 1) 3. BIN I THNH MA TRN HESSENBERG Nu ma trn [A] l ma trn i xng, phng php Householder c th c s dng bin i n thnh ma trn ng dng i xng ba ng cho. Nu ma trn [A] khng i xng, phng php Householder bin i ma trn [A] thnh ma trn ng dng Hessenberg. Ma trn Hessenberg l ma trn c dng: a 1,n a 11 a 12 a 13 a a 22 a 23 a2n 21 a2n H ] = 0 a 32 a 33 [ 0 0 0 a nn Ta thc hin php bin i Householder trn ma trn [A] v c c: [Q][H][Q] = [A] trong [Q] l ma trn trc giao (ta gi y l phn tch Hessenberg ma trn [A]) .

64

Thut ton c th tm li nh sau: - Cho [Q] l ma trn n v cp n - t X = 0 a i+ 2 ,i a n ,i - Tnh [ X ] . Cho = [ X ] nu ai+2,i > 0 v = - [ X ] nu ai+2,i < 0 - Cho U = 0 + x 2 2 [U] - Tnh = 2 [ U ][ U] - Tnh [ P ] = [ E ] - Tnh [ Q] = [ Q ][ P ]x n i T T

- Tnh [ A ] = [ P ][ A ][ P ] Ta xy dng hm hessenberg() thc hin php phn tch trn: function [H, Q] = hessenberg(a) [n, n] = size(a); q = eye(n); for k = 1:n - 2 alfa = 0; for j = k+1:n alfa = alfa + a(j, k)^2; end alfa = sign(a(k+1, k))*sqrt(alfa); u = zeros(1, n); u(k+1:n) = a(k+1:n, k); u(k+1) = u(k+1) + alfa; beta = .5*u*u'; p = eye(n); for i = 1:n p(i, 1:n) = p(i, 1:n) - (u(i)*u(1:n))/beta; end q = q*p; a = p*a*p; end H = a; Q = q; phn tch ma trn ta dng chng trnh cthessenberg.m:

65

clear all, clc a = [ 1 2 3 4; 5 6 7 4; 6 4 8 9; 3 5 7 9]; [H, Q] = hessenberg(a) 4. PHN TCH MA TRN THEO PHNG PHP DOOLITTLE Mt ma trn khng suy bin [A] gi l phn tch c thnh tch hai ma trn [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. Nu ma trn [R] c cc phn t nm trn ng cho chnh bng 1, ta c php phn tch Crout. Nu [R] = [L]T (hay [L] = [R]T) ta c php phn tch Choleski. Vi ma trn bc 3, [L] v [R] c dng: 1 0 0 r11 r12 r13 l [ L] = 21 1 0 [ R ] = 0 r22 r23 l 31 l 32 1 0 0 r33 tm lij v rij ta thc hin php nhn. Sau khi nhn ta c: r12 r13 r11 r13l 21 + r23 [ A ] = r11l 21 r12l 21 + r22 r11l 31 r12 l 31 + r22 l 32 r13l 31 + r23l 32 + r33 By gi ta thc hin php kh Gauss i vi phng trnh trn. u tin ta chn hng th nht lm tr v thc hin php bin i: hng 2 - l21 hng 1 (kh a21) hng 2 hng 3 - l31 hng 1 (kh a31) hng 3 kt qu ta c: r13 r11 r12 [ A1 ] = 0 r22 r23 0 r22 l 32 r23l 32 + r33 Sau ta ly hng th hai lm tr v thc hin bin i: hng 3 - l32 hng 2 (kh a32) hng 3 v c: r11 r12 r13 [ A 2 ] = 0 r22 r23 0 0 r33

66

Nh vy ta thy ngay rng ma trn [R] l ma trn c c khi thc hin loi tr Gauss tin ma trn [A] v cc phn t ca [L] l cc nhn t dng khi loi tr aij. iu c ngha l tm ma trn [L] v [R] ta dng php kh Gauss tin. Ta xy dng hm doolittle() thc hin loi phn tch Doolittle. function [l,r] = doolittle(A) %Phan tich ma tran A thanh A = L*U n = size(A, 1); u = zeros(n); for k = 1:n-1 for i = k+1:n if A(i, k)~= 0.0 lambda = A(i, k)/A(k, k); A(i, k+1:n) = A(i, k+1:n) - lambda*A(k, k+1:n); A(i, k) = lambda; end end end l = tril(A); for i = 1:n l(i, i) = 1; end l = triu(A); for i = 1:n l(i,i) = A(i, i); end 5. PHN TCH MA TRN THEO PHNG PHP CROUT Tng t nh thut ton Doolittle, ta c th phn tch ma trn [A] theo thut ton Crout thnh tch ca ma trn [L] v [R]. Cc ma trn bc 3 theo Crout c dng: l11 0 0 1 r12 r13 [ L] = l 21 l 22 0 [ R ] = 0 1 r23 l 31 l 32 l 33 0 0 1 tm lij v rij ta thc hin php nhn. Sau khi nhn ta c: l11r13 l11 l11r12 l [ A ] = 21 l 21r12 + l 22 l 21r13 + l 22r23 l 31 l 31r12 + l 32 l 31r13 + l 32r23 + l 33 Nh vy: a11 = 1. r11 + 0.0 + 0.0 = r11 ;67

a12 = r12 ; a13 = r13 a21 = l21r11 ; a22 = l21r12 + r22 ; a23 = l31r11 a31 = l31r11 ; a32 = l31r12 ; a33 = l31r13 + l32r23 + r33 Mt cch tng qut ta c : vi j > i : lij = rji = 0 vi i = 1 : r1j = a1j (j = 1 ti n) lj1 = aj1/r11 (j = 1 ti n) vi i = 2 ti n

rij = a ij l ik rkj ( j = i ti n)(j = i ti n) rii Ta xy dng hm crout() phn tch ma trn theo thut ton Crout: function [l, r] = crout(a) n = size(a, 1); l = zeros(n); r = zeros(n); for i = 1:n r(1, i) = a(1, i); l(i, i) = 1.; l(i, 1) = a(i, 1)/a(1, 1); end for k = 2:n r(k, k:n) = a(k, k:n) - l(k, 1:k)*r(1:k, k:n); if k~= n for i = 1:n l(i, k) = (a(i, k)- l(i, 1:k-1)*r(1:k-1, k))/r(k, k); end end end 6. PHN TCH MA TRN THEO PHNG PHP CHOLESKI Thut ton Choleski cho php phn tch ma trn [A] thnh tch hai ma trn: [A] = [L][L]T. Thut ton ny i hi: - [A] l ma trn thc, i xng

i 1

l ji =

a ji l jk rkik =1

k =1 i 1

68

- [A] l ma trn xc nh dng Ta vung [A] cp 3 theo thut ton Choleski: a11 a12 a13 l11 0 0 l11 l 21 a 21 a 22 a 23 = l 21 l 22 0 0 l 22 a 31 a 32 a 33 l 31 l 32 l 33 0 0

l 31 l 32 l 33

Sau khi thc hin php nhn ta c: 2 l11l 21 l11l 31 a11 a12 a13 l11 a a 22 a 23 = l11l 21 l 2 + l 2 l 21l 31 + l 22l 32 21 21 22 2 2 2 a 31 a 32 a 33 l11l 31 l 21l 31 + l 22 l 32 l 31 + l 32 + l 33 V phi l ma trn i xng. Cn bng cc phn t ca hai ma trn ta c: l11 = a11 l 21 = a 21 / l11 l 31 = a 31 / l11

l 22 = a 22 l 2 l 32 = (a 32 l 21l 31 ) / l 22 21 Tng qut, vi ma trn cp n, ta c:

l 33 = a 33 l 2 l 2 31 32

([L][L] )T j k =1

ij

= l i1l j1 + l i2 l j2 + + = l ik l jk i jk =1

j

Cn bng vi phn t ca ma trn [A] ta c:

a ij = l ik l jk i = j, j + 1,...,n j = 1,2,...,nDo ma trn [L] l ma trn tam gic tri nn i vi ct th nht ta c: l11 = a11 l i1 = a i1 / l11 i vi ct khc, rt lij ra khi tng ta c:

a ij = l ik l jk + l ijl jjk =1

j1

Nu i = j (phn t trn ng cho) th:

l jj = a jj l 2 jkk =1

j1

j = 2,3,...,n

v phn t nm ngoi ng cho: j1 1 l ij = a ij l ik l jk j = 2, 3,..., n i = j + 2, j + 3,...,n k =1 l jj Da vo thut ton trn ta xy dng hm choleski() function L = choleski(A) % Phan tich ma tran a thanh A = LL. % Cu phap: L = choleski(A) f = posdef(A);69

if f == 0 error('Ma tran khong xac dinh duong!'); return end n = size(A, 1); for j = 1:n temp = A(j, j) - dot(A(j, 1:j-1),A(j, 1:j-1)); if temp < 0.0 error('Ma tran khong xac dinh duong') end A(j, j) = sqrt(temp); for i = j+1:n A(i, j)=(A(i, j) - dot(A(i, 1:j-1),A(j, 1:j-1)))/A(j, j); end end L = tril(A); function f = posdef(M) %Kiem tra lieu ma tran M co xac dinh duong hay kong isposdef = true; for i=1:length(M) if ( det( M(1:i, 1:i) ) j. V d trong hon v 1432 s 4 lm vi s 3 mt nghch th , s 4 lm vi s 2 mt nghch th, s 3 lm vi s 2 mt nghch th. Mt hon v gi l chn nu tng s nghch th trong hon v l mt s chn; mt hon v gi l l trong trng hp ngc li. Nh vy 1432 l mt hon v l. Cho mt dy s, nu ta to ra mt dy s mi bng cch i ch cc phn t cho nhau th ta thc hin mt php th. 2 1 4 3 l php th bin 2 thnh 1, 1 thnh 4, 4 thnh 2 v 3 thnh V d p = 1 4 2 3 3. Mt php th gi l chn nu tnh chn l ca dng trn v dng di nh nhau v l trong trng hp ngc li. Php th trn l php th l. Cho ma trn vung [A] cp n. Cc phn t ca hng th i l ai,1, ai,2,,ai,n. Cc phn t ca ct th j l a1,j, a2,j ,, an,j. Ta xem hng th i l mt vec t, k hiu l Ai* v ct th j cng l mt vec t, k hiu l A*j. Vi mi php th: in i1 i 2 p= (1) j1 j1 jn 88

ta lp tch: a i1 j1 a i2 j2 a in jn (2) Trc mi tch (2) ta t du + nu v du - nu php th (1) l. Sau ta lp tng ca n! tch c du nh vy, ngha l tng: (3) (1)t(p) ai1j1 ai2 j2 ain jnp

trong : t(p) = 1 nu php th p l t(p) = 0 nu php th p chn Tng (4) c gi l nh thc ca ma trn vung [A], cp n. Ta xy dng hm determinant() tnh nh thc ca ma trn theo nh ngha: function d = determinant(A) % DETERMINANT tinh dinh thuc theo dinh nghia. [m, n] = size(A); if ( m ~= n ) fprintf ( '\n' ); fprintf ( ' Chi ma tran vuong moi co dinh thuc!\n' ); return end p = zeros(1, n); nf = prod([1:n]); d = 0.0; for i = 1:nf p = nextperm(p); s = permsign(p); x = diag(A([1:n],p)); d = d + s*prod(x); end function psign = permsign(p) % PERMSIGN tra ve dau phep the . % +1, neu phep the chan, % -1, neu phep the le. n = length ( p ); psign = 1; for i = 1:n-1 j = i; while (p(j) ~= i) j = j + 1;

89

end if ( j ~= i ) temp = p(i); p(i) = p(j); p(j) = temp; psign = - psign; end end function q = nextperm(p) n = length(p); q = p; if(n == 1) q = 1; elseif (q == 0) q = [1:n]; else i = n - 1; while (q(i) > q(i+1)) i = i - 1; if (i == 0) break; end end if (i == 0) q = [1:n]; else j = n; while (q(j) < q(i)) j = j - 1; end t = q(j); q(j) = q(i); q(i) = t; q(i+1:n) = q(n:-1:i+1); end end tnh nh thc ta dng chng trnh ctdeterminant.m: clear all, clc90

%a = [1 2; 3 5]; a = [1 3 5; 3 4 6; 4 6 3]; d = determinant(a) 16. TNH NH THC BNG CCH PHN TCH MA TRN Cho ma trn [A]. Nu [A] = [B][C] th det[A] = det[B]det[C] Mt khc vi mt ma trn tam gic, v d: b11 b12 b13 b14 0 b b23 b 24 22 [ B] = 0 0 b33 b 34 0 0 b 44 0 th det [ B] = b11b 22 b 33 b 44 ngha l i vi ma trn tam gic, nh thc bng tch cc phn t trn ng cho chnh. Khi phn tch ma trn [A] theo thut ton Doolitte, ta dng chng trnh ctdoodecmp.m tnh nh thc ca n: clear all, clc a = [1 2 3 4; 3 4 5 7; 2 3 8 5; 4 9 1 4]; [l, r] = doolittle(a); d = prod(diag(l))*prod(diag(r)) Khi phn tch ma trn [A] theo thut ton Crout, ta dng chng trnh ctcrotdecmp.m tnh nh thc ca n: clear all, clc a = [1 2 3 4; 3 4 5 7; 2 3 8 5; 4 9 1 4]; [l, r] = crout(a); d = prod(diag(l))*prod(diag(r)) Khi phn tch ma trn [A] theo thut ton Choleski, ta dng chng trnh ctcholdecmp.m tnh nh thc ca n: clear all, clc a = [4 -2 2;-2 2 -4;2 -4 11];

91

a = pascal(5); l = choleski(a); d = prod(diag(l))*prod(diag(l')) 17. THUT TON TR CHI Cho ma trn [A] c a1,1 0 . Ta xy dng ma trn [B] c cc phn t bi ,j = a1,1a i ,j a i ,na n ,j th: 2 [ A ] = a1,1n [ B] ngha l:

92

a11 a12 a11 a13 det det a 21 a 22 a 21 a 23 a11 a12 a11 a13 det det n det [ A ] = a112 det a 31 a 32 a 31 a 33 a11 a12 a11 a13 det det a a n1 a n2 n1 a n3 Ta xy dng hm chiopivot() thc hin thut ton trn:

a11 a1n det a 21 a 2n a11 a1n det a 31 a 3n a11 a1n det a n1 a nn

function d = chiopivot(a) %tinh dinh thuc bang thuat toan Chio pivotal condensation if a(1, 1) == 0 error('Khong dung phuong phap nay de tinh dinh thuc duoc !'); return; end c = a(1, 1); n = size(a, 1); if (n = 1) for i = 1:m%hang b(i, 1:m) = a(1, 1)*a(i+1, 2:m+1) - a(i+1, 1)*a(1, 2:m+1); end if (m > 2) a = b; c = c*a(1,1); clear b; end m = m - 1; end d = b(1, 1)*b(2, 2) - b(2, 1)*b(1, 2); d = d/c; tnh nh thc ta dng chng trnh ctchiopivot.m:

95

clear all, clc a = [1 2 3 4; 3 4 5 7; 2 3 8 5; 4 9 1 4]; d = chiopivot(a) 18. THUT TON LAPLACE tnh nh thc theo thut ton Laplace, ta khai trin nh thc theo hng hay ct. Cho ma trn vung [A] cp n. Nu b i hng i v ct j (tc xo hng v ct cha phn t aij) th ta c mt ma trn cp (n - 1), nh thc ca n gi l nh thc con cp (n - 1) ng vi phn t aij (minor) , k hiu l Mij. Ta ch n hng th i v aij l mt phn t ca hng . Trong det[A] ta gp nhng s hng cha aij li v t aij lm tha s chung, h s ca n k hiu l Aij v gi l phn b i s (cofactor) ca phn t aij. Cofactor Aij ca ma trn [A] l: A ij = ( 1)i+ j M ij nh thc ca [A] khi khai trin theo hng l:

det [ A ] = a ijA iji =1

n

Ta xy dng hm cofactor() tnh cc phn b i s: function c = cofactor(A, i, j) % cac phan bu dai so cua ma tran % dung de nghich dao mt % C = cofactor(A, i, j) tra ve phan bu dai so cua %ng i, cot j cua A. if nargin == 3 M = A; M(i,:) = []; M(:,j) = []; c = (-1)^(i+j) * det(M); else [n, n] = size(A); for i = 1:n for j = 1:n c(i,j) = cofactor(A, i, j); end end end Sau khi phn b i s, ta xy dng hm cofactordet() tnh nh thc ca [A] function d = cofactordet(A)96

d = 0; for i = 1:size(A, 1) c = cofactor(A, i, 1); d = d + A(i, 1)*c; end tnh nh thc ta dng chng trnh ctcofactordet.m: clear all, clc a = [1 2 3 4; 3 4 5 7; 2 3 8 5; 4 9 1 4]; det = cofactordet(a) 19. THUT TON DODGSON Thut ton c c Dodgson ( Dodgson condensation) dng tnh nh thc ca ma trn vung. N c Charles Ludwidge Dodgson a ra. tnh nh thc ca ma trn cp n n, ta xy dng cc ma trn cp (n - 1) (n - 1) cho n ma trn cp 1 1 l nh thc ca ma trn cn tm. Bc u tin ta xy dng ma trn cp (n - 1)(n - 1) t cc nh thc ca cc ma trn con 22. V d vi ma trn 5 1 0 2 8 5 0 6 7

2 8 8 5 0 6 6 7 Cc ma trn ny s to ra cc phn t ca ma trn 22. Phn t hng r, ct c l nh thc ca ma trn con 22 ca ma trn ban u vi hng r v ct c gc trn tri. Nh vy ma trn mi l: 38 5 12 26 Ma trn kk c to ra bng cch ly nh thc ca ma trn con 22 ca ma trn (k+1)(k+1) nh trn v chia n cho phn t tng ng ca ma trn trung tm, ngha l ma trn b i hng trn cng, hng di cng, ct bn phi v ct bn tri ca ma trn (k+2)(k+2) Ta xy dng hm dodgson() thc hin thut ton trn: function dt = dodgson(a) if size(a, 1) ~= size(a, 2)97

ta c cc ma trn con l: 5 1 1 0 2 8 8 5

error('Ma tran A phai la mt tran vuong'); end; n = size(a, 1); if n == 2 dt = a(1, 1)*a(2, 2) - a(2, 1)*a(1, 2); return end; if n == 3; for i = 1:n-1 b(i, 1:n-1) = a(i, 1:n-1).*a(i+1, 2:n) - a(i+1, 1:n-1).*a(i, 2:n); end dt = (b(1, 1)*b(2, 2) - b(2, 1)*b(1, 2))/a(2,2); return end c = a; c(:, 1) = []; c(:, n-1) = []; c(1, :) = []; c(n - 1, :) = []; for i = 1:n-1 b(i, 1:n-1) = a(i, 1:n-1).*a(i+1, 2:n) - a(i+1, 1:n-1).*a(i, 2:n); end m = size(b, 1); while m >= 2 for i = 1:m-1 for j = 1:m-1 d(i, j) = (b(i, j)*b(i+1, j+1) - b(i+1, j)*b(i, j+1))/c(i, j); end end if m > 3 c = b; c(:, 1) = []; c(:, m-1) = []; c(1, :) = []; c(m - 1, :) = []; b = d; end m = m - 1; end dt = (d(1, 1)*d(2, 2) - d(2, 1)*d(1, 2))/b(2,2);

98

tnh nh thc ta dng chng trnh ctdodgson.m: clear all, clc; a = [1 2 3 4; 5 1 3 2; 4 9 2 2; 6 3 4 1]; dt = dodgson(a) 20. NGHCH O MA TRN BNG CCH DNG MINOR Cho ma trn [A], ta c: A ( a 1 )i ,j = det [j,iA] Trong : ( a 1 )i ,j l phn t hng i, ct j ca ma trn [A]-1 Ai,j l phn b i s ca phn t ai,j ca ma trn [A] Ta xy dng hm minorinv() thc hin thut ton trn: function c = minorinv(a) % Tim ma tran nghich dao bang thuat toan minor n = size(a, 1); ms = det(a); for i = 1:n for k = 1:n b = cofactor(a, i, k); c(i, k) = b/ms; end end c = transpose(c); tm ma trn nghch o ta dng chng trnh ctminorinv.m: clear all, clc; a = [1 3 5; 3 4 9; 5 9 6]; b = minorinv(a) 21. NGHCH O BNG CCH PHN TCH MA TRN Cho ma trn [A[, ta c th phn tch n thnh ma trn tam gic phi [R] v tam gic tri [L]: [A] = [L][R] Do nh ngha ma trn nghch o: [L]-1[L] = [L][L]-1 = [E] nn:99

[R] = [L]-1[L][R] = [L]-1[A] v: [L] = [L][R][R]-1 = [A][R]-1 Do vy: [A] = [L][R] = ([A][R]-1)([L]-1[A]) = [A][R]-1[L]-1[A] [A][R]-1[L]-1 = [E] Kt qu l: [R]-1[L]-1 = [R]-1 Vi ma trn tam gic phi [R], cc hng khi nghch o l l1,..,ln c tnh theo cch sau: - Cho [e1],.., [ei],..,[en] l cc ct ca ma trn n v [E] cp n [e ] - ln = n a n ,n 1 - l i = ([ e i ] a i ,i+1 l i+1 a i ,n l n ) a n ,n Ta xy dng hm luinverse() thc hin thut ton tnh nh thc ca ma trn [R]:

function r = luinverse(a) % Nghich dao ma tran tam giac phai n = size(a, 1); e = zeros(n, n); c = zeros(n, 1); l = e; b = e; for i = 1:n c(i) = 1; e(:, i) = c; c(i) = 0; end l(:, n) = e(:, n)/a(n, n); for i = n-1:-1:1 c = zeros(n, 1); for k = i+1:n c = c + a(i, k)*l(:, k); end l(:, i) = (e(:, i) - c)/a(i, i); end r = l'; nghich o ma trn tam gic ta dng chng trnh ctluinv.m:

100

clear all, clc a = [1 2 3; 0 4 5; 0 0 2]; r = luinverse(a) nghch o ma trn tam gic tri ta dng cc quan h: [L]-1 = ([LT]-1)T v [L]T s l mt ma trn tam gic phi. Ta dng chng trnh ctluinverse.m nghch o ma trn thng thng: clear all, clc a = [ 1 3 5; 3 4 9; 5 9 6]; [l, r] = doolittle(a); b = luinverse(r)*(luinverse(l'))' 22. NGHCH O MA TRN BNG THUT TON GAUSS - JORDAN Cho ma trn [A] v ma trn n v [E] tng ng. Dng ca ma trn [E] cp 4, l:

1 0 0 0 0 1 0 0 E= 0 0 1 0 0 0 0 1 Nh vy, vn l ta cn tm ma trn [A]-1. Phng php loi tr nhn c ma trn nghch o [A]-1 c thc hin qua n giai on, mi mt giai on gm hai bc. i vi giai on th k: - chun ho phn t akk bng cch nhn hng vi nghch o ca n - lm cho bng khng cc phn t pha trn v pha di ng cho cho n ct th k. Khi k = n th [A](k) s tr thnh ma trn n v v [E] tr thnh [A]-1 Ta xy dng mt hm nghch o invmat():function x = invmat(a) % Nghich dao ma tran a %Cu phap: x = invmat(a) k = size(a, 1); n = k; b = eye(n); a = [a, b]; i = 1; while i evalmax evalmax = eval; end end eval = d(n) - abs(c(n-1)); if eval < evalmin evalmin = eval;110

end eval = d(n) + abs(c(n-1)); if eval > evalmax evalmax = eval; end

Ta xy dng hm evalbrackets() vy cc gi tr ring nh nht ca ma trn ba ng cho. N cho dy r1, r2,...,rm+1 trong mi on [ri, ri+1] cha mt gi tr ring. Thut ton trc ht tm bin ton cc ca cc gi tr ring theo nh l Gerschorin. Phng php chia i kt hp vi dy c tnh ca dy Sturm c dng xc nh bin trn m, m-1,..., 1function r = evalbrackets(c, d, m) % Nhom m gia tri rieng min cua ma tran A = [c\d\c]

111

[evalmin, evalmax] = gerschgorin(c, d); r = ones(m+1, 1); r(1) = evalmin; % Tim cac gia tri rieng theo thu tu giam dan for k = m:-1:1 % chia doi doan (evalmin, evalmax) eval = (evalmax + evalmin)/2; h = (evalmax - evalmin)/2; for i = 1:100 % Tim so gia tri rieng nho hon eval numevals = countevals(c, d, eval); % lai chia doi doan chua eval h = h/2; if numevals < k ; eval = eval + h; elseif numevals > k ; eval = eval - h; else; break end end valmax = eval; r(k+1) = eval; end 3. Tnh cc gi tr ring: Mt khi tm c khong cha cc gi tr ring ta c th xc nh nghim ca a thc Pn() bng phng php Brent. Ta xy dng hm eigenvals() tm cc gi tr ring nh nht ca ma trn ba ng cho i xng bng phng php Brent. function evals = eigenvals(c, d, m) % Tinh m gia tri rieng be nhat cua a = [c\d\c]. % c va d phai khai bao 'global' trong chuong trinh goi evals = zeros(m, 1); r = evalbrackets(c, d, m); % nhom cac gia tri rieng for i = 1:m evals(i) = brent(@func, r(i), r(i+1)); end Khi bit cc gi tr ring, cch tt nht tm cc vec t ring tng ng l phng php lu tha nghch o. Ta dng hm invpower() thc hin cng vic ny:114

function [eval, evec] = invpower(c, d, s, maxiter, tol) % Tinh cac gia tri rieng cua A = [c\d\c] gan voi s va % va vec to rieng tuong ung bang phuong phap lap nghich dao. if nargin < 5; tol = 1.0e-6; end if nargin < 4; maxiter = 50; end n = length(d); e = c; d = d - s; [c, d, e] = ludec3(c, d, e); % phan tich A* = A - sI x = rand(n, 1); xmag = sqrt(dot(x, x)); x = x/xmag; % chuan hoa x for i = 1:maxiter xold = x; x = lusol3(c, d, e, x); % giai he A*x = xOld xmag = sqrt(dot(x, x)); x = x/xmag; % chuan hoa x xsign = sign(dot(xold, x)); %t hien su doi dau cua x x = x*xsign; % kiem tr tinh hoi tu if sqrt(dot(xold - x, xold - x)) < tol eval = s + xsign/xmag; evec = x; return end end error('Qua nhieu lan lap') function [c,d,e] = ludec3(c, d, e) % Phan tich ma tran A thanh A = [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; end115

function x = lusol3(c, d, e, b) % Giai he A*x = b voi A = [c\d\e] n = length(d); for k = 2:n % thay the tien b(k) = b(k) - c(k-1)*b(k-1); 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 xy dng hm symmateig() tm cc gi tr ring v vec t ring: function [ eigenvalues, eigvec] = symmateig(a) global c d m = size(a, 1); b = housetrans(a); d = diag(b); c = diag(b, 1); p = householderp(a); evals = eigenvals(c, d, m); for i = 1:m s = evals(i)*1.0000001; eval = invpower(c, d, s); end eigenvalues = diag(evals'); n = size(eigenvalues, 1); eigvec = zeros(n); c = eigvec; e = eye(n); for i = 1:n b = a - eigenvalues(i, i)*e; c = nulld(b); eigvec(:, i) = c(:,1); end tm gi tr ring ca mt ma trn i xng bng cch bin i Householder ta dng chng trnh cthouseholdereig.m: clear all, clc116

global c d a = [ 1 2 3 4; 2 7 6 5; 3 6 9 0;4 5 0 3]; [eval, evec] = symmateig(a) n = size(a, 1); 28. TM GI TR RING BNG PHNG PHP QUT tm cc gi tr ring khc ca ma trn ta dng phng php qut. Cho phng trnh thun nht di dng ma trn: [A][X] = [X] (1) Bng phng php lp lu tha ta nhn c gi tr ring ln nht. tm gi tr ring ln th hai 2 ta dng phng php qut. Mun vy vec t ban u [X0] phi chn sao cho khng cng phng vi vec t ring ng vi gi tr ring ln nht 1. V cc vec t ring to thnh c s nn: (2) [ X 0 ] = c1 [ X 1 ] + c 2 [ X 2 ] + + c n [ X n ] Nhn c hai v ca (2) vi chuyn v [ X 1 ] ta c:T

[ X 1 ] [ X 0 ] = c1 [ X 1 ] [ X 1 ]T T

hay:

[X ] [X ] c 1= 1 T 0 [ X1 ] [ X1 ]T T

(3)

[ X ] [ X ][ X ] (4) [ Y0 ] = [ X 0 ] c1 [ X1 ] = [ X 0 ] 1 T 0 1 [ X1 ] [ X1 ] Nh vy vec t [ Y0 ] khng trng phng vi [ X 1 ] v nu ta dng php lp cng sut vi vec t ban u [ Y0 ] n s hi t ti gi tr ring ln th 2. Vec t [ Y0 ] trong (4) c th vit di dng: T [ X1 ][ X1 ] X (5) [ Y0 ] = [E] [ 0 ] T [ X1 ] [ X1 ] v:T [ A ][ X1 ][ X1 ] X [ A ][ Y0 ] = [ A] [ 0 ] T [ X1 ] [ X1 ] = [ D 1 ][ X 0 ] Trong : T 1[ X 1 ][ X 1 ] [ D1 ] = [ A ] T [ X1 ] [ X1 ]

By gi ta chn vec t ban u l:

(6) (7) (8)

117

l ma trn dng cho php lp tnh gi tr ring ln th 2 ca [A]. tnh gi tr ring ln th 3, th 4,... ta dng cc ma trn cho php lp lu tha: T 2 [ X 2 ][ X 2 ] [ D 2 ] = [ D1 ] T [X2 ] [X2 ]

[ D3 ] = [ D2 ]

3 [ X 3 ][ X 3 ]

T

[X3 ] [X3 ]T

Tip tc qu trnh trn n ln ta thu c cc gi tr ring ca ma trn [A]. Ta xy dng hm sweeping() thc hin thut ton trn: function [t, s, iter] = sweeping(A) %function t = sweeping(A) %Tinh tat ca cac gia tri rieng va vec to rieng cua ma tran A doi xung n = size(A, 1); t = eye(n); s = zeros(n); k = zeros(n, 1); [l, v, iter] = eigpower(A); t(1, 1) = l; s(:, 1) = v; k(1, 1) = iter; for i = 2:n A = A - (l*v*v')/(v'*v); [l, v, iter] = eigpower(A); t(i,i) = l; s(:, i) = v; k(i, 1) = iter; end iter = max(k); tnh gi tr ring v vec t ring ca ma trn ta dng chng trnh ctsweeping.m: clear all, clc A = [1 3 5; 3 4 9; 5 9 6]; %A = [17 24 30 17; 8 13 20 7; 2 10 8 6; -23 -43 -54 -26]; [t, s, iter] = sweeping(A) 29. TM GI TR RING BNG PHNG PHP JACOBI Phng php ny cho php ta tm tt cc gi tr ring ca ma trn [A] i xng. Ta to ra ma trn trc giao chun [V] gm cc cc vec t ring sao cho [V]T[V] = [E];

118

[V]-1 = [V]T v dng n bin i ng dng ma trn [A]. Khi ta s nhn c ma trn ng cho c cc gi tr ring nm trn ng cho chnh: (1) [ V ]T [ A ][ V ] = [ V ]1 [ A][ V ] = [ ] hiu phng php Jacobi, trc ht ta nh ngha ma trn quay pq:

1 0 R pq () = 0 0 0

p 0 1 0 0 0 0 0 cos 0 sin 0 0

q 0 0 sin 0 cos

p q

(2)

Do ma trn [R] trc giao nn cc vec t hng v ct ca n cng trc giao v chun ho:

R pq R pq = E T

T

R pq = R pq T

1

(3)

Nhn trc v sau ma trn [A] vi R pq v R pq to nn bin i ng dng:

A(1) = R pq A R pq (4) Ch l php bin i ng dng khng lm thay i gi tr ring nn bt k ma trn no c c t cc ln lp:(5) T T T R (k) R (k1) A R R (k1) R (k) = R c cng gi tr ring. Hn na, nu n l ma trn ng cho, cc gi tr ring s nm trn ng cho chnh v ma trn c nhn vo bn phi ca ma trn [A] l ma trn [V]: V = R R (k1) R (k) (6) Vn cn li l lm sao bin ma trn (5) thnh ma trn ng cho. Cn nh rng php bin i (4) ch lm thay i hng v ct p v q. v pq = v qp = a qp (c 2 s 2 ) + (a qq a pp )sc (7a) 1 = a qpcos 2 + (a qq a pp )sin 2 2119

A(k+1) = R (k) A(k) R (k)

T

v pn = v np = a pn c + a qn s v qn = v nq = a pn s + a qn c

n p, q n p, q

(7b) (7c) (7d) (7e)

v pp = a ppc 2 + a qq s 2 + 2a pq sc = a ppc 2 + a qq s 2 + a pq sin 2v qq = a pps 2 + a qq c 2 2a pq sc = a pps 2 + a qq c 2 a pq sin 2c = cos, s = sin Ta lm cho v pq = v qp = 0 bng cch chn ca ma trn quay [Rpq()] sao cho: 2a pq 1 sin 2 cos 2 = = tg2 = cos2 a pp a qq 1 + tg 2 2 sin2 = tg2cos2cos = cos 2 =

(8)

(9)

1 + cos 2 sin 2 sin = 2 2 cos cho ma trn gn ma trn ng cho sau mi ln lp, ta coi ch s hng v ct ca phn t ln nht nm ngoi ng cho l p v q v lm cho n bng zero. Ta xy dng hm eigjacobi() tnh cc gi tr ring i v cc vec t ring ca mt ma trn i xng cp n bng phng php Jacobi.

function [lambda, v] = eigjacobi(A, tol, maxiter) %Phuong phap Jacobi cho ma tran A doi xung if nargin < 3 maxiter = 100; end if nargin < 2 tol = 1e-8; end n = size(A, 2); lambda =[]; v = []; for m = 1:n if norm(A(m:n, m) - A(m, m:n)') > eps error(' Ma tran khong doi xung !'); end end v = eye(n); for k = 1: maxiter for m = 1:n - 1 [Am(m), Q(m)] = max(abs(A(m, m + 1:n)));120

end [Amm, p] = max(Am); q = p + Q(p); if Amm < eps*sum(abs(diag(lambda))) break; end if abs(A(p, p) - A(q, q)) tol) & (i < maxiter)) v = a*p; alfa = delta1/norm(v)^2; x = x + alfa*p; r = r - alfa*v; rnorm = norm(r); s = a'*r; delta2 = norm(s)^2; beta = delta2/delta1; p = s + beta*p; delta1 = delta2; i = i + 1; end gii h phng trnh ta dng chng trnh ctcgne.m172

clear all, clc a = [ 1 3 4; 2 5 7; 3 1 2]; b = [8 14 6]'; maxiter = 50; tol = 1e-6; x0 = [0 0 0]'; x = cgne(a, b, x0, maxiter, tol) 16. PHNG PHP CGNR Khi ma trn h s [A] khng i xng ta khng dng c phng php CG. V vy ta cn bin i h phng trnh dng c phng php CG. Xt h phng trnh: [A][X] = [B] Ta a h v dng: [A]T[M][A][X] = [A]T[M][B] hay A X = B vi cc ma trn A v B i xng nn c th dng c phng php CG. Thut ton ca phng php CGNR l: - Cho [X0] tnh r = B A X 0 v v = r - Lp cho n khi hi t T rk rk k = T v k ([A]v k ) x k +1 = x k k v k rk+1 = rk k A v k T rk rk k = T ` rk1rk1 v k +1 = rk +1 + k v k Ta xy dng hm cgnr() thc hin thut ton trn

function x = cgnr(a, b, x, maxiter, tol) % dung thuat toan cgnr der giai he phuong trinh n = size(a,1); m = ones(n,1); m = diag(m); m = 1.2*m; am = a'*m*a;173

bm = a'*m*b; r = bm - am*x; v = r; delta1 = norm(r)^2; for k = 1:maxiter if norm(r) < tol break end alfa = norm(r)^2/(v'*(am*v)); x = x + alfa*v; r = r - alfa*am*v; delta2 = norm(r)^2; beta = delta2/delta1; v = r + beta*v; delta1 = delta2; end gii h phng trnh ta dng chng trnh ctcgnr.m clear all, clc a = [ 1 3 4; 2 5 7; 3 1 2]; b = [8 14 6]'; maxiter = 50; tol = 1e-6; x = [0 0 0]'; x = cgnr(a, b, x, maxiter, tol) 17. PHNG PHP CGLS Phng php CGLS cng dng gii cc h phng trnh c ma trn h s khng i xng vi cch tnh sao cho tng bnh phng s d b nht. Do vy ta phi cho [ A ][ X ] [ B] 2 min. Thut ton CGLS gm cc bc sau:

174

- Cho [X0] tnh [ r ] = [ B] [ A ][ X 0 ] , [d] = [A]T[r] v = [d]T[d] - Lp cho n khi hi t k 1 k = ([A][d ])T ([A][d ]) x k +1 = x k k d k

rk+1 = rk k[ A ] d kT

s k = [ A ] rk sT s k k = T k s k1s k1 d k +1 = s k + k d k Ta xy dng hm cgls() thc hin thut ton trn.` function x = cgls(a, b, x, maxiter, tol) r = b - a*x; d = a'*r; rho1 = d'*d; for j = 1:maxiter ad = a*d; alpha = rho1/(ad'*ad); x = x + alpha*d; r = r - alpha*ad; s = a'*r; rho2 = s'*s; beta = rho2/rho1; rho1 = rho2; d = s + beta*d; if norm(r) < 1e-6 break; end end gii h phng trnh ta dng chng trnh ctcgls.m clear all, clc a = [ 1 3 4; 2 5 7; 3 1 2]; b = [8 14 6]'; maxiter = 50; x = [0 0 0]'; tol = 1e-6; x = cgls(a, b, x, maxiter, tol)177

Nu dng k thut preconditionning vi ma trn [m] th thut ton s l: - Cho [X0] 2 tnh [ r ] = [ B] [ A ][ X 0 ] , [p] =[m]-1[A]T[r], [s] = [p] v = s 2 - Lp cho n khi hi t tk = [s]-1pk qk = [A]tk k = k 2 qk 2

x k +1 = x k k t k rk+1 = rk k q k1

`

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

Ta xy dng hm cglsp() thc hin thut ton trn. function x = cglsp(a, b, x, maxiter, tol) %giai he bg thuat toan CGLS co preconditionning n = size(a,1); m = ones(n,1); m = diag(m); m = 1.*m; r = b - a*x; p = inv(m)*(a'*r); s = p; k = 1; gamma1 = norm(s)^2; while k tol t = inv(m)*p; q = a*t; alfa = gamma1/(norm(q)^2); x = x + alfa*t; r = r - alfa*q; s = inv(m)*(a'*r); gamma2 = norm(s)^2; beta = gamma2/gamma1; gamma1 = gamma2;178

p = s + beta*p; k = k + 1; end 18. PHNG PHP BiCG Phng php gadient lin hp khng thch hp cho h phng trnh khng i xng v cc vec t s d khng th trc giao vi mt s t ln lp. Phng php gradient lin hp kp thay th dy vec t d trc giao bng hai dy trc giao tng h. Khi cp nht s d ta dng ma trn [A]T thay cho ma trn [A]. Nh vy ta c:

[R i ] = [R i1 ] i [ A ][Pi ]v hai dy hng tm: [Pi ] = [R i1 ] + i1 [Pi1 ] Vic chn:

R i = R i1 i A Pi Pi = R i1 + i1 Pi1

T

R i1 R i1 i = T Pi A Pi bo m quan h trc giao kp:T T

T

R i R i i = T R i1 R i1

T

nu i j R i R j = Pi A Pj = 0 Ta xy dng hm biconjgrad() thc hin thut ton trnfunction x = biconjgrad(a, b, x, maxiter, tol) %ham thuc hien thuat toan gradient lien hop kep if size(x, 1) ==1 x = x'; end r = b - a*x; rn = r; for i = 1:maxiter z = r; zn = rn; rho = z'*rn; if rho == 0 error(' Khong dung duoc phuong phap nay!'); break; end if i == 1 p = z; pn = zn; else179

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 = r - alfa*q; rn = rn - alfa*qn; if norm(r) 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 = r - s; error = norm(r); if ( error 0.0 if x1 >= b x1 = NaN; x2 = NaN; return end x1 = x2; f1 = f2; x2 = x1 + dx; f2 = feval(func,x2);242

end Khi pht hin thy khong cha nghim, hm tr v gi tr bin ca on. Nu khng c nghim, x1 = x2 = NaN. Ta gi rootsearch() nhiu ln pht hin ht cc on cha nghim. Vi v d tm khong cha nghim ca hm f(x) = x3 - 10x2 + 5 ta dng chng trnh ctrootsearch.m clear all, clc f = inline('x^3 - 10*x^2 + 5'); [x1, x2] = rootsearch(f,2,10,.2) Bc kin ton nghim tm cc nghim gn ng theo yu cu t ra. C rt nhiu phng php xc nh nghim ca (1). Sau y chng ta xt tng phng php. 2. 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 0 a = xx(k); fa = fx; else b = xx(k); end end x = xx(k); if k == maxiter fprintf('Khong hoi tu sau %d lan lap\n', maxiter), else fprint