Cách lấy lịch sử tính toán trên matlab năm 2024

MATLAB là một hệ tính toán, lập trình cao cấp với thư viện hàm phong phú, đa dạng. Chính vì thế, MATLAB được sử dụng là một trong những công cụ tính toán hiệu quả trong giảng dạy, học tập và nghiên cứu trong các trường đại học. Quyển sách này ra đời để phục vụ cho môn học Thực hành Laboratory của sinh viên Khoa Toán-Tin học Trường Đại học Khoa học Tự nhiên Đại học Quốc gia Thành phố Hồ Chí Minh. Ngoài ra, giáo trình này cũng có thể dùng làm tài liệu cho sinh viên các môn học như Tin học tính toán hay MATLAB và ứng dụng của các ngành Khoa học-Kỹ thuật.

  • 1. MATLAB Tính toán khoa học
  • 2. chung về MATLAB Làm việc với MATLAB Lập trình với MATLAB Các phép tính ma trận nâng cao Đồ thị nâng cao Vào ra dữ liệu Tính toán khoa học
  • 3. về MATLAB • MATLAB (Matrix Laboratory) là phần mềm của hãng MathWorks Inc. • Đối tượng là các ma trận. • MATLAB tích hîp c¸c ph-¬ng ph¸p tÝnh to¸n, hiÓn thÞ vµ ng«n ngữ lËp trình m¹nh ®Ó cung cÊp cho ng-êi sö dông mét m«i tr-êng lµm viÖc thuËn tiÖn ®Ó gi¶i c¸c vÊn ®Ò tÝnh to¸n khoa häc. • CÊu tróc më cña MATLAB cho phÐp sö dông MATLAB vµ c¸c thµnh phÇn cña nã ®Ó kh¶o s¸t dữ liÖu, nghiªn cøu c¸c thuËt to¸n vµ t¹o c¸c c«ng cô tiÖn Ých cña ng-êi sö dông. Tính toán khoa học
  • 4. về MATLAB (tiếp) • Ngoài ra Matlab cũng đã tạo sẵn rất nhiều công cụ tiện ích như: – – – – Khai ph¸ dữ liÖu (Data acquisition) Ph©n tÝch vµ kh¶o s¸t dữ liÖu (Data analysis and exploration) HiÓn thÞ vµ xö lý ¶nh (Visualization and image processing) Dùng mÉu vµ Ph¸t triÓn thuËt to¸n (Algorithm prototyping and development) – M« hình hãa vµ m« pháng (Modeling and simulation) – ... • MATLAB là công cụ được các nhà khoa học, kỹ sư sử dụng để phát triển các phần mềm giải các bài toán tính toán trong khoa học kỹ thuật. • Bản thân MATLAB cũng cung cấp công cụ để giải nhiều bài toán của khoa học kỹ thuật. • MATLAB được dùng trong nhiều trường đại học để hỗ trợ việc giảng dạy các giáo trình toán, đặc biệt là các giáo trình liên quan đến tính toán số như đại số tuyến tính ứng dụng, giải tích số, tính toán khoa học, … Tính toán khoa học
  • 5. MATLAB Tính toán khoa học
  • 6. việc của Matlab Thư mục hiện thời Current Directory Cửa sổ lệnh Command Window Các lệnh quá khứ Command history Truy cập chức năng Tính toán khoa học
  • 7. việc của Matlab (tiếp) Vùng nhớ làm việc Workspace Cửa sổ lệnh Command Window Các lệnh quá khứ Command History Tính toán khoa học
  • 8. Matlab • Matlab có thể làm việc như là một siêu máy tính cầm tay nếu chúng ta chỉ cần Matlab thực hiện một số lệnh bằng cách đánh trực tiếp trên của sổ lệnh… • Chương trình được thực hiện bằng cách nào? • Chương trình trong Matlab có thể là: – Kịch bản (Scripts), hoặc – Các hàm (Functions) • Scripts: Dãy lệnh Matlab ghi trong một file được đưa vào cửa sổ lệnh và được thực hiện tức thì • Functions: Các môđun chương trình tiếp nhận dữ liệu vào và trả lại kết quả (ví dụ hàm sin nhận đầu vào x và trả lại giá trị sin(x)) • Chương trình có thể được soạn thảo bằng bất cứ bộ soạn thảo văn bản nào (tuy nhiên Matlab cũng cung cấp bộ soạn thảo chương trình của riêng mình) Tính toán khoa học
  • 9. của Matlab (Matlab Editor) Các chức năng Tự động gán màu chữ và dóng hàng Dãy các file được mở để soạn thảo Tính toán khoa học
  • 10. việc của Matlab • Matlab là ngôn ngữ thông dịch (interpreted language) – Các câu lệnh được đánh trực tiếp trong cửa sổ lệnh và được thực hiện tức thì – Các biến được phân bố bộ nhớ ngay lần đầu tiên chúng được khởi tạo – Muốn thực hiện lại một lệnh chỉ việc gõ lại lệnh đó • Tất cả các biến được sử dụng trong cửa sổ lệnh được cất giữ vào Vùng nhớ làm việc Base Workspace – – – – – – Có thể gán giá trị mới cho các biến nếu cần thiết Có thể chọn để xoá bỏ một số biến khỏi vùng nhớ làm việc Vùng nhớ làm việc có thể cất giữ vào một file dữ liệu Phần mở rộng của file dữ liệu là .mat (ví dụ: mydata.mat) File là file nhị phân Các file dữ liệu (đuôi .mat ) có thể nạp trở lại vào Vùng nhớ làm việc Tính toán khoa học
  • 11. thị & Biến • Tại dấu nhắc của cửa sổ lệnh, người sử dụng có thể gõ: – Lệnh (Command): • save mydata (cất giữ vùng nhớ làm việc vào mydata.mat) • whos (hiển thị danh mục các biến trong vùng nhớ làm việc) – Chỉ thị gán (Assignment Statement): • • • • A = width * length; B = 267; Câu lệnh gán chỉ có một tên biến ở vế trái của toán tử gán (=) Vế phải sẽ được tính dựa vào giá trị hiện thời của các biến và kết quả tính được sẽ gán cho biến ở vế trái. • Giá trị có thể có dạng số hoặc dạng ký tự • Kiểu của biến sẽ được cập nhật mỗi khi nó được gán giá trị (chú ý: rất thoải mái nhưng rất dễ mắc sai lầm…) – Biến • Phân biệt 31 ký tự đầu tiên (những ký tự tiếp theo bị bỏ qua); Phân biệt chữ hoa hay thường Tính toán khoa học
  • 12. chÕ ®é héi tho¹i • Khi sö dông chÕ ®é héi thäai, ng-êi sö dông ®¸nh trùc tiÕp c©u lÖnh vµo sau dÊu nh¾c cña MATLAB. Khi Ên nót “Enter”, dßng lÖnh sÏ ®-îc thùc hiÖn. • VÝ dô, >> x = 1; >> 4*atan(x) • KÕt qu¶ sÏ ®-îc ®-a ra mµn hình d-íi d¹ng ans = 3.1416 • DÊu chÊm ph¶y ";" ë cuèi dßng lÖnh ®-îc sö dông ®Ó ngăn MATLAB kh«ng ®-a kÕt qu¶ cña phÐp thao t¸c. Tính toán khoa học
  • 13. MATLAB • Mét c¸ch lµm viÖc kh¸c víi MATLAB lµ ta cã thÓ viÕt ch-¬ng trình ®Ó thùc hiÖn c¸c tÝnh to¸n. • ĐÓ lµm ®iÒu nµy ta cÇn so¹n th¶o mét file văn b¶n b»ng bÊt kú bé so¹n th¶o văn b¶n nµo, trong ®ã cã bé so¹n th¶o cña MATLAB. • File văn b¶n chøa c¸c c©u lÖnh ph¶i ®-îc ®Æt tªn víi ®u«i lµ *.m, nÕu kh«ng MATLAB sÏ kh«ng chÊp nhËn ch-¬ng trình. • Ch-¬ng trình ®-îc so¹n th¶o cÇn cÊt giấu trong th- môc lµm viÖc hiÖn thêi cña MATLAB. Tính toán khoa học
  • 14. néi dung cña file Tinhpi.m % Program 1.1 (TÝnh sè ). % Ch-¬ng trình tÝnh gi¸ trÞ cña Pi = 3.14159265358979... % Mçi dßng b¾t ®Çu bëi % sÏ lµ dßng chó gi¶i vµ sÏ ®-îc % MATLAB bá qua khi nã thùc hiÖn ch-¬ng trình. x = 1; 4*atan(x) • ĐÓ thùc hiÖn ch-¬ng trình ta chØ cÇn gâ tªn cña file ch-¬ng trình sau dÊu nh¾c cña MATLAB >> Tinhpi ans = 3.1416 Tính toán khoa học
  • 15. Matlab sử dụng một loạt các từ khoá (reserved words) mà để tránh xung đột, không nên sử dụng để đặt tên biến… for end if while function return elsif case otherwise switch continue else try catch global persistent break Tính toán khoa học
  • 16. vµ tªn hµm chuÈn cña MATLAB Tên biến hằng ans Mô tả Biến ngầm định chứa kết quả beep Phát tiếng kêu pi Hằng số pi eps inf infinity NaN i Số 0 của Matlab not a number (hoÆc) j realmin, realmax bitmax nargin, nargout varargin varaout Đơn vị phức Số thực dương nhỏ nhất và lớn nhất Số nguyên lớn nhất Số lượng biến vào/ra của lệnh gọi hàm Số lượng biến trong lệnh gọi hàm Số lượng biến đầu ra trong lệnh gọi hàm Tính toán khoa học
  • 17. vµ tªn hµm chuÈn cña MATLAB Tªn hµm abs (x) acos (x) asin (x) atan (x) conj (x) cos (x) exp (x) ý nghÜa Gi¸ trÞ tuyÖt ®èi cña sè thùc x (hoÆc biªn ®é cña sè phøc x). hµm ng-îc cña cosin. hµm ng-îc cña sin. hµm ng-îc cña tang. sè phøc liªn hîp hµm cosin. hµm mò. Tính toán khoa học
  • 18. vµ tªn hµm chuÈn cña MATLAB Tªn hµm imag (x) ý nghÜa phần ảo của số phức log (x) Logarithm cơ số e log10 (x) Logarithm cơ số 10 real (x) phần thực của x sign (x) Hàm dấu, trả lại dấu của đối số sin (x) hàm sin. sqrt (x) Căn bậc hai tan (x) hàm tang Tính toán khoa học
  • 19. liÖu • MÆc dï tÊt c¶ c¸c tÝnh to¸n sè trong Matlab ®Òu ®-îc thùc hiÖn víi ®é chÝnh x¸c kÐp (double precision), nh-ng khu«n d¹ng cña dữ liÖu ®-a ra cã thÓ ®Þnh d¹ng l¹i nhê c¸c lÖnh ®Þnh d¹ng cña Matlab. • C¸c biÕn ngÇm ®Þnh còng nh- c¸c biÕn cña ng-êi sö dông ®Þnh nghÜa ®Òu cã thÓ ®-a ra theo nhiÒu khu«n d¹ng kh¸c nhau. • Khu«n d¹ng ®-îc chän nhê sö dông lÖnh format: – – – – FORMAT SHORT FORMAT LONG FORMAT SHORTE FORMAT LONGE mũ – FORMAT RAT số dấu phảy động có 4 chữ số sau dấu. số dấu phảy động có 14 chữ số. số dấu phảy động có 4 chữ số với số mũ. số dấu phảy động có 15 chữ số với số biểu diễn đúng hoặc gần đúng dưới dạng phân số Tính toán khoa học
  • 20. liÖu: VÝ dụ >> pi ans = 3.1416 >> format short e, pi ans = 3.1416e+000 >> format long, pi >> format rat, pi ans = 3.14159265358979 >> format long e, pi ans = 355/113 ans = 3.141592653589793e+000 Tính toán khoa học
  • 21. ®¬n gi¶n • Ьn gi¶n nhÊt, ®å thÞ cã thÓ ®-îc vÏ nhê nèi c¸c ®iÓm ®-îc ®¸nh dÊu trªn mÆt ph¼ng täa ®é ®Ò c¸c. • VÝ dô: >> x = [1;2;3;4;5]; >> y = [0;.25;3;1.5;2]; >> plot(x,y) Tính toán khoa học
  • 22. ®¬n gi¶n • Theo ngÇm ®Þnh, Matlab sÏ nèi c¸c ®iÓm ®¸nh dÊu bëi c¸c ®o¹n th¼ng. Mét c¸ch vÏ kh¸c ®-îc thùc hiÖn nh- sau >> plot(x,y,'o') Tính toán khoa học
  • 23. vect¬ vµ ma trËn • Mét trong những ®iÓm m¹nh cña MATLAB lµ nã cho phÐp lµm viÖc víi c¸c ma trËn vµ vect¬. ĐÓ sö dông mét biÕn ta cÇn khëi t¹o nã. Cã thÓ khëi t¹o biÕn vect¬ vµ ma trËn theo nhiÒu c¸ch. • Đèi víi vect¬ (hay ma trËn chØ cã mét dßng) ta cã thÓ sö dông c¸c c¸ch khëi t¹o sau >> a = [1 2 3 4 5 6 7 8 9 10]; >> b = [1:10]; >> c = [1:0.5:5.5]; >> d = sin(a); >> e = [5 d 6]; Tính toán khoa học
  • 24. vect¬ vµ ma trËn • Mét trong những c¸ch khëi t¹o vect¬ th-êng dïng lµ sö dông to¸n tö first : increment : last • C©u lÖnh a= first : increment : last khëi t¹o vect¬ dßng a b¾t ®Çu tõ phÇn tö first vµ kÕt thóc t¹i phÇn tö last víi ®é dµi b-íc lµ increment. NÕu kh«ng chØ ra increment, thì gi¸ trÞ ngÇm ®Þnh nã lµ b»ng 1. Tính toán khoa học
  • 25. vect¬ vµ ma trËn • VÝ dô: 1) ĐÓ khëi t¹o vect¬ a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) cã thÓ thùc hiÖn >> a=1:10 a= 1 2 3 4 5 6 7 8 9 10 2) Đé dµi b-íc cã thÓ lµ sè ©m >> a=[100:-10:20] a = 100 90 80 70 60 50 40 30 20 3) C¸c gi¸ trÞ cña th«ng sè cã thÓ x¸c ®Þnh bëi biÓu thøc to¸n häc >> c=0:pi/6:2*pi c = Columns 1 through 6 0 0.5236 1.0472 1.5708 2.0944 2.6180 Columns 7 through 12 3.1416 3.6652 4.1888 4.7124 5.2360 5.7596 Column 13 6.2832 Tính toán khoa học
  • 26. vect¬ vµ ma trËn • ĐÓ khëi t¹o ma trËn ta cã thÓ lµm nh- sau >> A = [1 2 3; 4 5 6; 7 8 9]; >> B = [x; y; z]; >> C = [A; 10 11 12]; • Chó ý lµ c¸c dßng cña ma trËn ®-îc ph©n t¸ch nhau bëi dÊu ";", trong khi ®ã c¸c phÇn tö trªn mét dßng ®-îc ph©n t¸ch bëi dÊu c¸ch (hoÆc dÊu ph¶y). Tính toán khoa học
  • 27. m¶ng (Array addressing) • C¸c phÇn tö cña mét m¶ng tæng qu¸t (lµ vect¬ hay ma trËn) cã thÓ ®Þa chØ hãa theo nhiÒu c¸ch. • C¸ch ®¬n gi¶n nhÊt lµ chØ ra phÇn tö bëi vÞ trÝ dßng vµ cét cña nã trong m¶ng • C¸c dßng vµ cét ®-îc ®¸nh sè b¾t ®Çu tõ 1. Tính toán khoa học
  • 28. m¶ng (Array addressing) • VÝ dô >> x = [10 5 3 7 -2 8]; >> x(5) ans = -2 >> A = [3 4 9; 2 5 1; 7 4 2] A = 3 4 9 2 5 1 7 4 1 >> A(1,3) ans = 9 Tính toán khoa học
  • 29. m¶ng (Array addressing) • Trong tr-êng hîp ma trËn, cã thÓ x¸c ®Þnh ®Þa chØ dßng hay cét bëi lÖnh :. • VÝ dô: NÕu cÇn lÊy c¸c phÇn tö cña cét thø hai vµ c¸c phÇn tö cña dßng thø 3 trong ma trËn A cã thÓ dïng c¸c lÖnh >> A(:,2) >> A(3,:) Tính toán khoa học
  • 30. m¶ng (Array addressing) • Thay vect¬ chØ sè vµo chç c¸c chØ sè ta cã thÓ sinh ra hoÆc lÊy ®-îc c¸c m¶ng con phøc t¹p h¬n. • VÝ dô >> Asub = A(i:j,k:l); x¸c ®Þnh Asub lµ ma trËn gåm c¸c phÇn tö n»m trªn giao cña c¸c dßng tõ i ®Õn j, c¸c cét tõ k ®Õn l. • NÕu chØ sè ®-îc chØ ra bëi ký tù : thì ®iÒu ®ã cã nghÜa lµ tÊt c¶ c¸c gi¸ trÞ cã thÓ cña chØ sè cña chiÒu ®ã cña m¶ng ®Òu ®-îc chän. • VÝ dô: >> B = A(:,[3 1 2]); Tính toán khoa học
  • 31. m¶ng (Array addressing) • Ta còng cã thÓ nèi nhiÒu ma trËn ®Ó ®-îc ma trËn míi. • VÝ dô: – NÕu A vµ B lµ c¸c ma trËn cã cïng sè dßng thì >> C = [A B]; cho ma trËn C cã cïng sè dßng nh- A vµ B, nh-ng cã sè cét lµ tæng sè cét cña A vµ B. - NÕu A vµ B lµ c¸c ma trËn cã cïng sè cét thì >> C = [A; B] cho ma trËn C cã sè cét b»ng sè cét cña A hoÆc B nh-ng sè dßng cña C lµ b»ng tæng sè dßng cña A vµ B. Tính toán khoa học
  • 32. m¶ng (Array addressing) • ĐÓ xo¸ mét dßng hay cét cña ma trËn ta sö dông cÆp ngoÆc vu«ng rçng []: • VÝ dô: Gi¶ sö A lµ ma trËn trong vÝ dô tr-íc. Khi ®ã, lÖnh >> A(:,2) = []; cho ta ma trËn thu được từ A bởi việc xoá đi cột thứ 2. • Kh«ng thÓ xo¸ bá mét phÇn tö cña ma trËn, bëi vì khi ®ã kÕt qu¶ kh«ng cßn lµ ma trËn nữa. • Tuy nhiªn, nhê m« t¶ chØ sè bëi to¸n tö : cã thÓ thùc hiÖn viÖc xo¸ bá mét phÇn tö hoÆc mét d·y phÇn tö vµ c¸c phÇn tö cßn l¹i ®-îc s¾p xÕp l¹i trong mét vect¬ dßng Tính toán khoa học
  • 33. ®èi víi vect¬ vµ ma trËn • Tr-íc xÐt mét sè hµm cña MATLAB cho th«ng tin vÒ ®Æc tr-ng cña m¶ng. • Hµm length cho phÐp x¸c ®Þnh sè phÇn tö cña vect¬. NÕu gäi hµm ®èi víi ma trËn thì nã sÏ tr¶ l¹i sè lín h¬n trong sè dßng vµ sè cét cña ma trËn. • Hµm size, nã tr¶ l¹i sè dßng vµ sè cét cña ma trËn hay vect¬. KÕt qu¶ cña hµm size lµ mét vect¬ 12 chøa sè dßng vµ sè cét cña ma trËn. C¸ch sö dông chuÈn cña hµm nµy lµ >> [rows cols] = size(A); Tính toán khoa học
  • 34. ®èi víi vect¬ vµ ma trËn • Cộng (và trừ) các ma trận cùng kích thước được thực hiện từng thành phần. • Ví dụ >> A=[5 -1 2; 3 4 7]; B=[2 2 1; 5 0 3]; >> A+B ans = 7 1 3 8 4 10 • Chú ý các ma trận phải có cùng kích thước: >> C=[3 1; 6 4]; >> A+C ??? Error using ==> + Matrix dimensions must agree. Tính toán khoa học
  • 35. ®èi víi vect¬ vµ ma trËn • Nhân với một số (chia cho một số khác không) cũng được thực hiện theo từng thành phần. Ví dụ: >> A=[5 -1 2; 3 4 7]; >> 2*A ans = 10 -2 4 6 8 14 • Phép toán * trong tích trên là bắt buộc phải có: >> 2A ??? 2 | Missing operator, comma, or semicolon. Tính toán khoa học
  • 36. ®èi víi vect¬ vµ ma trËn • Cộng vectơ và nhân vectơ với một số được thực hiện tương tự. >> v=[3; 5]; w=[-2; 7]; >> 10*v-5*w ans = 40 15 Tính toán khoa học
  • 37. ®èi víi vect¬ vµ ma trËn • Phép nhân hai ma trận cũng có thể thực hiện được trên Matlab. • Để nhân hai ma trận hay nhân ma trận với vector chỉ việc dùng toán tử * giống như phép nhân của các đại lượng vô hướng. • Matlab nhận dạng kích thước của đầu vào và thực hiện phép nhân. • Điều mà người sử dụng quan tâm là kích thước của các ma trận và vector phải phù hợp để có thể thực hiện được phép toán. Tính toán khoa học
  • 38. ®èi víi vect¬ vµ ma trËn • Ví dụ: >> x = [1 2 3]; >> A = [4 5 6; 5 4 3]; >> b = A*x ??? Error using ==> * Inner matrix dimensions must agree. >> y = [1; 2; 3]; >> b = A*y b = 32 22 Tính toán khoa học
  • 39. ®èi víi vect¬ vµ ma trËn • ĐÓ thùc hiÖn chuyÓn vÞ vect¬ hoÆc ma trËn cã thÓ dïng lÖnh chuyÓn vÞ ' viÕt ngay sau tªn biÕn. >> A = [ 4 5; 5 4; 6 3] >> A' ans = 4 5 6 5 4 3 Tính toán khoa học
  • 40. ®èi víi vect¬ vµ ma trËn • PhÐp to¸n chuyÓn vÞ thùc hiÖn ®èi víi ma trËn phøc sÏ thùc hiÖn chuyÓn vÞ liªn hîp: >> A = [1 2;3 4] A= 1 2 3 4 >> A' ans = 1 3 2 4 >> B = A + i*.5*A B= 1.0000 + 0.5000i 3.0000 + 1.5000i >> B' ans = 1.0000 - 0.5000i 2.0000 - 1.0000i 2.0000 + 1.0000i 4.0000 + 2.0000i 3.0000 - 1.5000i 4.0000 - 2.0000i Tính toán khoa học
  • 41. ®èi víi vect¬ vµ ma trËn • Mét phÐp chuyÓn vÞ kh¸c Ýt dïng ®èi víi ma trËn phøc ®-îc thùc hiÖn nhê phÐp to¸n ".'". VÝ dô: >> B.' ans = 1.0000 + 0.5000i 3.0000 + 1.5000i 2.0000 + 1.0000i 4.0000 + 2.0000i • (Chó ý lµ ' vµ .' cho kÕt qu¶ nh- nhau ®èi víi ma trËn thùc). Tính toán khoa học
  • 42. ®èi víi vect¬ vµ ma trËn • NÕu A lµ ma trËn vu«ng cßn m lµ sè nguyªn d-¬ng thì A^m sÏ cho ta tÝch cña m nh©n tö lµ A. • Ví dụ: >> A=[1 2; 3 4]; A^2 ans = 7 10 15 22 >> pi^2 ans = 10975/1112 >> mu2= 2^100; >> format long, mu2 mu2 = 1.267650600228229e+030 Tính toán khoa học
  • 43. số Fibonacci • Dãy số Fibonacci được định nghĩa bởi công thức đệ qui f0=0, f1=1, fn=fn-1 + fn-2, n ≥ 2. • Đưa vào ma trận: 1 1  F  , 1 0  0 f   1  • Dễ dàng kiểm tra được rằng  fn  F f   f n 1   n >> F=[1 1;1 0]; f=[0;1]; F^10*f Tính toán khoa học
  • 44. ®èi víi vect¬ vµ ma trËn • PhÐp to¸n luü thõa ¸p dông víi ma trËn kÝch th-íc 11 trë thµnh phÐp to¸n luü thõa cña ®¹i l-îng v« h-íng. • VÝ dô: >> c=3.1; >> c^3 ans = 29.7910 • Sè mò cã thÓ lµ sè thùc tuú ý • VÝ dô: >> 3^(-1/3) ans = 0.6934 Tính toán khoa học
  • 45. ma trËn sö dông phÐp chia ma trËn • NÕu A lµ ma trËn vu«ng kh«ng suy biÕn thì nghiÖm cña ph-¬ng trình Ax = b lµ x = A-1b. Matlab cµi ®Æt phÐp to¸n nµy vµ ký hiÖu lµ to¸n tö "". • VÝ dô: >> A = rand(3,3); >> b = rand(3,1); >> x = Ab x= -159.3380 314.8625 -344.5078 >> A*x-b ans = 1.0e-13 * -0.2602 -0.1732 -0.0322 Tính toán khoa học
  • 46. ma trËn sö dông phÐp chia ma trËn • Chó ý: hµm rand t¹o c¸c sè ngÉu nhiªn víi ph©n bè ®Òu trªn ®äan (0,1). H·y sö dông lÖnh help rand ®Ó xem gi¶i ®¸p chi tiÕt vÒ hµm nµy. • Nh- vËy Ab lµ t-¬ng ®-¬ng víi viÖc nh©n tr¸i b víi ma trËn A1 (tuy nhiªn, ®Ó ®-a ra kÕt qu¶, Matlab kh«ng tÝnh ma trËn nghÞch ®¶o mµ gi¶i trùc tiÕp hÖ ph-¬ng trình). • Khi sö dông to¸n tö "" ®èi víi ma trËn kh«ng vu«ng, Matlab sÏ gi¶i hÖ ph-¬ng trình t-¬ng øng trong nghÜa bình ph-¬ng bÐ nhÊt; • H·y sö dông lÖnh help slash ®Ó cã ®-îc gi¶i ®¸p chi tiÕt h¬n. • Gièng nh- ®èi víi c¸c phÐp to¸n sè häc kh¸c, c¸c ma trËn ph¶i cã kÝch th-íc phï hîp. Tính toán khoa học
  • 47. ®èi víi vect¬ vµ ma trËn • Tích theo từng thành phần của hai ma trận cùng kích thước A và B là ma trận A.*B với các phần tử là tích của các phần tử tương ứng của A và B. • Ví dụ: >> A=[ 1 2 3; 4 5 6]; B=[3 2 1;-1 2 2]; >> A.*B ans = 3 4 3 -4 10 12 Tính toán khoa học
  • 48. ®èi víi vect¬ vµ ma trËn • Phép chia và luỹ thừa theo từng thành phần: A./B và A.^B được định nghĩa tương tự. Lưu ý là các phép tính với các thành phần phải là có nghĩa, nếu không MATLAB sẽ báo lỗi. • Ví dụ: >> A./B ans = 1/3 1 3 -4 5/2 3 >> A.^B ans = 1 4 3 1/4 25 36 Tính toán khoa học
  • 49. ®èi víi vect¬ vµ ma trËn • Phép cộng ma trận với vô hướng: Giá trị của vô hướng được cộng vào từng thành phần của ma trận. • Ví dụ: >> A=[1 2 3; 2 3 4]; >> A+5 ans = 6 7 8 7 8 9 Tính toán khoa học
  • 50. phÐp to¸n vect¬ hãa • C¸c hµm cña Matlab ®Òu lµ hµm ®-îc vect¬ hãa, nghÜa lµ nÕu ¸p dông c¸c hµm cña Matlab ®èi víi m¶ng, nã sÏ t¹o ra m¶ng míi cã cïng kÝch th-íc víi c¸c thµnh phÇn lµ gi¸ trÞ hµm t¹i c¸c thµnh phÇn t-¬ng øng cña m¶ng ban ®Çu. • VÝ dô: Vẽ đồ thị hµm y=sin(x) trªn ®o¹n [0, 2*pi] >> x = (0:.1:2*pi); >> y = sin(x); >> plot(x,y) Tính toán khoa học
  • 51. phÐp to¸n vect¬ hãa • Matlab còng cung cÊp c¸c phÐp to¸n sè häc ®-îc vect¬ hãa, ®-îc ký hiÖu gièng nh- phÐp to¸n sè häc th«ng th-êng nh-ng cã thªm dÊu chÊm "." ë tr-íc. • VÝ dô: ĐÓ vÏ ®å thÞ hµm sè: y = x/(1+x2) trªn ®o¹n [5, 5] ta cã thÓ dïng c¸c lÖnh >> x = (-5:.1:5); >> y = x./(1+x.^2); >> plot(x,y) Tính toán khoa học
  • 52. ma trËn ®Æc biÖt • • • • zeros(m,n) t¹o ma trËn mn gåm toµn sè 0; ones(m,n) t¹o ma trËn mn gåm toµn sè 1; eye(n) t¹o ma trËn ®¬n vÞ nn; diag(v) (gi¶ thiÕt v lµ vect¬ n chiÒu) t¹o ma trËn ®-êng chÐo kÝch th-íc nn víi v lµ ®-êng chÐo. Tính toán khoa học
  • 53. MATLAB • MATLAB cho phép sử dụng biến xâu ký tự: Sử dụng lệnh gán S = 'Any Characters' cho phép tạo mảng ký tự (xâu ký tự). • Ví dụ: >> msg = 'You''re right!' msg = You're right! • Lưu ý: Để tạo dấu ‘ trong xâu ký tự cần đánh hai dấu ‘ Tính toán khoa học
  • 54. MATLAB • Lệnh S = [S1 S2 ...] ghép các xâu S1, S2,... thành một xâu mới S. • Ví dụ: >> name = ['Michel' ' Paul ' ' Heath '] name = Michel Paul Heath >> name(1) ans = M >> name(1)+name(9) ans = 174 • Lưu ý đến cách truy cập đến các thành phần trong xâu. Tính toán khoa học
  • 55. MATLAB • S = char(X) tạo S là ký tự có mã ASCII là X. • X = double(S) chuyển ký tự thành số • Ví dụ: >> char([65 66 67]) ans = ABC >> X = double('ABC') X = 65 66 67 Tính toán khoa học
  • 56. MATLAB • Để khởi tạo biến mảng mà mỗi phần tử là một xâu, sử dụng: >> S = {'Hello' 'Yes' 'No' 'Goodbye'} S = 'Hello' 'Yes' 'No' 'Goodbye' >> S(4) ans = 'Goodbye' Tính toán khoa học
  • 57. MATLAB Tính toán khoa học
  • 58. Matlab • Câu lệnh hay gặp nhất trong Matlab có dạng variable = expression Câu lệnh này sẽ gán giá trị của biểu thức expression cho biến variable. Ví dụ: >> x=2^10*pi x= 3.216990877275948e+003 Tính toán khoa học
  • 59. Matlab • Câu lệnh của Matlab cũng còn có thể có dạng đơn giản như sau: expression trong trường hợp này giá trị của biểu thức sẽ được gán cho biến ngầm định có tên là ans. Ví dụ: >> 2*pi*exp(-5) ans = 0.04233576958521 Tính toán khoa học
  • 60. Matlab • Cuối cùng, một dạng nữa của câu lệnh trong Matlab là variable – Nếu như biến đã được gán giá trị trước đó thì nội dung của biến được đưa ra màn hình, – Nếu trái lại sẽ có thông báo rằng biến chưa được xác định. • Người sử dụng có thể tận dụng điều này để kiểm tra xem một tên biến đã được dùng hay chưa. Tính toán khoa học
  • 61. Matlab • Câu lệnh của Matlab sẽ được thực hiện ngay sau khi nhấn phím Enter. Nếu câu lệnh Matlab kết thúc bởi Enter, theo ngầm định, Matlab sẽ đưa kết quả thực hiện lên thiết bị ra chuẩn (ngầm định là màn hình). • Muốn tránh việc đưa kết quả ra ngay trực tiếp sau câu lệnh, cần kết thúc câu lệnh bởi dấu ; sau đó mới đến Enter. • Khi câu lệnh của Matlab quá dài có thể ngắt thành hai hoặc nhiều dòng sử dụng dấu nối dòng … ở cuối mỗi dòng chứa câu lệnh. Tính toán khoa học
  • 62. Matlab • Ví dụ: >> avariablewithlongname = 100 + (32-17.33)*5 ... + 2^3 - log(10)/log(2); • Để xóa tất cả biến trong Matlab, ta dùng lệnh >> clear • Để xóa một số biến cụ thể, ta dùng lệnh >> clear var1 var 2 ... trong đó var1, var2, .. Là các tên của cá biến cần xóa. Tính toán khoa học
  • 63. quan hệ và logic trong Matlab Phép toán quan hệ Ý nghĩa < Nhỏ hơn <= Nhỏ hơn hoặc bằng > Lớn hơn >= Lớn hơn hoặc bằng == Bằng ~= Không bằng Ý nghĩa Phép toán lôgic & AND (hội) | OR (tuyển) ~ NOT (phủ định) 0 FALSE Số khác không TRUE Tính toán khoa học
  • 64. Dạng tổng quát của câu lệnh if là if expr1 statements1 elseif expr2 statements2 ... else statements end elseif và else là tuỳ chọn • Nhóm lệnh đi ngay sau biểu thức (expr) đầu tiên có giá trị khác 0 sẽ được thực hiện. • Nếu không có expr nào khác 0 thì nhóm lệnh sau else được thực hiện Tính toán khoa học
  • 65. VÝ dô: >> t = rand(1); >> if t > 0.75 s = 0; elseif t < 0.25 s = 1; else s = 1-2*(t-0.25); end >> s s = 0 >> t t = 0.7622 Tính toán khoa học
  • 66. C¸c phÐp to¸n quan hÖ trong Matlab lµ <, >, <=, >=, == (so s¸nh b»ng logic), vµ ~= (kh«ng b»ng). • C¸c phÐp to¸n hai ng«i nµy sÏ tr¶ l¹i gi¸ trÞ 0 hoÆc 1 (®èi víi c¸c biÕn v« h-íng): >> 5>3 ans = 1 >> 5<3 ans = 0 >> 5==3 ans = 0 Tính toán khoa học
  • 67. lặp for • Vòng lặp for lặp lại các câu lệnh trong thân của nó đối với các giá trị của biến chạy được lấy từ một vector dòng cho trước. • Ví dụ >> for i=[1,2,3,4] disp(i^2) end 1 4 9 16 Tính toán khoa học
  • 68. lặp for • Chú ý đến việc sử dụng hàm nội trú disp: hàm này đưa ra màn hình nội dung của biến. • Vòng lặp, cũng giống như câu lệnh if, phải kết thúc bởi end. Vòng lặp ở trên thường được viết dưới dạng như sau. >> for i=1:4 disp(i^2) end 1 4 9 16 • Nhớ lại cách khởi tạo 1:4 cũng chính là [1, 2, 3, 4]. Tính toán khoa học
  • 69. lặp for • Đoạn lệnh n=4; x = []; for i=1:n, x = [x, i^2], end hay x=[]; for i= 1:n x = [x, i^2]; end sẽ tạo ra vector x = [1, 4, 9, 16]. • Đoạn lệnh n=4;x=[]; for i=n:-1:1, x = [x, i^2],end sẽ tạo ra vector x = [16, 9, 4, 1]. Tính toán khoa học
  • 70. lặp for • Đoạn lệnh m = 4; n = 5; for i=1:m for j=1:n h(i,j) = i/(i+j-1); end end h sẽ tạo ra ma trận Hilbert kích thước 4 x 5. • Dấu ; ở cuối câu lệnh trong thân của vòng lặp dùng để ngăn Matlab không đưa cá kết quả trung gian, ma trận kết quả được đưa ra bởi lệnh h. Tính toán khoa học
  • 71. Câu lệnh có dạng sau: while expr C¸c c©u lÖnh end • Các câu lệnh trong thân của vòng lặp while sẽ được lặp lại chứng nào biểu thức expr còn là true (có giá trị khác 0). Tính toán khoa học
  • 72. Ví dụ: >> x=1; >> while 1+x > 1 x = x/2; end >> x x = 1.1102e-16 • Chú ý: Về mặt chính xác toán học thì 1 + x > 1 đối với mọi x > 0. Tính toán khoa học
  • 73. Ví dụ: Đoạn chương trình sau đưa ra giá trị p nguyên dương nhỏ nhất để 1+1/(2^p)=1. x=1; p=0; y=1; z=x+y; while x~=z y=y/2; p=p+1; z=x+y; end p p = 53 Tính toán khoa học
  • 74. số nhỏ Ví dụ: Tìm q nguyên dương nhỏ nhất để 1/2q = 0. x=1; q=0; Tràn số nhỏ while x>0 underflow x=x/2; q=q+1; q end; q 1/ 2  0 q = 1075 Tính toán khoa học
  • 75. số lớn Ví dụ: Tìm r nguyên dương nhỏ nhất để 2r = inf. x=1; r=0; while x~=inf x=2*x; r=r+1; end r overflow 2  inf r r = 1024 Tính toán khoa học
  • 76. tràn số • Ví dụ (Kahan) h x y e f z = = = = = = 1./2.; 2./3. - h; 3./5. - h; (x+x+x) - h; (y+y+y+y+y)-h; f/e; • z=? • Nếu tính toán số học chính xác thì f/e = 0/0 Tính toán khoa học
  • 77. Câu lệnh switch cho phép thực hiện rẽ nhánh dựa trên giá trị biểu thức. • Dạng tổng quát của câu lệnh switch là: switch bieuthuc case giatri cac cau lenh case {giatri1, giatri2, giatri3,...} cac cau lenh ... otherwise cac cau lenh end Tính toán khoa học
  • 78. ‘Sunday’; >> switch lower(date) case {‘sunday',‘saturday’} disp(‘the weekend.') otherwise disp(‘the workday.') end Kết quả: the weekend. Tính toán khoa học
  • 79. LÖnh break dïng ®Ó ng¾t viÖc thùc hiÖn vßng lÆp WHILE hay lµ FOR. Trong vßng lÆp lång nhau, BREAK sÏ chØ tho¸t khái vßng lÆp trong. • NÕu sö dông lÖnh break ngoµi vßng lÆp FOR hay WHILE trong kÞch b¶n hoÆc hµm cña MATLAB, lÖnh nµy sÏ chÊm døt viÖc thùc hiÖn kÞch b¶n hay hµm t¹i chÝnh ®iÓm ®ã. LÖnh break sö dông trong c©u lÖnh IF, SWITCH-CASE, sÏ ng¾t c©u lÖnh t¹i ®iÓm ®ã. Tính toán khoa học
  • 80. Kịch bản là dãy các câu lệnh của Matlab được ghi lại trong một m – file, file đuôi .m. • Khi đánh tên của file (không cần .m), dãy các lệnh này sẽ được thực hiện. • Lưu ý: m – file phải được đặt tại một trong các thư mục mà Matlab sẽ tự động tìm kiếm m – file trong đó; danh mục các thư mục như thế có thể xem nhờ lệnh path. • Một trong những thư mục mà Matlab luôn khảo sát chính là thư mục hiện thời. Thư mục này được hiển thị trong cửa sổ Current Directory. • Người sử dụng có thể thay đổi thư mục hiện thời nhờ dùng các tiện ích trong cửa sổ này. • Câu hỏi: thay đổi thư mục hiện thời như thế nào? Tính toán khoa học
  • 81. dụ • VÝ dô: Gi¶ sö file plotsin.m chøa c¸c dßng x = 0:2*pi/N:2*pi; y = sin(w*x); plot(x,y) • Khi ®ã d·y lÖnh >> N=100;w=5; >> plotsin sÏ ®-a ra ®å thÞ Tính toán khoa học
  • 82. VÝ dô nµy cho thÊy c¸c lÖnh trong mét kÞch b¶n cã thÓ truy nhËp c¸c biÕn ®-îc x¸c ®Þnh trong Matlab ®-îc coi lµ biÕn tæng thÓ (l-u ý truy nhËp biÕn N vµ w trong plotsin.m). • C¸c c©u lÖnh trong kÞch b¶n ®-îc thùc hiÖn gièng nh- lµ chóng ®-îc ®¸nh trùc tiÕp tõ bµn phÝm. Tính toán khoa học
  • 83. sö dông hµm cã những -u ®iÓm h¬n h¼n kÞch b¶n: – Dïng hµm, ng-êi sö dông cã thÓ t¹o những lÖnh míi trong Matlab. • Mét hµm ®-îc ®Þnh nghÜa trong m-file b¾t ®Çu bëi dßng cã cÊu tróc sau: function [out1,out2,...] = funcname(inp1, inp2,...) • PhÇn cßn l¹i cña m-file sÏ chøa c¸c c©u lÖnh cña Matlab tÝnh gi¸ trÞ cña c¸c ®Çu ra (outputi) vµ hoµn thµnh c¸c c«ng viÖc ®ßi hái kh¸c. Tính toán khoa học
  • 84. quan träng cÇn l-u ý lµ: khi hµm ®-îc gäi ®Ó thùc hiÖn Matlab sÏ t¹o mét kh«ng gian nhí ®Þa ph-¬ng. • C¸c lÖnh trong hµm kh«ng ®-îc truy nhËp c¸c biÕn tõ kh«ng gian nhí toµn côc (trong phÇn héi tho¹i), ngo¹i trõ c¸c biÕn ®-îc liÖt kª trong danh s¸ch ®Çu vµo. • Còng chÝnh vì lÏ ®ã, c¸c biÕn ®-îc t¹o ra khi thùc hiÖn hµm sÏ bÞ xãa bá khi viÖc thùc hiÖn hµm kÕt thóc, ngäai trõ c¸c biÕn ®-îc liÖt kª trong danh s¸ch ®Çu ra Tính toán khoa học
  • 85. 1 • VÝ dô 1. Tr-íc hÕt xÐt viÖc t¹o hµm randint sinh ngÉu nhiªn ma trËn nguyªn víi c¸c phÇn tö lµ sè ngÉu nhiªn trong kho¶ng tõ a ®Õn b. function A = randint(m,n,a,b) % RANDINT tạo ma trận nguyên ngẫu nhiên. % randint(m,n) cho mxn ma trận với các thành phần trong khoảng từ 0 đến 9. % rand(m,n,a,b) cho các phần tử từ a đến b. if nargin < 3, a = 0, b = 9; end A = floor((b-a-1)*rand(m,n)) + a+1; Tính toán khoa học
  • 86. 1 • D·y lÖnh nµy cÇn ®-îc ghi vµo tÖp văn b¶n cã tªn randint.m (cã cïng tªn víi tªn hµm). Dßng ®Çu tiªn m« t¶ tªn hµm, c¸c biÕn vµo vµ c¸c biÕn ra; nÕu kh«ng cã dßng m« t¶ nµy thì tÖp sÏ chØ lµ tÖp kÞch b¶n. • Khi ®ã lÖnh Matlab z = randint(4,5), sÏ truyÒn gi¸ trÞ 4 vµ 5 cho c¸c biÕn m vµ n trong hµm vµ gi¸ trÞ cña hµm sÏ ®-îc g¸n cho biÕn z. Do c¸c biÕn trong hµm lµ biÕn ®Þa ph-¬ng, nªn tªn cña chóng lµ ®éc lËp víi c¸c biÕn ®ang sö dông trong m«i tr-êng Matlab. • Chó ý: viÖc sö dông hµm nargin (sè l-îng biÕn vµo - "number of input arguments") cho phÐp ta ®Æt gi¸ trÞ ngÇm ®Þnh cho c¸c biÕn vµo v¾ng mÆt, ë vÝ dô ®ang xÐt lµ hai biÕn a vµ b. • floor(X) rounds the elements of X to the nearest integers towards minus infinity. Tính toán khoa học
  • 87. 2 • Mét hµm còng cã thÓ cã nhiÒu biÕn ®Çu ra. Ta xÐt vÝ dô minh ho¹ sau: • VÝ dô 2. VÝ dô, hµm sau ®©y tr¶ l¹i gi¸ trÞ trung bình (mean) vµ ®é lÖch chuÈn cña vect¬ x, nÕu x lµ vect¬; tr¶ l¹i hai vect¬ chøa gi¸ trÞ trung bình vµ ®é lÖch chuÈn cña tõng vect¬ cét trong ma trËn x: function [mean, stdev] = stat(x) % STAT Mean and standard deviation % For a vector x, stat(x) returns the % mean and standard deviation of x. % For a matrix x, stat(x) returns two row vectors containing, % respectively, the mean and standard deviation of each column. [m n] = size(x); if m == 1 m = n; % handle case of a row vector end mean = sum(x)/m; stdev = sqrt(sum(x.^2)/m - mean.^2); Tính toán khoa học
  • 88. Gi¶ sö ®o¹n ch-¬ng trình trªn ®-îc lưu víi tªn stat.m, khi ®ã lÖnh [xm, xd] = stat(x) sÏ g¸n gi¸ trÞ trung bình vµ ®é lÖch chuÈn cña ma trËn x cho c¸c biÕn xm vµ xd t-¬ng øng. • Ta còng cã thÓ lÊy mét sè ®Çu ra ®èi víi những hµm cã nhiÒu ®Çu ra. VÝ dô, lÖnh xm = stat(x) (kh«ng cã dÊu ngoÆc bäc biÕn xm) sÏ g¸n gi¸ trÞ trung bình cña x cho biÕn xm. Tính toán khoa học
  • 89. Hµm tÝnh -íc chung lín nhÊt cña hai sè nguyªn b»ng thuËt to¸n ¥c¬lit. VÝ dô nµy minh ho¹ viÖc sö dông th«ng b¸o lçi trong thùc hiÖn hµm. • Hµm néi tró cña Matlab rem(a, b) tr¶ l¹i phÇn d- (remainder) cña phÐp chia a cho b. function a = gcd(a,b) a = round(abs(a)); b = round(abs(b)); if a == 0 & b == 0 error('The gcd is not defined when both numbers are zero') else while b ~= 0 r = rem(a,b) a = b; b = r; end end Tính toán khoa học
  • 90. VÝ dô sau ®©y minh ho¹ kh¶ năng t¹o hµm vect¬ ho¸. • VÝ dô 4. Hµm tÝnh gi¸ trÞ f(x) = sin(x2). • C¸c lÖnh sau cÇn ®-îc cÊt giữ trong file văn b¶n fcn.m (Tªn hµm trong Matlab ph¶i trïng víi tªn cña m-file kh«ng cã phÇn më réng): function y = fcn(x) y = sin(x.2); • L-u ý lµ nhê sö dông phÐp to¸n vect¬ hãa . nªn hµm fcn còng ®-îc vect¬ hãa. Tính toán khoa học
  • 91. Víi hµm fcn võa x¸c ®Þnh, ta cã thÓ sö dông hµm fcn t-¬ng tù nh- lµ hµm néi tró sin: >> x = (-pi:2*pi/100:pi)'; >> y = sin(x); >> z = fcn(x); >> plot(x,y,x,z) >> grid • Đå thÞ thu ®-îc như sau Tính toán khoa học
  • 92. sin(x) và sin(x2) Chó ý: • C¸ch sö dông plot ®Ó vÏ ®ång thêi ®å thÞ cña hai (hoÆc nhiÒu h¬n) hµm sè. •LÖnh grid ®· hiÓn thÞ l-íi täa ®é trªn ®å thÞ. Tính toán khoa học
  • 93. Chó ý lµ f(x)=sin(x2) cã nghiÖm trong kho¶ng giữa 1 vµ 2 (chÝnh x¸c nghiÖm nµy lµ ). x  • ThuËt to¸n tæng qu¸t ®Ó tìm nghiÖm cña ph-¬ng trình phi tuyÕn lµ ph-¬ng ph¸p chia ®«i: Ta kh¶o s¸t hµm sè trªn ®o¹n mµ hµm sè thay ®æi dÊu (®o¹n nµy ch¾c ch¾n chøa nghiÖm) vµ chia ®«i liªn tôc ®o¹n chøa nghiÖm cho ®Õn khi ®o¹n nµy lµ rÊt nhá. Tính toán khoa học
  • 94. Hµm bisect cµi ®Æt ph-¬ng ph¸p chia ®«i m« t¶ mét sè kü thuËt lËp trình quan träng trªn Matlab. • Kü thuËt quan träng ®Çu tiªn, mµ thiÕu nã kh«ng thÓ cµi ®Æt thñ tôc chia ®«i, ®ã lµ kh¶ năng truyÒn tªn cña mét hµm nµy cho mét hµm kh¸c. ë ®©y, bisect cÇn biÕt tªn hµm mµ ®èi víi nã ta cÇn tìm nghiÖm. – Tªn hµm ®-îc truyÒn d-íi d¹ng x©u. – Hoặc lµ mçi khi ta cÇn sö dông bisect ®Ó tìm nghiÖm cña mét hµm nµo ®ã thì ta cÇn söa l¹i file bisect.m. Tính toán khoa học
  • 95. Hµm néi tró feval cÇn thiÕt cho viÖc tÝnh gi¸ trÞ hµm mµ tªn cña nã ®-îc chØ ra trong x©u. Nh- vËy, ®o¹n héi tho¹i >> fcn(2) vµ >> feval('fcn',2) lµ t-¬ng ®-¬ng (chó ý lµ dÊu nh¸y ®¬n ' ®-îc dïng ®Ó x¸c ®Þnh x©u). Mét biÕn cã thÓ g¸n cho gi¸ trÞ cña mét x©u: >> str = 'fcn'; >> feval(str,2) Tính toán khoa học
  • 96. Ch-¬ng trình Matlab sau ®©y sö dông c¸c ph-¬ng tiÖn x©u ®Ó truyÒn tªn cña hµm cho bisect. function c = bisect(fn,a,b,tol) % c = bisect('fn',a,b,tol) % Hµm nµy x¸c ®Þnh nghiÖm cña hµm sè trªn ®o¹n % [a,b] víi sai sè tol. Gi¶ thiÕt r»ng t¹i a vµ b hµm cã gi¸ trÞ ®èi dÊu. % TÝnh gi¸ trÞ cña hµm t¹i hai ®Çu mót vµ kiÓm tra xem cã sù thay ®æi cña dÊu hay kh«ng fa = feval(fn,a); fb = feval(fn,b); if fa*fb >= 0 error('Hµm sè ph¶i cã dÊu tr¸i ng-îc t¹i a vµ b') end Tính toán khoa học
  • 97. BiÕn done ®-îc sö dông ®Ó b¸o hiÖu lµ ta tìm ®-îc nghiÖm chÝnh x¸c % kh«ng cÇn chê ®Õn khi ®o¹n chøa nghiÖm ®ñ nhá. done = 0; % Bisect the interval c = (a+b)/2; % Main loop while abs(a-b) > 2*tol & ~done % TÝnh gi¸ trÞ hµm t¹i ®Çu mót fc = feval(fn,c); if fa*fc < 0 % NghiÖm ë bªn tr¸i c b = c; fb = fc; c = (a+b)/2; elseif fc*fb < 0 % NghiÖm ë bªn ph¶i c a = c; fa = fc; c = (a+b)/2; else % Tãm ®-îc nghiÖm done = 1; end end Tính toán khoa học
  • 98. Gi¶ sö r»ng ®o¹n ch-¬ng trình trªn ®-îc cÊt giữ trong file cã tªn bisect.m, ta cã thÓ thùc hiÖn nã nh- sau: >> x = bisect('fcn',1,2,1e-6) x= 1.7725 >> sqrt(pi)-x ans = -4.1087e-07 Tính toán khoa học
  • 99. m - file không chỉ tạo ra mét lÖnh míi trong Matlab mµ cïng víi nã trî gióp hÖ thèng còng tù ®éng më réng. LÖnh help sÏ ®-a ra ®äan chó gi¶i ®Çu tiªn trong m-file: >> help bisect % c = bisect('fn',a,b,tol) % Hµm nµy x¸c ®Þnh nghiÖm cña hµm sè trªn ®o¹n % [a,b] víi sai sè tol. Gi¶ thiÕt r»ng t¹i a vµ b hµm cã gi¸ trÞ ®èi dÊu. % TÝnh gi¸ trÞ cña hµm t¹i hai ®Çu mót vµ kiÓm tra xem cã sù thay ®æi cña dÊu hay kh«ng • NÕu muèn xem néi dung cña c¶ file chøa hµm h·y sö dông lÖnh: type filename trong ®ã filename lµ tªn file cÇn xem néi dung (phÇn më réng ngÇm ®Þnh lµ .m). Tính toán khoa học
  • 100. ma trËn n©ng cao Tính toán khoa học
  • 101. vect¬ riªng • Mét trong những phÐp tÝnh rÊt hay ph¶i thùc hiÖn víi ma trËn ®ã lµ tìm gi¸ trÞ riªng vµ vect¬ riªng víi lÖnh eig. NÕu A lµ ma trËn vu«ng, thì ev = eig(A) sÏ cho ta gi¸ trÞ riªng cña A trong mét vect¬, cßn [V,D] = eig(A) cho ta ph©n tÝch phæ cña A: – V lµ ma trËn mµ c¸c cét cña nã lµ c¸c vect¬ riªng cña A, – D lµ ma trËn ®-êng chÐo víi c¸c phÇn tö trªn ®-êng chÐo lµ c¸c trÞ riªng cña A. – Đ¼ng thøc AV = VD ®-îc thùc hiÖn. – NÕu A lµ chÐo ho¸, thì V lµ chÐo ho¸, cßn nÕu A lµ ®èi xøng thì V lµ trùc giao (nghÜa lµ VTV = I). Tính toán khoa học
  • 102. [1 3 2;4 5 6;7 8 >> eig(A) ans = 15.9743 -0.4871 + 0.5711i -0.4871 - 0.5711i >> [V,D] = eig(A) V = -0.2155 -0.5277 -0.8216 D = 15.9743 0 0 >> A*V-V*D ans = 1.0e-14 * -0.0888 0 0 9]; 0.0683 + 0.7215i -0.3613 - 0.0027i 0.2851 - 0.5129i 0.0683 - 0.7215i -0.3613 + 0.0027i 0.2851 + 0.5129i 0 -0.4871 + 0.5711i 0 0 0 -0.4871 - 0.5711i 0.0777 - 0.1998i -0.0583 + 0.0666i -0.0555 + 0.2387i 0.0777 + 0.1998i -0.0583 - 0.0666i -0.0555 - 0.2387i Tính toán khoa học
  • 103. là ma trận đường chéo >> A=[1 2 3; 0 3 4; 0 0 5] A = 1 2 3 0 3 4 0 0 5 >> [V, D]= V = 1.0000 0 0 D = 1 0 0 eig(A) 0.7071 0.7071 0 0 3 0 0.6163 0.7044 0.3522 0 0 5 Tính toán khoa học
  • 104. là ma trận đối xứng >> A=[5 6 7; 6 7 8; 7 8 9] A = 5 6 7 6 7 8 7 8 9 >> [V, D]= eig(A); V V = 0.7685 0.4082 0.4927 0.0660 -0.8165 0.5736 -0.6365 0.4082 0.6544 >> V*V' ans = 1.0000 -0.0000 0.0000 -0.0000 1.0000 0.0000 0.0000 0.0000 1.0000 Tính toán khoa học
  • 105. nâng cao • Matlab cßn cung cÊp rÊt nhiÒu hµm liªn quan ®Õn xö lý ma trËn. PhÇn lín c¸c hµm nh- vËy liªn quan ®Õn ph©n tÝch ma trËn d-íi d¹ng tÝch. Mét sè phÐp ph©n tÝch hay dïng trong sè c¸c ph©n tÝch nh- vËy lµ: – lu tÝnh ph©n tÝch LU cña ma trËn; – chol tÝnh ph©n tÝch Cholesky cña ma trËn ®èi xøng x¸c ®Þnh d-¬ng; – qr tÝnh ph©n tÝch QR cña ma trËn; – svd tÝnh trÞ chÝnh qui (singular values) hay trÞ chÝnh qui ph©n r· (singular value decomposition) cña ma trËn; – cond, condest, rcond tÝnh hoÆc ®¸nh gi¸ c¸c sè ®iÒu kiÖn cña ma trËn (condition numbers); – norm tÝnh c¸c lo¹i chuÈn (norms) cña ma trËn hay vect¬; Tính toán khoa học
  • 106. ma trËn th-a (Sparse matrix computations) • Matlab cã kh¶ năng cÊt giữ vµ lµm viÖc víi c¸c ma trËn th-a. ĐiÒu nµy gióp phÇn n©ng cao kh¶ năng øng dông cña Matlab vµo viÖc gi¶i quyÕt c¸c vÊn ®Ò cña thùc tÕ. • T¹o ma trËn th-a cã thÓ cã ®«i chót phøc t¹p h¬n, trong khi lµm viÖc víi chóng l¹i ®¬n gi¶n h¬n, bëi vì c¸c phÐp to¸n cã thÓ ¸p dông ®èi víi c¶ ma trËn th-a lÉn ma trËn dµy. Ch¼ng h¹n, to¸n tö chia cã lµm viÖc víi c¶ ma trËn th-a, vì thÕ hÖ th-a cã thÓ gi¶i ®-îc gièng nh- lµ hÖ dµy. • Mét sè hµm néi tró cña Matlab cã thÓ lµm viÖc víi ma trËn th-a nh-ng kh«ng ¸p dông cho ma trËn dµy Tính toán khoa học
  • 107. th-a • NÕu ma trËn A ®-îc cÊt giữ trong d¹ng th«ng th-êng (dµy), thì lÖnh S = sparse(A) t¹o b¶n sao cña A ®-îc cÊt giữ trong d¹ng th-a. VÝ dô: >> A = [0 0 1;1 0 2;0 -3 0] A= 0 0 1 1 0 2 0 -3 0 >> S = sparse(A) S= (2,1) 1 (3,2) -3 (1,3) 1 (2,3) 2 Tính toán khoa học
  • 108. th-a >> whos Name Size Bytes Class A 3x3 72 double array S 3x3 64 sparse array Grand total is 13 elements using 136 bytes • RÊt tiÕc lµ d¹ng nµy cña lÖnh sparse lµ kh«ng cã Ých nhiÒu l¾m, bëi vì ma trËn A th-êng lµ rÊt lín vµ viÖc t¹o tr-íc nã trong d¹ng dµy ®ßi hái rÊt nhiÒu thêi gian. Tính toán khoa học
  • 109. th-a • Matlab cung cÊp mét sè c¸ch nhËp ma trËn th-a tiÖn lîi h¬n. LÖnh S = sparse(m,n) t¹o mn ma trËn toµn sè 0 d-ới d¹ng th-a. Sau ®ã c¸c thµnh phÇn kh¸c kh«ng cña nã sÏ ®-îc bæ sung dÇn dÇn: >> A = sparse(3,2) A= All zero sparse: 3-by-2 Tính toán khoa học
  • 110. th-a • Tiếp theo ta đánh vào các phần tử khác không >> A(1,2)=1; >> A(3,1)=4; >> A(3,2)=-1; >> A A = (3,1) (1,2) (3,2) 4 1 -1 • (Râ rµng c¸ch lµm nµy lµ tiÖn lîi h¬n, do ta kh«ng ph¶i nhËp c¸c phÇn tö 0 cña ma trËn) Tính toán khoa học
  • 111. th-a • Cßn cã nhiÒu kh¶ năng sö dông kh¸c cña lÖnh sparse. H·y sö dông help sparse ®Ó xem chi tiÕt thªm vÒ lÖnh nµy. Tính toán khoa học
  • 112. th-a >> Mét trong những d¹ng ma trËn th-a rÊt phæ biÕn lµ ma trËn d¹ng băng, tøc lµ ma trËn víi c¸c phÇn tö kh¸c 0 chØ n»m trªn mét sè ®-êng chÐo nµo ®ã. C¸c ma trËn nh- vËy cã thÓ t¹o bëi lÖnh spdiags. XÐt ma trËn sau: A=[ 64 -16 0 -16 0 0 0 0 0 -16 0 -16 0 0 0 0 0; 64 -16 0 -16 0 0 0 0; -16 64 0 0 -16 0 0 0; 0 0 64 -16 0 -16 0 0; -16 0 -16 64 -16 0 -16 0; 0 -16 0 -16 64 0 0 -16; 0 0 -16 0 0 64 -16 0; 0 0 0 -16 0 -16 64 -16; 0 0 0 0 -16 0 -16 64] Tính toán khoa học
  • 113. th-a • Đ©y lµ ma trËn kÝch th-íc 99 víi 5 ®-êng chÐo kh¸c kh«ng. Trong c¸ch chØ sè ho¸ cña Matlab, chØ sè cña c¸c ®-êng chÐo kh¸c kh«ng cña A lµ -3, -1, 0, 1, and 3 (®-êng chÐo chÝnh cã chØ sè lµ 0, c¸c ®-êng chÐo trªn nã ®-îc tiÕp tôc ®¸nh sè tăng dÇn b¾t ®Çu tõ 1, c¸c ®-êng chÐo d-íi nã ®-îc tiÕp tôc ®¸nh sè gi¶m dÇn b¾t ®Çu tõ -1). ĐÓ t¹o ma trËn nµy d-íi d¹ng th-a, tr-íc hÕt cÇn t¹o ma trËn kÝch th-íc 95 chøa c¸c phÇn tö kh¸c 0 cña c¸c ®-êng chÐo. TÊt nhiªn, mçi ®-êng chÐo lµ mét vect¬ cét cã kÝch th-íc kh¸c nhau, chØ cã ®-êng chÐo chÝnh cã ®é dµi 9. Tính toán khoa học
  • 114. th-a • ĐÓ tËp hîp tÊt c¶ c¸c ®-êng chÐo trong mét ma trËn, c¸c ®-êng chÐo cã ®é dµi ng¾n h¬n cÇn ®-îc bæ sung thªm c¸c sè 0 ®Ó ®-îc vect¬ cét cã cïng kÝch th-íc víi ®-êng chÐo chÝnh. Qui t¾c bæ sung lµ: Nèi ®u«i ®èi víi c¸c ®-êng chÐo n»m d-íi ®-êng chÐo chÝnh, vµ nèi ®Çu ®èi víi c¸c ®-êng chÐo n»m trªn ®-êng chÐo chÝnh. Nh- vËy ta cÇn t¹o ma trËn: >> B = [ -16 -16 -16 -16 -16 0 -16 -16 -16 -16 -16 0 0 -16 0 -16 0 0 64 0 0 64 -16 0 64 -16 0 64 0 -16 64 -16 -16 64 -16 -16 64 0 -16 64 -16 -16 64 -16 -16]; Tính toán khoa học
  • 115. th-a • Trong ví dụ trên: CÇn l-u ý ®Õn kü thuËt t¹o c¸c dßng cña ma trËn kÝch th-íc lín trªn d·y c¸c dßng. • LÖnh spdiags còng ®ßi hái vect¬ chØ sè cña c¸c ®-êng chÐo: >> d = [-3,-1,0,1,3]; • B©y giê ma trËn cã thÓ t¹o nh- sau: S = spdiags(B,d,9,9); • Hai ®èi sè cuèi cïng cho kÝch th-íc cña ma trËn S. Tính toán khoa học
  • 116. th-a • Cã lÏ ma trËn th-a hay dïng nhÊt lµ ma trËn ®¬n vÞ. Nhí l¹i lµ ma trËn ®¬n vÞ cã thÓ t¹o d-íi d¹ng dµy bëi lÖnh eye. ĐÓ t¹o ma trËn ®¬n vÞ th-a, cã thÓ dïng lÖnh I = speye(n) • Mét lÖnh tiÖn Ých kh¸c lµ spy – LÖnh nµy hiÓn thÞ ®å thÞ cÊu tróc th-a cña ma trËn. VÝ dô, cÊu tróc th-a cña ma trËn S ë trªn cã thÓ hiÓn thÞ nhê ®¸nh lÖnh: >> spy(S) Tính toán khoa học
  • 117. cao Matlab cã thÓ ®-a ra nhiều d¹ng ®å thÞ kh¸c nhau: – – – – – ®-êng cong hai chiÒu (2D curves), mÆt 3 chiÒu (3D surfaces), ®-êng khung cña mÆt 3 chiÒu (contour plots of 3D surfaces), ®-êng cong tham sè 2D vµ 3D (parametric curves in 2D and 3D). ..... Tính toán khoa học
  • 118. thÞ lªn cïng mét cöa sæ • LÖnh subplot t¹o nhiÒu b¶n vÏ trªn cïng mét cöa sæ. ChÝnh x¸c h¬n, subplot(m,n,i) t¹o mn b¶n vÏ, ®-îc xÕp trong m¶ng víi m dßng vµ n cét. LÖnh nµy còng b¾t buéc lÖnh plot tiÕp theo ph¶i chuyÓn ®Õn hÖ to¹ ®é thø i (®Õm theo sè dßng). VÝ dô >> t = (0:.1:2*pi)'; >> subplot(2,2,1) >> plot(t,sin(t)) >> subplot(2,2,2) >> plot(t,cos(t)) >> subplot(2,2,3) >> plot(t,exp(t)) >> subplot(2,2,4) >> plot(t,1./(1+t.^2)) Tính toán khoa học
  • 119. đồ thị Tính toán khoa học
  • 120. plot ®-îc sö dông ®Ó vÏ dữ liÖu trªn mÆt ph¼ng. Cho vect¬ x gåm c¸c hoµnh ®é x1, ..., xn vµ vect¬ y gåm c¸c tung ®é y1,..., yn, lÖnh plot(x,y) sÏ vÏ c¸c ®iÓm tõ (x1, y1) ®Õn (xn, yn). Theo ngÇm ®Þnh c¸c ®iÓm nµy sÏ ®-îc nèi theo thø tù bëi c¸c ®o¹n th¼ng. • Tæng qu¸t c©u lÖnh cã d¹ng sau plot(x1, y1,linestyle1,...,xn,yn,linestylen) trong ®ã linestylei (i=1,2,..., n) lµ x©u hoÆc biÕn x©u chøa kiÓu ®-êng vÏ. Tính toán khoa học
  • 121. lÖnh nµy cho phÐp vÏ c¸c bé dữ liÖu: (x1,y1) víi kiÓu ®-êng vÏ linestyle1, (x2,y2) víi kiÓu ®-êng vÏ linestyle2, ..., (xn,yn) víi kiÓu ®-êng vÏ linestylen trªn cïng mét hệ trục toạ độ. • KiÓu ®-êng vÏ x¸c ®Þnh mµu vÏ, ký tù dïng ®Ó hiÓn thÞ ®iÓm dữ liÖu vµ d¹ng cña ®-êng nèi. KiÓu ®-êng vÏ lµ x©u ®-îc t¹o b»ng c¸ch ghÐp c¸c ký tù tõ c¸c cét sau, mçi cét lÊy kh«ng qu¸ mét ký tù: Tính toán khoa học
  • 122. ®-êng vÏ y yellow m magenta c cyan r red g green b blue w white k black Ký tù hiÓn thÞ . o x + * s d v ^ < > p dÊu chÊm (point) vßng trßn (circle) dÊu x (x-mark) dÊu céng (plus) dÊu sao (star) h×nh vu«ng (square) kim c-¬ng (diamond) tam gi¸c chØ xuèng tam gi¸c chØ lªn tam gi¸c chØ sang tr¸i tam gi¸c chØ sang phải «ng sao 5 c¸nh (pentagram) h «ng sao 6 c¸nh (hexagram) Tính toán khoa học NÐt vÏ : -. -- solid dotted dashdot dashed
  • 123. dô. – LÖnh plot(x,y,'ro:') vÏ ®-êng nèi bëi c¸c chÊm mµu ®á víi ®iÓm dữ liÖu lµ vßng trßn nhá. – LÖnh plot(x,y,'gd') vÏ c¸c ®iÓm dữ liÖu hình d¹ng kim c-¬ng mµu xanh l¸ c©y mµ kh«ng nèi c¸c ®iÓm nµy. – LÖnh plot(x,y,'y-',x,y,'go') vÏ dữ liÖu hai lÇn víi ®-êng nèi liÒn nÐt mµu vµng vµ c¸c ®iÓm dữ liÖu lµ c¸c vßng trßn xanh l¸ c©y. Tính toán khoa học
  • 124. vÏ tø gi¸c víi c¸c ®Ønh (0,0), (1,1), (4,2) vµ (5,-1) ta cã thÓ sö dông c¸c lÖnh sau >> x=[0 1 4 5 0]; >> y=[0 1 2 -1 0]; >> plot(x,y) Tính toán khoa học
  • 125. cã thÓ vÏ gÇn ®óng ®å thÞ cña hµm sè nhê vÏ nhiÒu ®iÓm trªn ®å thÞ cña nã. • VÝ dô: VÏ ®å thÞ cña hµm y=x3 trªn ®o¹n [-2,2], – Tr-íc hÕt x¸c ®Þnh vect¬ lưới chia đoạn [-2, 2] với ®é dµi b-íc chia lµ 0.05 >> x=-2:.05:2; – TiÕp ®Õn tÝnh vect¬ y cã kÝch th-íc gièng x víi c¸c thµnh phÇn lµ luü thõa bËc ba cña c¸c thµnh phÇn cña vect¬ x >> y=x.^3; – Sö dông lÖnh plot(x, y) ®Ó vÏ ®å thÞ cña hµm sè: >> plot(x,y) – ĐÆt tªn cho hình vÏ nhê ®¸nh lÖnh >> title('Graph of f(x)=x^3') Tính toán khoa học
  • 126. sè y = x3 Tính toán khoa học
  • 127. tham số • ViÖc vÏ c¸c ®-êng cong tham sè cã thÓ thùc hiÖn mét c¸ch t-¬ng tù. VÝ dụ: ĐÓ vÏ ®-êng r(t) = (2tcost/(t+1), 2tsint/(t+1)) víi t  [0,4], tr-íc hÕt ta x¸c ®Þnh vect¬ lưới chia t: >> t=0:.1:4*pi; TiÕp ®Õn tÝnh c¸c to¹ ®é x, y vµ vÏ ®-êng cong: >> x=2*t.*cos(t)./(t+1); >> y=2*t.*sin(t)./(t+1); >> plot(x,y); >> title('(2tcost/(t+1),2tsint/(t+1))') Tính toán khoa học
  • 128. tham số • MATLAB tù ®éng phãng c¸c trôc ®Ó ®å thÞ lÊp ®Çy mµn hình. ĐÓ cã ®-îc tû lÖ chÝnh x¸c h·y ®¸nh lÖnh axis equal. >> axis equal Tính toán khoa học
  • 129. vÏ nhiÒu ®-êng trªn cïng mét hình vÏ, h·y sö dông lÖnh hold on. • VÝ dô: VÏ hai vßng trßn x2 + y2 = 4 vµ (x-1)2 + (y-1)2 = 1. • Ph-¬ng trình tham sè cña chóng lµ r1(t)=(2cost,2sint) vµ r2(t)=(1+cost,1+sint) víi t  [0,2]. Tính toán khoa học
  • 130. plot(2*cos(t),2*sin(t)) >> hold on >> plot(1+cos(t),1+sin(t)) >> axis equal >> title('The circles x^2+y^2=4 and (x-1)^2 +(y-1)^2=1') Tính toán khoa học
  • 131. 3D • Trong kh«ng gian 3 chiÒu lÖnh t-¬ng tù nhplot lµ plot3. • VÝ dô. ĐÓ vÏ ®-êng tham sè r(t)=(cos(t),sin(t),t) víi t  [0,8] ta thùc hiÖn c¸c lÖnh sau. >> t=0:.1:8*pi; >> plot3(cos(t),sin(t),t) >> title('(cos t,sin t,t)') Tính toán khoa học
  • 132. 3D Tính toán khoa học
  • 133. trong toạ độ cực • VÝ dô. ĐÓ vÏ ®-êng trong to¹ ®é cùc =2, víi 05 ta cã thÓ ®¸nh c¸c lÖnh sau >>theta = 0:0.2:5*pi; >>rho=theta.^2; >>polar(theta,rho,'hb') Tính toán khoa học
  • 134. trong toạ độ cực Tính toán khoa học
  • 135. vÏ ®å thÞ cña hµm sè f(x,y) trªn miÒn hình chữ nhËt R = [a,b]×[c,d] = {(x,y) | a x  b; c  y  d}, tr-íc hÕt ta cÇn t¹o l-íi ®iÓm trong miÒn kh¶o s¸t nhê hµm meshgrid: [X,Y] = meshgrid(x,y) • tạo lưới chia hình chữ nhật được mô tả bởi vectơ x, y trong hai mảng X, Y. Các dòng trong X là các bản sao của vectơ x, các cột trong Y là các bản sao của vectơ y Tính toán khoa học
  • 136. dô, ®Ó chia l-íi miÒn chữ nhËt [0,4]  [0,3] thµnh c¸c l-íi chữ nhËt con kÝch th-íc réng 1 cao 0.5, tr-íc hÕt ta t¹o vect¬ x vµ y x¸c ®Þnh phÐp chia l-íi. >> x=0:4; >> y=0:.5:3; • TiÕp ®Õn dïng meshgrid ®Ó x¸c ®Þnh c¸c ®iÓm trªn l-íi. >> [X,Y]=meshgrid(x,y) Tính toán khoa học
  • 137. sö ta cÇn vÏ ®å thÞ cña hµm sè f(x,y)=3x - 2y. • Khi ®ã ta cÇn tÝnh ma trËn Z gåm c¸c to¹ ®é theo trôc z. >> Z=3*X-2*Y • Cuèi cïng sö dông lÖnh surf ®Ó vÏ mÆt. >> surf(X,Y,Z) >> title('Graph of f(x,y)=3x-2y') Tính toán khoa học
  • 138. khoa học
  • 139. theo ta xÐt viÖc vÏ ®å thÞ cña hµm: f(x,y)=x2y - 2y trªn miÒn [-2,2]  [-1,1]. • Ta sö dông l-íi vu«ng víi ®é dµi b-íc chia 0.1: >> [X,Y]=meshgrid(-2:.1:2,-1:.1:1); • Sö dông phÐp to¸n vect¬ ho¸ ®Ó x¸c ®Þnh Z. >> Z=(X.^2).*Y-2*Y; • Cuèi cïng ta vÏ mÆt nhê lÖnh. >> surf(X,Y,Z) >> title('Graph of f(x,y)=x^2y-2y') Tính toán khoa học
  • 140. khoa học
  • 141. trong những khã khăn khi vÏ mÆt lµ ph¶i ®èi mÆt víi phÐp chia cho 0. Ch¼ng h¹n, ta muèn vÏ ®å thÞ cña hµm sè f ( x, y )  xy x y 2 2 • trªn l-íi vu«ng [-1, 1]  [-1, 1]. Tính toán khoa học
  • 142. dụng các lệnh >> [X,Y]=meshgrid(-1:.1:1); >> Z=X.*Y./sqrt(X.^2+Y.^2); Warning: Divide by zero. • Lỗi do (0,0) là điểm thuộc lưới chia. • NÕu ta cø vÏ mÆt thì ®iÓm cña l-íi t¹i (0,0) sÏ khuyÕt Tính toán khoa học
  • 143. tho¸t khái tình huèng nµy mét c¸ch lµm ®¬n gi¶n lµ h·y x¸c ®Þnh l-íi sao cho ®iÓm (0,0) kh«ng thuéc l-íi ®iÓm chia. • Ch¼ng h¹n, ta cã thÓ tiÕn hµnh nh- sau >> [X,Y]=meshgrid(-.99:.1:1); >> Z=X.*Y./sqrt(X.^2+Y.^2); >> surf(X,Y,Z) >> title('Graph of f(x,y)=xy/surd(x^2+y^2)') >> axis equal Tính toán khoa học
  • 144. khoa học
  • 145. dô. VÏ z = sin(r)/r • víi r  x  y , 8  x  8;  8  y  8. 2 2 x = -8:0.5:8; y = -8:0.5:8; [X,Y]=meshgrid(x,y); R=sqrt(X.^2+Y.^2)+eps; Z=sin(R)./R; mesh(X,Y,Z) Tính toán khoa học
  • 146. khoa học
  • 147. kh¸c nhau giữa hai lÖnh vÏ surf vµ mesh lµ: surf t« mµu bÒ mÆt, cßn mesh thì kh«ng. • ViÖc vÏ mÆt tham sè ®-îc tiÕn hµnh mét c¸ch t-¬ng tù. Cho ph-¬ng trình tham sè r(u,v)=(x(u,v),y(u,v),z(u,v)) cña mÆt, trong ®ã miÒn biÕn thiªn cña (u,v) lµ hình chữ nhËt, tr-íc hÕt ta t¹o l-íi theo c¸c tham sè u vµ v, sau ®ã x¸c ®Þnh c¸c to¹ ®é x, y vµ z theo l-íi nµy sö dông ph-¬ng trình tham sè. Tính toán khoa học
  • 148. dô. XÐt mÆt cÇu b¸n kÝnh t©m t¹i gèc to¹ ®é cña kh«ng gian R3 cã ph-¬ng trình tham sè r ( , )  (  sin  cos  , sin  sin  ,  cos  ); 0     ; 0    2 • Gi¶ sö ta cÇn vÏ mÆt cÇu ®¬n vÞ. • Tr-íc hÕt ta t¹o l-íi theo c¸c tham sè  vµ . >> phi=0:pi/20:pi; >> theta=0:pi/10:2*pi; >> [Phi,Theta]=meshgrid(phi,theta); Tính toán khoa học
  • 149. theo ta sö dông ph-¬ng trình tham sè víi r = 1 ®Ó tÝnh c¸c to¹ ®é x, y vµ z >> X=sin(Phi).*cos(Theta); >> Y=sin(Phi).*sin(Theta); >> Z=cos(Phi); • Cuèi cïng ta vÏ mÆt vµ phãng trôc sao cho thu ®-îc hình ¶nh tr«ng gièng mÆt cÇu h¬n. >> surf(X,Y,Z) >> axis equal >> title('Unit sphere in {bf R}^3') Tính toán khoa học
  • 150. khoa học
  • 151. Matlab • Đa thức bậc n P= anxn +an-1xn-1+…+a1x+a0 • Biểu diễn bằng vector hàng n+1 phần tử – Sắp xếp hệ số từ bậc cao nhất đến bậc 0 – Ví dụ p=3x4 + x2 -3x+5 • >>p=[3 0 1 -3 5] • p= 3 0 1 -3 5 Tính toán khoa học
  • 152. với đa thức Tính toán khoa học
  • 153. với đa thức • Ví dụ 1: >> r=[1 3]; >> p=poly(r) p=1–4 3 >>polyval(p,[1 3 5]) ans = 0 0 8 • Ví dụ 2: x 4  3x  14 ( x 4  16  3x  2)  2 x 4 x2  4 1 2  x2  4   x2 x2 k(x)=x2 +4 r=[1 2] p=[-2 2] >> printsys(r,p,’x’) num/den = x+3 ----x^2 - 4 x + 3 Tính toán khoa học
  • 154. với đa thức Ví dụ 3: Tính toán khoa học
  • 155. toán khoa học
  • 156. biểu thức chữ • Tính toán biểu thức chữ gồm 3 bước – Khai báo biến chữ – Nhập hàm chữ – Dùng các hàm chuẩn để tính toán hàm chữ • Khai báo biến chữ: có 2 cách – Khai báo 1 hoặc nhiều biến cùng lúc syms bien_1 bien_2 … bien_n – Khai báo từng biến • tenbien= sym(‘tenbien’) Tính toán khoa học
  • 157. biểu thức chữ • Nhập hàm chữ – Nhập sau khai báo syms hoặc sym – Nhập đồng thời với khai báo sym • Tenham=sym(‘bieu thuc chu’); • Ví dụ: nhập hàm x2  12x  4 Tính toán khoa học
  • 158. biểu thức chữ • Các hàm xử lý hàm chữ chứa trong thư mục ToolboxesSymbolic Math Tính toán khoa học
  • 159. biểu thức chữ Tính toán khoa học
  • 160. biểu thức chữ • Ví dụ: – – – – – cho hàm y = x2 + 2x +3 Tìm đạo hàm bậc 1 và bậc 2 của y Tìm giới hạn y/x khi x tiến tới  Tính tích phân hàm y trong đoạn [1, 3] Tìm nghiệm của phương trình y = 0 Tính toán khoa học
  • 161. biểu thức chữ – – – – syms x; y = x^2+2*x+3; % y=sym(‘x^2+2*x+3’); Dy=diff(y) % đạo hàm bậc nhất • Dy =2 *x +2 – D2y=diff(y,2) % đạo hàm bậc 2 • D2y = 2 – B=limit(y/x,x,inf,’left’) % tìm giới hạn trái • B = inf Tính toán khoa học
  • 162. biểu thức chữ – c = int(y,1,3) % tích phân xác định • C =68/3 – r= solve(y) % tìm nghiệm r= -1+i*2^(1/2) -1-i*2^(1/2) – Ngoài ra có thể tìm nghiệm của PT trên bằng nhiều cách • r = solve (‘x^2+2*x+3’) • r = roots([1 2 3]) Tính toán khoa học
  • 163. Vào dữ liệu từ bàn phím – Các lệnh liên quan đến nhập dữ liệu từ bàn phím: input, keyboard, menu và pause. • Lệnh input: Lệnh này đưa ra thông báo nhắc người sử dụng nhập dữ liệu và nhận dữ liệu đánh từ bàn phím. Lệnh có dạng R = input(string) trong đó R là tên biến, string là xâu ký tự chứa thông báo nhắc người sử dụng biết về dữ liệu cần nạp. Dữ liệu có thể là biểu thức bất kỳ. Nếu người sử dụng ấn Enter ngay thì R sẽ là ma trận rỗng. Tính toán khoa học
  • 164. từ bàn phím • Ví dụ: >> m=input('Nhap so dong cua ma tran: ') Nhap so dong cua ma tran: 3 m = 3 >> n = input('Hay nhap so cot cua ma tran n =') Hay nhap so cot cua ma tran n =5 n = 5 Tính toán khoa học
  • 165. từ bàn phím • Ví dụ >> a =input('Hay nhap cac phan tu cua ma tran a theo khuon dang:n [Cacphan tu dong 1 ;n ... n Cac phan tu dong m] : nn') Hay nhap cac phan tu cua ma tran a theo khuon dang: [Cacphan tu dong 1 ; ... Cac phan tu dong m] : [1 2 3 4 5; 6 7 8 9 10; 11 12 13 14 15] Tính toán khoa học
  • 166. Lệnh keyboard – Khi lệnh này được đặt trong m – file thì nó ngắt việc thực hiện chương trình. – Màn hình xuất hiện dấu nhắc >>K. – Người sử dụng có thể xem hoặc biến đổi giá trị các biến bằng các lệnh của Matlab. – Chấm dứt chế độ dùng Enter. – Tiện lợi cho việc gỡ rối (debug) chương trình. Tính toán khoa học
  • 167. Lệnh menu: Cho phép tạo bảng lựa chọn. Lệnh có dạng sau. CHOICE = menu(HEADER,ITEM1,..., ITEMn) – Lệnh sẽ hiển thị tiêu đề của bảng chọn chứa trong xâu HEADER, tiếp đến là dãy các lựa chọn trong các xâu: ITEM1, …, ITEMn. – Chỉ số của lựa chọn sẽ được trả lại cho biến CHOICE. • Trong màn hình đồ họa Matlab sẽ hiển thị bảng lựa chọn trong một cửa sổ MENU với các phím ấn chọn. Tính toán khoa học
  • 168. Ví dụ: >> CHOICE = menu('Hay chon cach vao du lieu: ','Keyboard', 'File ','Random ' ) • Trên màn hình đồ họa hiển thị bảng lựa chọn: • Người sử dụng chọn bằng việc click chuột vào lựa chọn cần thiết. Tính toán khoa học
  • 169. Cách sử dụng khác của menu CHOICE = menu(HEADER, ITEMLIST) trong đó ITEMLIST là mảng xâu. • Ví dụ: >> ItemList={'Input','Run','Output'}; >> HEADER='Select:'; >> CHOICE = MENU(HEADER, ItemList) CHOICE = 1 Tính toán khoa học
  • 170. LÖnh pause: Sö dông ®Ó chê tr¶ lêi cña ng-êi sö dông. pause(n) trong ®ã n cã thÓ lµ sè kh«ng nguyªn. PAUSE(n) sÏ dõng n seconds råi míi tiÕp tôc. • LÖnh pause kh«ng cã tham sè sÏ dõng cho ®Õn khi ng-êi sö dông gâ mét phÝm. • LÖnh pause off chØ thÞ r»ng tÊt c¶ c¸c lÖnh PAUSE or PAUSE(n) ®i sau nã sÏ kh«ng cã t¸c dông. • LÖnh pause on chØ thÞ r»ng c¸c lÖnh PAUSE sau nã sÏ cã t¸c dông ng¾t. Tính toán khoa học
  • 171. hình • Đưa ra màn hình nội dung mảng – Gõ tên biến không có ; cuối lệnh • Ví dụ: >> x = [1 2 3]; >> y=[2; 3; 4]; >> x*y ans = 20 Tính toán khoa học
  • 172. hình • Lệnh disp: – Dùng để hiển thị nội dung của biến ra màn hìnhvà không hiển thị tên biến – Làm việc dù có ; hay không – Lệnh có dạng disp(X) với X là biến hoặc biểu thức cần hiển thị. • Ví dụ: >> B = [1 2 3; 4 5 6; 7 8 9] >> disp(B^2); 30 36 42 66 81 96 102 126 150 >> disp(B.^2); 1 4 9 16 25 36 49 64 81 Tính toán khoa học
  • 173. hình • Ví dụ: Lập bảng tính giá trị hàm sin clc n = input('Give number of point n = '); x = linspace(0,1,n); y = sin(2*pi*x); disp(' ') disp('! k ! x(k) ! sin(x(k)) !') disp('-----') for k=1:n degrees = (k-1)*360/(n-1); disp(sprintf('! %2.0f ! %3.0f ! %6.3f !',k,degrees,y(k))); end disp( ' '); disp('x(k) is given in degrees.') disp(sprintf('One Degree = %5.3e Radians',pi/180)) Tính toán khoa học
  • 174. hình • Kết quả thực hiện có thể có dạng: Give number of point n = 10 ! k ! x(k) ! sin(x(k)) ! ----! 1 ! 0 ! 0.000 ! ! 2 ! 40 ! 0.643 ! ! 3 ! 80 ! 0.985 ! ! 4 ! 120 ! 0.866 ! ! 5 ! 160 ! 0.342 ! ! 6 ! 200 ! -0.342 ! ! 7 ! 240 ! -0.866 ! ! 8 ! 280 ! -0.985 ! ! 9 ! 320 ! -0.643 ! ! 10 ! 360 ! -0.000 ! x(k) is given in degrees. One Degree = 1.745e-002 Radians Tính toán khoa học
  • 175. hình • Lệnh fprintf • Lệnh có dạng fprintf(dialog_format, danh_sach_bien) trong đó dialog_format là biến (hằng) xâu ký tự thông báo và các ký tự định khuôn dạng dữ liệu ra. Tính toán khoa học
  • 176. hình • Ví dụ: >> A = rand(3,3) A = 0.1389 0.6038 0.0153 0.2028 0.2722 0.7468 0.1987 0.1988 0.4451 >> fprintf('Length of matrix A: %i%i',length(A)) Length of matrix A: 3 >> fprintf('Square of A:n %i%i%in%i%i%in%i%i%in',A^2) Square of A: 1.447541e-0012.317550e-0011.563636e-001 2.512430e-0013.449860e-0012.625931e-001 4.598234e-0015.387547e-0013.496177e-001 Tính toán khoa học
  • 177. file văn bản • Matlab cung cấp các lệnh cho phép làm việc với các file • Ở đây chỉ hạn chế trình bày các thao tác với file văn bản • Các lệnh chính liên quan đến làm việc với file văn bản của Matlab là: – fopen, fclose – frewind, fread, fwrite – fscanf, fprintf.. Tính toán khoa học
  • 178. file văn bản • Lệnh fopen. Dùng để mở file fileID = fopen(FILENAME, PERMISSION) – Lệnh này mở file văn bản có tên cho bởi FILENAME (hằng xâu ký tự hoặc biến xâu) – Chế độ làm việc được chỉ ra bởi PERMISSION. – PERMISSION có thể là: • ‘rt’ mở file để đọc • ‘wt’ mở file để ghi (nếu chưa có file sẽ tạo ra file mới có tên FILENAME) • ‘at’ mở file nối đuôi (tạo file mới có tên FILENAME nếu chưa có) • ‘rt+’ mở file để đọc và ghi (không tạo file mới) – Biến nhận dạng fileID nhận giá trị nguyên và ta sẽ sử dụng nó để thâm nhập vào file. Tính toán khoa học
  • 179. file văn bản • Trong trường hợp muốn kiểm tra lỗi mở file có thể sử dụng lệnh [FID, MESSAGE] = fopen(FILENAME,PERMISSION) nếu gặp lỗi mở file biến MESSAGE sẽ chứa thông báo lỗi. Tính toán khoa học
  • 180. file văn bản • Ví dụ: >> [fileID, MESSAGE] = fopen('ETU.txt','rt'); >> fileID fileID = -1 >> MESSAGE MESSAGE = No such file or directory Tính toán khoa học
  • 181. file văn bản • Lệnh đóng file fclose: Đóng file làm việc. ST = fclose(FID) – Lệnh này sẽ đóng file ứng với biến nhận dạng FID – fclose trả lại biến ST giá trị 0 nếu nó hoàn thành việc đóng file và -1 nếu gặp lỗi. – Lệnh ST=fclose(‘all’) đóng tất cả các file đang mở ngoại trừ 0, 1, 2. • Lệnh frewind. frewind(FID) đặt con trỏ file cua FID vào đầu file. Tính toán khoa học
  • 182. file văn bản • Lệnh fscanf: Đọc dữ liệu vào từ file [A, COUNT] = fscanf(FID, FORMAT, SIZE) ě Lệnh này đọc dữ liệu từ file tương ứng với FID ě Chuyển đổi dữ liệu về khuôn dạng được xác định bởi biến xâu FORMAT ě Gán giá trị cho mảng A ě COUNT là biến ra tùy chọn dùng để chứa số lượng phần tử đọc được. ě SIZE là biến tùy chọn chỉ giới hạn số phần tử được đọc vào từ file, nếu vắng mặt thì toàn bộ file được xét. Các giá trị có thể có của biến là: ě N : đọc không quá N phần tử từ file vào vector cột ě Inf : đọc không quá kết thúc file ě [M, N] : đọc không quá M*N phần tử và đưa vào ma trận kích thước không quá MxN theo từng cột, N có thể là inf nhưng M thì phải là hữu hạn. Tính toán khoa học
  • 183. file văn bản • Nếu ma trận A là kết quả của việc chuyển khuôn dạng ký tự và biến SIZE không có dạng [M, N] thì vector dòng sẽ được trả lại. • FORMAT là biến chứa các ký tự chuyển đổi khuôn dạng của ngôn ngữ C. • Các ký tự định khuôn dạng bao gồm: %, các ký hiệu thay thế, độ dài trường, các ký tự chuyển đổi khuôn dạng: d, i, o, u, x, e, f, g, s, c và […] (liệt kê tập hợp). • Nếu %s được sử dụng thì khi đọc một phần tử có thể dẫn đến phải sử dụng một loạt các thành phần của ma trận, mỗi thành phần giữ một ký tự. • Hãy sử dụng %c để đọc ký tự trắng (space) và khuôn dạng %s bỏ qua các ký tự trắng. Tính toán khoa học
  • 184. file văn bản • Nếu chỉ thị định dạng gồm cả số lẫn ký tự thì ma trận kết quả sẽ là ma trận số và mỗi ký tự sẽ được chuyển thành số bằng giá trị mã ASCII của nó. • fscanf khác với lệnh này trong C ở chỗ nó là lệnh vector hóa trả lại đối số là ma trận. • Biến xâu định dạng sẽ được sử dụng lặp lại cho đến khi gặp kết thúc file hoặc đọc đủ số lượng phần tử chỉ ra bởi SIZE. Tính toán khoa học
  • 185. file văn bản • Ví dụ: • Lệnh S = fscanf(fid,'%s') đọc (và trả lại) một xâu. • Lệnh A = fscanf(fid,'%5d') đọc các số nguyên có 5 chữ số thập phân. Tính toán khoa học
  • 186. file văn bản • Ví dụ: Giả sử có file văn bản với tên “kq” chứa xâu “Day la ket qua dua ra”. Khi đó ta có thể đọc dữ liệu vào như sau: >> fid=fopen('kq','rt') fid = 3 >> x = fscanf(fid,'%s') x = Daylaketquaduara >> frewind(fid) >> x = fscanf(fid,'%s%c') x = Day la ket qua dua ra Tính toán khoa học
  • 187. file văn bản • Ví dụ: Giả sử file văn bản Matrix.txt chứa hai dòng 1 2 3 4 5 6 7 8 9 10 • Hãy theo dõi kết quả làm việc của các lệnh sau để thấy tác động của lệnh fscanf >> fopen('matrix.txt','rt') ans = 4 >> A=fscanf(4,'%i',[2,5]) A = 1 3 5 7 9 2 4 6 8 10 Tính toán khoa học
  • 188. file văn bản >> frewind(4); >> B = fscanf(4,'%i',[5,2]) B = 1 6 2 7 3 8 4 9 5 10 >> frewind(4); >> C = fscanf(4,'%i',6) C = 1 2 3 4 5 6 Tính toán khoa học
  • 189. file văn bản • Lệnh fprint : ghi dữ liệu theo khuôn dạng ra file. COUNT = FPRINTF(FID,FORMAT,A,...) • Lệnh này sẽ định dạng các thành phần của ma trận A (và các biến tiếp theo trong danh sách) theo khuôn dạng được xác định bởi biến xâu format, và ghi ra file tương ứng với biến nhận dạng FID. • Biến: – COUNT đếm số byte dữ liệu được ghi ra. – FID là số nguyên nhận dạng tên file thu được từ lệnh fopen. Có thể dùng số 1 nếu sử dụng thiết bị ra chuẩn (màn hình). Nếu lệnh này không có FID thì mặc định đưa kết quả ra màn hình. – FORMAT là biến xâu chứa các ký tự mô tả định dạng dữ liệu giống như trong ngôn ngữ C – Các ký tự n, r, t, b, f có thể dùng để tạo linefeed, carriage return, tab, backspace, và formfeed character tương ứng. – Sử dụng để tạo dấu và %% để tạo ký tự %. Tính toán khoa học
  • 190. file văn bản • Ví dụ: x = 0:.1:1; y = [x; exp(x)]; fid = fopen('exp.txt','w'); fprintf(fid,'%6.2f %12.8fr',y); fclose(fid); Tạo ra file văn bản có tên ‘exp.txt’ chứa bảng giá trị của hàm mũ. 0.00 1.00000000 0.10 0.20 0.30 0.40 0.50 . . . 1.10517092 1.22140276 1.34985881 1.49182470 1.64872127 Tính toán khoa học
  • 191. ĐỀ KHÁC • Giải các bài toán phi tuyến trong Matlab – Ngoài các hàm cho phép thực hiện các phép tính đại số tuyến tính, Matlab còn cung cấp rất nhiều hàm cho phép giải quyết nhiều vấn đề tính toán khác như Tính tích phân số, Bài toán điều kiện đầu của phương trình vi phân, Tìm nghiệm, Tối ưu hóa… – Trong “Toolboxes” còn cung cấp hàng loạt hàm cho các mục đích sử dụng khác nhau như để xấp xỉ spline, xư lý tín hiệu số (signal processing), tối ưu hóa… • Có thể xem chi tiết về các lệnh sau đây nhờ sử dụng lệnh help. – quad, quad8 TÝnh tÝch ph©n sè; – ode23, ode45 ph-¬ng ph¸p thÝch nghi gi¶i bµi to¸n ®iÒu kiÖn ®Çu trong ph-¬ng trình vi ph©n th-êng; – fzero T×m nghiÖm cña ph-¬ng trình phi tuyÕn f(x) = 0 (mét biÕn); – fmin Cùc tiÓu ho¸ hµm mét biÕn; – fmins Cùc tiÓu ho¸ hµm nhiÒu biÕn; – spline t¹o c¸c spline néi suy bËc ba cho d÷ liÖu cho tr-íc. Tính toán khoa học
  • 192. ĐỀ KHÁC • Tính thời gian thực hiện – Có thể tính thời gin thực hiện chương trình trên Matlab sử dụng lệnh tic bắt đầu đồng hồ đếm thời gian và toc dừng đồng hồ đếm thời gian và hiển thị thời gian đếm được tính bằng giây. • Ví dụ >> A = rand(900,900); >> tic; B = inv(A); toc; elapsed_time = 4.4260 Tính toán khoa học
  • 193. ĐỀ KHÁC • Mét lÖnh t-¬ng tù còng cã thÓ sö dông ®Ó tÝnh thêi gian, ®ã lµ lÖnh cputime. LÖnh nµy tr¶ l¹i thêi gian tÝnh b»ng gi©y kÓ tõ lóc Matlab ®-îc kÝch ho¹t vµo sö dông. • VÝ dô: >> B=rand(900,900); >> t = cputime; C=inv(B); fprintf('Thoi gian tinh: %d seconds',cputime-t) Thoi gian tinh: 4.497000e+000 seconds Tính toán khoa học
  • 194. ĐỀ KHÁC • Hiệu quả của chương trình viết trên Matlab – Các hàm người sử dụng tạo ra trong Matlab chỉ được thông dịch chứ không biên dịch. Tức là khi m – file được thực hiện, mỗi lệnh trong nó sẽ được đọc vào và được thực hiện chứ không phải là một chương trình được dịch ra ngôn ngữ máy. Chính vì điều đó các chương trình Matlab sẽ chạy chậm hơn nhiều so với các chương trình viết trên các ngôn ngữ lập trình cấp cao khác, chẳng hạn C hay Fortran. – Để tận dụng được Matlab tốt hơn, hãy cố gắng sử dụng các hàm nội trú cũng như các phép toán của Matlab mỗi khi có thể (bởi vì, lúc đó đoạn mã biên dịch được thực hiện thay cho thông dịch). Tính toán khoa học
  • 195. ĐỀ KHÁC • Ví dụ hai dãy lệnh sau đây cho cùng một kết quả >> tic; >> t = (0:.0000001:1)'; >> y=sin(t); >> toc elapsed_time = 0.0400 vµ >> tic >> t = (0:.0000001:1)'; >> for i=1:length(t) y(i) = sin(t(i)); end >> toc elapsed_time = 0.8010 • Tuy nhiên đoạn lệnh dưới đòi hỏi thời gian nhiều gấp bội đoạn lệnh trên. Tính toán khoa học