1. Trang chủ
  2. » Luận Văn - Báo Cáo

Chương 3 Tin học nhóm ngành kỹ thuật

41 1 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Chương 3 Tin học nhóm ngành kỹ thuật
Trường học Trường Đại Học Vinh
Chuyên ngành Kỹ Thuật
Thể loại Giáo trình
Thành phố Vinh
Định dạng
Số trang 41
Dung lượng 0,93 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • Chương 3. Ma trận trong MATLAB (2)
    • 3.1. Ma trận (2)
      • 3.1.1. Biểu diễn ma trận (2)
      • 3.1.2. Truy nhập ma trận (4)
      • 3.1.3. Gán giá trị cho phần tử ma trận (5)
      • 3.1.4. Trích xuất ma trận (8)
      • 3.1.5. Thay đổi kích thước ma trận (10)
    • 3.2. Các thao tác trên ma trận (12)
      • 3.2.1. Các phép toán cơ bản (12)
      • 3.2.2. Các hàm tạo ma trận đặc biệt (19)
      • 3.2.3. Các hàm làm việc với ma trận (25)
    • 3.3. Xâu ký tự (33)
      • 3.3.1. Giới thiệu (33)
      • 3.3.2. Các phép toán, hàm làm việc với xâu (33)
    • 3.4. Ví dụ ứng dụng (36)
  • TÀI LIỆU THAM KHẢO (41)

Nội dung

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 của vector a

+ a(p: end): trích ra các phần tử từ p -> hết của vector a

Viện KTCN - Trường ĐH Vinh 117

Để trích xuất ma trận con từ một ma trận đã cho, người ta sử dụng các chỉ số hàng và cột được liệt kê trong ngoặc [] Ngoài ra, toán tử “:” và từ khóa “end” cũng được áp dụng trong quá trình 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

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

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

Viện KTCN - Trường ĐH Vinh 119

3.1.5.2 Giảm kích thước ma trận

MATLAB cho phép xóa hàng và cột của ma trận hiện có để tạo ra ma trận nhỏ hơn bằng cách sử dụng giá trị rỗng ([]) Chúng ta có thể kết hợp với toán tử “:” và từ khóa “end” để thực hiện điều này.

Viện KTCN - Trường ĐH Vinh 120

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

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

2 Phép nhân, chia, lũy thừa vector

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 (.^)

* 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)

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 bằng cách so sánh từng cặp phần tử Kết quả sẽ được lưu vào một vector khác cùng kích thước, trong đó giá trị sẽ là 1 nếu các phần tử tương ứng bằng nhau, và 0 nếu không.

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

Viện KTCN - Trường ĐH Vinh 123

3.2.1.2 Các phép toán trên ma trận

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

Viện KTCN - Trường ĐH Vinh 124

Phép nhân ma trận yêu cầu số cột của ma trận đầu tiên phải bằng số hàng của ma trận thứ hai Lưu ý rằng phép nhân ma trận không có tính giao hoán.

Phép chia ma trận không tồn tại trong toán học; tuy nhiên, ta có thể biểu diễn nó dưới dạng x = a/b, tương đương với x*b = a Giả sử x có kích thước (m x n) và b có kích thước (n x p), thì a sẽ có kích thước (m x p) theo quy tắc nhân ma trận.

Viện KTCN - Trường ĐH Vinh 125

Để thực hiện phép chia ma trận, điều kiện cần thiết là hai ma trận \( a \) và \( b \) phải có cùng số cột \( p \) Khi đó, ma trận kết quả \( x \) sẽ có số hàng bằng số hàng của ma trận \( a \) (m) và số cột bằng số hàng của ma trận \( b \) (n).

* 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

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 => a*x

= 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:

Để thực hiện phép chia ma trận trái, hai ma trận \( a \) và \( b \) cần phải có cùng số hàng \( m \) Kết quả là ma trận \( x \) sẽ có số hàng bằng số cột của ma trận \( a \) (n) và số cột bằng số cột của ma trận \( b \) (p).

Viện KTCN - Trường ĐH Vinh 126 a(4 x 3) b(4 x 2) x(3 x 2)

