Giáo trình mathlab toàn tập - Chương 10
lượt xem 26
download
thời gian MATLAB đ-a ra một số hàm thao tác về thời gian từ đó bạn có thể tính toán với ngày, giờ, in lịch và tìm kiến những ngày cụ thể. MATLAB chứa ngày và thời gian nh- một số có độ chính xác hai số sau dấu phẩy t-ợng tr-ng cho số ngày, bắt đầu bằng năm không. Ví dụ, mồng 1 tháng 1 năm 1997 tại lúc nửa đêm, nó đ-ợc t-ợng tr-ng bởi số 729391, và cùng một ngày nh-ng lúc buổi ch-a là 729391.5. Cấu trúc này có thể dễ dàng cho máy tính...
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Giáo trình mathlab toàn tập - Chương 10
- 61 >> [a, b, c, d] = deal(C{1}, C{2}, C{3}, C{4}) a= How b= about c= this for a d= cell array of strings? Hµm char cã thÓ dïng ®Ó chuyÓn tõ m¶ng tÕ bµo sang m¶ng x©u: >> s = char(C) How about this for a cell array of strings? % KÕt qu¶ lµ c¸c x©u víi c¸c kho¶ng trèng. >> size(s) ans= 4 22 >> ss = char(C(1:2)) ss= How about >> size(ss) ans= 2 5 §Ó chuyÓn ng−îc l¹i m¶ng tÕ bµo, ta dïng hµm cellstr: >> cellstr(s) ans= 'How' 'about' 'this for a' 'cell array of strings?' HÇu hÕt c¸c hµm x©u trong MATLAB lµm viÖc víi c¶ m¶ng x©u hoÆc m¶ng tÕ bµo. VÒ m¶ng tÕ bµo sÏ ®−îc tr×nh bµy râ h¬n ë Ch−¬ng 19. ch−¬ng 10 thêi gian MATLAB ®−a ra mét sè hµm thao t¸c vÒ thêi gian tõ ®ã b¹n cã thÓ tÝnh to¸n víi ngµy, giê, in lÞch vµ t×m kiÕn nh÷ng ngµy cô thÓ. MATLAB chøa ngµy vµ thêi gian nh− mét sè cã ®é chÝnh x¸c hai sè sau dÊu phÈy t−îng tr−ng cho sè ngµy, b¾t ®Çu b»ng n¨m kh«ng. VÝ dô, mång 1 th¸ng 1 n¨m 1997 t¹i lóc nöa ®ªm, nã ®−îc t−îng tr−ng bëi sè 729391, vµ cïng mét ngµy nh−ng lóc buæi ch−a lµ 729391.5. CÊu tróc nµy cã thÓ dÔ dµng cho m¸y tÝnh xö lÝ, nh−ng nã rÊt khã diÔn gi¶i. Do vËy MATLAB cung cÊp c¸c hµm trî gióp chuyÓn ®æi gi÷a sè vµ x©u kÝ tù vµ ®Ó thao t¸c víi ngµy vµ thêi gian.
- 62 10.1 Ngµy vµ giê hiÖn t¹i Hµm clock tr¶ vÒ ngµy vµ giê hiÖn t¹i chøa trong mét m¶ng. VÝ dô: >> T = clock T= 1997 1 21 16 33 39.934708 Hµm now tr¶ vÒ ngµy vµ thêi gian hiÖn t¹i nh− sè ngµy quy −íc cña m¸y hoÆc ®¬n gi¶n lµ sè ngµy. >> t = now t= 729411.690045541 C¶ hai kÕt kÕt qu¶ ë trªn cã cïng mét th«ng tin. Hµm date tr¶ l¹i ngµy hiÖn t¹i nh− mét x©u theo mÉu: dd-mmm-yyyy >> date ans = 21-Jan-1997 10.2 Sù chuyÓn ®æi gi÷a c¸c kiÓu B¹n cã thÓ chuyÓn sè ngµy ra x©u, sö dông hµm datestr. CÊu tróc cña hµm nµy cã d¹ng nh− sau: datestr(date_number,format_spec). Sau ®©y lµ trî gióp cña help cho hµm datestr: >> help datestr DATESTR string representation of date. DATESTR(D,DATEFORM) converts a serial data number D (as returned by DATENUM) into a date string. The string is formatted according to the format number or string DATEFORM (see table below). By default, DATEFORM is 1, 16, or 0 depending on whether D contains dates, times or both. DATEFORM number DATEFORM string Example 0 'dd-mmm-yyyy HH:MM:SS' 01-Mar-1995 15:45:17 1 'dd-mmm-yyyy' 01-Mar-1995 2 'mm/dd/yy' 03/01/95 3 'mmm' Mar 4 'm' M 5 'mm' 3 6 'mm/dd' 03/01 7 'dd' 1
- 63 8 'ddd' Wed 9 'd' W 10 'yyyy' 1995 11 'yy' 95 12 'mmmyy' Mar95 13 'HH:MM:SS' 15:45:17 14 'HH:MM:SS PM' 3:45:17 PM 'HH:MM' 15:45 16 'HH:MM PM' 3:45 PM 17 'QQ-YY' Q1-96 18 'QQ' Q1 vÝ dô víi hµm datestr: >> datestr(t) ans= 21-Jan-1997 16: 33: 40 >> datestr(t,14) ans= 4: 33: 40 PM Hµm datenum lµ hµm ng−îc cña datestr. Hµm nµy chuyÓn mét x©u kÝ tù d¹ng ngµy dïng mÉu datenum(str), hoÆc mét sè ®éc lËp hoÆc mét vector sang sè d¹ng ngµy, dïng mÉu: datenum(year, month, day) hoÆc datenum(year, month, day, hour, minute, second). >> datenum('21-Jan-1997 16: 33: 40') ans= 729411.690045541 >> datenum(1997, 01, 21) ans= 729411 >> datenum(1997, 01, 21, 16, 33, 40) ans= 729411.690045541 Hµm datevec chuyÓn mét x©u kÝ tù d¹ng ngµy (dïng datestr d¹ng 0, 1, 2, 6, 13, 14, 15, hoÆc 16) hoÆc mét sè d¹ng ngµy sang vector. >> c = datevec('12/ 24/ 1984') c= 1984 12 24 0 0 0 >> [yr, mo, day, hr, nim, sec] = datevec('24-Dec-1984 08: 22') yr= 1984 mo= 12
- 64 day= 24 hr= 8 min= 22 sec= 0 10.3 C¸c hµm vÒ ngµy Ngµy cña tuÇn cã thÓ t×m tõ x©u d¹ng ngµy hoÆc sè d¹ng ngµy, dïng hµm weekday, MATLAB sö dông quy −íc Sunday = 1 vµ Saturday = 7. >> [d w] = weekday(728647) d= 2 w= Mon >> [d w] = weekday('21-Dec-1994') d= 4 w= Wed Ngµy cuèi th¸ng cã thÓ t×m b»ng hµm eomday. Trong ®ã b¾t buéc ph¶i ®−a vµo n¨m, th¸ng. 1996 lµ n¨m >> eomday(1996, 2) % ans= 29 MATLAB cã thÓ t¹o lÞch cho bÊt cø th¸ng nµo b¹n yªu cÇu, vµ hiÓn thÞ nã trong cöa sæ lÖnh hoÆc ®Æt chóng trong mét ma trËn 6x7. >> calendar('7/ 17/ 95') Jul 1995 S M Tu W Th F S 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0 0 0 0 0 >> S = calendar(1994, 12) S= 0 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0 0 0 0 0 0 0
- 65 10.4 C¸c hµm vÒ thêi gian LÖnh tic vµ toc cã thÓ ®−îc dïng ®èi víi thêi gian trong tÝnh to¸n: >> tic; plot(rand(5)); toc elapsed_time = 0.2200 H×nh 10.1 >> tic; plot(rand(5)); toc elapsed_time = 0.1700
- 66 H×nh 10.2 Chó ý sù kh¸c nhau vÒ hµm thêi gian gi÷a elapsed_time ®èi víi lÖnh plot, lÖnh plot thø hai nhanh h¬n v× MATLAB ®· t¹o h×nh d¸ng cöa sæ vµ dÞch c¸c hµm cÇn thiÕt vµo trong « nhí. Hµm cputime tr¶ vÒ tæng sè thêi gian cña CPU (Central Processing Unit), tÝnh theo gi©y, trong thêi gian MATLAB ®· dïng tõ khi nã ®îc khëi ®éng lªn. Hµm etime tÝnh kho¶ng thêi gian gi÷a hai vector thêi gian. C¸c vector ph¶i lµ vector hµng gåm 6 phÇn tö, gièng nh− kÕt qu¶ tr¶ vÒ trong lÖnh clock vµ datevec. T¹i thêi gian hiÖn t¹i etime kh«ng chuyÓn gi÷a th¸ng vµ n¨m. TÊt c¶ c¸c hµm cã thÓ sö dông ®Ó tÝnh to¸n thêi gian. >> t0 = cputime; pause(5); cputime - t0 ans = 5 >> t1 = clock; pause(2); etime(clock,t1) ans = 2.0400 B¹n h·y xem help vµ MATLAB CD ®Ó t×m hiÓu thªm vÒ nh÷ng hµm nµy. 10.5 VÏ ®å thÞ víi hµm ngµy vµ thêi gian §«i khi nã rÊt cã Ých ®Ó vÏ ®å thÞ trong ®ã dïng x©u ngµy vµ thêi gian cho mét hoÆc h¬n mét c¸c nh·n. Hµm datetick tù ®éng víi c«ng viÖc nµy. NÕu ®å thÞ ®−îc vÏ, dïng sè ngµy cho mét hoÆc h¬n mét trôc, th× hµm datetick sÏ viÕt c¸c nh·n cho ®iÓm ®¸nh dÊu. VÝ dô sau vÏ h×nh 10.3: >> t = (1900:10:1990)'; >> p = [75.995; 91.972; 105.771; 123.203; 131.669; 150.697; 179.323; 203.212; 226.505; 249.633];
- 67 >> plot(datenum(t,1,1),p) >> datetick('x','yyyy') % use 4-digit year on the x-axis >> title('Population by year') Chóng ta cã thÓ t¹o biÓu ®å cét cña c«ng ty b¸n hµng b¸n tõ th¸ng 11 n¨m 1994 ®Õn th¸ng 12 n¨m 1995 (H×nh 10.4): >> y = [1994 1994 1995*ones(1,12)]'; >> m = [11 12 (1:12)]'; >> s=[1.1 1.3 1.2 1.4 .16 1.5 1.7 1.6 1.8 1.3 1.9 1.7 1.6 1.95]'; >> bar(datenum(y,m,1),s) >> datetick('x','mmmyy') >> ylabel('$ Million') >> title('Monthly Sales') H×nh 10.3
- 68 H×nh 10.4 VÝ dô: T×m thø s¸u ngµy 13 B©y giê chóng ta ®· ®−îc giíi thiÖu c¸c lÖnh vÒ thêi gian, h·y dïng chóng ®Ó t¹o mét sè hµm cã Ých. NÕu b¹n lµ ng−êi cÈn thËn, b¹n muèn biÕt bao giê thø s¸u ngµy 13 x¶y ra. Hµm M_file sÏ cho b¹n nh÷ng th«ng tin nµy. function m=friday(start) % FRIDAY Date of the next Friday the 13th % FRIDAY display the next occurrence of Friday the % 13th % FRIDAY(START) start the search at the date % specified by START % M=FRIDAY return the date number of the next Friday % the 13th if nargin==0 start=now; % use the current date if none end % was supplied [yr,mo,da]=datevec(start); da=da+6-weekday(start); % Start with the Friday in % this week start=datenum(yr,mo,da,0,0,0); while 1 [yr,mo,da]=datevec(start); if (weekday(start)==6)&(da==13) break;
- 69 end start=datenum(start+7); % skip to the next Friday end if nargout==0 disp(['Friday,'datestr(start,1)]) % Display the % the result else m=start; % or return the resulting date end % number Sau khi ch¹y ch−¬ng tr×nh ta ®−îc kÕt qu¶: >> friday Friday,13-Aug-1999 NÕu b¹n muèn ®−îc c¶nh b¸o cho toµn bé n¨m, xem hµm fridays: function F=fridays(ynum) % FRIDAY List the Friday the 13ths in the year ynum. % M=FRIDAY return the date numbers found. % if nargin==0 [ynum dummy]=datevec(now); % use the current date if end % non was supplied MM=[]; trynum=datenum(ynum,1,13,0,0,0); % check January 13 first trynum=friday(trynum); % find the first one [tyr dummy]=datevec(trynum); while tyr==ynum % May be there are more this year MM=[MM;trynum]; trynum=friday(trynum+7); % skip to the next week [tyr dummy]=datevec(trynum); end if nargout==0 disp('Fridays'); % Display the results disp(datestr(MM,1)) % Display the result else F=MM; % or return the vector of end % date number -------------------oOo------------------- ch−¬ng 11 VßNG LÆP §IÒU KHIÓN C¸c ng«n ng÷ lËp tr×nh vµ m¸y tÝnh cã kh¶ n¨ng lËp tr×nh ®Òu ®Ò cËp ®Õn mét ®Æc ®iÓm lµ cho phÐp b¹n ®iÒu khiÓn vßng lÆp cña c¸c c©u lÖnh dùa trªn nh÷ng cÊu tróc cña nã. NÕu b¹n ®· tõng sö dông
CÓ THỂ BẠN MUỐN DOWNLOAD
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn