MatLab v.5 Cơ sở

pdf 220 trang ngocly 2170
Bạn đang xem 20 trang mẫu của tài liệu "MatLab v.5 Cơ sở", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfmatlab_v_5_co_so.pdf

Nội dung text: MatLab v.5 Cơ sở

  1. www.vietsupport.com -visit- www.dientuvietnam.net
  2. Mục lục Lời nói đầu i Phần I Cơ sở về Matlab Ch−ơng I. Phần cơ sở về Matlab 1 1.1 Khả năng của Matlab 1 1.2 Hoạt động của Matlab 3 1.2.1Các phím chuyên dụng vμ các lệnh htông dụng của hệ thống 3 1.3. biến vμ các thao tác của các biến 4 1.3.1 Biến trong Matlab 4 1.3.2 Độ lớn của biến 6 1.3.3 Một số biến đ−ợc định nghĩa 6 1.3.4 Số phức 7 1.4 Sơ l−ợc về đồ hoạ trong Matlab 9 1.4.1 Vẽ trong cửa sổ đồ hoạ của Matlab 9 1.4.2 In ấn trên mμn hình đồ hoạ 10 1.4.3 Một số ví dụ mô tả đồ hoạ 11 1.5 Các hμm âm thanh trong Matlab 13 Ch−ơng II: Ma trận vμ các phép toán cho ma trận 14 2.1 Vector - Đại l−ợng vo h−ớng vμ ma trận 14 2.1.1Cách nhập giá trị của ma trận hay các đại l−ợngvô hứng 14 2.1.2Hiển thị ma trận 18 2.2 Các ma trận đặc biệt 19 2.2.1 Ma trận ma ph−ơng (magic) 19 2.2.2 Ma trận 0 19 2.2.3 Ma trận 1 20 2.2.4 Ma trận đ−ờng chéo đặc biệt( Indentity) 20 2.2.5 Ma trận đ−ờng chéo mở rộng(eye(m,n) 20 2.2.6 Ma trận Pascal 21 2.2.7 Ma trận đặc biệt khác 21 2.3 Các phép toán vô h−ớng 22 2.3.1 Biểu thức số học 22 2.3.2 Thứ tự −u tiên của các toán tử 22 2.3.3 Các phép toán đối với Vector 23 209
  3. 23 2.4 Các phép toán đối với ma trận 25 2.4.1 Ma trận chuyển vị 25 2.4.2 Tích vô h−ớng của hai ma trận cùng cỡ 26 2.4.3 Nhân ma trân 26 2.4.4 Các thao tác trên ma trận 28 Ch−ơng III: Lập trình trong Matlab 31 3.1 Các phần tử cơ bản của ch−ơng trình 31 3.1.1 Giới hạn của các giá trị tính toán 32 3.1.2 Các ký tự đặc biệt 32 3.1.3 Các giá trị đặc biệt 33 3.1.4 Các biến String 35 3.2 Các hμm toán học 35 3.2.1 Các hμm đại số cơ bản 36 3.2.2 Các hμm l−ợng giác cơ bản 37 3.2.3 Các hμm Hyperbolic 3.3 Các dạng File đ−ợc sử dụng trong Matlab 37 3.3.1 Script file (M-file) 37 3.3.2 Hμm vμ tạo hμm trong Matlab 38 3.3.3 File dữ liệu 40 3.4 Các biểu thức quan hệ vμ Logic 41 3.4.1 Các phép toán quan hệ 41 3.4.2 Các phép toán Logic 41 3.4.3 Các phép toán quan hệ vμ Logic 42 3.5 Các cấu trúc câu lệnh điều khiển 43 3.5.1 Lệnh IF đơn 43 3.5.2 Lệnh IF lồng nhau 43 3.5.3 Lệnh ELSE 44 3.5.4 Lệnh ELSE IF 44 3.5.5 Cú pháp câu điều kiện vμ Break 46 3.6 Cấu trúc vòng lặp 46 3.6.1 Vòng lặp FOR 46 3.6.2 Vòng lặp While 48 Ch−ơng IV: Đồ hoạ hai chiều trong Matlab 50 4.1 Các phép biến đổi đồ hoạ 50 4.1.1 Quan hệ các trục toạ đồ trên mặt phẳng 50 4.1.2 Nghịch đảo ma trận 51 210
  4. 4.1.3 Góc Euler 53 4.2 Phép biến đổi AFFINE trong không gian 2D 55 4.2.1 Toạ độ thuần nhất 55 4.2.2 Phép chuyển dịch 57 4.2.3 Phép quay 58 4.2.4 Phép tỉ lệ 59 4.3 Các hμm chuẩn để biễu diễn đồ hoạ hai chiều 60 4.3.1 Các bộ lệnh vẽ 61 4.3.2 Các hệ toạ độ trong mặt phẳng 67 4.3.3 Mặt phẳng đồ hoạ cho số phức 69 4.3.4 Lệnh kiểm soát 71 4.3.5 Các thao tác vμ kiểm soát trên mμn hình máy tính 71 4.3.6 Văn bản (Text) trên mμn hình đồ hoạ 78 4.3.7 Đọc dữ liệu từ mμn hình đồ hoạ 79 Ch−ơngV: Đồ hoạ trong không gian ba chiều 80 5.1 Các hμm toạ lập đ−ờng cong (Contour) 80 5.1.1 Chấm điểm đ−ờng cong 80 5.1.2 Ví dụ 81 5.2 L−ới – Grid 82 5.2.1 Lệnh tạo l−ới 85 5.1.2 Ví dụ 86 5.3 Đồ hoạ ba chiều 89 5.3.1 Lệnh vẽ đồ hoạ 3D thông th−ờng 89 5.3.2 Các loại vẽ hoạt hình 3D 90 5.4 Mặt l−ới trong không gian 3D 91 5.4.1 Bộ lệnh tạo l−ới 91 5.4.2 Quay ma trận đồ hoạ 3D 92 5.5 Đồ hoạ bề mặt 97 5.6 Điểm quan sát vμ phép phối cảnh 101 5.7 Slice trong không gian 3D 103 5.8 Mầu sắc vμ kiểm soát các mầu sắc 104 5.8.1 Các thuộc tính bề mặt 104 5.8.2 Giới thiệu các hệ mầu trong mμn hình đồ hoạ 106 5.8.3 Mô hình mμu RGB (Red-Green-Blue) 106 5.8.4 Mô hình mμu CMY (Cyan-Magent a-Yellow) 109 5.8.5 Mô hình mμu YIQ 111 5.8.6 Mô hình mμu HSV (Hue-Saturation-Value) 112 5.8.7 Mô hình mμu HLS (Hue-Light-Saturation) 114 5.8.8 Các lệnh chuyển đổi mô hình mμu 116 5.8.9 Thao tác với mμu sắc 117 211
  5. Bμi tập ứng dụng phần I 120 Phần II Một số ứng dụng của Matlab ứng dụng về xử lý tín hiệu 140 140 1. Giới thiệu Tín hiệu vμ xử lý tín hiệu 141 2. Hμm lọc 153 3. Gọi hμm lọc với điều kiện đầu 155 4. Thiết kế bộ lọc số 155 4.1 Các định nghĩa 157 4.2 Xác định đặc tính tần của bộ lọc 162 4.3 Biến đổi nửa tuyến tính Tustin 5. Biến đổi Fourier rời rạc 165 6. Giới thiệu toam tắt DFT 166 7. Phổ năng l−ợng 169 8. Phần l−ợng giác mở rộng của tín hiệu 174 9. Những tín hiệu tần số cao vμ các ký hiệu 176 10. Phần bμi tập 182 11. Các hμm thông dụng trong Toolbox-DSP 182 11.1Các hμm dạng sóng 187 11.2 Phân tích bộ lọc vμ thực hiện chúng 187 11.3 Các biến đổi của hμm tuyết tính 188 11.4 Thiết kế bộ lọc số IIR 189 11.5 Chuyển bộ lọc cho tr−ớc IIR 189 11.6 Thiết kế bộ lọc FIR 189 11.7 Các chuyển đổi 190 11.8 Xử lý tín hiệu thống kê vμ phân tích phổ 190 11.9 Các cửa sổ tín hiệu 191 11.10 Thông số khi mô hình hoá 191 11.11 Các thao tác đặc biệt 192 11.12 Lμm mẫu lọc số t−ơng tự thông thấp 192 11.13 Chuyển đổi tần số (Dịch tần) 193 11.14 Rời rạc hoá bộ lọc 193 11.15 Những hμm khác 193 ứng dụng về Toolbox Simulink 194 212
  6. 1. Thế nμo lμ Simulink 194 2. Bμi toán thứ nhất 195 2.1Đặt bμi toán cho mô hình 196 2.2 Mô tả mô hình 197 2.3 Thử lại quá trình 197 2.4 Hiệu quả của bμi toán nμy 198 2.5 Các ví dụ có thể sử dụng khác của Simulink 199 3. Ph−ơng pháp xây dựng mô hình 199 Mục lục 209 213
  7. Lời nói đầu Máy tính từ khi ra đời đã tạo điều kiện vμ hỗ trợ con ng−ời trong nhiều lĩnh vực của cuộc sống vμ ngμy cμng đ−ợc coi nh− công cụ không thể thiếu trong học tập cũng nh− nghiên cứu. Chẽnh vệ vºy, viẻc n¿ng cao vĂ phŸt trièn khă n¯ng tẽnh toŸn vĂ xứ lẽ cða mŸy tẽnh ngĂy cĂng Åừỡc cŸc nhĂ khoa hàc, kỵ sừ cŸc ngĂnh quan t¿m Åặn. Tuy nhiÅn Åè viặt Åừỡc mổt chừỗng trệnh b±ng ngỏn ngự lºp trệnh cÃp cao phũc vũ tõt cho mổt lỉnh vỳc khoa hàc kỵ thuºt Åíi hịi khỏng nhựng phăi giịi vậ toŸn hàc, cŸc kiặn thửc vậ lºp trệnh trÅn mŸy tẽnh, hẻ thõng mŸy tẽnh mĂ cín phăi nºm rÃt vựng cŸc kiặn thửc vậ chuyÅn ngĂnh Åĩ. Ngừội lºp trệnh Åè Åưt Åừỡc nhựng yÅu nĂy phăi mÃt rÃt nhiậu thội gian vĂ tõn nhiậu cỏng sửc. Šè tưo Åiậu kiẻn cho cŸc nhĂ khoa hàc thuổc cŸc chuyÅn ngĂnh khŸc, ngừội ta Åơ x¿y dỳng nÅn nhựng phÀn mậm xứ lỷ dự liẻu Åỗn giăn, tiẻn lỡi. Matlab lĂ mổt trong nhựng phÀn mậm nhừ vºy vĂ hiẻn nay Åang Åừỡc sứ dũng rổng rơi. Nĩ khỏng chì cho phẫp tẽnh toŸn, mĂ cín cung cÃp cho ta nhựng cỏng cũ cỳc mưnh bièu diÍn, xứ lẽ cŸc dự liẻu, thỏng tin b±ng Åó hoư. MATLAB lĂ mổt phÀn mậm cĩ rÃt nhiậu ừu Åièm Åè Åè cŸc nhĂ khoa hàc, cŸc kỵ sừ lỳa chàn: * DÍ hàc vĂ dÍ sứ dũng. * LĂ mổt phÀn mậm mưnh, mậm dÀo, trong nhiậu lỉnh vỳc khoa hàc kỵ thuºt . * Chẽnh xŸc, Åỗn giăn vĂ trong sŸng. * Šang Åừỡc cŸc cỏng ty phÀn mậm lốn trÅn thặ giối ðng hổ vĂ phŸt trièn. i
  8. Trừốc hặt MATLAB dÍ hàc vĂ dÍ sứ dũng: MATLAB cĩ cŸc thừ viẻn chuÁn, cŸc hĂm sạn cĩ Åè bưn cĩ thè sứ dũng thuºn lỡi vĂ dÍ dĂng. Mằt khŸc, bưn chì cÀn nºm Åừỡc mổt sõ kiặn thửc toŸn hàc cỗ băn vậ Åưi sõ vĂ lừỡng giŸc, toŸn hàc cao cÃp lĂ cĩ thè sứ dũng MATLAB nhừ mổt cỏng cũ mưnh cho cŸc ửng dũng cða mệnh. MATLAB khỏng Åíi hịi bưn phăi cĩ nhiậu kiặn thửc vậ mŸy tẽnh củng nhừ khă n¯ng lºp trệnh. Bưn cĩ thè lºp cŸc chừỗng trệnh ửng dũng cho chuyÅn ngĂnh cða bưn mổt cŸch từỗng Åõi dÍ dĂng, khi bưn nºm vựng cŸc kiặn thửc sau: + ToŸn ửng dũng cỗ băn. + Lỷ thuyặt sõ cỗ băn + Mổt chợt vậ lºp trệnh mŸy tẽnh. + Phừỗng phŸp tẽnh. Matlab (Matrix Laboratory) lĂ săn phÁm phÀn mậm cða Math Work, ÅÀu tiÅn Åừỡc thiặt kặ trÅn cỗ sờ toŸn hàc, phũc vũ chð yặu Åỗn thuÀn cho toŸn hàc. Tuy nhiÅn, ngĂy nay nĩ Åừỡc phŸt trièn xa hỗn nhiậu so vối Matlab nguyÅn thuý vĂ lĂ mổt phÀn mậm cĩ giao diẻn cỳc mưnh vĂ cĩ khă n¯ng lºp trệnh Åè giăi quyặt cŸc vÃn Åậ, cŸc bĂi toŸn trong rÃt nhiậu lỉmh vỳc rÃt khŸc nhau cða khoa hàc kỉ thuºt nhừ Åiẻn, phăn ửng hưt nh¿n, tỳ Åổng hoŸ, nghiÅn cửu vậ gien PhÀn tứ cỗ băn cða Matlab lĂ ma trºn. CŸc c¿u lẻnh cða Matlab viặt từỗng tỳ nhừ cŸch mỏ tă cŸc vÃn Åậ kỉ thuºt b±ng toŸn hàc, vệ thặ viặt cŸc chừỗng trệnh b±ng ngỏn ngự Matlab nhanh hỗn vĂ Åỗn giăn hỗn nhiậu so vối viặt chừỗng trệnh b±ng cŸc ngỏn ngự lºp trệnh bºc cao nhừ Pascan, Fotran, C. Hơn thế nữa cấu trúc ch−ơng trình cũng nh− cấu trúc các hμm sẵn có trong MatLab đ−ợc mô tả gần giống với ngôn ngữ lập trình C. ĐIều rất thuận lợi cho những ng−ời đã biết qua vμ sử dụng C cũng nh− một loại ngôn ngữ lập trình cơ bản khác bất kỳ khác. ii
  9. Thỏng thừộng, Åõi vối cŸc dự liẻu rội rưc: dự liẻu thõng kÅ - kặ toŸn, thỏng tin vậ khẽ hºu Åừỡc lừu dừối dưng ma trºn. Cín Åõi vối cŸc hĂm liÅn tũc: sĩng ¿m, ¿m thanh, hệnh ănh Åừỡc biặn Åọi thĂnh cŸc tẽn hiẻu sõ vĂ Åừỡc ghi lưi trong cŸc file dự liẻu. Sau Åĩ, ngừội ta sứ dũng cŸc hĂm toŸn hàc cða MATLAB Åè xứ lỷ chợng mổt cŸch dÍ dĂng. CŸc vÃn Åậ Åừỡc sÁ Åừỡc ph¿n tẽch vĂ giăi quyặt theo 5 bừốc nhừ sau: + Ph¿n tẽch vĂ bièu diÍn vÃn Åậ mổt cŸch rò rĂng. + Mỏ tă cŸc giŸ trÙ ÅÀu vĂo vĂ cŸc giŸ trÙ ÅÀu ra cÀn phăi tẽnh toŸn. + Thao tŸc vối cŸc vẽ dũ Åỗn giăn + Viặt chừỗng trệnh b±ng Matlab + Kièm tra lưi chừỗng trệnh nĂy b±ng cŸc bổ dự liẻu Åa dưng. Šè n¿ng cao kỵ n¯ng ph¿n tẽch vĂ giăi quyặt bĂi toŸn cÀn thỳc hĂnh 5 bừốc trÅn mổt cŸch thuÀn thũc. Tữ Åĩ sÁ tiặp cºn vĂ tệm ra Åừỡc giăi phŸp Åỗn giăn, dÍ hièu vĂ hay nhÃt cho mồi bĂi toŸn. D−ới đây chúng ta sẽ lμm một ví dụ theo theo từng b−ớc trên để có thể hiểu kỹ hơn về ph−ơng pháp áp dụng cho bμi toán cụ thể. Bμi toán tính khoảng cách giữa hai đIểm trong mặt phẳng. B−ớc 1 Phân tích đặt vấn đề: Trong b−ớc đầu tiên tiên nμy, bμi toán đ−a ra phải đ−ợc xem xét đánh giá vμ đặt vấn đề một cách rõ rμng vμ cụ thể. ĐIều nμy cực kỳ quan trọng vì nó quyết định đến toμn bộ h−ớng đi của bμi toán sau nμy. Cho ví dụ nêu ở trên thì vấn đề đ−ợc nêu ra lμ: Tính khoảng cách giữa 2 đIểm của đ−ờng thẳng trong mặt phẳng B−ớc 2 Mô tả dữ liệu vμo ra: ở b−ớc nμy việc mô tả thông tin cần giải quyết phải tiến hμnh cẩn trọng vì nó sẽ quyết định đến tham số đ−ợc sử dụng vμ tính toán. Rất nhiều tr−ờng hợp, sơ đồ khối đ−ợc sử dụng hữu hiệu để cho phép xác định vị trí luồng vμo ra. Tuy nhiên một số tr−ờng hợp chúng chỉ lμ các hộp đen vì rằng chúng ta iii
  10. không thể xác định luồng ra tại một đIểm nμo đó trong các b−ớc. Nh−ng chúng ta có thể chỉ ra thông tin để tính toán luồng ra. ĐIểm1 khoảng cáchgiữa 2 đIểm ĐIểm 2 B−ớc 3 Thao tác tay: B−ớc nμy dùng để thao tác vμ tính toán bằng tay sử dụng các tập dữ liệu đầu vμo đơn giản. Nó lμ b−ớc rất quan trọng vμ không nên bỏ qua kể cả với loại hình bμi toán đơn giản. Đây lμ b−ớc tiền đề để chúng ta đi vμo cụ thể cho việc tìm ra giải pháp. Nếu ở đây chúng ta không thể lấy đ−ợc dữ liệu hay tính đ−ợc đầu ra thì chúng ta có thể chuyển sang b−ớc kế tiếp. Ví dụ: Với hai đIểm P1 vμ P2 có toạ độ ( 1,5 ) & ( 4,7 ) Khoảng cách giữa hai điểm bằng công thức Pythagorean B−ớc 4 Giải pháp bằng MatLab Tới b−ớc nμy bμi toán đ−ợc chuyển đổi sang giải pháp MatLab. ĐIều đó có nghĩa chúng ta sẽ sử dụng các hμm toán học hay còn gọi lμ các lệnh. Vμ d−ới đây bμi toán của chúng ta sẽ đ−ợc mô tả theo MatLab. >> P1 = [ 1, 5 ] >> P2 = [ 4, 7 ] >> d = sqrt ( sum ( P2-P1)^2 ) ) B−ớc 5 Kiểm tra: B−ớc kiểm tra lμ b−ớc cuối cùng trong chuỗi các tiến trình giải bμi toán. Chúng ta nên kiẻm tra bμi toán bằng các dữ liệu đầu vμo. Nếu MatLab thực hiện xong bμi toán thì nó sẽ cho chung ta kết quả ở đầu ra. >> d = ans 3.6056 Tr−ờng hợp không có kết quả hay kết quả sai thì có nghĩa MatLab ch−a thực hiện đ−ợc bμi toán vμ chúng ta cần kiểm tra lại bμi toán bằng cả hai ph−ơng pháp bằng tay vμ MatLab. iv
  11. NgĂy nay MatLab Åơ trờ nÅn thỏng dũng vĂ cỳc kỹ phọ biặn ờ hÀu hặt cŸc trừộng Åưi hàc trÅn thặ giối vĂ lĂ cỏng cũ trỡ giợp hựu hiẻu cho cŸc sinh viÅn, kỵ sừ hay cŸc nhĂ toŸn hàc trong nghiÅn cửu củng nhừ trong cỏng viẻc thừộng ngĂy. Šè giợp cŸc bưn trÀ sinh viÅn cĩ thÅm mổt cỏng cũ nựa trong tay, chợng tỏi xin trệnh bÀy sỗ lừỡc phÀn c¯n băn cða MatLab vĂ mổt sõ cŸc ửng dũng cða MatLab trong thỳc tặ. Băn in nĂy ch¯c chºn sÁ cĩ nhiậu thiặu sĩt, chợng tỏi rÃt mong Åừỡc sỳ gĩp ỷ cða cŸc bưn Åàc vĂ cŸc Åóng nghiẻp. CŸc tŸc giă. v
  12. Ch−ơng 1 - Các khái niệm cơ bản Ch−ơng 1 Các khái niệm cơ bản 1.1. Khă n¯ng cða Matlab Matlab lĂ gệ ? Matlab hoưt Åổng ra sao ? Matlab cĩ thè lĂm Åừỡc nhựng gệ vĂ ai cĩ thè hàc vĂ sứ dũng Matlab ? SÁ cĩ rÃt nhiậu bưn Åàc sÁ b¯n kho¯n vối cŸc c¿u hịi trÅn. VĂ ờ chừỗng nĂy chợng ta sÁ cùng tệm ra lội giăi ÅŸp. Matlab lĂ chừỗng trệnh phÀn mậm trỡ giợp cho viẻc tẽnh toŸn vĂ hièn thÙ. Matlab cĩ thè chưy trÅn hÀu hặt cŸc hẻ mŸy tẽnh tữ mŸy tẽnh cŸ nh¿n Åặn cŸc hẻ mŸy tẽnh lốn super computer. Matlab Åừỡc Åiậu khièn bời tºp cŸc bổ lẻnh, từỗng tŸc b±ng bĂn phẽm trÅn cứa sọ Åiậu khièn, Åóng thội Matlab cín cho phẫp khă n¯ng lºp trệnh vối cợ phŸp thỏng dÙch lẻnh hay cín gài lĂ script file. CŸc lẻnh, bổ lẻnh cða Matlab lÅn Åặn con sõ hĂng tr¯m vĂ ngĂy cĂng Åừỡc mờ rổng bời cŸc phÀn Tools box trỡ giợp, hay cŸc hĂm ửng dũng tưo ra bời ngừội sứ dũng. CŸc lẻnh cða Matlab rÃt mưnh vĂ hiẻu quă cho phẫp giăi cŸc loưi hệnh toŸn khŸc nhau vĂ Åằc biẻt hiẻu quă cho cŸc hẻ phừỗng trệnh tuyặn tẽnh củng nhừ thao tŸc trÅn cŸc bĂi toŸn ma trºn. Khỏnng nhựng thặ Matlab cín rÃt hựu hiẻu trong viẻc trỡ giợp thao tŸc vĂ truy xuÃt Åó hoư trong khỏng gian 2D củng nhừ 3D củng khă n¯ng tưo hoưt cănh cho viẻc mỏ tă bĂi toŸn mổt cŸch sinh Åổng. Cùng vối trÅn 25 Tools box (thừ viẻn trỡ giợp) khŸc nhau Matlab Åừa Åặn cho cŸc bưn sỳ lỳa chàn hoĂn chình vĂ phong phợ vậ cŸc cỏng cũ trỡ giợp źc lỳc cho nhựng lỉnh vỳc khŸc nhau trÅn con Åừộng nghiÅn cửu mĂ cŸc bưn Åơ lỳa chàn. Dừối Å¿y chợng tỏi xin liẻt kÅ mổt sõ lỉnh vỳc mĂ Matlab Åơ vĂ Åang giăi quyặt mổt cŸnh hiẻu quă. Phần 1 - Cơ sở 1
  13. Ch−ơng 1 - Các khái niệm cơ bản • NghiÅn cửu vĂ phŸt trièn trong lỉnh vỳc cỏng nghiẻp. • Giăng dưy, nghiÅn cửu lºp cŸc chừỗng trệnh ửng dũng trong giăng dưy cho cŸc mỏn kỵ thuºt nhừ toŸn, lỷ, hoŸ trong cŸc trừộng phọ thỏng nh±m n¿ng cao khă n¯ng tiặp thu củng nhừ ỷ sŸng tưo trong hàc sinh. • Giăng dưy vĂ lºp cŸc chừỗng trệnh giăng dưy vậ toŸn Åằc biẻt lĂ cŸc loưi hệnh nguyÅn lỷ cỗ băn vĂ cŸc phừỗng trệnh tuyặn tẽnh cho sinh viÅn củng nhừ hàc sinh cŸc trừộng kỵ thuºt. • Giăng dưy vĂ nghiÅn cửu trong lỉnh vỳc kỵ thuºt vĂ khoa hàc bao góm nhừ: Åiẻn tứ, lỷ thuyặt Åiậu khièn, vºt lỷ , Åó hoư , xứ lỷ ănh, vºt liẻu • Giăng dưy vĂ nghiÅn cửu trÅn mài lỉnh vỳc cĩ xuÃt hiẻn tẽnh toŸn bao góm toŸn kinh tặ, hoŸ, cỗ hàc, sinh hàc 1.2 Hoưt Åổng cða Matlab Muõn sứ dũng Åừỡc phÀn mậm MATLAB, trừốc tiÅn bưn phăi cĂi Åằt nĩ. Vệ viẻc cĂi Åằt MatLab cỳc kỹ dÍ dĂng nÅn ờ Å¿y chợng ta khỏng Åậ cºp Åặn. Tuy nhiÅn cŸc bưn nÅn chợ ỷ khi cĂi Åằt nặu cŸc bưn muõn sứ dũng thÅm cŸc ToolBox cða MatLab nhừ Simulink, Fuzzy ToolBox, DSP (digital signal processing) .v.v. hay muõn tẽch hỡp vối MatLab mổt sõ ngỏn ngự lºp trệnh quen thuổc mĂ bưn khỏng muõn xa cŸch nhừ C, C++, Fortran Ch−ơng trình ứng dụng ở đây th−ờng có ở các phiên bản sau: MatLab 3.5 trở xuống với môi tr−ờng hoạt động lμ MS-Dos. MatLab 4.0, 4.2, 5.1, 5.2 hoạt động trong môI tr−ờng Windows. Hệnh 1.1 Giao diẻn mμn hệnh khi khời tưo Matlab 4.2 Phần 1 - Cơ sở 2
  14. Ch−ơng 1 - Các khái niệm cơ bản (ở đây chúng ta sẽ có ngay lệnh cơ bản dμnh cho việc giới thiệu ch−ơng trình lμ : intro, demo, help help ). Vμ các version MatLab khác cho môi tr−ờng t−ơng tác Unix. Việc khởi động Matlab trên mỗi hệ thống mỗi khác. Trong môi tr−ờng Window hay Macintosh ch−ơng trình th−ờng đ−ợc khởi động thông qua việc click chuột trên các icon hay còn gọi lμ các biêu t−ợng. Còn với môi tr−ờng Unix, Dos thông qua dòng lệnh :\ Matlab Giao diẻn cða MATLAB sứ dũng 2 cứa sọ: cứa sọ thử nhÃt Åừỡc sứ dũng Åè Åừa cŸc lẻnh vĂ dự liẻu vĂo Åóng thội Åè in kặt quă; cứa sọ thử hai trỡ giợp cho viẻc truy xuÃt Åó hoư dùng Åè thè hiẻn nhựng lẻnh hay kặt quă ÅÀu ra dừối dưng graphics. Viẻc ngºt chừỗng trệnh Åang thỳc hiẻn hoằc cŸc chừỗng trệnh thỳc hiẻn khỏng Åợng theo yÅu cÀu thỏng qua phẽm nĩng Ctrl + C. Šè thoŸt ra khịi mỏi trừộng lĂm viẻc Matlab, chợng ta cĩ thè sứ dũng lẻnh cða Matlab lĂ : >> quit %hoằc >> exit Hệnh vÁ 1.2 Hai cứa sọ giao diẻn cða Matlab Phần 1 - Cơ sở 3
  15. Ch−ơng 1 - Các khái niệm cơ bản 1.2.1. CŸc phẽm chuyÅn dũng vĂ cŸc lẻnh thỏng dũng hẻ thõng ↑ hoằc Ctrl + p Gài lưi lẻnh vữa thỳc hiẻn trừốc Åĩ ↓ hoằc Ctrl + n Gài lưi lẻnh Åơ ÅŸnh vĂo rÃt l¿u trừốc Åĩ → hoằc Ctrl + f Chuyèn con trị sang phăi 1 kỷ tỳ ← hoằc Ctrl + b Chuyèn con trị sang trŸi 1 kỷ tỳ Ctrl + l hoằc Ctrl + ← Chuyèn con trị tỳ sang trŸi 1 tữ Ctrl + r hoằc Ctrl + → Chuyèn con trị tỳ sang phăi 1 tữ Ctrl + a hay Home Chuyèn con trị vậ ÅÀu díng Ctrl + k XoŸ cho Åặn cuõi díng CŸc lẻnh hẻ thõng casesen off -Bị thuổc tẽnh ph¿n biẻt chự hoa vĂ chự thừộng casesen on - Sứ dũng thuổc tẽnh ph¿n biẻt chự hoa vĂ chự thừộng clc - XoŸ cứa sọ díng lẻnh clf - XoŸ cứa sọ Åó hoư computer - Lẻnh in ra mổt x¿u kẽ tỳ cho biặt loưi mŸy tẽnh demo - Lẻnh cho phẫp xem cŸc chừỗng trệnh mạu (minh hoư khă n¯ng cða Matlab ) exit, quit - ThoŸt khịi MATLAB Ctr-c - Dững chừỗng trệnh khi nĩ bÙ rỗi vĂo tệnh trưng lằp khỏng kặt thợc help - Lẻnh cho xem phÀn trỡ giợp mổt sõ cŸc lẻnh Åừỡc sứ dũng trong Matlab input - Nhºp dự liẻu tữ bĂn phẽm load - Tăi cŸc biặn Åơ Åừỡc lừu trong 1 file Åừa vĂo vùng lĂm viẻc. pause - Ngững tưm thội chừỗng trệnh save - Lừu giự cŸc biặn vĂo file cĩ tÅn lĂ matlab.mat 1.3. Biặn vĂ thao tŸc cða cŸc biặn 1.3.1 Biặn trong Matlab Phần 1 - Cơ sở 4
  16. Ch−ơng 1 - Các khái niệm cơ bản TÅn cŸc biặn trong Matlab cĩ thè dĂi 19 kỷ tỳ bao góm cŸc chự cŸi A-Z hay a-z cùng cŸc chự sõ củng nhừ 1 vĂi cŸc kỷ tỳ Åằc biẻt khŸc nhừng luỏn phăi bºt ÅÀu b±ng chự cŸi. TÅn cða cŸc hĂm Åơ Åừỡc củng cĩ thè Åừỡc sứ dũng lĂm tÅn cða biặn vối Åiậu kiẻn hĂm sÁ khỏng Åừỡc sứ dũng trong suõt quŸ trệnh tón tưi cða biặn cho Åặn khi cĩ lẻnh clear xoŸ cŸc biặn trong bổ nhố hay clear + tÅn cða biặn. clear - XoŸ cứa sọ Åang sứ dũng, xoŸ vùng nhố dĂnh cho cŸc biặn. Trong trừộng hỡp nĂy tÃt că cŸc biặnÅừỡc ÅÙnh nghỉa trừốc Åĩ Åậu bÙ xoŸ. clear name - Chì xoŸ biặn cĩ tÅn lĂ name clear name1, name2, - Chì xoŸ biặn cĩ tÅn Åừỡc liẻt kÅ sau lẻnh clear ( name1, name2 ) clear value - XoŸ biặn theo giŸ trÙ cho trừốc pack Lẻnh Åừỡc thỳc hiẻn nh±m mũc Åẽch sºp xặp lưi cŸc biặn củng nhừ vùng chửa biặn cða bổ nhố. Khi bổ nhố cða mŸy tẽnh ÅÀy lẻnh pack cho phẫp tưo ra thÅm vùng bổ nhố cho biặn mĂ khỏng phăi xoŸ Åi cŸc biặn Åơ tón tưi. Cỏng viẻc Åừỡc thỳc hiÅn nhừ sau: 1. TÃt că cŸc biặn trong bổ nhố Åừỡc lừối lưi trÅn Åỉa dừối file pack.tmp. 2. Vùng bổ nhố cỗ sờ sÁ Åừỡc giăi phĩng 3. CŸc biặn sÁ Åừỡc nưp (load) vĂo bổ nhố tữ file pack.tmp 4. File pack.tmp bÙ huý bị pack filename Sºp xặp lưi bổ nhố vối file trung gian cĩ tÅn lĂ: filename Bệnh thừộng Matlab ph¿n biẻt khŸc nhau cŸc biặn tưo bời chự cŸi thừộng vĂ chự cŸi hoa. CŸc lẻnh cða Matlab nĩi chung thừộng sứ dũng chự cŸi thừộng. Viẻc ph¿n biẻt Åĩ cĩ thè Åừỡc bị qua nặu chợng ta thỳc hiẻn lẻnh >> casensen Kièm tra sỳ tón tưi cða cŸc biặn trong bổ nhố thỏng qua bổ lẻnh who Hièn thÙ danh sŸch cŸc biặn Åơ Åừỡc ÅÙnh nghỉa whos Hièn thÙ cŸc biặn Åơ Åừỡc ÅÙnh nghỉa cùng kẽch thừốc cða Phần 1 - Cơ sở 5
  17. Ch−ơng 1 - Các khái niệm cơ bản chợng vĂ thỏng bŸo chợng cĩ phăi lĂ sõ phửc khỏng. who global Hièn thÙ cŸc biặn cũc bổ exist( namestr ) Hièn thÙ cŸc biặn phũ thuổc vĂo cŸch cŸc biặn Åừỡc ÅÙnh nghỉa trong chuồi namestr. HĂm sÁ tră lưi giŸ trÙ sau: Nặu namestr lĂ tÅn cða 1 biặn Nặu namestr lĂ tÅn cða 1 file.m Nặu namestr lĂ tÅn cða 1 MEX file Nặu namestr lĂ tÅn cða hĂm dÙch bời SIMULINK Nặu namestr lĂ tÅn cða hĂm Åừỡc ÅÙnh nghỉa trừốc bối Matlab . 1.3.2 Šổ lốn cða biặn Šổ lốn hay chiậu dĂi cða biặn vector củng nhừ ma trºn cĩ thè Åừỡc xŸc ÅÙnh thỏng qua 1 sõ hĂm cĩ s³n cða Matlab. size ( A ) Cho ra 1 vector chửa kẽch thừốc ma trºn A. PhÀn tứ ÅÀu tiÅn cða vector lĂ sõ hĂng cða ma trºn, phÀn tứ thử 2 lĂ sõ cổt cða ma trºn. [ m n ] = size( A ) Tră giŸ trÙ Åổ lốn cða ma trºn A vĂo vector xŸc ÅÙnh bời 2 biặn m vĂ n. size (A, p) Šừa ra giŸ trÙ sõ hĂng cða ma trºn A nặu p = 2. size(x) Šừa ra vector mỏ tă Åổlốn cða vector x. Nặu x lĂ vector hĂng m phÀn tứ thệ giŸ trÙ ÅÀu cða vector lĂ m vĂ giŸ trÙ thử 2 lĂ 1. Từộng hỡp x lĂ vector n cổt thệ giŸ trÙ thử nhÃt sÁ lĂ 1 vĂ thử 2 lĂ n. lengh(x) Tră giŸ trÙ chiậu dĂi cða vector x lengh(x) Tră giŸ trÙ chiậu dĂi cða ma trºn A. GiŸ trÙ thu Åừỡc sÁ lĂ m nặu m>n vĂ ngừỡc lưi sÁ lĂ n nẫu n>m. 1.3.3 Mổt sõ biặn Åừỡc ÅÙnh nghỉa trừốc. ans Biặn cho trừốc Åừỡc gŸn cho phẫp tẽnh cuõi cùng cða Phần 1 - Cơ sở 6
  18. Ch−ơng 1 - Các khái niệm cơ bản cỏng viẻc tẽnh toŸn khỏng biặn gŸn. esp Tră ra Åổ chẽnh xŸc cða mŸy xŸc ÅÙnh bời khoăng tữ 1 Åặn 1 biặn dÃu phÁy Åổng tiặp Åĩ. Biặn esp Åừỡc sứ dũng nhừ lĂ sai sõ trong 1 vĂi cŸc phẫp toŸn. Ngừội sứ dũng cĩ thè gŸn giŸ trÙ mối cho esp nhừng giŸ trÙ Åĩ sÁ khỏng bÙ xoŸ Åi bời hĂm clear. realmax Šừa ra giŸ trÙ cða sõ lốn nhÃt mĂ mŸy tẽnh (chừỗng trệnh) cĩ thè tẽnh toŸn Åừỡc . realmin Šừa ra giŸ trÙ cða sõ nhị nhÃt mĂ mŸy tẽnh (chừỗng trệnh) cĩ thè tẽnh toŸn Åừỡc . 1.3.4 Sõ phửc a) CŸc phẫp toŸn Åõi vối sõ phửc: Phẫp toŸn Kặt quă c1+ c2 (a1 + a2) + i(b1 + b2) c1- c2 (a1 - a2) + i(b1 - b2) c1. c2 (a1. a2 - b1. b2) + i(a1. a2 + b1. b2) c1 (a1. a2 - b1. b2) + i (a1. a2 - b1. b2) c2 2 2 2 2 a 1+b 2a 1+b 2 | c1| 2 2 √ a1 + b2 (Šổ lốn hay trÙ tuyẻt Åõi cða c1) * a1 a1- ib1 (sõ liÅn hỡp cða sõ phửc) b) Mổt sõ hĂm Åằc biẻt cða sõ phửc real(x) HĂm cho giŸ trÙ phÀn thỳc cða sõ phửc x. Nặu x=a+ib thệ real(x)=a imag(x) HĂm tră lưi giŸ trÙ phÀn ăo cða sõ phửc x. Nặu x=a+ib thệ imag(x)=b Phần 1 - Cơ sở 7
  19. Ch−ơng 1 - Các khái niệm cơ bản conj(x) Tẽnh sõ liÅn hỡp cða sõ phửc. Nặu x=a+ib thệ conj(x)=a-ib abs(x) Tẽnh Åổ lốn, giŸ trÙ tuyẻt Åõi cða sõ phửc. angle(x) Tẽnh gĩc cĩ giŸ trÙ lĂ atan2(imag(x), real(x)), giŸ trÙ gĩc n±m trong khoăng -π Åặn π. c) Toư Åổ bièu diÍn sĩ phửc Chợng ta cĩ thè bièu diÍn sõ phửc a+ib trÅn hẻ trũc toư Åổ. Šõi vối hẻ trũc toư Åổ Åậ cŸc phÀn thỳc Åừỡc bièu diÍn trÅn trũc x: x=a, phÀn ăo Åừỡc bièu diÍn trÅn trũc y: y=b. Šõi vối hẻ toư Åổi cỳc sõ phửc Åừỡc bièu diÍn bời r, θ. Trong Åĩ: 2 2 r = √ a1 + b2 θ = tan-1 b a Ngừỡc lưi : a = rcos θ b = rsin θ Hệnh vÁ bièu diÍn toư Åổ sõ phửc Trong hẻ toư Åổ cỳc: Åổ lốn (magnitude), vĂ pha (phase) cða sõ phửc sÁ Åừỡc tẽnh toŸn nhừ sau: >> r = abs(x); >> theta = angle(x); Bièu diÍn sõ phửc theo Åổ lốn vĂ pha nhừ sau: >> y = r*exp(i*theta); Trong hẻ toư Åổ Åậ cŸc, phÀn thỳc (real) vĂ phÀn ăo (imaginary) sÁ Åừỡc tẽnh toŸn nhừ sau: >> a = real(x); >> b = imag(x); Bièu diÍn sõ phửc: y = a + ib; Phần 1 - Cơ sở 8
  20. Ch−ơng 1 - Các khái niệm cơ bản 1.4. Sỗ lừỡc vậ Åó hoư trong MatLab MATLAB sứ dũng lẻnh X-Y Plots Åè vÁ Åó thÙ, bièu Åó cho cŸc thỏng tin mổt cŸc dÍ dĂng. Trong phÀn nĂy, vÁ Åó thÙ tọng quŸt theo dự liẻu Åừỡc lừu trong hai vector x,y. Trong trừộng hỡp cŸc bièu Åó hay Åó thÙ mong muõn Åừỡc bièu diÍn dừối dưng mạu 3D thệ Åỗn giăn vối Matlab chợng ta chì cÀn Åọi sang dùng lẻnh X-Y-Z Pots Åè vÁ. 1.4.1 VÁ trong cứa sọ Åó hoư cða Matlab plot(x,y) VÁ Åó thÙ theo toư Åổ x-y pot3(x,y,z) VÁ Åó thÙ theo toư Åổ x-y-z title Šừa cŸc title vĂ trong hệnh vÁ xlabel Šừa cŸc nhơn theo chiậu x cða Åó thÙ ylabel Šừa cŸc nhơn theo chiậu y cða Åó thÙ zlabel Šừa cŸc nhơn theo chiậu z cða Åó thÙ grid VÁ cŸc Åừộng giĩng grid line trÅn Åó thÙ plot(y) VÁ Åó thÙ theo y bị qua chì sõ theo y Nặu y lĂ sõ ăo thệ Åó thÙ Åừỡc vÁ sÁ lĂ phÀn thỳc vĂ phÀn ăo cða y. >> plot( real ( y ), image ( y ) ) plot(x,y,S) plot ( x, y, s ) vÁ theo x,y plot(x,y,z,S) plot ( X, Y, Z, S ) vÁ theo x, y, z vối s lĂ cŸc chì sõ sÁ liẻt kÅ ờ chừỗng sau Vẽ dũ: >> plot ( x, y, 'b+' ) VÁ Åó thÙ theo x vĂ y vĩi mÀu cða Åừộng lĂ mÀu xanh dừỗng vĂ kỷ tỳ tưo nÅn Åừộng lĂ dÃu + Phần 1 - Cơ sở 9
  21. Ch−ơng 1 - Các khái niệm cơ bản Vẽ dũ hệnh helix: Vi du ve plot3() trong Matlab 40 30 20 10 0 1 1 0 0 -1 -1 Hệnh 1.3 Hệnh Helix >> t = 0:pi/50:10*pi; >> plot3(sin(t),cos(t),t); >> Title(' Vẽ du ve plot3() trong Matlab ') Matlab rÃt mưnh trong viẻc xứ lỷ Åó hoư. Ta sÁ Åậ cºp vÃn Åậ nĂy rò hỗn ờ chừỗng sau. 1.4.2 In Ãn trÅn mĂn hệnh Åó hoư Việc in các ảnh trên mμn đồ hoạ có thể đ−ợc thực hiện thông qua các menu lệnh may các lệnh của Matlab. >> print - In mμn hình của cửa sổ đồ hoạ hiện thời ra máy in. >> print filename - In mμn hình đồ hoạ ra file >> print esp filename - copy mμn đồ hoạ theo khuôn dạng eps. File thu đ−ợc có thể đ−a vμo các trang văn bản Phần 1 - Cơ sở 10
  22. Ch−ơng 1 - Các khái niệm cơ bản 1.4.3 Mổt sõ vẽ dũ mỏ tă Åó hoư . Do thi ham sin2x , sin(x^2) va sin(x)^2 1 0.5 0 -0.5 -1 0 2 4 6 8 10 Hệnh 1.4 HĂm sin2x, cos(x)^2 vĂ cos(x^2) a) Vẽ dũ mỏ tă khă n¯ng vÁ hĂm Åó hoư trong khỏng gian 2D. Giă sứ vối hĂm sin2x, cos(x)^2 vĂ (cosx)^2 trong khoăng 0 > hold on >> x = lẽnspace(0,10); >> y1 = sin(2*x); >> y2 = sin(x.^2); >> y3 = (sin(x)).^2; >> plot ( x,y1 ); plot ( x,y2 ); plot( x,y3 ); HĂm plot ( x,y ) sÁ cho ra trÅn mĂn hệnh Åó hoư hĂm y theo vector x b) HĂm mỏ tă Åừộng cong tham biặn trong khỏng gian 2D vĂ 3D Šừộng cong tham biặn theo t vối t trong khăng tữ [ 0 2*pi ] cho kặt quă Hệnh vÁ 1.5. Phần 1 - Cơ sở 11
  23. Ch−ơng 1 - Các khái niệm cơ bản Ham tham bien 1.5 1 0.5 0 -0.5 -1 -1.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 Hệnh 1.5 HĂm tham biặn 2D >> t = 0 : 0.01 : 2*pi ; >> x = cos(t) – sin(3*t) >> y = sin(t).*cos(t) – cos(3*t ) >> title(‘ HĂm tham biặn ‘); >> plot (x,y) Vối giŸ trÙ cða t trong khăng tữ [ 0 2*pi ] vĂ khoăng cða u lĂ [ 0 1 ]. Šoưn chừỗng trệnh sau cho ra hệnh vÁ hĂm tham biặn 3D. >> t = 0 : 0.01 : 1 ; >> u = 0: 0.01; 1; >> x = u.*cos(t)./30 + 10; >> y = u.*sin(t)./55 + 10; >> z = 1; >> title(‘ HĂm tham biặn 3D ‘); >> plot (x,y,z) 1.5. CŸc HĂm ¿m thanh trong Matlab Phần 1 - Cơ sở 12
  24. Ch−ơng 1 - Các khái niệm cơ bản Matlab cho phép tạo âm thanh thông qua các vector bởi lệnh sound. sound ( y ) - Gửi tín hiệu của vector y ra loa. Vector đ−ợc xắp xếp với biên độ lớn nhất sound ( y , f ) - Thực hiện công việc nh− hμm sound (y) với f lμ dải tần đo bởi Hz. Lệnh nμy không thực hiện trên các hệ máy SunSPARE. saxis - Trả giá trị giới hạn của trục âm thanh trong vector hiện hμnh. axis( [min max] ) - Xét thang của trục âm thanh. Tăng giá trị sẽ cho âm thanh trầm hơn. Giảm giá trị sẽ cho âm thanh ồn hơn. saxis (str) - Xét trục âm thanh theo chuỗi srt. Ví dụ : a) Tạo sóng hình sin trong khoảng sau: >> x = sin ( linspace(0,10000,10000) ); >> sound ( x ); b) Một vμi ví dụ với các âm thanh có sẵn đ−ợc đ−a ra bởi lệnh load. >> load train; % giá trị của âm thanh tầu hoả >> sound ( y ); % đ−ợc đ−a vμo tham số y >> load chirp; % tiếng chim kêu >> sound ( y ); Với Matlab trên hệ MS -Window cho phép ng−ời sử dụng thao tác với file âm thanh định dạng wav bằng bộ lệnh sau: wavread ( fstr ) ≡ [y] = wavread (wavfile) - Đọc dữ liệu âm thanh từ file.wav xác định bởi chuỗi fstr vμo tham biến y. [ y, Fs ] = wavread ( ) nh− trên với fs lμ tần số wavwrite ( sv, f , wavfiles ) - Ghi dữ liệu âm thanh từ vector sv với tần số f vμo file xác định bởi biến wavefile Phần 1 - Cơ sở 13
  25. Ch−ơng 2 - Ma trận vμ các phép toán Chừỗng 2 Ma trºn vĂ CŸc phẫp toŸn cho ma trºn Trong phÀn nĂy, ta sÁ xem xẫt cŸc biặn Åỗn, cŸc Åưi lừỡng vỏ hừống cùng vối cŸc biặn ma trºn cùng cŸc phẫp tẽnh cỗ băn, cŸc hĂm chửc n¯ng sạn cĩ vĂ cŸc toŸn tứ Åừỡc sứ dũng trong phÀn mậm Matlab. 2.1 Vector - Åưi lừỡng vỏ hừống vĂ ma trºn Khi giăi quyặt mổt vÃn Åậ kỵ thuºt nĂo Åĩ, Åiậu quan tràng lĂ phăi xem xẫt cŸc dự liẻu liÅn quan tối vÃn Åậ Åĩ. Mổt sõ dự liẻu cĩ giŸ trÙ Åỗn nhừ diẻn tẽch hệnh vuỏng, mổt sõ dự liẻu liÅn quan tối nhiậu Åưi lừỡng nhừ toư Åổ 1 Åièm trong khỏng gian góm 3 giŸ trÙ x,y,z TÃt că nhựng dự liẻu nĂy cĩ dưng cÃu trợc Åằc biẻt gài lĂ ma trºn (matrix). CŸc phÀn tứ cða ma trºn Åừỡc sºp xặp theo hĂng vĂ cổt. Mổt giŸ trÙ Åỗn cĩ thè coi lĂ mổt ma trºn chì cĩ duy nhÃt 1 hĂng vĂ 1 cổt hay cín gài lĂ Åưi lừỡng vỏ hừống (scalar). Ma trºn chì cĩ mổt hĂng hoằc mổt cổt Åừỡc gài lĂ vector. Šè cºp nhºt tối 1 phÀn tứ cða ma trºn ta sứ dũng chì sõ hĂng vĂ cổt cða nĩ (subscripts). Vẽ dũ: C4,3 Kẽch thừốc cða ma trºn Åừỡc thè hiẻn mxn cĩ nghỉa lĂ cĩ m hĂng vĂ n cổt. 2.1.1 CŸch nhºp giŸ trÙ cho ma trºn hay cŸc Åưi lừỡng vỏ hừống Cĩ 4 cŸch liẻt kÅ sau Å¿y cho viẻc vĂo dự liẻu cho cŸc biặn vỏ hừống hay ma trºn. + Liẻt kÅ trỳc tiặp cŸc phÀn tứ cða ma trºn Phần I - Cơ sở 14
  26. Ch−ơng 2 - Ma trận vμ các phép toán + Cĩ thè Åàc dự liẻu tữ mổt file dự liẻu. + Sứ dũng toŸn tứ (:). + VĂo sõ liẻu trỳc tiặp tữ bĂn phẽm. * Mổt sõ cŸc quy ÅÙnh cho viẻc ÅÙnh nghỉa ma trºn TÅn ma trºn phăi Åừỡc bºt ÅÀu b±ng chự cŸi vĂ cĩ thè chửa tối 19 kỷ tỳ lĂ sõ, chự cŸi, hoằc dÃu gưch dừối Åừỡc Åằt ờ bÅn trŸi dÃu b±ng. BÅn phăi cða dÃu b±ng lĂ cŸc giŸ trÙ cða ma trºn Åừỡc viặt theo thử tỳ hĂng trong dÃu ngoằc vuỏng. DÃu chÃm phÁy (;) ph¿n cŸch cŸc hĂng. CŸc giŸ trÙ trong hĂng Åừỡc ph¿n cŸch nhau bời dÃu phÁy (,) hoằc dÃu cŸch; cŸc giŸ trÙ cĩ thè lĂ sõ ¿m hay dừỗng. DÃu thºp ph¿n Åừỡc thè hiẻn lĂ dÃu chÃm (.). Khi kặt thợc nhºp mổt ma trºn phăi cĩ dÃu (;). a. Liẻt kÅ trỳc tiặp: LĂ cŸch ÅÙnh nghỉa ma trºn mổt cŸch Åỗn giăn nhÃt. CŸc phÀn tứ cða ma trºn Åừỡc liẻt kÅ trong dÃu ngoằc vuỏng. >> A=[3,5]; >> B=[1.5,3.1]; >> C=[-1,0,0; -1,1,0; 1,-1,0; 0,0,2]; Cĩ thè xuõng díng Åè ph¿n biẻt tững hĂng ma trºn. Vẽ dũ: >>C=[ -1 0 0 -1 1 0 1 -1 0 0 0 2 ]; Khi sõ phÀn tứ trÅn mổt hĂng cða ma trºn quŸ lốn, ta cĩ thè dùng dÃu ba chÃm ( ) Åè thè hiẻn sõ phÀn tứ cða hĂng vạn cín. VĂ tiặp tũc viặt cŸc phÀn tứ ờ díng tiặp theo. Vẽ dũ: Vector F cĩ 10 phÀn tứ ta cĩ thè viặt nhừ sau: >> F = [ 1, 52, 64, 197, 42, -42, 55, 82, 22, 109 ]; Bưn cĩ thè ÅÙnh nghỉa mổt ma trºn tữ mổt ma trºn khŸc nhừ sau >> B = [ 1.5, 3.1 ]; Phần I - Cơ sở 15
  27. Ch−ơng 2 - Ma trận vμ các phép toán >> S = [ 3.0, B ]; Ma trºn S cĩ thè hièu nhừ sau: S = [ 3.0, 1.5, 3.1]; Bưn cĩ thè cºp nhºt tối tững phÀn tứ mổt b±ng cŸch sứ dũng chì sõ cða nĩ: >> S(2) = -1.0; GiŸ trÙ cða phÀn tứ thử 2 trong ma trºn S sÁ thay Åọi tữ 1.5 thĂnh -1.0. Bưn cĩ thè mờ rổng ma trºn b±ng cŸch thÅm cho nĩ phÀn tứ mối. Thỳc hiẻn lẻnh sau: >> S(4) = 5.5; Ma trºn S lợc nĂy sÁ cĩ 4 phÀn tứ: S = [ 3.0, -1.0, 3.1, 5.5 ]; Nặu ta thỳc hiẻn lẻnh nĂy: >> S(8) = 9.5; Thệ ma trºn S sÁ cĩ 8 phÀn tứ, cŸc phÀn tứ S(5), S(6), S(7) sÁ tỳ Åổng nhºn giŸ trÙ lĂ 0. b. Cĩ thè Åàc dự liẻu tữ mổt file dự liẻu Åơ cĩ: Thỏng qua lẻnh load cho phặp nhºp vĂo dự liẻu cða ma trºn lừu trự trừốc trong Åỉa c. Sứ dũng toŸn tứ (:) DÃu hai chÃm (:) Åừỡc sứ dũng Åè tưo vector tữ ma trºn. Šiậu nĂy tưo Åiậu kiẻn cho thuºn lỡi trong viẻc xứ lỷ sõ liẻu. - Vẽ dũ: Muõn vÁ bièu Åó theo hẻ toư Åổ x,y cho 1 file dự liẻu nĂo Åĩ, ta dÍ dĂng ghi cŸc sõ liẻu x vĂo 1 vector vĂ cŸc sõ liẻu y vĂo 1 vector khŸc. Tưi vÙ trẽ cða dÃu (:) trong ma trºn, nĩ Åưi diẻn cho tÃt că cŸc hĂng hoằc tÃt că cŸc cổt. - Vẽ dũ: CŸc lẻnh sau Å¿y sÁ Åừa tÃt că cŸc dự liẻu ờ cổt thử nhÃt trong ma trºn data1 vĂo vector x vĂ toĂn bổ dự liẻu ờ cổt thử 2 cða ma trºn vĂo vector y: >> x = data1 (: , 1); >> y = data1 (: , 2); DÃu hai chÃm cín cĩ thè sứ dũng lĂm kỷ hiẻu tọng quŸt trong ma trºn mối. Nặu dÃu hai chÃm n±m ờ giựa 2 sõ nguyÅn, thệ nĩ Åưi diẻn cho tÃt că cŸc sò nguyÅn n±m giựa 2 sõ nguyÅn Åĩ. Vẽ dũ: dÃu 2 chÃm lĂ kỷ hiẻu tọng quŸt cða vector H cĩ chửa cŸc sõ tữ 1 Åặn 8. >> H = 1:8; Phần I - Cơ sở 16
  28. Ch−ơng 2 - Ma trận vμ các phép toán Nặu dÃu hai chÃm n±m ờ giựa 3 sõ, thệ dÃu 2 chÃm Åưi diẻn cho tÃt că cŸc sõ cĩ giŸ trÙ tữ sõ thử nhÃt Åặn sõ thử 3, sõ thử 2 Åừỡc sứ dũng lĂm mửc tâng. - Vẽ dũ: dÃu 2 chÃm lĂ kỷ hiẻu tọng quŸt trong vector hĂng cĩ tÅn TIME cĩ chửa cŸc sõ tữ 0.0 Åặn 5.0 cĩ mửc tâng lĂ 0.5: >> TIME = 0.0 : 0.5 : 5.0; Mửc tâng ¿m Åừỡc thè hiẻn trong vẽ dũ sau: >> VALUES = 10 : -1 : 0; DÃu hai chÃm cín Åừỡc sứ dũng Åè chàn cŸc ma trºn con tữ 1 ma trºn khŸc. - Vẽ dũ: Giă sứ cĩ ma trºn C Åừỡc cho nhừ sau: >> C=[ -1 0 0 -1 1 0 1 -1 0 0 0 2 ]; Dùng lẻnh: >> C_PARTIAL_1 = C( : ,2:3); >> C_PARTIAL_2 = C(3:4,1:2); Ta sÁ nhºn Åừỡc ma trºn sau: C_PARTIAL_1 =[ 0 0 C_PARTIAL_2 =[1 -1 1 0 0 0 ]; -1 0 0 2 ]; Nặu dÃu hai chÃm ÅÙnh nghỉa cŸc chì sõ khỏng hỡp lẻ nhừ C(5:6,:), thệ sÁ cĩ hièn thÙ thỏng bŸo lồi. Trong MATLAB ma trºn rồng (empty matrix) lĂ giŸ trÙ hỡp lẻ. Ma trºn rồng cĩ thè Åừỡc ÅÙnh nghỉa nhừ sau: >> A = [ ]; >> B = 4 : -1 : 5 Ma trºn rồng khŸc vối ma trºn chì toĂn sõ 0. Cuõi cùng, C(:) từỗng Åừỗng vối mổt cổt dĂi cĩ chửa cổt ÅÀu tiÅn cða ma trºn C, tiặp Åặn lĂ cổt thử hai cða ma trºn C, vĂ cử nhừ vºy tiặp tũc. Š¿y lĂ toŸn tứ rÃt mưnh cða Matlab. Phần I - Cơ sở 17
  29. Ch−ơng 2 - Ma trận vμ các phép toán d. VĂo sõ liẻu trỳc tiặp tữ bĂn phẽm. Ta cĩ thè nhºp ma trºn tữ bĂn phẽm. Cợ phŸp: >> Z = input('Nhºp giŸ trÙ cho Z'); Khi thỳc hiẻn lẻnh nĂy, mŸy sÁ hièn thÙ x¿u kỷ tỳ 'Nhºp giŸ trÙ cho Z' vĂ Åỡi ngừội sứ dũng nhºp sõ liẻu vĂo. Ngừội sứ dũng cĩ thè gò mổt bièu thửc nhừ sau [5.1 6.3 -18.0] Åè xŸc ÅÙnh giŸ trÙ cða Z. Nặu ngừội sứ dũng chì gò enter mĂ khỏng nhºp giŸ trÙ nĂo vĂo thệ ma trºn Z sÁ Åừỡc coi lĂ ma trºn rồng. Nặu lẻnh kặt thợc vối dÃu (;) thệ giŸ trÙ cða Z sÁ Åừỡc hièn thÙ. Nặu khỏng cĩ dÃu (;) thệ khỏng Åừỡc hièn thÙ. 2.1.2 Hièn thÙ ma trºn Cĩ nhiậu cŸch Åè hièn thÙ ma trºn. CŸch Åỗn giăn nhÃt gò tÅn cða ma trºn rói enter. Tuy nhiÅn, cĩ mổt sõ lẻnh Åừỡc dùng Åè hièn thÙ ma trºn vối cŸc phÀn tứ ma trºn Åừỡc bièu diÍn theo nhiậu kièu khŸc nhau. Dưng mằc ÅÙnh lĂ 5 chự sõ cĩ nghỉa sau dÃu thºp ph¿n (gài lĂ short format). Mổt sõ dưng hièn thÙ khŸc Åừỡc liẻt kÅ dừối Å¿y: format long Dưng sõ chự sõ cĩ nghỉa dĂi (15 chự sõ cĩ nghỉa sau dÃu thºp ph¿n trờ lÅn) format short Cín gài lĂ default format (cĩ 5 chự sõ cĩ nghỉa) format short e Dưng sõ phÁy Åổng ngºn (dừối 1015) format long e Dưng sõ phÁy Åổng lốn (tữ 1015 trờ lÅn. Vẽ dũ: 6.023e+23) format Hièn thÙ dÃu (¿m, dừỗng) cða cŸc phÀn tứ cða ma trºn. format compact Cho phẫp giăm khoăng cŸch giựa cŸc phÀn tứ trong ma trºn format loose Huý bị lẻnh format compact trờ lưi chặ Åổ hièn thÙ thỏng thừộng. disp Hièn thÙ thỏng bŸo trong dÃu ngoằc Åỗn hoằc hièn thÙ nổi dung cða ma trºn. Vẽ dũ: >> disp(temp); disp(' Åổ F '); Ta sÁ nhºn Åừỡc: 78 Åổ F Phần I - Cơ sở 18
  30. Ch−ơng 2 - Ma trận vμ các phép toán Trong Åĩ temp lĂ tÅn cða ma trºn chửa 1 giŸ trÙ nhiẻt Åổ F lĂ 78. fprintf Lẻnh nĂy cho phẫp in tham sõ ÅÀu ra theo Åợng dưng mĂ ta mong muõn: că text vĂ că giŸ trÙ sõ. Trong lẻnh nĂy cĩ thè cĩ chửa că nhựng díng trõng. Cợ phŸp cða nĩ nhừ sau: >> fprint( ÅÙnh dưng, ma trºn); Trong ÅÙnh dưng cĩ thè chửa că text vĂ cŸc kỷ hiẻu dưng Åằc biẻt (%e, %f,%g, /n – Åừỡc ghi trong cằp dÃu nhŸy Åỗn) Åiậu khièn cŸch in cŸc giŸ trÙ cða ma trºn. Nặu sứ dũng: %e cŸc giŸ trÙ Åừỡc in ra dừối dưng sõ phÁy Åổng. %f cŸc giŸ trÙ Åừỡc in ra dừối dưng sõ phÁy tỉnh. %g thệ giŸ trÙ Åừỡc in ra cĩ thè cĩ dưng sõ phÁy Åổng hoằc tỉnh tuỹ thuổc vĂo băn th¿n nĩ. \n thệ 1 díng trõng sÁ Åừỡc in ra. Vẽ dũ: >> fprintf( 'Nhiẻt Åổ lĂ: \n %4.1f Åổ F \n', temp); Nghỉa lĂ sõ vÙ trẽ dĂnh Åè in giŸ trÙ cða biặn temp lĂ 4 vĂ mổt sõ sau dÃu phăy. Nĩ sÁ Åừỡc hièn thÙ nhừ sau: Nhiẻt Åổ lĂ: 78.0 Åổ F 2.2 CŸc ma trºn Åằc biẻt: Matlab cĩ sạn mổt sõ hĂm lừu cŸc h±ng, giŸ trÙ Åằc biẻt vĂ cŸc ma trºn Åằc biẻt. MATLAB cĩ mổt sõ hĂm Åè tưo ra cŸc ma trºn Åằc biẻt. 2.2.1 Ma trºn ma phừỗng (magic( n ) ) Ma phừỗng bºc n lĂ ma trºn vuỏng cÃp n bao góm cŸc sõ nguyÅn tữ 1 Åặn n2. CŸc sõ nguyÅn Åừỡc sºp xặp sao cho tọng cŸc phÀn tứ trÅn mổt hĂng, mổt cổt, Åừộng chẫo lĂ b±ng nhau. HĂm cða ma trºn ma phừỗng tọng quŸt chì cÀn mổt tham sõ lĂ bºc cða nĩ. Vẽ dũ: >> magic(4) Phần I - Cơ sở 19
  31. Ch−ơng 2 - Ma trận vμ các phép toán ans = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 2.2.2 Ma trºn 0 ( zeros ) HĂm zeros(m,n) lĂ ma trºn cĩ kẽch thừốc mxn chửa toĂn sõ 0. Nặu tham sõ cða hĂm chì cĩ 1 giŸ trÙ thệ hĂm lĂ ma trºn vuỏng. Šè tưo ra ma trºn 0, dùng hĂm zeros(n), zeros(m,n), zeros(A) vối A lĂ ma trºn bÃt kỹ. Vẽ dũ: >> zeros ( 4 , 4 ) ans = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.2.3 Ma trºn 1 ( ones ) HĂm ones Åừỡc ÅÙnh nghỉa giõng nhừ hĂm zeros nhừng sõ 0 Åừỡc thay bời sõ 1. vẽ dũ: >> ones( 4 , 4 ) ans = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2.2.4 Ma trºn Åừộng chẫo Åằc biẻt (Identity Matrix) Ma trºn Åừộng chẫo lĂ ma trºn cĩ cŸc phÀn tứ n±m trÅn Åừộng chẫo chẽnh lĂ 1, cín cŸc phÀn tứ ờ vÙ trẽ khŸc lĂ 0. Vẽ dũ: >> eye ( 4 ) Phần I - Cơ sở 20
  32. Ch−ơng 2 - Ma trận vμ các phép toán ans = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 Chợ ỷ lĂ khỏng chì cĩ ma trºn vuỏng mối cĩ Åừộng chẫo chẽnh mĂ khŸi niẻn nĂy cín mờ rổng cho că ma trºn chự nhºt. 2.2.5 Ma trºn Åừộng chẫo mờ rổng eye( m,n ) LĂ ma trºn Åừộng chẫo mờ rổng vối ma trºn hệnh chự nhºt cĩ m hĂng, n cổt. CŸc phÀn tứ cĩ chì sõ hĂng vĂ cổt b±ng nhau cĩ giŸ trÙ lĂ 1, tưi cŸc vÙ trẽ khŸc cŸc phÀn tứ cĩ giŸ trÙ lĂ khỏng. Khi hĂm chì cĩ 1 giŸ trÙ tham sõ thệ ma trºn Åừộng chẫo mờ rổng sÁ trờ thĂnh ma trºn Åừộng chẫo. Ma trºn nĂy Åừỡc tưo ra bời hĂm eye(m,n); eye(n); eye (C) (giõng cŸc ÅÙnh nghỉa trÅn). Vẽ dũ: >> eye ( 4,5 ) ans = 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 2.2.6 Ma trºn Pascal ( pasca (n) ) LĂ ma trºn chửa cŸc giŸ trÙ cða tam giŸc Pascal. Vẽ dũ: >> pascal(4) ans = 1 1 1 1 1 2 3 4 1 3 6 10 1 4 10 20 2.2.7 CŸc ma trºn dằc biẻt khŸc Phần I - Cơ sở 21
  33. Ch−ơng 2 - Ma trận vμ các phép toán compan Companion matrix. gallery Several small test matrices. hadamard Hadamard matrix. hankel Hankel matrix. hilb Hilbert matrix. invhilb Inverse Hilbert matrix. kron Kronecker tensor product. rosser Classic symmetric eigenvalue test problem. toeplitz Toeplitz matrix. vander Vandermonde matrix. wilkinson Wilkinson's eigenvalue test matrix. 2.3 CŸc phẫp toŸn vỏ hừống 2.3.1 Bièu thửc sõ hàc: Phẫp toŸn Bièu thửc sõ hàc MATLAB Cổng a + b a + b Trữ a - b a - b Nh¿n a x b a * b Chia a/b a/b Chia phăi a : b a : b Chia trŸi b : a b : a Luỵ thữa ab a ^ b Vẽ dũ: >> a = 3 ; b = 1.2; % Phẫp nhºp dự liẻu >> a + b % Phẫp cổng ( trữ ) ans = Phần I - Cơ sở 22
  34. Ch−ơng 2 - Ma trận vμ các phép toán 4.2000 >> a/b % Phẫp chia ( nh¿n ) ans = 2.5000 >> b : a % Phẫp chia trŸi ans = 1.2000 2.200 >> a^b % Phẫp lủy thữa ans = 3.7372 2.3.2 Thử tỳ ừu tiÅn cða cŸc toŸn tứ: Tuy nhiÅn mổt sõ toŸn tứ cĩ thè kặt hỡp trong mổt bièu thửc sõ hàc, khi Åĩ Åiậu quan tràng nhÃt lĂ phăi biặt thử tỳ ừu tiÅn cða cŸc toŸn tứ trong bièu thửc. Thử tỳ ừu tiÅn ToŸn tứ 1 Ngoằc Åỗn 2 luỵ thữa 3 nh¿n vĂ chia, tữ trŸi qua phăi 4 cổng vĂ trữ, tữ trŸi qua phăi Vẽ dũ: x3 - 2x2 + x - 6.3 x2 + 0.05005x - 3.14 Nặu x lĂ mổt giŸ trÙ vỏ hừống thệ giŸ trÙ cða f sÁ Åừỡc tẽnh theo cŸc lẻnh sau: >> numerator = x^3 - 2*x^2 + x - 6.3; >> denominator = x^2 + 0.05005*x - 3.14; >> f = numerator/ denominator; 2.3.3 CŸc phẫp toŸn Åõi vối vector Phẫp toŸn Cỏng thửc Viặt dừối dưng Matlab Phần I - Cơ sở 23
  35. Ch−ơng 2 - Ma trận vμ các phép toán Cổng a + b a + b Trữ a – b a - b Nh¿n măng a x b a.*b Chia phăi măng a/b a./b Chia trŸi măng b/a a.\b Luỵ thữa măng ab a.^b CŸc phẫp toŸn trÅn khỏng chì Ÿp dũng giựa cŸc ma trºn cĩ kẽch thừốc b±ng nhau mĂ cín Ÿp dũng giựa cŸc Åưi lừỡng vỏ hừống vĂ Åưi cĩ hừống. Vẽ dũ: B = 3*A; C = A/5; B = A.*; C = A./5; Vẫc tỗ B vĂ C lĂ vẫc tỗ cĩ kẽch thừốc b±ng vẫc tỗ A. Xẫt hai vẫc tỗ nhừ sau: >> A = [ 2 5 6 ] >> B = [ 2 3 5 ] Tẽch hai vẫc lĂ sÁ Åừỡc viặt nhừ sau: >> C = A.*B; Vẫc tỗ C sÁ chửa cŸc phÀn tứ nhừ sau: C = [ 4 15 30 ] Matlab cĩ hai phẫp chia: Chia trŸi : C = A./B; % GiŸ trÙ cða C thu Åừỡc sÁ lĂ: C = [ 1 1.667 1.2 ] Chia phăi: C = A.\B; % GiŸ trÙ cða C thu Åừỡc sÁ lĂ: C = [ 1 0.6 0.883 ] ToŸn tứ mủ Åõi vối vẫc tỗ: C = A.^2; % C = [ 4 25 36 ] D = A.^B; % D = [ 4 125 7776 ] E = 3.0.^A; % E = [ 9 243 729 ] Lẻnh nĂy cín cĩ thè viặt lĂ: E = (3).^A; Chợ ỷ: E = 3.^A; % sÁ Åừỡc xẫt sau. E = 3 .^A; % Nặu cĩ khoăng trõng giựa sõ 3 vĂ dÃu chÃm thệ Åợng CŸc vẽ dũ trừốc xẫt cho cŸc vẫc tỗ, nhừng kặt quă vạn Åợng cho cŸc ma trºn hĂng vĂ cổt. Xẫt cŸc lẻnh sau: C = [ 1:5; -1:-1:-5 ]; Phần I - Cơ sở 24
  36. Ch−ơng 2 - Ma trận vμ các phép toán Z = ones(D); S = D - Z; P = D.*S; SQ = D.^3; Kặt quă thu Åừỡc sÁ lĂ nhựng ma trºn nhừ sau: D = 1 2 3 4 5 Z = 1 1 1 1 1 -1 -2 -3 -4 -5 1 1 1 1 1 S = 0 1 2 3 4 P = 0 2 6 12 20 -2 -3 -4 -5 -6 2 6 12 20 30 S = 1 8 27 64 125 -1 -8 -27 -64 -125 Thỏng thừộng, cŸc dự liẻu kỵ thuºt Åừỡc lừu dừối dưng ma trºn. Šè xứ lỷ chợng mổt cŸch thuºn tiẻn, phÀn mậm Matlab Åừỡc x¿y dỳng góm nhiậu hĂm cĩ thè xứ lỷ cŸc sõ liẻu dừối dưng ma trºn. 2.4. CŸc phẫp toŸn Åõi vối ma trºn 2.4.1 Ma trºn chuyèn vÙ Ma trºn chuyèn vÙ cða ma trºn A lĂ mổt ma trºn mối, trong Åĩ cổt cða ma trºn mối lĂ hĂng cða ma trºn gõc. Kẽ hiẻu lĂ AT. Vẽ dũ: A = 1 1 1 1 1 2 3 4 1 1 AT = 1 2 1 3 Phần I - Cơ sở 25
  37. Ch−ơng 2 - Ma trận vμ các phép toán 1 4 CŸc phÀn tứ hĂng cða ma trºn A trờ thĂnh phÀn tứ cổt cða ma trºn AT. Trong Matlab ngừội ta kẽ hiẻu ma trºn chuyèn vÙ lĂ A'. Ngừội ta sứ dũng toŸn tứ ma trºn chuyèn vÙ Åè chuyèn vectỗ hĂng thĂnh vectỗ cổt vĂ ngừỡc lưi. 2.4.2 Tẽch vỏ hừống lĂ tẽch cða hai ma trºn cùng cở Kẽ hiẻu toŸn hàc lĂ: dot-product = A.B = Σ ai.bi Trong Matlab: dot-product = sum(A.*B); Nặu că A vĂ B Åậu lĂ vectỗ cổt hoằc hĂng thệ A.*B củng lĂ mổt vectỗ. Nặu A lĂ vectỗ hĂng vĂ B lĂ vectỗ cổt thệ tẽch vỏ hừống Åừỡc tẽnh nhừ sau: dot-product = sum(A'.*B) = sum(A.*B'); Vẽ dũ: >> A = [ 1 2 3; 4 5 6 ]; >> B = [ 3 4 5; 6 7 8]; >> C = A.*B % Phẫp nh¿n vỏ hừống 2 ma trºn A vĂ B C = 3 8 15 24 35 48 >> sum(C) ans = 27 43 63 2.4.3 Nh¿n ma trºn C = AB Trong Åĩ: Ci,j = Σ AikBkj Sõ hĂng cða ma trºn A phăi b±ng sõ cổt cða ma trºn B. Chợ ỷ lĂ AB#BA (cĩ thè tón tưi tẽch AB nhừng khỏng tón tưi tẽch BA). Kẽ hiẻu phẫp nh¿n ma trºn trong Matlab: Vẽ dũ: Vối dự liẻu cho trong hai ma trºn A vĂ B. Phẫp nh¿n ma trºn Åừỡc thỳc hiẻn dừối Å¿y. Phần I - Cơ sở 26
  38. Ch−ơng 2 - Ma trận vμ các phép toán >> B = B’; % Šăo ma trºn B Åè cĩ sõ hĂng, cổt thẽch hỡp cho >> C = A* B; % phẫp nh¿n ma trºn A,B C = 26 44 62 107 * Phẫp luỵ thữa: Cợ phŸp: A^k =(A*A* *A) #A.^k >> A = [ A(:,1) A( :,2)] % Chẽch 2 cổt 1 vĂ 2 cða ma trºn A Åè tưo A = % ma trºn A vuỏng cho phẫp luỵ thữa 1 2 4 5 >> C = A^3 % Phẫp lủy thữa cða ma trºn A C = 57 78 156 213 2.4.4 CŸc thao tŸc ma trºn: a) Rotation (phẫp quay): Cợ phŸp: >> B = rot90(A); CŸc phÀn tứ cða ma trºn A Åừỡc quay mổt gĩc 90o theo ngừỡc chiậu kim Åóng hó. Vẽ dũ: 2 1 0 0 -1 6 A = -2 5 -1 ==> B = rot90(A) = 1 5 4 3 4 6 2 -2 3 HĂm rot90 củng cĩ tham sõ thử hai Åè xŸc ÅÙnh thỳc hiẻn sõ lÀn quay cða cŸc phÀn tứ trong ma trºn A. Vẽ dũ: >> B = rot90(A); Phần I - Cơ sở 27
  39. Ch−ơng 2 - Ma trận vμ các phép toán >>C = rot90(B); Hai díng lẻnh trÅn từỗng Åừỗng vối díng lẻnh sau vối tham sõ lÀn quay lĂ 2 >> C = rot90(A,2); b) Šăo ma trºn: Trong Matlab cĩ hai hĂm Åừỡc sứ dũng Åè Åăo mổt ma trºn tưo ra ma trºn mối: fliplr(A) hĂm Åăo cŸc phÀn tứ cða ma trºn ma trºn A tữ trŸi sang phăi. Vẽ dũ: >> A = [ 1 2 3 4 5 6 7 8 9 ]; >> B = fliplr(A) B = 3 2 1 6 5 4 9 8 7 flipud(B) hĂm Åăo cŸc phÀn tứ cða ma trºn B tữ trÅn xuõng dừối. Ma trºn thu Åừỡc kặt quă nhừ sau: >> C = flipud (B) C = 9 8 7 6 5 4 3 2 1 c) Reshape: HĂm nĂy cho phẫp ÅÙnh dưng lưi ma trºn vối sõ hĂng vĂ sõ cổt khŸc vối ma trºn gõc. Sõ phÀn tứ cða ma trºn gõc vĂ ma trºn Åơ ÅÙnh dưng lưi phăi b±ng nhau. HĂm cĩ ba tham sõ: tham sõ ÅÀu lĂ ma trºn gõc, hai tham sõ cín lưi lĂ sõ hĂng vĂ sõ cổt cða ma trºn mối. Vẽ dũ: 2 1 0 A = -2 5 -1 Phần I - Cơ sở 28
  40. Ch−ơng 2 - Ma trận vμ các phép toán 3 4 6 >> B = reshape(A,1,9) B = 2 -2 3 1 5 4 0 -1 6 d) Trẽch cŸc phÀn tứ tữ mổt ma trºn CŸc hĂm diag, triu, tril cho phẫp trẽch cŸc phÀn tứ tữ mổt ma trºn. Cĩ 3 hĂm liÅn quan tối Åừộng chẫo chẽnh: diag(A) LÃy cŸc phÀn tứ trÅn Åừộng chẫo chẽnh vĂ lừu vĂo mổt vectỗ cổt. diag(A,k) Chàn Åừộng chẫo tuỹ thuổc giŸ trÙ k. k=0 chàn Åừộng chẫo chẽnh. k>0 chàn Åừộng chẫo thử k ờ trÅn Åừộng chẫo chẽnh k > A = [1 2 3 4; 5 6 7 8; 9 10 11 12]; CŸc hĂm trẽch phÀn tứ cða ma trºn Åừỡc viặt vĂ thè hiẻn kặt quă trÅn mĂn hệnh thè hiẻn : >> diag(A) % Vector Åừộng chẫo cða A ans = 1 Phần I - Cơ sở 29
  41. Ch−ơng 2 - Ma trận vμ các phép toán 6 11 >> diag(A,-1) % Vector Åừộng chẫo dừối, vÙ trẽ sõ 1cða A ans = 5 10 >> B=triu(A) % PhÀn trÅn cða ma trºn Åừỡc lừu vĂo B % CŸc phÀn tứ cín lưi Åừỡc cho = 0 B = 1 2 3 4 0 6 7 8 0 0 11 12 >> B = triu(A,-1) % PhÀn trÅn cða ma trºn tẽnh tữ Åừộng chẫo -1 Åừỡc lừu vĂo B % CŸc phÀn tứ cín lưi Åừỡc cho = 0 B = 1 2 3 4 5 6 7 8 0 10 11 12 >>B = tril(A) % PhÀn dừối cða ma trºn Åừỡc lừu vĂo B B = % CŸc phÀn tứ cín lưi Åừỡc cho = 0 1 0 0 0 5 6 0 0 9 10 11 0 >> B = tril(A,-1) % PhÀn dừối cða ma trºn tẽnh tữ Åừộng chẫo -1 Åừỡc lừu vĂo % B. CŸc phÀn tứ cín lưi Åừỡc cho = 0 B = 0 0 0 0 5 0 0 0 9 10 0 0 Phần I - Cơ sở 30
  42. Ch−ơng 3 - Lập trình trong Matlab Ch−ơng 3 Lºp trệnh trong matlab 3.1 CŸc phÀn tứ cỗ băn cho chừỗng trệnh 3.1.1 Giối hưn cða cŸc giŸ trÙ tẽnh toŸn trong 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Ù cða x vĂ y n±m trong khoăng cho phẫp. Nhừng giŸ trÙ cða z lĂ 2.5e400 lưi n±m ngoĂi khoăng giŸ trÙ cho phẫp. Lồi nĂy Åừỡc gài lĂ trĂn sõ mủ trÅn (exponent overflow). GiŸ trÙ cða 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 diÍn 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 diÍn lĂ 0. Chia cho 0 lĂ mổt toŸn tứ khỏng hỡp lẻ. Nặu mổt giŸ trÙ cĩ hưn Åừỡc chia cho 0, kặt quă nhºn Åừỡc sÁ lĂ ∝. Phần I - Cơ sở 31
  43. Ch−ơng 3 - Lập trình trong Matlab Matlab sÁ in ra mổt lội cănh bŸo 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 [ ] Dưng ma trºn. Dùng Åè quy ừốc cho viẻc bièu diÍn hay vĂo sõ liẻu cho cŸc biặn vector hay ma trºn. CŸc phÀn tứ trong biặn Åĩ Åừỡc cŸch nhau 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 nhau bời dÃu ‘;’ hay Enter. vẽ dũ: >> a = [ 1 2 3 ; 4 5 6 ; 7 8 9 ] ans = 1 2 3 4 5 6 7 8 9 ( ) Dưng chì sõ. DĂnh cho cŸc biặn cða hĂm hay cŸc chì sõ cŸc phÀn tứ trong ma trºn khi 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 cða lẻnh ờ díng sau % PhÀn chợ giăi díng lẻnh Åừỡc ghi sau dÃu nĂy dùng Åè hièu rò nghỉa 1 díng lẻnh chử khỏng tham gia vĂo chừỗng trệnh : CŸch ghi tọng quŸt ma trºn \n DÃu hiẻu tưo 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 CŸc biặn nĂy cĩ giŸ trÙ ăo √-1 Inf Biặn nĂy Åưi diẻn cho giŸ trÙ ∝ cða MATLAB, thè hiẻn kặt quă chia cho 0. Mổt lội cănh bŸo sÁ hiẻn ra, nặu bưn muõn hièn thÙ kặt quă Phần I - Cơ sở 32
  44. Ch−ơng 3 - Lập trình trong Matlab chia cho 0, giŸ trÙ hièn thÙ lĂ ∝. NaN GiŸ trÙ vỏ ÅÙnh, bièu thửc khỏng xŸc ÅÙnh: 0 chia 0. clock HĂm cho biặt giŸ trÙ cða thội gian hiẻn tưi bao góm nâm, thŸng, ngĂy, giộ, phợt, gi¿y. date HĂm cho biặt giŸ trÙ hiẻn tưi cða ngĂy Åừỡc cho bời 1 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 trong 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 trong 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ự trong cŸc vector vối mồi phÀn tứ cða vector lĂ 1 kỷ tỳ. CŸc kỷ tỳ Åừỡc lừu trự trong vector dừối dưng mơ ASCII cða chẽnh nĩ, tuy nhiÅn khi hièn thÙ trÅn mĂn hệnh díng kỷ tỳ sÁ Åừỡc xuÃt hiẻn chử khỏng phăi mơ cða chợng. Viẻc xŸc ÅÙnh vÙ trẽ cða mồi phÀn tứ cða biặn string thỏng qua chì sõ cða nĩ trong vector. Ma trºn cða cŸc kỷ tỳ hay string củng cĩ thè Åừỡc sứ dũng nhừng mồi phÀn tứ trong Åĩ phăi b±ng nhau. 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 : 1 Phần I - Cơ sở 33
  45. Ch−ơng 3 - Lập trình trong Matlab newname ( i ) = name( length(name) + 1 - i ); end d = newname; end b) Dùng 1 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 nhau tưo ra 1 string mối. >> text1 = ‘ Tỏi ‘; text2 = ‘ yÅu ‘; >> text = [ text1’’text2’’name ] >> text ans = Tỏi yÅ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Ă 1 vector vối cŸc phÀn tứ cða vector lĂ cŸc mơ ASCII cða cŸc kỷ tỳ trong chuồi str. setstr ( x ) Chuyèn vector x vối cŸc phÀn tứ lĂ cŸc sõ nguyÅn trong khoăng 0 -> 255 thĂnh chuồi str theo mơ ASCII. num2str ( f ) 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. Lẻnh nĂy thừộng Åi cùng vối disp, x label hay cŸc lẻnh truy xuÃt ÅÀu ra khŸc. GiŸ trÙ mằc ÅÙnh lĂ 4 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õ nguyÅn n thĂnh chuồi 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 chuồi string ph¿n thửc xÃp xì cho viẻc bièu diÍn 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
  46. Ch−ơng 3 - Lập trình trong Matlab hex2num (hstr ) Chuyèn Åọi sõ theo hẻ hexa thĂnh chuồi string bièu diÍn cŸc sõ theo hẻ dec bao góm că dÃu phÁy Åổng. hex2dec (hstr) Chuyèn Åọi sõ theo hẻ hexa thĂnh chuồi string bièu diÍn cŸc sõ nguyÅn theo hẻ dec. dec2hex ( n ) Chuyèn Åọi sõ theo hẻ dec thĂnh chuồi 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 trºn. 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 trºn cĩ cùng 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 cŸc phÀn tứ cða ma trºn Åơ cho. Tham biặn vĂ tham trÙ cða hĂm Åừỡc Åằt trong dÃu ngoằc Åỗn Åi cùng vối tÅn hĂm. HĂm cĩ thè khỏng cĩ hoằc cĩ nhiậu tham sõ phũ thuổc 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ỳ cða nĩ. Mổt sõ hĂm Åíi hịi truyận tham sõ theo nhựng Åỗn vÙ quy ÅÙnh. Vẽ dũ nhừ cŸc hĂm lừỡng giŸc thệ Åỗn vÙ cða cŸc tham sõ phăi lĂ radian. Trong Matlab, mổt sõ hĂm sứ dũng tham sõ Åè truyận giŸ trÙ ÅÀu ra. 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 ra. CŸc hĂm nĂy khỏng Åừỡc Åằt ờ bÅn phăi dÃu b±ng 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 tÅn hĂm Åừỡc viặt b±ng chự thừộng trữ khi bưn sứ dũng lẻnh case off. 3.2.1 HĂm toŸn hàc cỗ băn: abs(x) HĂm tẽnh giŸ trÙ tuyẻt Åõi cða 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ậ 0 Phần I - Cơ sở 35
  47. Ch−ơng 3 - Lập trình trong 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Ù b±ng 0 nặu x b±ng 0, cĩ giŸ trÙ lĂ 1 nặu x lốn hỗn 0 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 ra Åổ 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, khi x cĩ Åỗn vÙ Åo lĂ radian cos(x) Tẽnh cos cða gĩc x, khi x cĩ Åỗn vÙ Åo lĂ radian tan(x) Tẽnh cos cða gĩc x, khi x cĩ Åỗn vÙ Åo lĂ radian asin(x) Tẽnh arcsine cða x, khi x n±m trong khoăng [-1,1], hĂm tră lưi gĩc cĩ giŸ trÙ radian trong khoăng -π/2 Åặn π/2 acos(x) Tẽnh arccosine cða x, khi x n±m trong khoăng [-1,1], hĂm tră lưi gĩc cĩ giŸ trÙ radian trong khoăng 0 Åặn π atan(x) Tẽnh arctangent cða x trong khoăng -π/2 Åặn π/2 atan2(x,y) Tẽnh arctangent cða y/x trong khoăng -π Åặn π, tuỹ thuổc vĂo dÃu cða x vĂ y Vẽ dũ: >> x = -2*pi: 2: 2*pi % Tưo lºp vector x vối cŸc giŸ trÙ tữ -2pi - 2pi x = -6.2832 -4.2832 -2.2832 -0.2832 1.7168 3.7168 5.7168 >> sin(x) Phần I - Cơ sở 36
  48. Ch−ơng 3 - Lập trình trong 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 cða hyperbolic sine cða x acosh(x) HĂm tẽnh nghÙch Åăo cða hyperbolic cosine cða x atanh(x) HĂm tẽnh nghÙch Åăo cða 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 1 through 4 -0.1605 + 1.5708i -0.2379 + 1.5708i -0.4697 + 1.5708i -0.2911 Columns 5 through 7 0.6662 + 1.5708i 0.2758 + 1.5708i 0.1767 + 1.5708i 3.3 CŸc dưng file Åừỡc sứ dũng trong MATLAB 3.3.1 Script file (M-files ) CŸc chừỗng trệnh, thð tũc bao góm cŸc díng lẻnh theo mổt thử tỳ nĂo Åĩ do ngừội sứ dũng viặt ra Åừỡc lừu trự trong cŸc files cĩ phÀn mờ rổng lĂ *.m. File dưng nĂy cín Åừỡc gài lĂ script file. File Åừỡc lừu dừối dưng kỷ tỳ ASCII vĂ cĩ thè sứ dũng cŸc chừỗng trệnh soưn thăo nĩi chung Åè tưo nĩ. Phần I - Cơ sở 37
  49. Ch−ơng 3 - Lập trình trong Matlab Bưn cĩ thè chưy file nĂy giõng nhừ cŸc lẻnh, thð tũc cða 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 M- file khỏng Åừỡc hièn thÙ lÅn mĂn hệnh. Vậ cÃu trợc ngỏn ngự, toŸn tứ hay cŸc bổ lẻnh cða *.m file, chợng tỏi xin giối thiẻu kỵ hỗn ờ phÀn sau. VĂ dừối Å¿y lĂ mổt sõ lẻnh hẻ thõng từỗng tŸc vối *.m files thừộng gằp. echo Lẻnh cho phẫp xem cŸc lẻnh cĩ trong *.m files khi chợng Åừỡc thỳc hiẻn 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 tÃt că cŸc 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Ă 1 vẽ dũ Åỗn giăn nhÃt Åừa ra díng lẻnh HELLO ra mĂn hệnh cùng vối 1 sõ yÅu cÀu. File tưo thĂnh Åừỡc lừu trự dừối tÅn HELLO.m % chừỗng trệnh hello.m , Vẽ dũ vậ phÀn lºp trệnh trong Matlab. % Xin chĂo bưn ! Hơy lĂm quen vối tỏi disp ( ‘ Xin chĂo ! Bưn lĂ ai ? ‘); name = input ( ‘ TÅn bưn lĂ gệ ‘ ); d = date ; answer = [ ‘ Hello ‘ name ‘ ! Hỏm nay lĂ ngĂy ‘ d ] disp ( answer ); disp ( ‘ Chợc bưn 1 ngĂy tõt lĂnh ‘ ) ; Sau cŸc kỷ tỳ % lĂ chì dạn cho hoưt Åổng cða file.m. Nĩ khỏng tham gia vĂo hoưt Åổng cða chừỗng trệnh vĂ củng khỏng hièn thÙ lÅn mĂn hệnh trữ khi ta dùng lẻnh help + tÅn file. >> help hello Chừỗng trệnh hello.m , Vẽ dũ vậ phÀn lºp trệnh trong Matlab. Xin chĂo bưn ! Hơy lĂm quen vối tỏi 3.3.2 HĂm vĂ tưo hĂm trong Matlab Phần I - Cơ sở 38
  50. Ch−ơng 3 - Lập trình trong Matlab CŸc hĂm do ngừội sứ dũng viặt củng Åừỡc lừu trong M-file. Chợng Åừỡc sứ dũng giõng nhừ cŸc hĂm cða Matlab. CŸc file hĂm phăi Åừỡc viặt theo mổt quy ÅÙnh chằt chÁ. * CŸc quy tºc viặt hĂm M-files Function: 1. HĂm phăi Åừỡc bºt ÅÀ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 trong 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 nhau giựa file hĂm vĂ cŸc file script. 2. Mổt sõ díng ÅÀu tiÅn nÅn viặt chợ thẽch cho hĂm. Khi sứ dũng lẻnh help vối tÅn hĂm, chợ thẽch cða hĂm sÁ Åừỡc hièn thÙ. 3. CŸc thỏng tin tră lưi cða hĂm Åừỡc lừu vĂo tham sõ (ma trºn) ÅÀu ra. Vệ vºy luỏn kièm tra chºc chºn r±ng trong hĂm cĩ chửa c¿u lẻnh Ãn ÅÙnh giŸ trÙ cða tham sõ ÅÀu ra. 4. 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 ra vệ cŸc hĂm vĂ cŸc chừỗng trệnh Åậu Åừỡc thỳc hiẻn mổt cŸch tŸch biẻt. CŸc giŸ trÙ tẽnh toŸn trong hĂm, tham sõ ÅÀu ra khỏng chÙu tŸc Åổng cða chừỗng trệnh. 5. Nặu mổt hĂm cho nhiậu hỗn mổt giŸ trÙ ÅÀu ra phăi viặt tÃt că cŸc giŸ trÙ tră lưi cða hĂm thĂnh mổt vec tỗ trong díng khai bŸo hĂm. Vẽ dũ: function [ dist, vel, accel ] = motion(x) % Că ba giŸ trÙ phăi Åừỡc tẽnh toŸn trong hĂm 6. Mổt hĂm cĩ nhiậu tham sõ ÅÀu vĂo cÀn phăi liẻt kÅ chợng khi khai bŸo hĂm. Vẽ dũ: function error = mse(w, d) 7. CŸc biặn Åằc biẻt nargin vĂ nargout xŸc ÅÙnh sõ tham sõ ÅÀu vĂo, sõ tham sõ ÅÀu ra Åừỡc sứ dũng trong hĂm. CŸc 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 trºn thệ giŸ trÙ tră lưi sÁ lĂ Phần I - Cơ sở 39
  51. Ch−ơng 3 - Lập trình trong Matlab % mổt ma trºn từỗng ửng vối mồi phÀn tứ cĩ giŸ trÙ lĂ % chu vi cða Åừộng trín cĩ bŸn kẽnh từỗng ửng vối mồi % phÀn tứ cða 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ự trong cŸc files dự liẻu. Matlab ph¿n biẻt hai loưi file dự liẻu khŸc nhau Mat-files vĂ ASCII files. Mat-files lừu cŸc dự liẻu ờ dưng sõ nhÙ ph¿n, cín cŸc ASCII file lừu cŸc dự liẻu dừối dưng cŸc kẽ tỳ ASCII. Mat-file thẽch hỡp cho dự liẻu Åừỡc tưo ra hoằc Åừỡc sứ dũng bời chừỗng trệnh Matlab. ASCII file Åừỡc sứ dũng khi cŸc dự liẻu Åừỡc chia sÀ (export - import) vối cŸc chừỗng trệnh khŸc cŸc chừỗng trệnh cða Matlab. Khi muõn 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 cŸc chừỗng trệnh soưn thăo nĩi chung hay cŸc chừỗng trệnh soưn thăo b±ng ngỏn ngự mŸy. Nĩ củng cĩ thè Åừỡc tưo ra 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 2 loưi Mat-files vĂ ASCII files. Šè gài ma trºn loưi 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 t Phần I - Cơ sở 40
  52. Ch−ơng 3 - Lập trình trong Matlab Viẻc lÃy dự liẻu ra Åưt Åừỡc qua biặn t thỏng qua lẻnh load. CŸc tham sõ cÀn Åặn dự liẻu sÁ lÃy qua biến t. >> load dl1 >> x = t ( : , 1 ); >> y = t ( : , 2 ); >> 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 Lốn hỗn >= Lốn hỗn hoằc b±ng == 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 trºn cĩ cùng kẽch thừốc, kặt quă sinh ra mổt ma trºn cùng cở cĩ cŸc phÀn tứ nhºn giŸ trÙ 1 nặu phẫp so sŸnh lĂ Åợng, ngừỡc lưi phÀn tứ nhºn giŸ trÙ 0. Kặt quă cða phẫp toŸn quan hẻ Åừỡc gài lĂ băng sỳ thºt (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 sŸnh cŸc băng sỳ thºt giõng nhừ cŸc toŸn tứ quan hẻ. Bièu thửc logic luỏn lĂ hỡp lẻ nặu 2 băng sỳ thºt cĩ kẽch thừốc b±ng nhau. Trong Phần I - Cơ sở 41
  53. Ch−ơng 3 - Lập trình trong 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ứ trong bièu thửc logic tữ cao Åặn thÃp lĂ not, and, or. Tuy nhiÅn, củng cĩ thè dùng ngoằc Åỗn Åè thay Åọi thử tỳ nĂy. Băng cŸc 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 tÃt că cŸc giŸ trÙ khŸc 0 Åậu Åừỡc coi lĂ Åợng (true), cín giŸ trÙ b±ng 0 Åừỡc coi lĂ sai (false). Chẽnh vệ vºy, phăi hặt sửc thºn tràng khi Å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) HĂm cho giŸ trÙ lĂ 1 nặu mổt phÀn tứ cða x khŸc 0, ngừỡc lưi cho giŸ trÙ 0 all(x) HĂm cho giŸ trÙ lĂ 1 nặu tÃt că cŸc phÀn tứ cða ma trºn x khŸc 0, ngừỡc lưi cho giŸ trÙ lĂ 0. find(x) HĂm tră lưi vector chửa chì sõ cða cŸc phÀn tứ khŸc 0 cða x. Nặu x lĂ mổt ma trºn thệ chì sõ Åừỡc chàn tữ x(:) vĂ lĂ mổt vertor cổt tưo nÅn bời cŸc cổt cða x. exist('A') HĂm tră lưi giŸ trÙ 1 nặu A lĂ biặn, lĂ 2 nặu A hoằc A.m lĂ file, lĂ 0 nặu A khỏng tón tưi trong vùng lĂm viẻc. TÅn biặn phăi Åừỡc Åằt trong dÃu nhŸy Åỗn. isnan(x) GiŸ trÙ tră vậ lĂ ma trºn ones nặu cŸc phÀn tứ cða ma trºn x lĂ NaN, ngừỡc lưi tră vậ ma trºn zeros. finite(x) GiŸ trÙ tră vậ lĂ ma trºn ones nặu cŸc phÀn tứ cða ma trºn x lĂ giŸ trÙ hựu hưn, tră vậ ma trºn zeros khi chợng lĂ vỏ hưn hoằc NaN. isempty(x) GiŸ trÙ tră vậ 1 nặu ma trºn x lĂ rồng, vĂ 0 nặu ngừỡc Phần I - Cơ sở 42
  54. Ch−ơng 3 - Lập trình trong Matlab lưi. isstr(x) GiŸ trÙ tră vậ lĂ 1 nặu x lĂ mổt x¿u, 0 nặu ngừỡc lưi. strcmp(y1,y2) So sŸnh hai x¿u y1,y2. GiŸ trÙ tră vậ lĂ 1 nặu 2 x¿u giõng hẻt nhau vĂ b±ng 0 nặu ngừỡc lưi. 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ĩ trong x¿u. 3.5. CÃu trợc c¿u lẻnh Åiậu kiẻn 3.5.1 Lẻnh if Åỗn Cợ phŸp: 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 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
  55. Ch−ơng 3 - Lập trình trong Matlab end nhĩm lẻnh D; Nặu bièu thửc Åiậu kiẻn 1 Åợng chừỗng trệnh sÁ thỳc hiẻn cŸc nhĩm lẻnh A vĂ C; nặu bièu thửc Åiậu kiẻn 2 Åợ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 1 sai chừỗng trệnh thỳc hiẻn ngay 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 lưi 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 khi 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ờ nÅn trong sŸng vĂ dÍ hièu hỗn. Cợ phŸp: 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 1 Åợng thệ thỳc hiẻn c¿u lẻnh A, nặu bièu thửc 1 sai vĂ bièu thửc 2 Åợng thệ chì cĩ nhĩm lẻnh B Åừỡc thỳc hiẻn. Nặu bièu thửc 1, 2 sai vĂ 3 Åợ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 tiÅn xŸc ÅÙ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 trong cÃu trợc if - elseif Åừỡc thi hĂnh. Cĩ thè kặt hỡp 2 mẻnh Åậ else vĂ elseif: Phần I - Cơ sở 44
  56. Ch−ơng 3 - Lập trình trong Matlab Cợ phŸp: 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ư cŸc cÃu trợc mẻnh Åậ c¿u Åiậu kiẻn. Chừỗng trệnh Åừỡc ghi trong file hello2.m % Chừỗng trệnh hello2 mỏ tă cÃu trợc c¿u Åiậu kiẻn trong Matlab % BĂi toŸn so sŸnh tuọi cða bưn vối sõ ngạu nhiÅn sinh ra bời hĂm rand disp ( ‘ Xin chĂo ! RÃt h¿n hưnh Åừỡc lĂm quen ‘); x = fix ( 30* rand ); disp ( ‘ Tuọi cða tỏi trong khoăng tữ 0-30 ‘); gu = input ( ‘ Šừa vĂo tuọi cða bưn : ‘); if gu x disp ( ‘ Bưn lốn hỗn tỏi ‘); else disp ( ‘ Tuọi bưn b±ng tuọi tỏi ‘); end 3.5.5. Cợ phŸp c¿u Åiậu kiẻn vĂ break Phần I - Cơ sở 45
  57. Ch−ơng 3 - Lập trình trong Matlab Cợ phŸp: if , break , end Tữ khoŸ break vối c¿u lẻnh if cho phẫp thoŸt ra khịi víng lằp nặu trong c¿u Åiậu kiẻn lĂ Åợng, ngừỡc lưi sÁ thỳc hiẻn nhĩm lẻnh tiặp theo trong víng lằp Åĩ. Vẽ dũ: Vậ nhºp mổt sõ dừỗng, nặu sõ Åĩ 1 if rem( n , 2 ) == 0 disp( ‘ Sõ dừỗng cho vĂo chia hặt cho 2 ‘, n ); break; else disp( ‘ Sõ dừỗng cho vĂo khỏng chia hặt cho 2 ! 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ợ phŸp: 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 lưi 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
  58. Ch−ơng 3 - Lập trình trong Matlab Chợ ỷ: Nặu trừộng hỡp ta khỏng biặt kẽch thừốc cða vectỗ, ta sứ dũng hĂm length Åè xŸc ÅÙ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 trºn 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 lÀn vĂ chì sõ nhºn giŸ trÙ cða Åưi lừỡng vỏ hừống. + Nặu bièu thửc ma trºn lĂ mổt vectỗ hĂng, sau mồi lÀn lằp chì sõ lưi lÃy giŸ trÙ tiặp theo cða vectỗ. + Nặu bièu thửc ma trºn lĂ ma trºn, 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õ nhºn 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õ lÀn thỳc hiẻn víng lằp sÁ Åừỡc tẽnh theo cỏng thửc sau: floor((kặt thợc-bºt ÅÀ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 thoŸt khịi víng lằp trừốc khi víng lằp thỳc hiẻn xong Åè dí lồi cĩ trong víng lằp, sứ dũng lẻnh break . Vẽ dũ mỏ tă cho víng lằp for Åừỡc ghi trong file hello3.m % Chừỗng trệnh hello2 mỏ tă cÃu trợc c¿u Åiậu kiẻn trong Matlab % BĂi toŸn dỳ ÅoŸn 1 sõ ngạu nhiÅn sinh ra tữ hĂm rand % cho bời cŸc lÀn thứ tưo bời víng lằp for x = fix ( 100* rand ); n = 7; test = 1; for k = 1:7 number = int2str( n); disp ( ‘ Bưn cĩ quyận dỳ ÅoŸn ‘ number ‘ lÀn ‘); Phần I - Cơ sở 47
  59. Ch−ơng 3 - Lập trình trong Matlab disp ( ‘ Sõ cÀn ÅoŸn n±m trong khoăng tữ 0 – 100 ‘); gu = input ( ‘ Šừa vĂo sõ bưn dỳ ÅoŸn ‘); if gu x disp ( ‘ Lốn hỗn ‘); else disp ( ‘ Xin chợc mững bưn Åơ ÅoŸn chẽnh xŸc ‘); test = 0; break end n = n-1; end if test > 0 disp ( ‘ Bưn khỏng ÅoŸn ra 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ợ phŸp: while 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ệ lưi kièm tra Åiậu kiẻn. Nặu Åiậu kiẻn vạn cín Åợng thệ nhĩm lẻnh A lưi Åừỡ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 nÅn cĩ cŸc biặn trong 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Ù quÁn. Šè thoŸt khịi víng lằp quÁn, ta sứ dũng Ctrl+C. Vẽ dũ: Phần I - Cơ sở 48
  60. Ch−ơng 3 - Lập trình trong Matlab % Chừỗng trệnh hello3 mỏ tă cÃu trợc c¿u Åiậu kiẻn while trong Matlab % BĂi toŸn cho ra 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 3 ‘); 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
  61. Ch−ơng 4 - Đồ hoạ hai chiều Ch−ơng 4 Đồ hoạ 2 chiều trong Matlab 4.1. Các phép biến đổi đồ hoạ Nghịch đảo ma trận vμ định thức đ−ợc giới thiệu trong phần nμy đ−ợc hình dung nh− các phép biến đổi tạo nên các phép chuyển vị của các thực thể hình học hay các vector trong cửa sổ đồ hoạ của Matlab. Nội dung của các phép biến đổi đó nhằm mô tả các ph−ơng pháp đ−ợc sử dụng trong hầu hết các lĩnh vực kỹ thuật khác nhau nh− đồ hoạ máy tính hay robotic. Ngoμi ra để có thể khai thác tiềm năng về đồ hoạ của Matlab chúng tôi cũng xin liệt kê các hμm t−ơng tác trên cửa sổ đồ hoạ của Matlab một cách chi tiết nhằm đem đến cho bạn một th− viện các hμm, hiệu ứng của các hμm cũng nh− ph−ơng pháp tiếp cận các hμm đó. 4.1.1. Quay hệ trục toạ độ trên mặt phẳng. y y1 P x1 α α x Hình 4.1. Quay hệ trục trên mặt phẳng. Phần 1 - Cơ sở 50
  62. Ch−ơng 4 - Đồ hoạ hai chiều Hình 4.1. hệ toạ độ của điểm P đ−ợc biểu diễn bởi các đ−ờng liền nét x, y vμ điểm P trên hệ trục biểu diễn bởi các đ−ờng đứt nét x1 vμ y1. x1 vμ y1 quay 1 góc α ng−ợc chiều kim đồng hồ so với 2 trục x, y. Quan hệ giữa hai cặp hệ trục toạ độ đ−ợc biểu diễn bởi công thức sau: x1 = x . cosα + y . sinα (4.1) y1 = - x sinα + y cosα (4.2) ⎡ x ⎤ ⎡x1 ⎤ cosαα sin với P = vμ P = ; A = ⎢ y ⎥ 1 ⎢ ⎥ ⎣ ⎦ ⎣y1 ⎦ -sinαα cos ta có thể viết 4.1 vμ 4.2 d−ới dạn sau: P1 = AP (4.3) Quan hệ nghịch đảo của hình 4.1 đ−ợc thể hiện nh− sau: x = x1 . cosα + y1 . sinα (4.4) y = - x1 . sinα + y1 . cosα (4.5) Điều đó có nghĩa ma trận biểu diễn phép quay 1 góc -α từ hệ toạ độ x1, y1 đến hệ toạ độ x, y lμ: cos α − sin α B = sin α cos α Lúc đó 4.4 vμ 4.5 đ−ợc viết thμnh P = B . B1 (4.6) 4.1.2. Nghịch đảo ma trận. Vậy quan hệ giữa A vμ B đ−ợc hiểu ra sao? Từ ph−ơng trình (4.5), (4.6) ta thấy rằng với 1 điểm P bất kỳ, sau hai phép chuyển ta đều thu đ−ợc chính nó. P = B A P nếu loại bỏ biến P ta có thể viết nh− sau: cosα −sinα sinα cosα 1 0 B.A= = sinα cosα −sinα cosα 0 0 t−ơng tự ta có: P1 = ABP1 Một lần nữa ta thấy rằng AB chính bằng ma trận đơn vị vμ chúng ta có thể phát triển ma trận B lμ ma trận nghịch đảo của A vμ chúng ta th−ờng biểu diễn A-1. Định nghĩa đ−ợc phát triển nh− sau: Phần 1 - Cơ sở 51
  63. Ch−ơng 4 - Đồ hoạ hai chiều Cho một ma trận vuông A, ma trận nghịch đảo A-1 của A lμ ma trận sao cho khi nhân phải hay trái với A đều cho ta kết quả lμ ma trận đơn vị I. A . A-1 = A-1 . A = I nghịch đảo ma trận 2 x 2 có thể dễ dμng tìm đ−ợc theo cách sau. Ví dụ a lμ các phần tử của ma trận nghịch đảo từ A, việc nhân A . B cho kết quả nh− sau: ⎡a11 a12 ⎤ ⎡b11 b12 ⎤ 1 0 ⎢ ⎥ ⎢ ⎥ = (4.8) ⎣a21 a22 ⎦ ⎣b21 b22 ⎦ 0 1 Từ ph−ơng trình (4.8) cho kết quả sau: a 22 b11 = (4.9) aa11 22− aa 21 22 −a12 b12 = (4.10) aa11 22− aa 21 12 −a21 b21 = (4.11) aa11 22− aa 21 12 a11 b22 = (4.12) aa11 22− aa 21 12 Từ đây chúng ta dễ dμng thu đ−ợ ma trận nghịch đảo B từ A. Tuy Matlab hμm nghịch đảo đ−ợc viết sẵn trong th− việc vμ đ−ợc gọi ra thông qua lệnh inv. Với lệnh inv (A) cho ra ma trận nghịch đảo của A. Ví dụ: - Quay hệ trục toạ độ đi một góc 300 sẽ đ−ợc viết nh− sau: >> alpha = 30 >> A=[cos(pi*alpha/180) sin(pi*alpha/180) -sin(pi*alpha/180) cos(pi*alpha/180)] A = 0.866 0.500 -0.500 0.866 - Ma trận nghịch đảo B tạo thμnh từ A >> B = inv(A) B = 0.866 -0.500 0.500 0.866 - Nhân 2 ma trận A vμ, kết quả thu đ−ợc nh− sau >> A * B ans = 1.000 0.000 Phần 1 - Cơ sở 52
  64. Ch−ơng 4 - Đồ hoạ hai chiều 0.000 1.000 - Quay trục qua điểm x = 3 , y = 7 >>P1 = A*[3 ; 7] P1 = 6.0981 4.5622 - Nghịch đảo lại ma trận hoμn trả lại toạ độ cho điểm >> P = B * P1 P = 3 7 4.1.3. Góc Euler. Góc Euler lμ thao số quy −ớc để mô tả việc quay trong hệ không gian 3 chiều hay hệ toạ độ trực giác. Những tham số trên có rất nhiều ứng dụng trong lĩnh vực cơ khí. Có một vμi cách định nghĩa khác nhau về góc Euler đ−ợc biết đến nh−: Meitrovitch (1970), Guggenheimer (1977) vμ Czichos (1989). ở bμi toán của chúng ta toạ độ của điểm P đ−ợc xác định bởi hệ 3 giá trị x, y, z vμ chúng ta phải xác định ra điểm t−ơng ứng x1, y1, z1 sau khi quay hệ toạ độ đi 1 góc. Việc xác định chiều quay âm/ d−ơng của hệ trục toạ độ thông qua quy tắc bμn tay phải. Theo hình 4.2 với công thức đ−ợc học trong phần đồ hoạ. Khi ta qua hệ toạ độ xung quanh trục z với một góc ψ. Điểm x*, y*, z* đ−ợc tạo thμnh sẽ đ−ợc mô tả theo công thức sau: x * cosψψ sin 0 x y * ==−XAX* sinψψ cos 0 y = . (4.13) z * 0 0 1 z Tiếp theo quay hệ trục quanh trục x với một góc θ. Hệ giá trị toạ độ mới của điểm thu đ−ợc đ−ợc viết d−ới công thức: x 1 0 0 x * y = X = 0 cosθ sinθ y * = B.X * (4.14) z 0 - sinθ cosθ z * B−ớc 3 quay hệ trục quanh trục z h−ớng ng−ợc lại 1 góc φ. Giá trị toạ độ cuối cùng thu đ−ợc sẽ lμ: Phần 1 - Cơ sở 53
  65. Ch−ơng 4 - Đồ hoạ hai chiều x1 cosφφ sin 0 x y1 = P1 = -sinφφ cos 0 y = CX (4.15) z1 0 0 1 z Kết quả 3 tiến trình quay: P1 = A B C X = DX (4.16) % Đoạn ch−ơng trình ví dụ cho việc quay ma trận d−ới các góc si, theta, fi function R = Elrotate (si, theta, fi) A = [cos(si) sin(si) 0 -sin(si) cos(si) 0 0 0 1]; B = [1 0 0 0 cos(theta) sin(theta) 0 -sin(theta) cos(theta)]; C = [cos(fi) sin(fi) 0 -sin(fi) cos(fi) 0 0 0 1]; R = C * B * A; Phép biến đổi Czichos (1989) đ−ợc biểu diễn d−ới công thức sau: Giả sử Cθ = cos (θ), Sθ = sin(θ) ta có ma trận quay CCφψ−+ SCS φθψ CC φψ SCS φθψ SS φθ R = −−SCφψ CCS φθψ −+ SS φψ CCC φθψ CS φθ 4.17) SSθψ− SC θ ψ C θ Ví dụ: Khi cho điểm P với các giá trị toạ độ [2. 5. 3] cho các góc quay lμ 30, 45, 200. Việc biểu diễn bằng Matlab đ−ợc viết nh− sau: >> R = Elrotate( 30*pi/180 , 45*pi/180 , 20*pi/180 ) R = 0.6929 0.6793 0.2418 -0.6284 0.4044 0.6645 0.3536 -0.6124 0.7071 >> X1 = R*[ 2 ; 5 ; 3 ] X1 = Phần 1 - Cơ sở 54
  66. Ch−ơng 4 - Đồ hoạ hai chiều 5.5077 2.7587 -0.2334 >> X = inv( R ) * X1 X = 2.0000 5.0000 3.0000 Trong hμm Elrotate tạo ra các biến trong A, B, C tuy nhiên khi kiểm tra bằng >> A hay dùng lệnh >>Who Các biến A, B, C cùng không xuất hiện vì A, B, C lμ các tham biến trong của hμm Elrotate vμ chỉ có tác dụng trong hμm. 4.2. Phép biến đổi Affine trong không gian 2D Các đối t−ợng hình hoạ đ−ợc mô tả trong ch−ơng nμy có một ý nghĩa hết sức quan trọng trong các ứng dụng của các lĩnh vực kỹ thuật hiện đại nh− đồ họa mμy tính hay robotics. Một nhóm các lệnh đ−ợc sử dụng th−ờng xuyên gọi lμ Affine transformation. Chúng bao gồm: translation, rotation, scaling ở đây chúng ta sẽ cùng xem xét việc thực hiện chúng trong Matlab. 4.2.1 Tọa độ thuần nhất Trong thực tế để biểu diễn các phép biến đổi Affine ng−ời ta th−ờng sử dụng phép biến đổi ma trận. Th−ờng đồ hoạ máy tính vμ kỹ thuật robotics đòi hỏi concatenation của vμi phép biến đổi. Điều đó đ−ợc thực hiện bởi 1 loại các phép nhân ma trận. Việc nhân các ma trận chuyển đổi đ−ợc thực hiện cùng với việc sử dụng hệ toạ độ thuần nhất. Để giới thiệu hệ toạ độ thuần nhất chúng ta giả sử có 1 điểm P trong hệ toạ độ Đề các với 2 giá trị toạ độ x, y. Việc biểu diễn P d−ới dạng hệ toạ độ thuần nhất sẽ đ−ợc viết nh− sau: x1 xx= 1 / W P = y1 yy= 1 / W z1 Nguyên nhân quan trọng trong việc biểu diễn theo hệ toạ độ thuần nhất lμ chúng cho phép biểu diễn các điểm ở xa vô cùng. Phần 1 - Cơ sở 55
  67. Ch−ơng 4 - Đồ hoạ hai chiều ψ ψ ψ ψ ψ ψ ψ ψ ψ ψ Hình 4.2 Quay thực thể quanh trục x3 Trong hệ toạ độ không gian th−ờng (x, y) để biểu diễn điẻm ở vô cùng ít nhất trong hai giá trị của điểm = α. Nh−ng trong hệ toạ độ thuần nhất, việc biểu diễn chỉ thông qua bằng cách cho giá trị W = 0 với x1, y1 lμ những số hữu hạn bất kỳ. Tuy nhiên chúng ta không đi sâu vμo điểm nμy, bạn đọc có thể tham khảo các tμi liệu về đồ hoạ máy tính vμ các bμi toán chiếu phối cảnh, ở đây chúng ta chỉ nói về ph−ơng pháp tạo ra các phép biến đổi trong không gian đồ hoạ. Với Hình 4.3 các điểm tạo nên hình vuông đ−ợc cho các giá trị nh− sau: −05. −05. 05. 05. PPPP1234= 0 , = 1 , ==1 , 1 1 1 1 1 Nh− chúng ta đã biết giá trị toạ độ thứ ba - W đ−ợc cho bằng 1, ở đây chúng ta đã sử dụng đến kỹ thuật phổ biến trong các bμi toán đồ hoạ vμ với Matlab chúng ta dễ dμng thể hiện bằng các câu lệnh sau: >> P1 = [-0.5; 0; 1]; P2 = [-0.5; 1; 1]; >> P3 = [0.5; 1; 1]; P4 = [0.5; 0; 1]; (Chú ý rằng ma trận P chứa 2 vector P1 dùng cho việc đóng hình vuông) Việc tạo ta hình vuông trên mμn đồ hoạ thông qua biến square >> square = [ P1 P2 P3 P4 P1 ] ; >> plot ( square( 1,: ), square( 2,: ) ) >> axis([-4 4 -1 5]); >> title ('hình vuông với tỉ lệ trục [ -4 4 -1 5 ]'); Phần 1 - Cơ sở 56
  68. Ch−ơng 4 - Đồ hoạ hai chiều hinh vuong voi ti le truc [ -4 4 -1 5 ] 1 5 0.8 4 3 0.6 2 0.4 1 0.2 0 0 -1 -0.5 0 0.5 -4 -2 0 2 4 Hình 4.3 a. Hình vuông chuẩn b. Hình vuông sau khi thay đổi tỉ lệ trục toạ độ việc tạo ta hình vuông trên mμn đồ hoạ thông qua biến square >> square = [ P1 P2 P3 P4 P1 ] ; >> plot ( square( 1,: ), square( 2,: ) ) >> axis([-4 4 -1 5]); >> title ('hình vuông với tỉ lệ trục [ -4 4 -1 5 ]') 4.2.2 Phép chuyển dịch Hμm biến đổi chuyển vị với các khoảng dx vμ dy song song trên 2 trục x vμ y. function T = Translate ( dx , dy ) T = [1 0 dx; 0 1 dy; 0 0 1]; % ma trận dịch chuyển trong hệ toạ độ đồng nhất 0 0 dx % T = 0 1 dy 0 0 1 Việc dịch chuyển hình vuông 1 khoảng đơn vị theo x vμ 2 khoảng đơn vị theo y đuợc thể hiện bằng các dòng lệnh: >> P = translate ( 1 , 2) * square >> plot ( P( 1 , : ), P ( 2 , : ) ); >> axis ( [-3 3 -1 3] ) >> title (' Hình vuông thay đổi vị trí theo dx vμ dy ') Phần 1 - Cơ sở 57
  69. Ch−ơng 4 - Đồ hoạ hai chiều hinh vuong dich theo dx=1, dy=2 5 4 3 2 1 0 -1 -4 -2 0 2 4 Hình 4.4 Hình vuông dịch chuyển theo độ dμi dx vμ dy 4.2.3. Phép quay Hμm quay quanh gốc toạ độ với một góc φ bất kỳ ng−ợc chiều kim đồng hồ đ−ợc viết. Function R = rotate (fi) cosφ − sin φ 0 %R = sinφφ cos 0 0 0 1 R = [cos(fi) -sin(fi) 0 sin(fi) cos(fi) 0 0 0 1] Hình vuông quay theo goc 45 4 3 2 1 Hình 4.5 Hình vuông quay 1 góc 45 theo gốc toạ độ Phần 1 - Cơ sở 58
  70. Ch−ơng 4 - Đồ hoạ hai chiều Hình 4.5 thu đ−ợc thông qua dòng lệnh d−ới Matlab nh− sau, với góc quay θ = 450. >> P = rotate (45*pi/180)*square >> plot (P( 1 , : ), P ( 2 , : ) ), axis ([-3 3 -1 3]) >> title ('Hình vuông quay theo goc 45 ') Quay theo goc 60 dich chuyen tren doan dx=1, dy=2 5 4 3 2 1 0 -1 -4 -2 0 2 4 Hình 4.6 Tổ hợp của hai phép biển đổi Hay hình 4.6 thu đ−ợc 1 cách dễ dμng trên cơ sở kết hợp của 2 ph−ơng pháp chuyển đổi. >> P = rotate (30*Pi/180)*translate(1,2)*square >> plot (P( 1 , : ), P ( 2 , : ) ), axis ([-4 4 -1 5]) >> title ('Hình vuông quay vμ dịch chuyển ') 4.2.4 Phép tỉ lệ (Scaling) Hμm d−ới đây cho phép biến đổi tỷ lệ của hình theo 1 tỷ lệ nhất định. Việc biến đổi tỷ lệ đ−ợc thực hiện qua phép nhân ma trận S vơ Sx, Sy lμ 2 hệ số biến đổi. Sx 00 %S = 00Sy 001 function S = scale (Sx, Sy) S = [ Sx 0 0; 0 Sy 0; 0 0 1 ] Ví dụ việc biến đổi hình vuông 2 lần theo x vμ 3 lần theo y đ−ợc thực hiện nhờ các lệnh sau. >> P = scale (2,3)*square >> plot (P( 1 , : ), P ( 2 , : ) ) >> title ('Hình vuông thay đổi tỉ lệ theo x = 2 theo y = 3’) Phần 1 - Cơ sở 59
  71. Ch−ơng 4 - Đồ hoạ hai chiều Hinh vuong bien doi ti le 5 4 3 2 1 0 -1 -4 -2 0 2 4 Hình 4.7 Phép biến đổi tỉ lệ Hình 4.7 cho thấy sự biến đổi của hình vuông qua hμm scale. Việc thay đổi đó thực hiện qua gốc toạ độ. Phép chuyển vị, phép quay hay scale đều có thể hết hợp lẫn với nhau 1 cách dễ dμng. Việc chuyển đổi vị trí của các phép biến đổi sẽ đem đến các hình ảnh khác nhau. >> P = Scale(2,2)*roate(30*Pi/180)translate(1,1)*square >> plot (P( 1 , : ), P ( 2 , : ) ), axis ([-4 4 -1 5]) >> title ('Hình vuông quay') 5 5 4 4 3 3 2 2 1 1 0 0 -1 -1 -3 -2 -1 0 1 2 3 -3 -2 -1 0 1 2 3 Hình 4.8 Hình 4.9 ảnh 4.8 khác với ảnh 4.9 với phép đảo vị trí phép toán >> P = translate(1,1) *rotate(30*Pi/180)*Scale(2,2) *square >> plot (P( 1 , : ), P ( 2 , : ) ), axis ([-4 4 -1 5]) >> title ('Hình vuông quay') Phần 1 - Cơ sở 60
  72. Ch−ơng 4 - Đồ hoạ hai chiều 4.3. Các hμm chuẩn để biểu diễn đồ hoạ 2 chiều Nh− đã giới thiệu qua với bạn đọc ở phần trên, Matlab lμ công cụ rất mạnh cho việc xử lý vμ thể hiện d−ới dạng đồ hoạ. Hμm Plot trong Matlab th−ờng đ−ợc sử dụng liên tục cho việc vẽ vμ tạo lập các dạng đồ thị 2 chiều. Dạng đơn giản nhất để thể hiện dữ liệu lμ Plot nh−ng kiểu đ−ờng hay mầu của đ−ờng đ−ợc xác định trên biến str của hμm. Bảng d−ới đây sẽ cho phép chúng ta nắm đầy đủ mọi thông tin về hμm. 4.3.1 Các bộ lệnh vẽ a. Lệnh PLOT plot ( x,y ) Vẽ theo vector y vμ x (y trục tung của hệ, x trục hoμnh). Đồ thị thu đ−ợc sẽ lμ tập của các điểm (xi,yi). plot ( y ) Vẽ ra tập các điểm (i,yi) với y lμ các điểm trên trục tung vμ i lμ các điểm trên trục hoμnh. plot ( z ) Vẽ theo tập các số ảo ( real( z ), image( z ) ). Trục hoμnh lμ tập các số thực vμ trục tung lμ tập các số ảo. plot ( A) Vẽ ra theo các cột của A theo chỉ số t−ơng ứng xác định bởi tự ch−ơng trình. plot ( x,A ) Vẽ ra theo các cột của A theo chỉ số t−ơng ứng xác định bởi vector x. plot ( A,x ) Vẽ x theo A. Nếu A lμ ma trận m hμng n cột, vector x có thể theo chỉ số t−ơng ứng trên m hoặc n nếu chiều dμi của x = m hay bằng n. Vector x có thể lμ ma trận hμng hay cột. plot ( A,B ) Vẽ các cột của A theo các cột của B. Nếu A vμ B lμ 2 ma trận có cùng độ lớn mxn thì chúng ta sẽ thu đ−ợc m đồ thị n điểm . plot ( , str ) Vẽ hμm có các biến số xác định nh− trên vμ các chỉ số về mầu sắc vμ kiểu đ−ờng theo biến str plot( x1, y1, str1, Vẽ hμm vector y1, y2, , yn theo vector x1, x2, , xn x2, y2, str2, ) ( y trục tung của hệ, x trục hoμnh ). Đồ thị thu đ−ợc sẽ lấy giá trị về mầu sắc vμ kiểu đ−ờng t−ơng ứng trong str1, str2, , str n Các giá trị của biến str trong hμm Plot vầ mầu sắc hay kiểu dáng của đ−ờng đ−ợc liệt kê theo bảng d−ới đây. Kiểu đ−ờng Kiểu đ−ờng Mầu sắc Mầu sắc Phần 1 - Cơ sở 61
  73. Ch−ơng 4 - Đồ hoạ hai chiều . điểm - đ−ờng liền nét Y vμng C xanh lá mạ * sao đ−ờng đứt nét G xanh lá cây W trắng X chữ cái x -. đ−ờng chấm gạch M đỏ t−ơi R đỏ O chữ cái o : đ−ờng chấm B xanh lam K đen + dấu cộng Kiểu đ−ờng thẳng có thể lμ tổ hợp của 2 hay nhiều yếu tố. Ví dụ 'y- -' lμ ký hiệu cho đ−ờng vμng liền nét hay ' b+' lμ đ−ờng xanh các dấu cộng. Độ rộng của đ−ờng hay kích th−ớc các ký hiệu có thể thay đổi tuỳ ý. Các trục toạ độ sẽ tự động thay đổi phù hợp với đơn vị của đồ thị nếu không có sự tác động nμo khác của ng−ời sử dụng. Ví dụ: Vμo dữ liệu cho các biến số x,y >> x = [ -4 -2 0 1 3 7 ] >> y = [ 15 4 0 1 9 20 ] >> plot( x,y,’w’); hold on >> plot( x,y/2 ); 20 15 10 5 Hình 4.10 Đồ thị hμm y vμ y/2 theo x b. Đồ thị hμm sin(x) vμ x/2 + 1/2 >>x = 0 : 0 1 : 2; Phần 1 - Cơ sở 62
  74. Ch−ơng 4 - Đồ hoạ hai chiều >>A = [sin (pi*x); 0.5 + 0.5*x]; >>plot (x,A) * Trục của đồ thị xoay khi ta giao hoán vị trí cua A vμ A >>x = 0 : 0 1 : 2; >>A = [sin (pi*x); 0.5 + 0.5*x]; >>plot (A,x) 1.5 2 1 1.5 0.5 1 0 0.5 -0.5 -1 0 0 0.5 1 1.5 2 -1 -0.5 0 0.5 1 1.5 Hình 4.11 Đồ thị của ma trận A trên trục x vμ x trên A c) Hμm y = sin(x). cos(x) với các điểm lμ các vòng tròn nhỏ >> x = - pi0 : 0.05 : pi; >> A = sin(x).*cos(x) ; >> plot( x,A ); 0.5 0 Hình 4.12 Phần 1 - Cơ sở 63
  75. Ch−ơng 4 - Đồ hoạ hai chiều d) Hμm plot với tham số phức. 2 1.5 1 0.5 0 -0.5 -1 -1.5 -2 -2 -1 0 1 2 Hình 4.13 Số phức đ−ợc biểu diễn d−ới dạng xoắn ốc. >> R = linespace (0,2); % tạo vector >> tt = linespace (0,10*pi); % tạo vector của góc >> [x,y] = plot2cart(tt,r); % chuyển toạ độ >> z = x + i*y ; %tạo vector số phức >> plot(z) ; % in ra mμn đồ hoạ e) Tạo một file *.m thực hiện chuỗi lệnh sau n = input ( ‘ Số điểm n = ‘); a = input (‘ Khoảng xác định trên a = ‘); b = input (‘ Khoảng xác định d−ới b = ‘); y = [ ]; e1 = [ ]; e2 = [ ]; e3 = [ ]; e4 = [ ]; % xoá e1 - e4 for i = 1 : n xx = a + ( b - a ) * (i - 1) / (n - 1); x(i) = xx; e1(i) = exp( -(xx^2) ); e2(i) = xx^2 * exp ( -(xx^2) ); e3(i) = xx*exp ( -(xx^2) ); e4(i) = exp (-xx); end Script file trên sau khi thực hiện với tham số: Số điểm n = 50 Phần 1 - Cơ sở 64
  76. Ch−ơng 4 - Đồ hoạ hai chiều Khoảng xác định trên a = 0 Khoảng xác định d−ới b = 5 1 0.8 0.6 0.4 0.2 0 0 1 2 3 4 Hình 4.14 a Đồ thị của các hμm lấy từ ví dụ trên plot(x,e1,'w',x,e2,'w',x,e3,'w',x,e4,'w') Các lệnh trên t−ơng đ−ơng với chuỗi các lệnh d−ới đây. Tuy nhiên với các bộ lệnh d−ới cho phép chúng ta dễ dμng trong khi đọc cũng nh− vμo dữ liệu. >> x = linespace (a,b,u) >> e1 = exp (-x^2); >> e2 = (X^2) * exp (-x ^ 2); >> e3 = x . * exp (-x^2); >> e4 = exp (-x) với u = 50 a = 0 b = 30 >> plot (x, e1, 't', x, e2, 't', x, e3, x, 't', x, e3, '0', x, eu, 'x') Phần 1 - Cơ sở 65
  77. Ch−ơng 4 - Đồ hoạ hai chiều 1 0.8 0.6 0.4 0.2 0 0 1 2 3 4 b. Vẽ đồ thị cùng với khoảng sai số. Errorbar (x, y, e, str) Vẽ vector y theo x cùng với các thanh sai số có độ dμi ei trên d−ới yi. Errorbar (x, y, l, u) Vẽ đồ thị vector y theo x với ei vμ u lμ đoạn sai số của yi t−ơng ứng với phần d−ới vμ trên. Ví dụ: Tạo đồ thị có khoảng sai số lμ 15% >> x = linspace (0, 10, 50); >> y = exp (sin (x)); >> delta = 0.15 *y; >> errorbar ( x, y, delta) 3.5 3 2.5 2 1.5 Hình 4.15 Đồ thị cùng đ−ờng sai số 15% Phần 1 - Cơ sở 66
  78. Ch−ơng 4 - Đồ hoạ hai chiều c. Vẽ hoạt hình ( comet ) Lệnh comet plot cho phép ng−ời sử dụng vẽ theo từng điểm trên mμn hình gây hiệu ứng hoạt hoạ khi vẽ. D−ới đây lμ một số trong bộ lệnh comet. Comet (x, y) Vẽ vector y trên trục x. Nếu tham số vμo không có hay thiếu thì ch−ơng trình tự định ra chỉ số Comet (x, y, l) Vẽ theo hμm comet với phần kéo dμi l khi không khai báo chỉ số l thì ch−ơng trình tự lấy giá trị = 0.1 d.Hμm đồ hoạ. fplot (fku,lim,str) Dùng để vẽ một hμm toán học bất kỳ đ−ợc khai báo bởi mảng ký tự. Mảng ký tự có thể lμ các hμm chuẩn hay đ−ợc định nghĩa bởi ng−ời sử dụng trong file M fku.m. Vector lim = [Xmin Xmax] dùng để giới hạn khoảng xác định của đồ hoạ. Nó có thể bao gồm 4 thμnh phần trong đó thμnh phần thứ 3 vμ 4 lμ khoảng xác định trên trục y. Nếu biến str không khai báo trong hμm thì ch−ơng trình sẽ tự lấy các giá trị mặc định về kiểu đ−ờng hay mầu cho phần đồ hoạ. fplot Vẽ đồ thị nh− trên với sai số liên quan nhỏ hơn giá trị tol ( fcu, lim, str, tol ) Ví dụ: Dùng hμm fplot vẽ ph−ơng trình sin x2 >> fplot(‘ sin(x^2)’,[ 0 , 10 ] ); 1 0.5 0 -0.5 Hình 4.16 Ph−ơng trình sin x2 qua hμm fplot() 4.3.2.Các hệ toạ độ trong mặt phẳng Phần 1 - Cơ sở 67
  79. Ch−ơng 4 - Đồ hoạ hai chiều Hμm plot cho phép ng−ời sử dụng vẻtên toạ đồ Đề các. Tuy nhiên 1 số bμi toán trong kỹ thuật lại yêu cầu các hệ toạ độ khác. Để đáp ứng nhu cầu đó Matlab cung cấp 1 loạt các hμm cho phép tạo dựng đồ họa trên các loại hệ toạ độ. polar ( thet, r ) - Vẽ trên hệ tọa độ cực. Các phần từ của vector theta lμ các biến đo bằng radian vμ các phần tử của vector r lμ khoảng cách đến điểm gốc. semilogx ( x, y ) - Cho phép vẽ trên hệ toạ độ nửa trục loga, thay log10 đ−ợc sử dụng cho trục x. Điều đó cũng t−ơng đ−ơng với việc chúng ta viết plot (log10(x,y) nh−ng sẽ không có lỗi với cả trong tr−ờng hợp log10(0). semilogy ( x,y ) - Vẽ trên hệ toạ độ của trục loga. Thang đo log10 đ−ợc sử dụng cho trục y. Điều đó t−ơng đ−ơng plot (x,log10(y) vμ cũng sẽ không báo lỗi khi viết log10(0). loglog ( x,y ) - Hμm cho phép vẽ trên hệ toạ độ loga 2 trục của hệ toạ độ đều dựa trên thang đo log10. Điều đó t−ơng đ−ơng với việc plot(log10(x), log10(y)) vμ cũng không báo lỗi nếu ta sử dụng log10(0). Ví dụ: a) >> x = linespace (0,7); % tạo giá trị x >> y = exp(x) % tạo y theo x >> subplot (x,1,1); plot( x,y ); % vẽ hμm chuẩn >> subplot(2,1,2); semilogy( x,y ); % vẽ hμm loga 4 1200 10 1000 3 10 800 2 600 10 400 1 10 Hình 4.16 b)Vẽ hμm sau trên hê toạ độ cực theo công thức sau: Phần 1 - Cơ sở 68
  80. Ch−ơng 4 - Đồ hoạ hai chiều ⎛ t 5 ⎞ R = ecost - 2cos4 + ⎜sin ⎟ ⎝ 12⎠ >> t = linspace (0,22*pi,1100); >> r = exp ( cos( t ) ) - 2*cos (u*t)+sin ( t./12) ).^5; >> subplot (2,1,1); >> p = polar(t,r); % vẽ trên hệ toạ độ cực >> subplot (2,1,2) >> [ x , y ] = pol2cart(t,r) % giá trị từ hệ toạ độ cực sang hệ Đề các >> plot(x,y); % polar_to_carttesian 4 3 90 6 120 60 2 4 150 2 30 1 180 0 0 210 330 -1 240 300 -2 270 -3 -4 -5 0 5 Hình 4.17 trên hệ toạ độ cực 4.3.3. Mặt phẳng đồ hoạ cho số phức. quiver ( x , y ) Vẽ mũi tên cho mỗi cặp của hệ toạ độ cho bởi xij vμ yij cùng biến số vμ độ lớn lμ dxi vμ dyi. quiver Vẽ 1 mũi tên với tọa độ xi yi cùng biến số vμ độ lớn lμ tập dxij vμ dyij. ( x , y , dx , dy ) quiver Vẽ mũi tên nh− trên nh−ng hệ số tỷ lệ đ−ợc cho bởi giá Phần 1 - Cơ sở 69
  81. Ch−ơng 4 - Đồ hoạ hai chiều trị s. ( x, y , , s ) Nếu s không đ−ợc khai báo thì giá trị mặc định lμ 1 quiver Vẽ 1 mũi tên với kiểu mẫu đ−ờng đ−ợc xác định thông qua biến str ( x, y, , str ) feather ( z ) Vẽ mũi tên chỉ ra phần thực vμ ảo của các phần tử hay ma trận của các số ảo z. feather ( x, y ) T−ơng tự với feather(x+y*i) feather ( z, str ) Vẽ mũi tên với việc sử dụng kiểu đ−ờng thẳng str compass ( z ) Vẽ mũi tên khởi tạo từ gốc chỉ ra phần thực vμ ảo của các phần tử trong ma trận số ảo z compass ( x, y ) T−ơng đ−ơng hμm compass (x + y*i) compass (z, str) Vẽ mũi tên sử dụng kiểu đ−ờng vμ mẫu sắc đ−ợc định nghĩa bởi str rose ( v ) Vẽ biểu đồ đối với biểu đồ tròn cho phép thể hiện tần suất của đối số trong vector v. rose ( u ) T−ơng tự nh−ng với khoảng xác định u rose ( x ) Vẽ biểu đồ đối số với x lμ vector của các khoảng xác định. Ví dụ: Ma trận z đ−ợc xác định nh− sau: 1 + i 2 − i 3 − 5i %z = − 4 + 3i 5 − 5i i − 1 − i 3 − 3i −1 clf; z = [ (1 + i) (2 - i) (3 - 5*i) (-4 + 3*i) (5 -5*i) (i) (-1 - i) (3 - 3*i) (-1) ] subplot(2,2,1); quiver(real(z), imag(z)); title('hμm quiver’); subplot(2,2,2);feather(z); title('hμm feather’); subplot(2,2,3); compass(z); Phần 1 - Cơ sở 70
  82. Ch−ơng 4 - Đồ hoạ hai chiều title('hμm compass’); subplot(2,2,4); rose(angle(z(:))); title ( 'ham rose ‘); hàm quiver hàm feather 4 2 2 0 -2 0 0 2 4 0 5 10 hàm compass ham rose 90 2 120 60 1 150 30 0 180 0 210 330 -5 240 270 300 0 Hình 4.18 Đồ hoạ thu đ−ợc từ các hμm Quiver, Teather, Compass, Rose. 4.3.4. Lệnh kiểm soát. figure ( gef ) Hiển thị cửa sổ graphics hiện hμnh. Lệnh figure cũng có thể dùng để kích hoạt cửa sổ graphic hay tạo ra một cửa sổ đồ hoạ mới. clf Lệnh dùng để xoá cửa sổ đồ hoạ hiện thời. Việc xoá vẫn thực hiện kể cả khi chúng ta đã dùng lệnh hold on clg Lệnh xoá t−ơng tự nh− elf vμ có thể không tồn tại ở các version mới của Matlab. clc Lệnh xoá mμn hình lệnh home Chuyển con trỏ đến vị trí 'home' lμ vị trí ở trên bên trái mμn hình. hold on Giữ lại tất cả mμn hình đã vẽ. Các lệnh sau sẽ thêm vμo mμn hình đồ hoạ chứ không xoá mμn hình cũ đi. Phần 1 - Cơ sở 71
  83. Ch−ơng 4 - Đồ hoạ hai chiều hold off Lμ trạng thái mặc định của mμn hình đồ hoạ khi ở trạng thái nμy các thừ thể đồ hoạ mới sẽ thay thế các thực thể cũ trên mμn hình. hold Chuyển trạng thái từ on sang off vμ ng−ợc lại ishold Trả giá trị 1 vμi trạng thái hold lμ on tr−ờng hợp còn lại = off subplot Lệnh subplot đ−ợc sử dụng để vẽ nhiều đồ thị lên cùng một mμn hình đồ hoạ. subplot không dùng để vẽ mμ chỉ dùng để xác định hay chia vùng mμu đồ hoạ. subplot Chia mμn hình đồ hoạ lμm m hμng, n cột vμ p lμ phần cửa sổ hiện thời. Các cửa sổ con của mμn hình đồ hoạ đ−ợc đánh số ( m, u, p ) theo hμm từ trái sang phải, từ trên xuống d−ới. subplot Đ−a mμu đồ hoạ về chế độ mặc định lμ mμn hình đơn. Điều đó t−ơng đ−ờng subplot(1,1,1) Ví dụ: a) Tạo ma trận với các số ngẫu nhiên. Đoạn ch−ơng trình đ−ợc ghi vμo file *.m bất kỳ clc; cfg; % xoá mμn hình t−ơng tác vμ mμn đồ hoạ for i = 1 : 25 home % đ−a con trỏ về vị trí 'home' A = rand(5) % tạo vμ in ma trận end b) Tạo hμm số sau: % f(x) = -xsinx % f'(x) = -xcosx-sinx x = linspace (-10,10,1000) % tạo ma trận x y11 = (-x) *sin(x); % tạo giá trị f y12 = (-x) * cos(x) - sin (x); % đạo hμm y21 = diff(y11)./(x(2)-x(1)); % đạo hμm xấp xỉ y22 = (y21 - y12 (1:999))./norm(y12); subplot(2,2,1); plot (x,y11); title ('hamf(x) = -xsin(x)'); Phần 1 - Cơ sở 72
  84. Ch−ơng 4 - Đồ hoạ hai chiều subplot(2,2,2); plot (x,y12); title ('đạo hμm'); subplot (2,2,3); plot (x(1:999),y21); title ('đạo hμm xấp xỉ'); subplot(2,2,u); plot (x(1:999),y22); title('sai số liên quan') hamf(x) = -xsin dao ham 10 10 0 0 -10 -10 -10 0 10 -10 0 10 -4 dao ham xap xi x 10sai so lien quan 10 10 5 0 0 -10 -5 -10 0 10 -10 0 10 Hình 4.19 Hμm -xsin(x) vμ các hμm liên quan Hμm subplot có thể sử dụng cho đồ hoạ 3 chiều vμ subplot có thể thay đổi kích th−ớc Ví dụ: Hμm Mandelbrot vμ việc hiển thị bằng 3 ph−ơng pháp khác nhau với các giá trị đặc tr−ng phù hợp. z0 = 0 2 zi+1 = zci + Nếu zi lμ sai số thì c không phải lμ tậo của Mandelbrot. Số lặp lại tại mỗi điểm c của mặt phẳng phức đ−ợc ghi vμo ma trận Madelbrot cùng với việc giải vector clear; epsilon = 1e-14; % sai số renum=input('số điểm thực renum = '); imnum=input('số điểm ảo imnum = ' ); Phần 1 - Cơ sở 73
  85. Ch−ơng 4 - Đồ hoạ hai chiều remin=-2; immin=-15; % khoảng chặn d−ới remax=1; immax = 1.5; % khoảng chặn trên reval1 = linspace ( remin, remax, renum ); imval1 = linspace( immin, immax, imnum ); [reval, imval] = meshgrid(reval1,imval1); % tạo l−ới grid trong khoảng imvalreal =i mval; imval = imval*i ; cgrid = reval + imval; % for reind =1: renum % Vòng lặp cho phần thực của các số disp( [' reind = ', int2str( reind )] ); for imind = 1 : imnum % Vòng lặp cho phần thực của các số c = cgrid (reind, imind); numc = 0; zold = 0.0 + i * 0.0; z = zold^2 + c; while( ( abs(z) = epsilon ) & ( numc < 100 ) ) numc = numc + 1; zold = z; z = zold^2 + c; end; % End của còng lặp while Mandelbrot (reind, imind) = numc; end end % Các chức năng đồ hoạ hiển thị hμm Mandelbrot với % 3 ph−ơng pháp khác nhau % clf; % xoá mμu đồ hoạ whitebg ( 'k' ); % thiết lập mμn hình đen subplot ( 2, 2, 1 ); mesh ( reval1, imval1, Mandelbrot ); axis( [-2 1 -1.5 1.5 0 100] ) subplot ( 2, 2, 2 ); contour (reval1, imval1, Mandelbrot, 100); Phần 1 - Cơ sở 74
  86. Ch−ơng 4 - Đồ hoạ hai chiều grid; subplot ( 2, 1, 2) surf ( reval, imvalreal, Mandelbrot ); view ( 2 ); shading flat; colormap ( flipud ( jet ) ); % Xác lập hệ mầu JET colorbar; % Hiển thị thanh bar mầu axis ( [-2 1 -1.5 1.5] ); 1.5 100 1 0.5 50 0 -0 .5 0 1 -1 0 0 -1 -1 -1 .5 -2 -2 -1 0 Hình 4.15 hμm Madelbrot hiển thị 3 cách a. In theo l−ới b. Theo contour 1.5 100 1 80 0.5 60 0 40 05 c. In theo phổ mầu Phần 1 - Cơ sở 75
  87. Ch−ơng 4 - Đồ hoạ hai chiều 4.3.5 Thao tác vμ kiểm soát mμn hình đồ hoạ Axes , scaling vμ zooming. Các trục khi vẽ th−ờng đ−ợc tự động biến đổ tỷ lệ kích th−ớc sao cho khít với việc thể hiện các điểm trên mμn hình cho phép có khung nhìn tốt nhất. Các giá trị thu đ−ợc qua các hμm min vμ max. Ví dụ: [ min(x), min(y), max(x),min(y), min(x), max(y), max(x), max(y) ] Tuy nhiên trong một số tr−ờng hợp mục đích hiển thị của ng−ời sử dụng khác so với việc tự động dμn xếp của Matlab. Chính vì vậy lệnh axis cho phép chúng ta thay đổi tỷ lệ của trục hay zoom trên cơ sở sử dụng mouse. a. Axis: axis - Trả lại giá trị khoảng giới hạn của lệnh in hiện thời vμo 1 mảng. Với không gian 2D ta có [xmin xmax ymin ymax] vμ [xmin xmax ymin ymax zmin zmax] cho không gian 3D. axis ( υ ) - Xét tỷ lệ theo vector υ với xmin υ 1, xmax = υ 2, ymin = υ 3 ymax = υ 4 với không gian 3D zmin = υ 5 vμ zmax = υ 6 axis (axis) - Khoá tỷ lệ giữ không cho Matlab tự động thay đổi tỷ lệ khi thêm các thực thể mới vμo mμn hình đồ hoạ. axis (str) - Đ−a ra các kết quả khác nhau phụ thuộc vμo chuỗi str 'auto' - Cho phép Matlab tự động thay đổi tỷ lệ 'equal' - Đ−a ra trục toạ độ có tỷ lệ x,y t−ơng đ−ơng 'ij' - Quay trục y với h−ớng d−ới cho chiều d−ơng, trên cho chiều âm 'x,y' - Xét lại trục y với h−ớng ban đầu (ng−ợc với 'ij') 'image' - Thay đổi kích th−ớc của mμn hình đồ hoạ sao cho các điểm có kích th−ớc trên chiều dμi vμ bề rộng nh− nhau 'square' - Thay đổi mμn hình đồ hoạ để tạo ra cửa sổ vuông 'normal' - Thay đổi mμn hình đồ hoạ cho ra kích th−ớc ban đầu 'off' - Dấu các trục ghi kích th−ớc, không cho hiển thị 'on' - Hiển thị các trục bị dấu b. Grid grid on - Bật l−ới vẽ trên mμn hình đồ hoạ grid off - Tắt l−ới Phần 1 - Cơ sở 76
  88. Ch−ơng 4 - Đồ hoạ hai chiều grid - Chuyển trạng thái của l−ới từ on sang off hay ng−ợc lại c.zoom zoom on - Cho phép ng−ời sử dụng phóng to đồ hoạ 2 chiều bằng cách kích trái chuột lên trên mμn hình, phải chuột sử dụng để thu nhỏ, nó cũng cho phép lựa chọn vùng bằng "click vμ drag" (kéo thả). Tỷ lệ sẽ thay đổi để vùng lựa chọn phù hợp với mμn hình đồ hoạ. zoom off - Loại bỏ lệnh zoom zoom out - Thay đổi cho đầy khít mμn hình zoom - Chuyển trạng thái giữa on vμ off Ví dụ: a) Ví dụ cho việc biểu diễn đ−ờng tròn. >> t = 0 : 0.2 : 2*pi + 0.2; >> x = sin (t); >> y = cos (t); >> plot ( x,y,1,-1 ); grid on b) Thay đổi để tạo ra đ−ờng tròn đúng hình dạng >>axis ('square'); >>grid on c) Bộ lệnh sau cho ra mμn hình 13.15b >> axis ('normal'); >> grid on; >> axis ( [-2 2 -3 3] ) 1 1 0.5 0.5 0 0 Hình 4.20 a) Tr−ớc lúc căn chuẩn b) Sau khi căn chuẩn square Phần 1 - Cơ sở 77
  89. Ch−ơng 4 - Đồ hoạ hai chiều 3 2 1 0 -1 -2 -3 -2 -1 0 1 2 c) Sau khi trả lại trạng thái normal 4.3.6. Văn bản trong mμn hình đồ hoạ Trong phần nμy chúng ta cùng đề cập đến các lệnh tạo text lên mμn hình đồ hoạ. Tập các lệnh nh− title, zlabel cho phép viết các chữ chuẩn. Còn với text cho phép viết chữ lên mọi nơi thuộc mμn hình đồ hoạ. Các lệnh viết chữ đều áp dụng trên cơ sở lệnh subplot title ( txt ) Viết mấy ký tự txt nh− dòng tiêu đề trên đỉnh căn giữa mμn đồ hoạ xlabel ( txt ) Viết mảng ký tự txt nh− nh− nhau căn giữa trục x ylabel ( txt ) Viết mảng ký tự txt nh− nh− nhau căn giữa trục y zlabel ( txt ) Viết mảng ký tự txt nh− nh− nhau căn giữa trục z text( x, y , txt ) Viết chuỗi txt lên mμn đồ hoạ tại vị trí x, y. Giá trị toạ độ x,ycó cùng tỷ lệ với lệnh plot. Nếu x vμ y lμ 2 vector thì giá trị txt đ−ợc viết tại vị trí (xi, yi). Nếu txt lμ vector thì các giá trị txt đ−ợc viết ra tại vị trí xi, yi text(x,y,txt,'sc') Viết ra chuỗi ký tự txt tại vị trí x, y trong hệ toạ độ với 2 điểm giới hạn lμ 0,0 vμ 1, 1 gtext ( txt ) Viết ra chuỗi ký tự txt tại vị trí đ−ợc xác định bởi dấu+ hay con trỏ đ−ợc điều khiển bởi chuột. legend (st1,st2, ) Đ−a ra mμn hình các chuỗi ký tự st1, st2 trong hình hộp box mμ vị trí của box có thể đ−ợc điều khiển bở chuột legend (l1, st1, l2, Dùng nh− lệnh legend(st1, st2, ) với l1 vμ l2 lμ kiểu st2 ) của đ−ờng thẳng legen off Loại bỏ chức năng legend khỏi mμn hình đồ hoạ Lệnh chuyển đổi từ số sang chuỗi có thể đ−ợc dùng trong việc in bao gồm sprinf, num2str, int2str. Phần 1 - Cơ sở 78
  90. Ch−ơng 4 - Đồ hoạ hai chiều Ví dụ: Ch−ơng trình mô tả chuyển động hỗn loạn bằng các b−ớc chuyển động tự do. n = input (' Nhap gia tri n = '); x = cumsum( rand ( n,1) - 0.5 ); y = cumsum( rand ( n,1 ) - 0.5 ); clf; plot (x,y); hold on; plot (x(1), y(1), '0', x(n), y(n),'0'); axs = axis; % lấy giá trị min max scale = axs(2) - axs(1); text(x(1) + scale/30, y(1), 'start'); text(x(n) + scale/30, y y(n), 'kết thúc'); hold off; xlabel('trục x'); ylabel('trục y'); title ('chuyển độn hỗn loạn'); Vi du ve chuyen dong hon loan 1 0 Start -1 End -2 -3 truc y y truc -4 -5 Hình 4.21 cho ra với số b−ớc hoạt động n = 200 Phần 1 - Cơ sở 79