Phép lũy thừa của ma trận là quá trình nhân ma trận đó với chính nó nhiều lần Để thực hiện phép lũy thừa, ma trận cần phải là ma trận vuông; nếu không, hệ thống sẽ báo lỗi.

6 Phép chuyển vị Đây là phép toán đƣợc thực hiện nhiều trong toán học

Viện KTCN - Trường ĐH Vinh 127

3.2.2 Các hàm tạo ma trận đặc biệt

+ 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

+ 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

Viện KTCN - Trường ĐH Vinh 128

2 Ý nghĩa: tạo ma trận đơn vị

2 Ý nghĩa: tạo vector cột là đường chéo của ma trận a

Viện KTCN - Trường ĐH Vinh 129

2 Ý nghĩa: tạo ma trận tam giác trên của ma trận a (triangular-upper)

Viện KTCN - Trường ĐH Vinh 130

2 Ý nghĩa: tạo ma trận tam giác dưới của ma trận a (triangular-lower)

Viện KTCN - Trường ĐH Vinh 131

1 Cú pháp: rand(m, n) (1) randi(imax, m, n) (2) randi([a b], m, n) (3)

+ 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].

Viện KTCN - Trường ĐH Vinh 132

+ Trong trường hợp m = n (ma trận vuông) thì chỉ cần viết một giá trị (m)

+ 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ả:

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 n 2 i 1

3 Ví dụ: tạo ma trận vuông ma thuật cấp 3:

Viện KTCN - Trường ĐH Vinh 133

+ 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.2.3 Các hàm làm việc với ma trận

Viện KTCN - Trường ĐH Vinh 134

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

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

2 Ý nghĩa: trả về định thức của ma trận vuông a

Viện KTCN - Trường ĐH Vinh 135

2 Ý nghĩa: trả về ma trận nghịch đảo của ma trận vuông a

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

+ 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ó:

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

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

Viện KTCN - Trường ĐH Vinh 140

2 Ý nghĩa: lật ma trận a theo chiều dọc (flip-up-down)

2 Ý nghĩa: lật ma trận a theo chiều ngang (flip-left-right)

Viện KTCN - Trường ĐH Vinh 141

Xâu ký tự

Xâu ký tự là một dãy ký tự đƣợc đặt trong dấu nháy đơn („ ‟)

Xâu ký tự có thể được xem như một vector hàng, trong đó mỗi phần tử đại diện cho một ký tự Chúng ta có thể sử dụng chỉ số để truy cập từng ký tự trong xâu.

3.3.2 Các phép toán, hàm làm việc với xâu

Chúng ta có thể trích ra một xâu con từ xâu đã cho

- MATLAB cũng cho phép chúng ta ghép hai hay nhiều xâu lại với nhau

Viện KTCN - Trường ĐH Vinh 142

2 Ý nghĩa: đổi xâu s thành dãy các mã ASCII của từng ký tự

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

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

Viện KTCN - Trường ĐH Vinh 143

2 Ý nghĩa: ghép nối các xâu s1, s2,… lại thành một xâu

2 Ý nghĩa: biến đổi một số hoặc ma trận a thành xâu ký tự

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

2 Ý nghĩa: tính giá trị của biểu thức đƣợc chứa trong xâu ký tự s

Ví dụ ứng dụng

Trong nhiều tình huống, khi tiếp cận và giải quyết các bài toán từ những lĩnh vực khác nhau, chúng ta thường thấy rằng bài toán cuối cùng có thể được chuyển đổi thành việc giải một hệ phương trình.

Viện KTCN - Trường ĐH Vinh 145

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: [ ], [

] Cuối cùng, ta đưa hệ phương trình về dạng a.x = 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 chỉ cần viết ba lệnh sau:

Từ đó suy ra nghiệm của hệ phương trình trên là:

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ả:

Trong MATLAB, để giải các 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` Ví dụ trên chỉ là minh họa cho bài toán xử lý ma trận.

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, 1/2, 1/3, 1/4, 1/5, , 1/99 d 0, 1/2, 2/3, 3/4, 4/5, , 99/100

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:end-1) 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

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

Ngày đăng: 28/08/2023, 15:09

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm