Tài liệu tham khảo Giáo trình cơ sở Matlab v5.3-1 - Phần 1 Cơ sở matlab - Chương 3 Lập trình trong matlab
Chơng - Lập trình Matlab Chơng Lp trệnh matlab 3.1 Cc phn tứ cỗ băn cho chừỗng trệnh 3.1.1 Giối hưn ca cc gi tr tẽnh toŸn MATLAB Šâi vèi phÀn lèn cŸc mŸy tÏnh, khoăng gi tr cho phẫp tữ 10-308 ặn 10308 Giă sø cÜ nhùng lỴnh sau: >> x = 2.5e200; >> y = 1.0e200 >> z = x*y; Tuy giŸ trÙ ca x vĂ y nm khoăng cho phẫp Nhừng gi tr ca z lĂ 2.5e400 lưi nm ngoĂi khoăng giŸ trÙ cho phÉp Låi n¡y Åõìc gài l¡ tr¡n sõ mủ trn (exponent overflow) Gi tr ca kặt quă quŸ lèn Åâi vèi vïng nhè cða mŸy tÏnh Trong Matlab, kặt quă nĂy ừỡc bièu din lĂ TrĂn sõ mủ dừối (exponent underflow) Giă sứ cĩ nhựng lẻnh sau: >> x = 2.5e-200; >> y = 1.0e200 >> z = x/y; GiŸ trÙ cða z sÁ l¡ 2.5e-400 Trong Matlab, kặt quă nĂy ừỡc bièu din lĂ Chia cho l¡ mỉt toŸn tø kháng hìp lỴ NỈu mỉt giŸ trÙ cÜ hn Åõìc chia cho 0, kặt quă nhn ừỡc s lĂ Phần I - Cơ sở 31 Chơng - Lập trình Matlab Matlab s in mổt lội cănh bo vĂ sứ dịng giŸ trÙ ∝ ÅÌ tiỈp tịc tÏnh toŸn cŸc phÉp tÏnh sau ÅÜ 3.1.2 CŸc kû tú Å»c biỴt [ ] Dng ma trºn Dïng ÅÌ quy õèc cho viẻc bièu din hay vĂo sõ liẻu cho cc biặn vector hay ma trºn CŸc phÀn tø biỈn ÅÜ Åõìc cŸch bêi dÃu space hay dÃu ‘,’ nỈu trÅn cïng h¡ng ho»c cæt CŸc cæt hay h¡ng sÁ ph¿n cŸch bêi dÃu ‘;’ hay Enter vÏ dò: >> a = [ ; ; ] ans = ( ) Dng chì sõ DĂnh cho cc biặn ca hĂm hay cc ch× sâ cŸc phÀn tø ma trºn cÀn Åõìc nhºp hay biÌu diÍn Ph¿n tŸch giùa cŸc ch× sâ v¡ cŸc phÀn tø cða ma trºn ; Ph¿n tŸch cŸc ma trºn, cŸc lỴnh, cŸc h¡ng cða ma trºn >> DÃu nhºc cho lỴnh sau ThÌ hiẻn sỳ tiặp tũc ca lẻnh díng sau % Phn chợ giăi díng lẻnh ừỡc ghi sau du nĂy dùng è hièu rò nghỉa díng lẻnh chử khỏng tham gia vĂo chừỗng trệnh : Cch ghi tọng qut ma trºn \n DÃu hiỴu to dÝng mèi 3.1.3 CŸc giŸ trÙ Å»c biỴt pi GiŸ trÙ cða π tú Åỉng Åõìc Åõa v¡o biỈn n¡y ( 3.14156 ) i, j Cc biặn nĂy cĩ gi tr ăo -1 Inf Biặn nĂy ưi diẻn cho gi tr ca MATLAB, thè hiẻn kặt quă chia cho Mổt lội cănh bo s hiẻn ra, nặu bưn muõn hièn th kặt quă Phần I - Cơ sở 32 Chơng - LËp tr×nh Matlab chia cho 0, giŸ trÙ hiÌn thÙ l¡ ∝ NaN GiŸ trÙ vá ÅÙnh, biÌu thưc kháng xŸc ÅÙnh: chia H¡m cho biỈt giŸ tr ca thội gian hiẻn tưi bao góm nâm, thng, ngĂy, giộ, phợt, giy clock date HĂm cho biặt gi trÙ hiỴn ti cða ng¡y Åõìc cho bêi x¿u kû tú VÏ dò: >> date ans = 10-Jun-97 eps H¡m xŸc ÅÙnh Åæ chÏnh xŸc cða sâ thúc quŸ trƯnh tÏnh toŸn ans BiỈn n¡y Åõìc dïng ÅÌ chưa giŸ trÙ tÏnh toŸn cða biÌu thưc nhõng kháng ghi v¡o tÅn biỈn 3.1.4 BiỈn string BiỈn string Matlab Åõìc biÌu diÍn sø dịng nhõ cŸc biỈn sâ tháng thõéng khŸc cða Matlab ŠiËu ÅÜ cÜ nghØa biỈn Åõìc nhºp, thao tŸc v¡ lõu trù cŸc vector vèi måi phÀn tø cða vector l¡ kû tú CŸc kû tú Åõìc lõu trù vector dõèi dng m¬ ASCII cða chÏnh nÜ, nhiÅn hiÌn thÙ trÅn m¡n hƯnh dÝng kû tú sÁ Åõìc xt hiỴn chử khỏng phăi mơ ca chợng Viẻc xc nh v trÏ cða måi phÀn tø cða biỈn string tháng qua ch× sâ cða nÜ vector Ma trºn cða cŸc kû tú hay string cđng cÜ thÌ Åõìc sø dịng nhừng mồi phn tứ ĩ phăi bng Vẽ dò: >> name = ‘ Trõéng Ši hàc BŸch khoa H¡ næi ‘ ans = Trõéng Ši hàc bŸch khoa H¡ næi Matlab cho phÉp thao tŸc trÅn cŸc kû tỳ theo vẽ dũ dừối y a) ăo ngừỡc chuồi kû tú Function d = dao_tu ( name ) for i = length (name) :-1 : PhÇn I - Cơ sở 33 Chơng - Lập trình Matlab newname ( i ) = name( length(name) + - i ); end d = newname; end b) Dïng phÀn cða chuåi string >> disp ( ‘ Trõéng tái l¡ : ‘, name ( 1:24 )); ans = Trõéng tái l¡ : Trõéng Ši hàc bŸch khoa c) KỈt hìp cŸc string khŸc to string mèi >> text1 = ‘ Tái ‘; text2 = ‘ yÅu ‘; >> text = [ text1’’text2’’name ] >> text ans = Tái u Trõéng Ši hàc bŸch khoa CŸc lỴnh vối biặn string abs (str ) Tră lưi gi tr l¡ vector vèi cŸc phÀn tø cða vector l¡ cŸc m¬ ASCII cða cŸc kû tú chuåi str setstr ( x ) ChuyÌn vector x vèi cŸc phÀn tứ lĂ cc sõ nguyn khoăng -> 255 th¡nh chuåi str theo m¬ ASCII num2str ( f ) Chun Åäi Åi lõìng vá hõèng f th¡nh chi string cho viỴc biÌu diÍn cŸc sâ cÜ dÃu phÁy Åỉng LỴnh n¡y thõéng Åi cïng vèi disp, x label hay cŸc lỴnh truy xt ÅÀu khŸc GiŸ trÙ m»c ÅÙnh l¡ chù sâ num2str ( f,k ) ChuyÌn Åäi Åi lõìng vá hõèng f th¡nh chuåi string cho viỴc biÌu diÍn cŸc sâ cÜ dÃu phÁy Åỉng vèi k chù sâ int2str ( n ) ChuyÌn Åäi sâ ngun n th¡nh chi string cho viỴc biÌu diÍn sâ nguyÅn ÅÜ rats (x, strlen) ChuyÌn Åäi sâ cÜ dÃu phÁy Åỉng x th¡nh chi string ph¿n thưc xÃp x× cho viẻc bièu din sỏ strlen lĂ biặn mỏ tă chiËu d¡i cða chuåi vèi giŸ trÙ m»c ÅÙnh l¡ 13 chự sõ Phần I - Cơ sở 34 Chơng - LËp tr×nh Matlab hex2num (hstr ) Chun Åäi sâ theo hỴ hexa th¡nh chi string biÌu diÍn cc sõ theo hẻ dec bao góm că du phy Åỉng hex2dec (hstr) Chun Åäi sâ theo hỴ hexa th¡nh chi string biÌu diÍn cŸc sâ ngun theo hỴ dec dec2hex ( n ) Chun Åäi sâ theo hỴ dec th¡nh chi string biÌu diÍn cŸc sâ hỴ hexadecimal 3.2 CŸc h¡m toŸn hàc Matlab cđng sø dịng cŸc h¡m logarit, cŸc h¡m lõìng giŸc, cŸc h¡m mđ, cŸc h¡m Åi sâ ÅÌ tÏnh toŸn CŸc h¡m n¡y Åỵng Åâi vèi cŸc tham sâ l¡ cŸc Åi lõìng vá hừống vĂ că ma trn Nặu hĂm ừỡc dùng õi vèi cŸc tham sâ l¡ ma trºn thÖ h¡m sÁ cho kặt quă lĂ mổt ma trn cĩ kẽch thõèc v¡ måi phÀn tø cða ma trºn n¡y cÜ gi tr từỗng ửng vối cc phn tứ ca ma trn cho Tham biặn vĂ tham tr ca hĂm ừỡc ằt du ngoằc ỗn i vối tn h¡m H¡m cÜ thÌ kháng cÜ ho»c cÜ nhiËu tham sâ phị thc v¡o ÅÙnh nghØa cða nÜ NỈu h¡m cÜ nhiËu tham sâ thÖ giŸ trÙ cða cŸc tham sõ s ừỡc truyận ặn theo ợng thử tỳ ca nÜ Mỉt sâ h¡m ÅÝi hÞi trun tham sâ theo nhựng ỗn v quy nh Vẽ dũ nhừ cc hĂm lừỡng gic thệ ỗn v ca cc tham sõ phăi l¡ radian Trong Matlab, mỉt sâ h¡m sø dịng tham sâ ÅÌ trun giŸ trÙ ÅÀu VÏ dị Åâi vèi h¡m zeros cÜ thÌ sø dịng mỉt ho»c hai tham sâ, tham sâ thư hai ÅÌ chưa giŸ trÙ ÅÀu CŸc h¡m n¡y kháng Åõìc Å»t ê bÅn phăi du bng vĂ bièu thửc vệ nĩ lĂ gi tr chử khỏng phăi lĂ biặn Mổt hĂm cĩ thè l¡ tham sâ cða mæt h¡m khŸc Khi mæt h¡m ừỡc sứ dũng lĂm tham sõ nĩ, phăi ừỡc ằt ợng v trẽ Theo mằc nh tn hĂm ừỡc viặt bng chự thừộng trữ bưn sứ dũng lẻnh case off 3.2.1 HĂm ton hc cỗ băn: abs(x) HĂm tẽnh gi tr tuyẻt õi ca x sqrt(x) HĂm tẽnh cân bºc hai cða x round(x) L¡m trÝn x vË sâ nguyÅn gÀn nhÃt fix(x) L¡m trÝn sâ x vË Phần I - Cơ sở 35 Chơng - Lập tr×nh Matlab floor(x) L¡m trÝn vË phÏa -∝ ceil(x) L¡m trÝn vË phÏa ∝ sign(x) H¡m cho giŸ trÙ lĂ -1 nặu x nhị hỗn 0, gi tr bng nỈu x b±ng 0, cÜ giŸ trÙ l¡ nặu x lốn hỗn rem(x,y) HĂm tră lưi sõ dõ cða phÉp chia x cho y exp(x) H¡m tÏnh giŸ trÙ cða ex log(x) H¡m tÏnh giŸ trÙ ln(x) log10(x) H¡m tÏnh giŸ trÙ log10(x) 3.2.2 H¡m lõìng giŸc cỗ băn: Quy ọi radian ổ vĂ ngừỡc lưi Åõìc tÏnh toŸn theo cŸc lỴnh sau: >> angle_degrees = angle_radians*(180/pi); >> angle_radians = angle_degrees*( pi/180); sin(x) TÏnh sine cða gĩc x, x cĩ ỗn v o lĂ radian cos(x) Tẽnh cos ca gĩc x, x cĩ ỗn vÙ Åo l¡ radian tan(x) TÏnh cos cða gÜc x, x cĩ ỗn v o lĂ radian asin(x) Tẽnh arcsine ca x, x nm khoăng [-1,1], hĂm tră lưi gĩc cĩ gi tr radian khoăng -/2 ÅỈn π/2 acos(x) TÏnh arccosine cða x, x n±m khoăng [-1,1], hĂm tră lưi gĩc cĩ gi tr radian khoăng ặn atan(x) Tẽnh arctangent ca x khoăng -/2 ặn /2 atan2(x,y) Tẽnh arctangent ca y/x khoăng - ặn , tuỹ thuổc vĂo du cða x v¡ y VÏ dò: >> x = -2*pi: 2: 2*pi % To lºp vector x vèi cŸc giŸ trÙ t÷ -2pi - 2pi x= -6.2832 -4.2832 -2.2832 -0.2832 >> sin(x) Phần I - Cơ sở 36 1.7168 3.7168 5.7168 Chơng - Lập trình Matlab ans = 0.0000 0.9093 -0.7568 -0.2794 0.9894 -0.5440 -0.5366 >> atan(x) ans = -1.4130 -1.3414 -1.1580 -0.2760 1.0434 1.3080 1.3976 3.2.3 CŸc h¡m hyperbolic: sinh(x) H¡m tÏnh hyperbolic sine cða x cosh(x) H¡m tÏnh hyperbolic cosine cða x asinh(x) H¡m tÏnh nghÙch ăo ca hyperbolic sine ca x acosh(x) HĂm tẽnh nghch ăo ca hyperbolic cosine ca x atanh(x) HĂm tẽnh nghch ăo ca hyperbolic tangent Vẽ dũ: >> sinh(x) ans = -267.7449 -36.2286 -4.8530 -0.2870 2.6936 20.5544 151.9660 >> atanh(x) ans = Columns through -0.1605 + 1.5708i -0.2379 + 1.5708i -0.4697 + 1.5708i -0.2911 Columns through 0.6662 + 1.5708i 0.2758 + 1.5708i 0.1767 + 1.5708i 3.3 CŸc dng file Åõìc sø dịng MATLAB 3.3.1 Script file (M-files ) Cc chừỗng trệnh, th tũc bao góm cc dÝng lỴnh theo mỉt thư tú n¡o ÅÜ ngõéi sø dịng viỈt Åõìc lõu trù cŸc files cÜ phÀn mê ræng l¡ *.m File dng n¡y cÝn Åõìc gài l¡ script file File Åõìc lõu dõèi dng kỷ tỳ ASCII vĂ cĩ thè sứ dũng cc chừỗng trệnh soưn thăo nĩi chung è tưo nĩ Phần I - Cơ sở 37 Chơng - Lập trình Matlab Bn cÜ thÌ chy file n¡y giâng nhõ cŸc lẻnh, th tũc ca MATLAB Tửc lĂ cĩ thè gò tÅn file kháng cÀn cÜ phÀn mê ræng, sau ÅÜ enter Khi sø dịng, nỉi dung cða Mfile kháng Åõìc hiÌn thÙ lÅn m¡n hƯnh VË cÃu trỵc ngán ngù, ton tứ hay cc bổ lẻnh ca *.m file, chợng tỏi xin giối thiẻu kỵ hỗn phn sau VĂ dừối y lĂ mổt sõ lẻnh hẻ thõng từỗng tc vèi *.m files thõéng g»p LỴnh cho phÉp xem cŸc lẻnh cĩ *.m files chợng ừỡc thỳc hiẻn echo type LỴnh cho xem nỉi dung file, ngÀm ÅÙnh file dưng M-file what Lẻnh nĂy cho biặt tt că cc files M-file vĂ MAT-file cĩ trongvùng lĂm viẻc hiỴn h¡nh hay kháng VÏ dị sau Å¿y l¡ vẽ dũ ỗn giăn nht ừa díng lẻnh HELLO m¡n hÖnh cïng vèi sâ yÅu cÀu File tưo thĂnh ừỡc lừu trự dừối tn HELLO.m % chừỗng trƯnh hello.m , VÏ dị vË phÀn lºp trƯnh Matlab % Xin ch¡o bn ! H¬y l¡m quen vèi tái disp ( ‘ Xin ch¡o ! Bn l¡ ? ‘); name = input ( ‘ TÅn bn l¡ gÖ ‘ ); d = date ; answer = [ ‘ Hello ‘ name ‘ ! Hám l¡ ng¡y ‘ d ] disp ( answer ); disp ( ‘ Chỵc bn ng¡y tât l¡nh ‘ ) ; Sau cc kỷ tỳ % lĂ chì dạn cho hoưt cða file.m NÜ kháng tham gia v¡o hot Åæng cða chừỗng trệnh vĂ củng khỏng hièn th ln mĂn hệnh trữ ta dùng lẻnh help + tn file >> help hello Chừỗng trệnh hello.m , Vẽ dũ vậ phn lºp trƯnh Matlab Xin ch¡o bn ! H¬y l¡m quen vèi tái 3.3.2 H¡m v¡ to h¡m Matlab Phần I - Cơ sở 38 Chơng - Lập trình Matlab Cc hĂm ngừội sứ dũng viặt cđng Åõìc lõu M-file Chỵng Åõìc sø dịng giâng nhừ cc hĂm ca Matlab Cc file hĂm phăi ừỡc viỈt theo mỉt quy ÅÙnh ch»t chÁ * CŸc quy tc viặt hĂm M-files Function: HĂm phăi ừỡc bt ÅÀu b±ng t÷ function, sau ÅÜ lÀn lõìt l¡ tham sâ ÅÀu ra, dÃu b±ng, tÅn h¡m Tham sâ ÅÀu v¡o Åõìc viỈt theo tham sâ ÅÀu v¡o v¡ Åõìc bao ngoằc ỗn Díng nĂy nh nghỉa tham sõ ÅÀu v¡o v¡ tham sâ ÅÀu ra; ph¿n biỴt sú khŸc giùa file h¡m v¡ cŸc file script Mổt sõ díng u tin nn viặt chợ thẽch cho hĂm Khi sứ dũng lẻnh help vối tn hĂm, chợ thÏch cða h¡m sÁ Åõìc hiÌn thÙ CŸc tháng tin tră lưi ca hĂm ừỡc lừu vĂo tham sõ (ma trºn) ÅÀu VƯ vºy ln kiÌm tra chºc chºn r±ng h¡m cÜ chưa c¿u lỴnh Ãn ÅÙnh giŸ trÙ cða tham sâ ÅÀu CŸc biỈn (ma trºn) cïng tÅn cÜ thÌ Åõìc sø dịng bêi că hĂm vĂ chừỗng trệnh chì ặn nĩ Khỏng cĩ sỳ lổn xổn nĂo xăy vệ cc hĂm vĂ cc chừỗng trệnh ậu ừỡc thỳc hiẻn mổt cch tch biỴt CŸc giŸ trÙ tÏnh toŸn h¡m, tham sâ u khỏng chu tc ca chừỗng trệnh Nặu mổt hĂm cho nhiậu hỗn mổt gi tr u phăi viặt tt că cc gi tr tră lưi ca hĂm thĂnh mổt vec tỗ díng khai bo h¡m VÏ dò: function [ dist, vel, accel ] = motion(x) % Că ba gi tr phăi ừỡc tẽnh ton h¡m Mæt h¡m cÜ nhiËu tham sâ ÅÀu vĂo cn phăi liẻt k chợng khai bo hĂm VÏ dị: function error = mse(w, d) CŸc biỈn Å»c biỴt nargin v¡ nargout xŸc ÅÙnh sâ tham sâ ÅÀu v¡o, sâ tham sâ ÅÀu Åõìc sø dịng hĂm Cc tham sõ nĂy chì lĂ biặn cũc bỉ VÏ dị mỉt h¡m M-file sÁ Åõìc viỈt nhõ sau: function c = chuvi(r) % TÏnh chu vi cða Åõéng trÝn cÜ bŸn kÏnh r % NỈu h¡m Åõìc p dũng cho ma trn thệ gi tr tră lưi s lĂ Phần I - Cơ sở 39 Chơng - Lập trình Matlab % mổt ma trn từỗng öng vèi måi phÀn tø cÜ giŸ trÙ l¡ % chu vi ca ừộng trín cĩ bn kẽnh từỗng ửng vối mồi % phn tứ ca vẫc tỗ nguón c = pi*2*r; 3.3.3 Files dù liỴu CŸc ma trºn biÌu diÍn tháng tin Åõìc lõu trù cŸc files dù liỴu Matlab ph¿n biỴt hai loi file dù liỴu khŸc Mat-files v¡ ASCII files Mat-files lõu cŸc dù liỴu ê dng sâ nhÙ ph¿n, cÝn cŸc ASCII file lõu cŸc dù liỴu dõèi dng cŸc kÏ tú ASCII Mat-file thÏch hìp cho dù liỴu Åõìc to ho»c Åõìc sứ dũng bời chừỗng trệnh Matlab ASCII file ừỡc sứ dịng cŸc dù liỴu Åõìc chia sÀ (export - import) vối cc chừỗng trệnh khc cc chừỗng trệnh ca Matlab Khi mn lõu cŸc dù liỴu ta dïng lỴnh save nhõ sau: >> save x,y; LỴnh n¡y sÁ lõu cŸc ma trºn x,y v¡o file cÜ tÅn l¡ , ngÀm ÅÙnh cŸc files n¡y cÜ phÀn mê rỉng l¡ *.mat ŠÌ gài cŸc ma trºn n¡y, ta dïng lỴnh: >> load ; ASCII files cÜ thè ừỡc tưo bời cc chừỗng trệnh soưn thăo nĩi chung hay cc chừỗng trệnh soưn thăo bng ngỏn ngự my Nĩ củng cĩ thè ừỡc tưo bời chừỗng trƯnh Matlab b±ng cŸch sø dịng c¿u lỴnh sau Å¿y: >> save .dat /ascii; Lỵc n¡y måi mỉt h¡ng cða ma trºn Åõìc lõu ê mỉt dÝng cða file dù liỴu PhÀn mê rỉng *.mat kháng Åõìc tú Åæng thÅm v¡o file ASCII Tuy nhiÅn, phÀn mê rỉng *.dat m¡ ta thÅm v¡o sÁ dÍ d¡ng ph¿n biỴt loi Mat-files v¡ ASCII files ŠÌ gài ma trºn loi n¡y ta dïng lỴnh sau: >> load .dat; LỴnh n¡y sÁ tú Åỉng Å»t tÅn cho ma trºn trïng vèi tÅn file VÏ dò: >> x = 0; pi /60 ; 2*pi; >> y = sin ( x ); >> t = [ x y ] Ghi dù liỴu cða t v¡o file cÜ tÅn nhõ sau : dl1.mat >> save dl1.mat Phần I - Cơ sở t 40 Chơng - Lập trình Matlab Viẻc ly dự liẻu ưt ừỡc qua biặn t thỏng qua lẻnh load Cc tham sõ cn ặn dự liẻu sÁ lÃy qua biÕn t >> load dl1 >> x = t ( : , ); >> y = t ( : , ); >> plot ( x, y ); grid on; 3.4 CŸc biÌu thưc quan hỴ v¡ logic 3.4.1 CŸc phÉp toŸn quan hỴ ToŸn tø quan hẻ ỷ nghỉa < Nhị hỗn Lốn hỗn >= Lốn hỗn hoằc bng == B±ng ~= Kháng b±ng PhÉp so sŸnh hai ma trºn l¡ phÉp so sŸnh t÷ng phÀn tø cða hai ma trn cĩ kẽch thừốc, kặt quă sinh mæt ma trºn cïng cë cÜ cŸc phÀn tø nhºn gi tr nặu phẫp so snh lĂ ợng, ngừỡc lưi phn tứ nhn gi tr Kặt quă ca phẫp ton quan hẻ ừỡc gi lĂ băng sỳ tht (ma trºn 0-1) 3.4.2 CŸc phÉp toŸn logic: ToŸn tø Kû hiỴu logic and & or | not ~ BiÌu thửc logic cho phẫp so snh cc băng sỳ tht giâng nhõ cŸc toŸn tø quan hỴ BiÌu thưc logic luỏn lĂ hỡp lẻ nặu băng sỳ tht cĩ kẽch thừốc bng Trong Phần I - Cơ sở 41 Chơng - Lập trình Matlab bièu thửc logic toŸn tø not cÜ thÌ Åõìc Å»t ê phÏa trõèc Mỉt biÌu thưc logic cÜ thÌ chưa nhiËu toŸn tø VÏ dò: ~ ( b == c | b == 5.5 ); Thư tú cŸc toŸn tø biÌu thửc logic tữ cao ặn thp lĂ not, and, or Tuy nhin, củng cĩ thè dùng ngoằc ỗn è thay ọi thử tỳ nĂy Băng cc phẫp logic A B ~A A|B A&B false false true false false false true true true false true false false true false true true false true true Trong Matlab tt că cc gi tr khŸc ÅËu Åõìc coi l¡ Åỵng (true), cÝn giŸ trÙ b±ng Åõìc coi l¡ sai (false) ChÏnh vƯ vy, phăi hặt sửc thn trng iậu khièn chừỗng trƯnh b±ng cŸc biÌu thưc quan hỴ v¡ logic 3.4.3 CŸc h¡m quan hỴ v¡ logic any(x) all(x) find(x) exist('A') isnan(x) finite(x) isempty(x) Phần I - Cơ sở HĂm cho giŸ trÙ l¡ nỈu mỉt phÀn tø cða x khŸc 0, ngõìc li cho giŸ trÙ H¡m cho gi tr lĂ nặu tt că cc phn tứ cða ma trºn x khŸc 0, ngõìc li cho giŸ tr lĂ HĂm tră lưi vector chửa chì sõ cða cŸc phÀn tø khŸc cða x NỈu x lĂ mổt ma trn thệ chì sõ ừỡc chn tữ x(:) v¡ l¡ mæt vertor cæt to nÅn bêi cŸc cổt ca x HĂm tră lưi gi tr nặu A l¡ biỈn, l¡ nỈu A ho»c A.m l¡ file, l¡ nỈu A kháng tãn ti vïng lĂm viẻc Tn biặn phăi ừỡc ằt du nhy ỗn Gi tr tră vậ lĂ ma trn ones nặu cŸc phÀn tø cða ma trºn x l¡ NaN, ngõìc lưi tră vậ ma trn zeros Gi tr tră vậ l¡ ma trºn ones nỈu cŸc phÀn tø cða ma trn x lĂ gi tr hựu hưn, tră vậ ma trºn zeros chỵng l¡ vá hn ho»c NaN GiŸ tr tră vậ nặu ma trn x lĂ rồng, vĂ nặu ngừỡc 42 Chơng - Lập trình Matlab lưi isstr(x) Gi tr tră vậ lĂ nỈu x l¡ mỉt x¿u, nỈu ngõìc li strcmp(y1,y2) So snh hai xu y1,y2 Gi tr tră vậ lĂ nặu xu giõng hẻt vĂ bng nỈu ngõìc li So sŸnh ê Å¿y bao gãm: ph¿n biỴt chù hoa v¡ chù thõéng, cŸc kû tú ÅÀu dÝng v¡ cŸc dÃu cŸch cÜ x¿u 3.5 CÃu trợc cu lẻnh iậu kiẻn 3.5.1 Lẻnh if ỗn Cợ php: if nhĩm lẻnh; end Nặu bièu thửc logic lĂ ợng, nhĩm lẻnh s ừỡc thỳc hiẻn Nặu bièu thửc logic lĂ sai thệ chừỗng trệnh s nhăy tối lẻnh end Vẽ dũ: if a < 50 count = count +1; sum = sum + a; end Trong trõéng hìp a l¡ Åi lõìng vá hõèng, nỈu a < 50, thƯ count t©ng thÅm v¡ a Åõìc cỉng v¡o sum; trŸi li c¿u lỴnh thư kháng Åõìc thúc hiỴn Trong trõéng hìp a l¡ mỉt ma trn thệ count tâng thm vĂ nĩ chì Åõìc cỉng v¡o sum mài phÀn tø cða nÜ nhị hỗn 50 3.5.2 Lẻnh if lóng nhau: Cợ if phŸp: nhÜm lỴnh A; if nhÜm lỴnh B; end nhÜm lỴnh C; Phần I - Cơ sở 43 Chơng - Lập trình Matlab end nhĩm lẻnh D; Nặu bièu thửc iậu kiẻn ợng chừỗng trệnh s thỳc hiẻn cc nhĩm lẻnh A vĂ C; nặu bièu thửc iậu kiẻn ợng nhĩm lẻnh B s ừỡc thỳc hiẻn trừốc nhĩm lẻnh C Nặu bièu thửc iậu kiẻn sai chừỗng trệnh thỳc hiẻn nhĩm lẻnh D 3.5.3 Mẻnh ÅË else: Cỵ phŸp: if nhÜm lỴnh A; else nhÜm lỴnh B; end Cho phÉp thúc hiẻn nhĩm lẻnh A nặu bièu thửc logic lĂ ợng, ngõìc li thúc hiỴn nhÜm lỴnh B 3.5.4 MỴnh ÅË elseif: Khi ta cÜ mỉt cÃu trỵc lãng nhiËu c¿u lỴnh if-else, rÃt khÜ xŸc ÅÙnh nhÜm lỴnh n¡o sÁ ừỡc thỳc hiẻn bièu thửc logic ợng (hoằc sai) Trong trõéng hìp n¡y, ngõéi ta sø dịng mỴnh ÅË elseif lĂm chừỗng trệnh trờ nn sng vĂ d hièu hỗn Cợ php: if nhĩm lỴnh A; elseif nhÜm lỴnh B; elseif nhÜm lỴnh C; end CŸc mẻnh ậ elseif cĩ thè dùng nhiậu hỗn nựa Nặu bièu thửc ợng thệ thỳc hiẻn cu lẻnh A, nặu bièu thửc sai vĂ bièu thửc ợng thệ chì cĩ nhĩm lẻnh B ừỡc thỳc hiẻn Nặu bièu thửc 1, sai vĂ ợng thệ chì cĩ nhĩm C ừỡc thỳc hiẻn Nặu cĩ tữ hai biÌu thưc logic trê lÅn Åỵng thƯ biÌu thưc logic ợng u tin xc nh nhĩm lẻnh s ừỡc thỳc hiẻn Nặu khỏng cĩ bièu thửc iậu kiẻn nĂo ợng thệ khỏng cĩ lẻnh nĂo cu trợc if - elseif ừỡc thi hĂnh Cĩ thè kặt hỡp mẻnh ậ else vĂ elseif: Phần I - Cơ sở 44 Chơng - Lập trình Matlab Cợ php: if nhÜm lỴnh A; elseif nhÜm lỴnh B; elseif nhĩm lẻnh C; else nhĩm lẻnh D; end Nặu că ba biÌu thưc logic ÅËu sai thƯ nhÜm lỴnh D Åõìc thi h¡nh Šái lỵc, cÃu trỵc if-elseif cÝn Åõìc gài l¡ cÃu trỵc case bêi vƯ cÜ mỉt sâ trõéng hìp Åõìc kiÌm tra Måi trõéng hìp Åõìc kiÌm tra bời mổt bièu thửc logic từỗng ửng Vẽ dũ sau y minh hoư cc cu trợc mẻnh ậ cu iậu kiẻn Chừỗng trệnh ừỡc ghi file hello2.m % Chừỗng trệnh hello2 mỏ tă cu trợc cu iậu kiẻn Matlab % B¡i toŸn so sŸnh tuäi cða bn vèi sâ ng¹u nhiÅn sinh bêi h¡m rand disp ( ‘ Xin ch¡o ! RÃt h¿n hnh Åõìc l¡m quen ‘); x = fix ( 30* rand ); disp ( Tuọi ca tỏi khoăng tữ 0-30 ); gu = input ( ‘ Šõa v¡o tuäi cða bn : ‘); if gu < x disp ( ‘ Bn tr hỗn tỏi ); elseif gu > x disp ( Bưn lốn hỗn tỏi ); else disp ( Ti bn b±ng ti tái ‘); end 3.5.5 Cỵ phŸp cu iậu kiẻn vĂ break Phần I - Cơ sở 45 Chơng - Lập trình Matlab Cợ php: if , break , end T÷ khoŸ break vèi c¿u lỴnh if cho phÉp thoŸt khịi víng lằp nặu cu iậu kiẻn lĂ ợng, ngừỡc lưi s thỳc hiẻn nhĩm lẻnh tiỈp theo vÝng l»p ÅÜ VÏ dị: VË nhºp mổt sõ dừỗng, nặu sõ ĩ < thot khịi chừỗng trệnh Nặu sõ ĩ chia hặt cho hiẻn kặt quă Nặu sõ ĩ khỏng chia hặt cho nhºp sâ mèi while n = input ( ‘ Cho vĂo sõ dừỗng , thot n < 0); if n if rem( n , ) == disp( Sõ dừỗng cho vĂo chia hặt cho , n ); break; else disp( Sõ dừỗng cho vĂo kháng chia hỈt cho ! Xin nhºp sâ khŸc ‘); end end 3.6 CÃu trỵc vÝng l»p 3.6.1 VÝng lằp FOR: Cợ php: for chì sõ = bièu thửc nhÜm lỴnh A; end BiÌu thưc l¡ mỉt ma trºn (củng cĩ thè lĂ mổt vectỗ hay mổt ưi lừỡng vá hõèng), nhÜm lỴnh A Åõìc thi h¡nh l»p Åi l»p li sâ lÀn b±ng sâ cæt cða ma trºn biÌu thưc Måi lÀn l»p, ch× sâ sÁ nhºn giŸ trÙ cða mỉt phÀn tø cða ma trºn PhÇn I - Cơ sở 46 Chơng - Lập trình Matlab Chợ ỷ: Nặu trừộng hỡp ta khỏng biặt kẽch thừốc ca vectỗ, ta sứ dũng hĂm length è xc ÅÙnh sâ lÀn ta muân l»p * Qui tºc sø dịng vÝng l»p FOR: + Ch× sâ cða vÝng l»p phăi lĂ biặn + Nặu ma trn bièu thửc lĂ ma trºn rång thÖ vÝng l»p for sÁ kháng thúc hiẻn Chừỗng trệnh bị qua víng lằp + Nặu ma trºn biÌu thưc l¡ mỉt Åi lõìng vá hõèng VÝng lằp ừỡc thỳc hiẻn mổt ln vĂ chì sõ nhn giŸ trÙ cða Åi lõìng vá hõèng + NỈu biÌu thửc ma trn lĂ mổt vectỗ hĂng, sau mồi ln lằp chì sõ lưi ly gi tr tiặp theo ca vectỗ + Nặu bièu thửc ma trn lĂ ma trn, sau måi lÀn l»p ch× sâ sÁ lÃy giŸ trÙ cða cỉt tiỈp theo cða ma trºn + Khi kỈt thợc víng lằp, biặn chì sõ nhn gi tr cuõi cïng + NỈu sø dịng toŸn tø (:) v¡o biÌu thưc ma trºn: For k = ch× sâ ÅÀu : gia sõ : chì sõ kặt thợc; Sõ ln thỳc hiỴn vÝng l»p sÁ Åõìc tÏnh theo cáng thưc sau: floor((kặt thợc-bt u) / gia sõ)) + 1; Nặu gi trÙ l¡ mỉt sâ ¿m thƯ kháng thúc hiỴn vÝng lằp Nặu mõn thot khịi víng lằp trừốc víng l»p thúc hiỴn xong ÅÌ dÝ låi cÜ vÝng lằp, sứ dũng lẻnh break Vẽ dũ mỏ tă cho vÝng l»p for Åõìc ghi file hello3.m % Chừỗng trệnh hello2 mỏ tă cu trợc cu iậu kiẻn Matlab % B¡i toŸn dú ÅoŸn sâ ng¹u nhiÅn sinh t÷ h¡m rand % cho bêi cŸc lÀn thø to bêi vÝng l»p for x = fix ( 100* rand ); n = 7; test = 1; for k = 1:7 number = int2str( n); disp ( ‘ Bn cÜ quyËn dú ÅoŸn ‘ number ‘ lÀn ); Phần I - Cơ sở 47 Chơng - LËp tr×nh Matlab disp ( ‘ Sâ cÀn ÅoŸn nm khoăng tữ 100 ); gu = input ( ‘ Šõa v¡o sâ bn dú ÅoŸn ‘); if gu < x disp ( Nhị hỗn ); elseif gu > x disp ( Lốn hỗn ); else disp ( Xin chợc mững bưn on chÏnh xŸc ‘); test = 0; break end n = n-1; end if test > disp ( ‘ Bn kháng ÅoŸn rãi ‘); numx = int2str( x ); disp ( ‘ Sâ ÅÜ l¡ : ‘ numx); end 3.6.2 VÝng l»p While: L¡ cÃu trỵc rÃt quan tràng Cợ php: while < bièu thửc> nhĩm lẻnh A; end Nặu bièu thửc ợng thệ thỳc hiẻn nhĩm lẻnh A Khi thúc hiỴn xong thƯ li kiÌm tra ÅiËu kiỴn Nặu iậu kiẻn vạn cín ợng thệ nhĩm lẻnh A li Åõìc thúc hiỴn Khi ÅiËu kiỴn sai, vÝng l»p kặt thợc Trong nhĩm lẻnh A nn cĩ cc biặn biÌu thưc, ho»c cŸc giŸ trÙ cða biÌu thưc khỏng thay ọi Nặu bièu thửc luỏn luỏn ợng (hoằc cÜ giŸ trÙ luán khŸc kháng), vÝng l»p sÁ bÙ qn ŠÌ thoŸt khÞi vÝng l»p qn, ta sø dịng Ctrl+C Vẽ dũ: Phần I - Cơ sở 48 Chơng - Lập trình Matlab % Chừỗng trệnh hello3 mỏ tă cu trợc cu iậu kiẻn while Matlab % B¡i toŸn cho t÷ hello trÅn m¡n hƯnh vèi sâ lÀn nhºp v¡o t÷ b¡n phÏm disp ( ‘ Xin ch¡o ! Hello ‘); gu = input ( ‘ Nhºp v¡o sâ lÀn in : ‘); i=0; while i~= gu disp ([ ‘ Hello ‘ i ]); i = i + 1; end Phần I - Cơ së 49 ... 1. 716 8 3. 716 8 5. 716 8 Ch−¬ng - LËp tr×nh Matlab ans = 0.0000 0.90 93 -0 .7568 -0 .2794 0.9894 -0 .5440 -0 . 536 6 >> atan(x) ans = -1 . 4 13 0 -1 .3 414 -1 .15 80 -0 .2760 1. 0 434 1. 30 80 1. 39 76 3. 2 .3 CŸc h¡m hyperbolic:... ans = -2 67.7449 -3 6.2286 -4 .8 530 -0 .2870 2.6 936 20.5544 15 1.9660 >> atanh(x) ans = Columns through -0 .16 05 + 1. 5708i -0 . 237 9 + 1. 5708i -0 .4697 + 1. 5708i -0 .2 911 Columns through 0.6662 + 1. 5708i... khoăng -? ? ÅỈn π, t thc v¡o dÃu cða x v¡ y VÏ dò: >> x = -2 *pi: 2: 2*pi % To lºp vector x vèi cŸc giŸ trÙ t÷ -2 pi - 2pi x= -6 .2 832 -4 .2 832 -2 .2 832 -0 .2 832 >> sin(x) PhÇn I - C¬ së 36 1. 716 8 3. 716 8