BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 109 MỤC LỤC Chƣơng 3. Ma trận trong MATLAB..................................................................... 110 GIỚI THIỆU.......................................................................................................... 110 MỤC TIÊU CỦA CHƢƠNG................................................................................ 110 NỘI DUNG CỦA CHƢƠNG ............................................................................... 110 3.1. Ma trận ....................................................................................................... 110 3.1.1. Biểu diễn ma trận ................................................................................ 110 3.1.2. Truy nhập ma trận ............................................................................... 112 3.1.3. Gán giá trị cho phần tử ma trận........................................................... 113 3.1.4. Trích xuất ma trận ............................................................................... 116 3.1.5. Thay đổi kích thƣớc ma trận ............................................................... 118 3.2. Các thao tác trên ma trận............................................................................ 120 3.2.1. Các phép toán cơ bản .......................................................................... 120 3.2.2. Các hàm tạo ma trận đặc biệt .............................................................. 127 3.2.3. Các hàm làm việc với ma trận............................................................. 133 3.3. Xâu ký tự.................................................................................................... 141 3.3.1. Giới thiệu............................................................................................. 141 3.3.2. Các phép toán, hàm làm việc với xâu ................................................ 141 3.4. Ví dụ ứng dụng........................................................................................... 144 BÀI TẬP................................................................................................................ 146 TÀI LIỆU THAM KHẢO..................................................................................... 149 BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 110 Chương 3. Ma trận trong MATLAB GIỚI THIỆU Chƣơng này giúp sinh viên làm quen với ma trận trong Matlab, thực hiện các thao tác, tính toán, xử lý các bài toán trên ma trận 2 chiều, 3 chiều,… MỤC TIÊU CỦA CHƢƠNG Sử dụng Matlab để giải quyết các bài toán về ma trận. NỘI DUNG CỦA CHƢƠNG 3.1. Ma trận 3.1.1. Biểu diễn ma trận 3.1.1.1. Biểu diễn vector 1. Vector hàng Vector là một dạng đặc biệt của ma trận có một hàng hoặc một cột. Trong các ngôn ngữ lập trình khác (Pascal, C, C++,…), sinh viên đƣợc làm quen với vector thông qua tên gọi là mảng (array). Để biểu diễn vector hàng chứa các giá trị rời rạc, các phần tử trong vector phải nằm trong cặp ngoặc vuông () và đƣợc ngăn cách nhau bởi dấu cách hoặc dấu phẩy (,). Ví dụ: Chú ý rằng, chúng ta có thể tạo ra vector nhƣng không có phần tử nào, gọi là vector rỗng: 2. Toán tử “:”: Trong MATLAB, ngoài việc biểu diễn vector hàng chứa các giá trị rời rạc nhƣ ở trên, còn có cách khác để tạo ra vector hàng chứa các giá trị cách đều nhau. Khi đó, ta dùng toán tử “:”. BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 111 Cú pháp: a : b : c Ý nghĩa: + Tạo ra vector hàng mỗi số cách đều nhau một giá trị là b (b gọi là bƣớc nhảy), bắt đầu từ giá trị a, kết thúc ở giá trị c. + Giá trị b ngầm định là 1. Nếu b là số thập phân (0 < b < 1) thì có thể không cần viết phần nguyên (ví dụ viết: .5 hay 0.5 là tƣơng đƣơng) Ví dụ: 3. Vector cột Cách biểu diễn vector cột chứa các giá trị rời rạc tƣơng tự nhƣ vector hàng, chỉ khác là các phần tử đƣợc ngăn cách nhau bởi dấu chấm phẩy (;). Ví dụ: BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 112 3.1.1.2. Biểu diễn ma trận Trong Matlab, ma trận đại diện cho mảng nhiều chiều có nhiều dòng và nhiều cột. Phƣơng thức khai báo và khởi tạo ma trận tƣơng tự nhƣ vector. Tuy nhiên, để kết thúc một dòng trong ma trận, chúng ta sử dụng dấu chấm phẩy (;). Ví dụ: Kích thước ma trận: Một ma trận có kích thƣớc m x n có nghĩa là ma trận có m hàng, n cột. Một ma trận kích thƣớc 1 x 1 là một số vô hƣớng Một ma trận kích thƣớc 1 x n là một vector hàng Một ma trận kích thƣớc m x 1 là một vector cột 3.1.2. Truy nhập ma trận 3.1.2.1. Truy nhập vector Các phần tử của vector đƣợc truy nhập thông qua chỉ số. Cú pháp nhƣ sau: Tên_vector(chỉ_số) Chú ý: trong MATLAB, chỉ số đầu tiên của vector là 1, và chỉ số cuối cùng có thể dùng từ khóa “end”. Ví dụ: BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 113 3.1.2.2. Truy nhập ma trận Các phần tử của ma trận đƣợc truy nhập thông qua chỉ số hàng và cột. Cú pháp nhƣ sau: Tên_ma_trận(chỉ_số_hàng, chỉ_số_cột) Chú ý: tƣơng tự nhƣ vector, chỉ số đầu của hàng, cột trong ma trận bắt đầu là 1 và chỉ số cuối cùng có thể dùng từ khóa “end”. Ví dụ: 3.1.3. Gán giá trị cho phần tử ma trận 3.1.3.1. Đối với vector Đối với vector đã có, ta có thể gán (thay đổi) giá trị cho các phần tử của nó. Cú pháp: Tên_vector(chỉ_số) = giá_trị_gán Ví dụ: BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 114 Chú ý rằng, trong MATLAB, việc gán giá trị cho phần tử có vị trí vƣợt ra ngoài phạm vi vector là đƣợc phép (). Trong ví dụ trên, vector a có 7 phần tử, nhƣng ta có thể gán giá trị cho phần tử thứ 10, minh họa dƣới đây cho ta thấy điều đó: Nhƣ vậy, chúng ta có thể gán giá trị cho vector đã có nhƣng là rỗng: BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 115 … 3.1.3.2. Đối với ma trận Chúng ta cũng có thể gán giá trị cho một phần tử của một ma trận đã có thông qua chỉ số hàng, chỉ số cột của nó. Tên_ma_trận(chỉ_số_hàng, chỉ_số_cột) = giá_trị_gán Ví dụ: Ngoài ra, có thể kết hợp với toán tử “:” để thực hiện lệnh gán cho hàng hoặc cột. Ví dụ : BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 116 Và tƣơng tự nhƣ đối với vector, MATLAB cho phép gán giá trị cho phần tử vƣợt ra ngoài phạm vi của ma trận (), nhƣ hình minh họa dƣới đây: (ma trận a kích thƣớc 4 x 4) 3.1.4. Trích xuất ma trận 3.1.4.1. Trích xuất vector Để trích xuất ra một phần vector (còn gọi là vector con), ngƣời ta dùng các chỉ số (để trong cặp ngoặc )). Ngoài ra, có thể dùng toán tử “:” và từ khóa “end”. + a(p, q,…): trích ra các phần tử ở vị trí p, q,… của vector a (chú ý dấu ngoặc ). + a(p q … ): cách viết khác của ý trên. + a(p : q): trích ra các phần tử từ p > q của vector a. + a(p: end): trích ra các phần tử từ p > hết của vector a. BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 117 Ví dụ: 3.1.4.2. Trích xuất ma trận Tƣơng tự nhƣ trích xuất vector, để trích ra ma trận con từ ma trận đã cho, ngƣời ta liệt kê các chỉ số hàng, cột (để trong ngoặc ). Toán tử “:” và từ khóa “end” cũng đƣợc dùng trong việc này. + a(p, q,…, r, s,…): trích các phần tử thuộc hàng p, q,… và cột r, s,… của ma trận a (chú ý dấu ngoặc ). + a(p q …, r s …): cách viết khác của nội dung trên. + a(: , j): trích các phần tử ở cột j của ma trận a. + a(i , :): trích các phần tử ở hàng i. + a(p : q, j): trích các phần tử ở hàng p > q của cột j. BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 118 + a(i, p : q): trích các phần tử ở hàng i, cột p > q. + a(p : q, r : s): trích các phần tử ở hàng p > q và cột r > s + a(p : end, r : end): trích các phần từ ở hàng p > hết và cột r > hết Ví dụ: 3.1.5. Thay đổi kích thước ma trận 3.1.5.1. Tăng kích thước ma trận MATLAB cho phép chúng ta ghép nối các ma trận với nhau để có ma trận mới kích thƣớc lớn hơn. Ví dụ : BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 119 3.1.5.2. Giảm kích thước ma trận Ngƣợc lại, MATLAB cho phép chúng ta xóa bớt hàng, cột của ma trận đã có để đƣợc ma trận có kích thƣớc nhỏ hơn, bằng cách tạo hàng, cột đó là rỗng (). Có thể kết hợp với toán tử “:” và từ khóa “end”. Ví dụ : BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 120 3.2. Các thao tác trên ma trận 3.2.1. Các phép toán cơ bản 3.2.1.1. Các phép toán trên vector 1. Phép cộng, trừ vector Trong MATLAB, chúng ta có thể thực hiện phép cộng, trừ trên các vector nếu chúng có cùng kích thƣớc. Ví dụ : 2. Phép nhân, chia, lũy thừa vector BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 121 Các phép nhân, chia, lũy thừa đƣợc thực hiện với từng thành phần của vector. Cách viết nhƣ sau: phép nhân (.), chia trái (.), chia phải (.\), lũy thừa (.). Ví dụ : Chú ý : Chúng ta có thể thực hiện phép các phép cộng (+), trừ (), nhân (), chia () giữa vector với một giá trị cụ thể (gọi là giá trị vô hƣớng). Ví dụ: BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 122 3. Các phép toán so sánh Chúng ta có thể so sánh hai vector có cùng kích thƣớc với nhau. Cụ thể là so sánh từng cặp phần tử và lƣu vào một vector khác cùng kích thƣớc, nếu đúng, giá trị tại đó bằng 1, ngƣợc lại là 0. Ví dụ : (cách viết khác: >> x = (a == b) (cách viết khác: >> x = (a >= b) (cách viết khác: >> x = (a < b) (cách viết khác: >> x = (a ~= b),… 4. Phép chuyển vị Phép chuyển vị đƣợc ký hiệu là dấu nháy đơn (‟). Thực hiện phép chuyển vị với vector hàng, ta đƣợc vector cột và ngƣợc lại. BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 123 Ví dụ : 3.2.1.2. Các phép toán trên ma trận 1. Phép cộng, trừ Trong MATLAB, các phép cộng, trừ trên ma trận đƣợc thực hiện khi chúng đó có cùng kích thƣớc. Phép cộng ma trận có tính chất giao hoán. Ví dụ: BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 124 2. Phép nhân Phép nhân ma trận đƣợc thực hiện nhƣ trong toán học, nghĩa là số cột của ma trận trƣớc phải bằng số hàng của ma trận sau. Phép nhân không có tính giao hoán. Ví dụ: 3. Phép chia phải Phép chia phải () trên ma trận không có trong toán học, ta có: x = ab => xb = a, nhƣ vậy, giả sử x có cấp là (m x n), b có cấp là (n x p), thì a sẽ có cấp (m x p) theo công thức phép nhân ma trận sau: (m x n) (n x p) = (m x p) x b a BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 125 Từ đó suy ra, để thực hiện đƣợc phép chia phải thì điều kiện cần là hai ma trận a, b phải có cùng số cột (p). Khi đó ma trận x sẽ có số hàng là số hàng của a (m) và số cột là số hàng của b (n). Ví dụ: a(4 x 3) b(2 x 3) x(4 x 2) Chú ý: tƣơng tự nhƣ vector, chúng ta cũng có thể thực hiện các phép cộng (+), trừ (), nhân (), chia phải () giữa ma trận với một giá trị vô hƣớng. 4. Phép chia trái Phép chia trái (\) trên ma trận cũng không có trong toán học, ta có: x = a\b => ax = b, nhƣ vậy, giả sử a có cấp là (m x n), x có cấp là (n x p), thì b sẽ có cấp (m x p) theo công thức phép nhân ma trận sau: (m x n) (n x p) = (m x p) a x b Từ đó suy ra, để thực hiện đƣợc phép chia trái thì điều kiện cần là hai ma trận a, b phải có cùng số hàng (m). Khi đó ma trận x sẽ có số hàng là số cột của a (n) và số cột là số cột của b (p). Ví dụ: BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 126 a(4 x 3) b(4 x 2) x(3 x 2) 5. Phép lũy thừa Phép lũy thừa thực chất là phép nhân chính ma trận đó nhiều lần, căn cứ vào tích chất của phép nhân ma trận ta suy ra ma trận đó phải là ma trận vuông mới thực hiện đƣợc phép lũy thừa, ngƣợc lại máy sẽ báo lỗi. Ví dụ: 6. Phép chuyển vị Đây là phép toán đƣợc thực hiện nhiều trong toán học. Ví dụ : BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 127 3.2.2. Các hàm tạo ma trận đặc biệt 3.2.2.1. Hàm zeros 1. Cú pháp: zeros(n) (1) zeros(m, n) (2) 2. Ý nghĩa: + Dạng (1): tạo ma trận vuông cấp n các số 0 + Dạng (2): tạo ma trận kích thƣớc m x n các số 0 3. Ví dụ: 3.2.2.2. Hàm ones 1. Cú pháp: ones(n) (1) ones(m, n) (2) 2. Ý nghĩa: + Dạng (1): tạo ma trận vuông cấp n các số 1 + Dạng (2): tạo ma trận kích thƣớc m x n các số 1 BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 128 3. Ví dụ: 3.2.2.3. Hàm eye 1. Cú pháp: eye(m) eye(m, n) 2. Ý nghĩa: tạo ma trận đơn vị 3. Ví dụ: 3.2.2.4. Hàm diag 1. Cú pháp: diag(a) 2. Ý nghĩa: tạo vector cột là đƣờng chéo của ma trận a. 3. Ví dụ: BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 129 3.2.2.5. Hàm triu 1. Cú pháp: triu(a) 2. Ý nghĩa: tạo ma trận tam giác trên của ma trận a (triangularupper). 3. Ví dụ: BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 130 3.2.2.6. Hàm tril 1. Cú pháp: tril(a) 2. Ý nghĩa: tạo ma trận tam giác dƣới của ma trận a (triangularlower). 3. Ví dụ: BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 131 3.2.2.7. Hàm rand, randi 1. Cú pháp: rand(m, n) (1) randi(imax, m, n) (2) randi(a b, m, n) (3) 2. Ý nghĩa: + Dạng (1): tạo ma trận cấp m x n, có giá trị là số ngẫu nhiên thuộc đoạn 0, 1. + Dạng (2): tạo ma trận cấp m x n, có giá trị là số nguyên ngẫu nhiên thuộc đoạn 1, imax. + Dạng (3): tạo ma trận cấp m x n, có giá trị là số nguyên ngẫu nhiên thuộc đoạn a, b. 3. Ví dụ: BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 132 4. Chú ý: + Trong trƣờng hợp m = n (ma trận vuông) thì chỉ cần viết một giá trị (m). Ví dụ: + Dùng hàm rand, randi ta có thể tạo ra ma trận nhiều chiều với cú pháp sau: rand(m, n, p,…) randi(imax, m, n, p,…) Ví dụ: với lệnh a = rand(2, 3, 4), ta có kết quả là: tạo ra ma trận ngẫu nhiên 3 chiều sau đây: Với lệnh b = randi(10, 2, 5, 3), ta có kết quả: 3.2.2.8. Hàm magic 1. Cú pháp: magic( n) 2. Ý nghĩa: tạo ma trận vuông (ma thuật) cấp n (n 3) với các phần tử có giá trị từ 1 đến n 2 thỏa mãn: Tổng mỗi cột = Tổng mỗi hàng = Tổng đƣờng chéo = 2 n i 1 1 i n 3. Ví dụ: tạo ma trận vuông ma thuật cấp 3: BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 133 Khi đó, ta có: 3.2.2.9. Hàm linspace 1. Cú pháp: linspace(a, b, n) (1) linspace(a, b) (2) 2. Ý nghĩa: + Dạng (1): tạo vector hàng có n phần tử cách đều nhau, nằm giữa a và b. + Dạng (2): tạo vector hàng có 100 phần tử cách đều nhau, nằm giữa a và b. 3. Ví dụ: 3.2.3. Các hàm làm việc với ma trận 3.2.3.1. Hàm size BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 134 1. Cú pháp : m, n = size(a) 2. Ý nghĩa : trả về số dòng (lƣu vào m) và số cột (lƣu vào n) của ma trận a. 3. Ví dụ : 3.2.3.2. Hàm length 1. Cú pháp : length(a) 2. Ý nghĩa : trả về kích thƣớc (hàng hoặc cột) lớn nhất của ma trận a 3. Ví dụ: 3.2.3.3. Hàm det 1. Cú pháp: det(a) 2. Ý nghĩa: trả về định thức của ma trận vuông a. 3. Ví dụ: BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 135 3.2.3.4. Hàm inv 1. Cú pháp: inv(a) 2. Ý nghĩa: trả về ma trận nghịch đảo của ma trận vuông a . 3. Ví dụ: 3.2.3.5. Hàm find 1. Cú pháp : i, j = find(a compare value) 2. Ý nghĩa : hiển thị vị trí phần tử thỏa mãn việc dùng phép so sánh compare giữa giá trị phần tử ma trận với giá trị value. Vector i chứa chỉ số hàng, vector j chứa chỉ số cột của phần tử thỏa mãn. 3. Chú ý : + Compare gồm: lớn hơn (>), bé hơn (=), bé hơn hoặc bằng (> b, i = sort(a) hoặc >> b, i = sort(a, 1, „ascend‟) thì đều có kết quả nhƣ sau: Nếu viết: >> b, i = sort(a, „descend‟) hoặc >> b, i = sort(a, 1, „descend‟), ta có kết quả: Còn nếu viết: >> b, i = sort(a, 2) hoặc >> b, i = sort(a, 2, „ascend‟), ta có: BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 139 Và nếu viết: >> b, i = sort(a, 2, „descend‟) thì ta có kết quả là : Chú ý: nếu a là một vector hàng thì không cần đƣa vào tham số thứ 2. Ví dụ : 3.2.3.9. Hàm reshape 1. Cú pháp: reshape(a, m, n) 2. Ý nghĩa: định dạng lại kích thƣớc của ma trận a. Lƣu ý, điều kiện là: số phần tử của a phải bằng m n. 3. Ví dụ: BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 140 3.2.3.10. Hàm flipud 1. Cú pháp: flipud(a) 2. Ý nghĩa: lật ma trận a theo chiều dọc (flipupdown). 3. Ví dụ: 3.2.3.11. Hàm fliplr 1. Cú pháp: fliplr(a) 2. Ý nghĩa: lật ma trận a theo chiều ngang (flipleftright). 3. Ví dụ: BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 141 3.3. Xâu ký tự 3.3.1. Giới thiệu Xâu ký tự là một dãy ký tự đƣợc đặt trong dấu nháy đơn („ ‟). Ví dụ: Xâu ký tự chính là một vector hàng mà mỗi phần tử là một ký tự, chúng ta cũng dùng chỉ số để truy nhập vào từng phần tử của xâu (các ký tự). Ví dụ: 3.3.2. Các phép toán, hàm làm việc với xâu 3.3.2.1. Phép trích xâu Chúng ta có thể trích ra một xâu con từ xâu đã cho. Ví dụ: 3.3.2.2. Phép ghép xâu MATLAB cũng cho phép chúng ta ghép hai hay nhiều xâu lại với nhau. Ví dụ: BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 142 3.3.2.3. Hàm double 1. Cú pháp: double(s) 2. Ý nghĩa: đổi xâu s thành dãy các mã ASCII của từng ký tự. 3. Ví dụ: 3.3.2.4. Hàm char 1. Cú pháp: char(vector) 2. Ý nghĩa: đổi vector (hàng hoặc cột) chứa giá trị số thành xâu s có mã ASCII của các ký tự là các số đó. Nhƣ vậy, hàm này là hàm ngƣợc của hàm double. 3. Ví dụ: 3.3.2.5. Hàm strcmp 1. Cú pháp: strcmp(s1, s2) 2. Ý nghĩa: so sánh hai xâu s1 và s2, nếu giống nhau thì cho kết quả là 1, ngƣợc lại cho kết quả là 0. 3. Ví dụ: BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 143 3.3.2.6. Hàm strcat 1. Cú pháp: strcat(s1, s2,…) 2. Ý nghĩa: ghép nối các xâu s1, s2,… lại thành một xâu. 3. Ví dụ: 3.3.2.7. Hàm num2str 1. Cú pháp: num2str(a) 2. Ý nghĩa: biến đổi một số hoặc ma trận a thành xâu ký tự. 3. Ví dụ: BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 144 3.3.2.8. Hàm str2num, str2double 1. Cú pháp: str2num(s) str2double(s) 2. Ý nghĩa: biến đổi một xâu hoặc ma trận a chứa ký tự số thành số. Trong trƣờng hợp xâu s chứa ký tự không phải là ký tự số thì kết quả là rỗng hoặc báo lỗi. 3. Ví dụ: 3.3.2.9. Hàm eval 1. Cú pháp: eval(s) 2. Ý nghĩa: tính giá trị của biểu thức đƣợc chứa trong xâu ký tự s. 3. Ví dụ: 3.4. Ví dụ ứng dụng Trong nhiều trƣờng hợp, khi giải quyết một bài toán nào đó thuộc các lĩnh vực khác nhau, cuối cùng ta đƣa về bài toán giải hệ phƣơng trình sau: BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 145 { (1) Chúng ta hãy sử dụng MATLAB để giải hệ phƣơng trên. Ta có thể viết lại hệ trên nhƣ sau: Vế trái có thể đƣợc viết dƣới dạng tổng các vector: Khi đó, áp dụng phép nhân vô hƣớng, ta có: Chúng ta có thể nói rằng: là một kết hợp tuyến tính của các vector: , và Cuối cùng, ta đƣa hệ phƣơng trình về dạng a.x = b: trong đó: a = , x = , b = Trong MATLAB, ta có: ax = b => x = a\b. Vậy với hệ phƣơng trình (1) ở trên, để giải ta chỉ cần viết ba lệnh sau: Từ đó suy ra nghiệm của hệ phƣơng trình trên là: BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 146 x = 2; y = 1; z = 4. Hoặc cách khác: ta tìm ma trận c là nghịch đảo của ma trận a, sau đó nhân ma trận b và c, ta cũng thu đƣợc kết quả: Chú ý : ví dụ trên dùng để minh họa bài toán xử lý ma trận. Thực ra trong MATLAB, để giải phƣơng trình (hoặc hệ phƣơng trình) tuyến tính, chúng ta có thể sử dụng lệnh solve. BÀI TẬP 1. Tính tổng s = 2018 + 1 + 3 + 5 + 7 + ...+999. 2. Tính tổng s = 2018 + 2 + 4 + 6 + … + 1000. 3. Tính tổng s = 2018 + 12 + 32 + 52 + 72 + ..9992 . 4. Tính tổng s = 2018 + 22 + 42 + 62 + … + 10002 . 5. Tạo 1 vector mà các phần tử là các số lẻ từ 25 đên 55. 6. Tạo ra một vector x với các phần tử là: a. 2, 4, 6, 8,. . ., 100 b. 10, 8, 6, 4, 2, 0, 2, 4 c. 1, 12, 13, 14, 15, ..., 199 d. 0, 12, 23, 34, 45, ..., 99100 7. Cho vector x = 3 1 5 7 9 2 6, giải thích các lệnh sau: a. x(3) b. x(1:7) c. x(1:end) d. x(1:end1) e. x(6:2:1) f. x(1 6 2 1 1) g. sum(x) 8. Cho các mảng x = 1 4 8, y = 2 1 5 và A = 3 1 6 ; 5 2 7, tính kết quả các biểu thức sau. Nếu có lỗi xẩy ra thì giải thích tại sao? a. x + y b. x + A c. x + y d. A x y e. x ; y f. x ; y g. A 3 BG Tin học nhóm ngành KT Chương 3 Viện KTCN Trường ĐH Vinh 147 9. Cho x = 1 5 2 8 9 0 1 và y = 5 2 2 6 0 0 2, thực hiện và giải thích kết quả của các lệnh sau: a. x > y b. y < x c. x == y d. x = x f. x | y g. x y h. x (~y) i. (x > y) || (y < x) j. (x > y) (y < x) 10. Cho x = 1:10 và y = 3 1 5 6 8 2 9 4 7 0, thực hiện và giải thích kết quả của các lệnh sau: a. (x > 3) (x < 8) b. x(x > 5) c. y( (x < 2) || (x >= 8) ) d. x( (x < 2) || (x >= 8) ) e. y(x q vector a + a(p: end): trích phần tử từ p -> hết vector a Viện KTCN - Trường ĐH Vinh 116 BG Tin học nhóm ngành KT - Chương Ví dụ: 3.1.4.2 Trích xuất ma trận Tƣơng tự nhƣ trích xuất vector, để trích ma trận từ ma trận cho, ngƣời ta liệt kê số hàng, cột (để ngoặc []) Tốn tử “:” từ khóa “end” đƣợc dùng việc + a([p, q,…], [r, s,…]): trích phần tử thuộc hàng p, q,… cột r, s,… ma trận a (chú ý dấu ngoặc []) + a([p q …], [r s …]): cách viết khác nội dung + a(: , j): trích phần tử cột j ma trận a + a(i , :): trích phần tử hàng i + a(p : q, j): trích phần tử hàng p -> q cột j Viện KTCN - Trường ĐH Vinh 117 BG Tin học nhóm ngành KT - Chương + a(i, p : q): trích phần tử hàng i, cột p -> q + a(p : q, r : s): trích phần tử hàng p -> q cột r -> s + a(p : end, r : end): trích phần từ hàng p -> hết cột r -> hết Ví dụ: 3.1.5 Thay đổi kích thước ma trận 3.1.5.1 Tăng kích thước ma trận MATLAB cho phép ghép nối ma trận với để có ma trận kích thƣớc lớn Ví dụ : Viện KTCN - Trường ĐH Vinh 118 BG Tin học nhóm ngành KT - Chương 3.2.3.4 Hàm inv Cú pháp: inv(a) Ý nghĩa: trả ma trận nghịch đảo ma trận vng a Ví dụ: 3.2.3.5 Hàm find Cú pháp : [i, j] = find(a [compare value]) Ý nghĩa : hiển thị vị trí phần tử thỏa mãn việc dùng phép so sánh compare giá trị phần tử ma trận với giá trị value Vector i chứa số hàng, vector j chứa số cột phần tử thỏa mãn Chú ý : + Compare gồm: lớn (>), bé (=), bé (> [b, i] = sort(a) >> [b, i] = sort(a, 1, „ascend‟) có kết nhƣ sau: Nếu viết: >> [b, i] = sort(a, „descend‟) >> [b, i] = sort(a, 1, „descend‟), ta có kết quả: Cịn viết: >> [b, i] = sort(a, 2) >> [b, i] = sort(a, 2, „ascend‟), ta có: Viện KTCN - Trường ĐH Vinh 138 BG Tin học nhóm ngành KT - Chương Và viết: >> [b, i] = sort(a, 2, „descend‟) ta có kết : * Chú ý: a vector hàng khơng cần đƣa vào tham số thứ Ví dụ : 3.2.3.9 Hàm reshape Cú pháp: reshape(a, m, n) Ý nghĩa: định dạng lại kích thƣớc ma trận a Lƣu ý, điều kiện là: số phần tử a phải m * n Ví dụ: Viện KTCN - Trường ĐH Vinh 139 BG Tin học nhóm ngành KT - Chương 3.2.3.10 Hàm flipud Cú pháp: flipud(a) Ý nghĩa: lật ma trận a theo chiều dọc (flip-up-down) Ví dụ: 3.2.3.11 Hàm fliplr Cú pháp: fliplr(a) Ý nghĩa: lật ma trận a theo chiều ngang (flip-left-right) Ví dụ: Viện KTCN - Trường ĐH Vinh 140 BG Tin học nhóm ngành KT - Chương 3.3 Xâu ký tự 3.3.1 Giới thiệu Xâu ký tự dãy ký tự đƣợc đặt dấu nháy đơn („ ‟) Ví dụ: Xâu ký tự vector hàng mà phần tử ký tự, dùng số để truy nhập vào phần tử xâu (các ký tự) Ví dụ: 3.3.2 Các phép toán, hàm làm việc với xâu 3.3.2.1 Phép trích xâu Chúng ta trích xâu từ xâu cho Ví dụ: 3.3.2.2 Phép ghép xâu - MATLAB cho phép ghép hai hay nhiều xâu lại với Ví dụ: Viện KTCN - Trường ĐH Vinh 141 BG Tin học nhóm ngành KT - Chương 3.3.2.3 Hàm double Cú pháp: double(s) Ý nghĩa: đổi xâu s thành dãy mã ASCII ký tự Ví dụ: 3.3.2.4 Hàm char Cú pháp: char(vector) Ý nghĩa: đổi vector (hàng cột) chứa giá trị số thành xâu s có mã ASCII ký tự số Nhƣ vậy, hàm hàm ngƣợc hàm double Ví dụ: 3.3.2.5 Hàm strcmp Cú pháp: strcmp(s1, s2) Ý nghĩa: so sánh hai xâu s1 s2, giống cho kết 1, ngƣợc lại cho kết Ví dụ: Viện KTCN - Trường ĐH Vinh 142 BG Tin học nhóm ngành KT - Chương 3.3.2.6 Hàm strcat Cú pháp: strcat(s1, s2,…) Ý nghĩa: ghép nối xâu s1, s2,… lại thành xâu Ví dụ: 3.3.2.7 Hàm num2str Cú pháp: num2str(a) Ý nghĩa: biến đổi số ma trận a thành xâu ký tự Ví dụ: Viện KTCN - Trường ĐH Vinh 143 BG Tin học nhóm ngành KT - Chương 3.3.2.8 Hàm str2num, str2double Cú pháp: str2num(s) str2double(s) Ý nghĩa: biến đổi xâu ma trận a chứa ký tự số thành số Trong trƣờng hợp xâu s chứa ký tự ký tự số kết rỗng báo lỗi Ví dụ: 3.3.2.9 Hàm eval Cú pháp: eval(s) Ý nghĩa: tính giá trị biểu thức đƣợc chứa xâu ký tự s Ví dụ: 3.4 Ví dụ ứng dụng Trong nhiều trƣờng hợp, giải tốn thuộc lĩnh vực khác nhau, cuối ta đƣa tốn giải hệ phƣơng trình sau: Viện KTCN - Trường ĐH Vinh 144 BG Tin học nhóm ngành KT - Chương { (1) Chúng ta sử dụng MATLAB để giải hệ phƣơng Ta viết lại hệ nhƣ sau: [ ] [ ] ] [ ] ] [ ] [ ] Vế trái đƣợc viết dƣới dạng tổng vector: [ ] [ ] [ Khi đó, áp dụng phép nhân vơ hƣớng, ta có: [ ] [ ] [ Chúng ta nói rằng: [ ] [ ] kết hợp tuyến tính vector: [ ], [ ] [ ] Cuối cùng, ta đƣa hệ phƣơng trình dạng a.x = b: [ ][ ] ], x = [ ], [ ] đó: a=[ b=[ ] Trong MATLAB, ta có: a*x = b => x = a\b Vậy với hệ phƣơng trình (1) trên, để giải ta cần viết ba lệnh sau: Từ suy nghiệm hệ phƣơng trình là: Viện KTCN - Trường ĐH Vinh 145 BG Tin học nhóm ngành KT - Chương x = 2; y = 1; z = Hoặc cách khác: ta tìm ma trận c nghịch đảo ma trận a, sau nhân ma trận b c, ta thu đƣợc kết quả: * Chú ý : ví dụ dùng để minh họa toán xử lý ma trận Thực MATLAB, để giải phƣơng trình (hoặc hệ phƣơng trình) tuyến tính, sử dụng lệnh solve BÀI TẬP Tính tổng s = 2018 + + + + + +999 Tính tổng s = 2018 + + + + … + 1000 Tính tổng s = 2018 + 12 + 32 + 52 + 72 + 9992 Tính tổng s = 2018 + 22 + 42 + 62 + … + 10002 Tạo vector mà phần tử số lẻ từ 25 đên 55 Tạo vector x với phần tử là: a 2, 4, 6, 8, ., 100 b 10, 8, 6, 4, 2, 0, -2, -4 c 1, 1/2, 1/3, 1/4, 1/5, , 1/99 d 0, 1/2, 2/3, 3/4, 4/5, , 99/100 Cho vector x = [3 6], giải thích lệnh sau: a x(3) b x(1:7) c x(1:end) d x(1:end-1) e x(6:-2:1) f x([1 1]) g sum(x) Cho mảng x = [1 8], y = [2 5] A = [3 ; 7], tính kết biểu thức sau Nếu có lỗi xẩy giải thích sao? a x + y c x' + y e [x ; y'] g A - b x + A d A - [x' y'] f [x ; y] Viện KTCN - Trường ĐH Vinh 146 BG Tin học nhóm ngành KT - Chương Cho x = [1 1] y = [5 2 0 2], thực giải thích kết lệnh sau: a x > y c x == y e y >= x b y < x d x y) || (y < x) j (x > y) && (y < x) 10 Cho x = 1:10 y = [3 0], thực giải thích kết lệnh sau: a (x > 3) && (x < 8) b x(x > 5) c y( (x < 2) || (x >= 8) ) d x( (x < 2) || (x >= 8) ) e y(x