Trong MATLAB, mọi dữ liệu đều được lưu trữ dưới dạng mảng (Matrix/Array). Một số cô độc (biến vô hướng) thực chất là một ma trận kích thước $1 \times 1$. Việc làm chủ cách tạo và định hình ma trận là bước đầu tiên và quan trọng nhất.
1. Khởi tạo mảng tự động bằng toán tử dấu hai chấm (:)
1. Khởi tạo mảng tự động bằng toán tử dấu hai chấm (:)
Thay vì phải nhập thủ công từng con số đối với một dãy số dài, bạn có thể sử dụng toán tử dấu hai chấm để ra lệnh cho phần mềm tự động sinh ra dãy số theo quy luật.
Cú pháp chuẩn:
Ten_bien = Gia_tri_dau : Buoc_nhay : Gia_tri_cuoi
Gia_tri_dau: Số bắt đầu của dãy.
Buoc_nhay: Khoảng cách giữa hai số liên tiếp trong dãy.
Gia_tri_cuoi: Số kết thúc của dãy (MATLAB sẽ dừng lại khi số tiếp theo vượt quá giá trị này).
Mẹo nhỏ: Nếu bạn không nhập thành phần Buoc_nhay (ví dụ gõ: X = 1:5), MATLAB sẽ tự động hiểu bước nhảy mặc định là 1 và xuất ra dãy số: 1, 2, 3, 4, 5.
Ví dụ thực tế:
% Tạo dãy số từ 0 đến 10 với bước nhảy là 2
V_dong = 0:2:10;
% Kết quả trong MATLAB sẽ xuất ra: 0 2 4 6 8 10
% Tạo dãy số từ 1 đến 5 với bước nhảy mặc định là 1
X = 1:5;
% Kết quả trong MATLAB sẽ xuất ra: 1 2 3 4 5
2. Phép chuyển vị ma trận (Sử dụng toán tử dấu nháy đơn ‘)
Phép chuyển vị là thao tác xoay ma trận, biến các dòng hiện tại thành các cột và biến các cột thành các dòng.
Cú pháp: Đặt dấu nháy đơn
'ngay sau tên biến hoặc tên mảng cần xoay.Ứng dụng: Rất hay dùng để biến một vector dòng (nằm ngang) thành một vector cột (thẳng đứng) để phục vụ cho các phép toán ma trận.
Ví dụ thực tế:
Matlab
> % Cho trước một vector dòng nằm ngang
> V_dong = [1 2 3];
>
> % Chuyển vị thành vector cột thẳng đứng
> V_cot = V_dong';
> % Kết quả trong MATLAB sẽ xuất ra:
> % 1
> % 2
> % 3
> ```
### 3. Các hàm khởi tạo ma trận đặc biệt có sẵn
Để tiết kiệm thời gian nhập liệu, MATLAB tích hợp sẵn các hàm giúp tạo nhanh các cấu trúc ma trận phổ biến:
* **ones(m, n)**: Tạo ra một ma trận có m dòng và n cột, chứa toàn bộ ký tự số 1.
* **zeros(m, n)**: Tạo ra một ma trận có m dòng và n cột, chứa toàn bộ ký tự số 0.
* **eye(n)**: Tạo ra một ma trận đơn vị vuông có n dòng và n cột (các số nằm trên đường chéo chính bằng 1, các vị trí còn lại bằng 0).
> **Ví dụ thực tế:**
>
```matlab
> % Tạo ma trận 2 hàng 3 cột toàn số 1
> M1 = ones(2, 3);
> % Kết quả:
> % 1 1 1
> % 1 1 1
>
> % Tạo ma trận vuông đơn vị kích thước 3 hàng 3 cột
> I = eye(3);
> % Kết quả:
> % 1 0 0
> % 0 1 0
> % 0 0 1
> ```
### 4. Kỹ thuật trích xuất ma trận con (Matrix Indexing)
Để quản lý vị trí của các phần tử bên trong ma trận, MATLAB áp dụng quy tắc tọa độ: **(Dòng trước, Cột sau)**, ngăn cách nhau bằng dấu phẩy.
* **Lấy 1 phần tử cụ thể**: Cú pháp `A(r, c)` sẽ lấy ra phần tử nằm ở dòng r, cột c của ma trận A.
* **Lấy một vùng dữ liệu (Ma trận con)**: Kết hợp toán tử dấu hai chấm `:` vào trong tọa độ để chọn một khoảng dữ liệu.
* Cú pháp: `A(dong_dau : dong_cuoi, cot_dau : cot_cuoi)`
> **Ví dụ thực tế:**
> Giả sử ta có ma trận `A` kích thước 3x3 như sau:
>
```matlab
> A = [10 20 30; 40 50 60; 70 80 90];
>
> % Lấy phần tử ở dòng 2, cột 3
> x = A(2, 3);
> % Kết quả trả về: 60
>
> % Trích xuất ma trận con gồm dòng 1 đến dòng 2, và cột 2 đến cột 3
> A_con = A(1:2, 2:3);
> % Kết quả trả về ma trận nhỏ:
> % 20 30
> % 50 60
> ```
### 5. Kỹ thuật ghép nối các ma trận
Bạn có thể xếp các ma trận nhỏ lại với nhau để tạo thành một ma trận lớn hơn bằng cách đặt chúng bên trong cặp dấu ngoặc vuông `[ ]`:
* **Ghép theo chiều ngang (Mở rộng thêm cột)**: Dùng **dấu cách** hoặc **dấu phẩy** giữa các ma trận thành phần. Ví dụ: `[A, B]`
* **Ghép theo chiều dọc (Mở rộng thêm dòng)**: Dùng **dấu chấm phẩy** để xuống dòng. Ví dụ: `[A ; B]` (Yêu cầu ma trận A và B phải có cùng số lượng cột).
> **Ví dụ thực tế:**
>
```matlab
> % Cho trước hai ma trận
> X = [1 2; 3 4];
> Y = [5 6];
>
> % Ghép ma trận dòng Y vào phía dưới ma trận vuông X (Ghép theo chiều dọc)
> M_ghep = [X ; Y];
> % Kết quả trả về ma trận kích thước 3x2:
> % 1 2
> % 3 4
> % 5 6
> ```3. Các hàm khởi tạo ma trận đặc biệt có sẵn
Để tiết kiệm thời gian nhập liệu, MATLAB tích hợp sẵn các hàm giúp tạo nhanh các cấu trúc ma trận phổ biến:
ones(m, n): Tạo ra một ma trận có m dòng và n cột, chứa toàn bộ ký tự số 1.
zeros(m, n): Tạo ra một ma trận có m dòng và n cột, chứa toàn bộ ký tự số 0.
eye(n): Tạo ra một ma trận đơn vị vuông có n dòng và n cột (các số nằm trên đường chéo chính bằng 1, các vị trí còn lại bằng 0).
4. Kỹ thuật trích xuất ma trận con (Matrix Indexing)
Để quản lý vị trí của các phần tử bên trong ma trận, MATLAB áp dụng quy tắc tọa độ: (Dòng trước, Cột sau), ngăn cách nhau bằng dấu phẩy.
Lấy 1 phần tử cụ thể: Cú pháp
A(r, c)sẽ lấy ra phần tử nằm ở dòng r, cột c của ma trận A.Lấy một vùng dữ liệu (Ma trận con): Kết hợp toán tử dấu hai chấm
:vào trong tọa độ để chọn một khoảng dữ liệu.Cú pháp:
A(dong_dau : dong_cuoi, cot_dau : cot_cuoi)
5. Kỹ thuật ghép nối các ma trận
Bạn có thể xếp các ma trận nhỏ lại với nhau để tạo thành một ma trận lớn hơn bằng cách đặt chúng bên trong cặp dấu ngoặc vuông [ ]:
Ghép theo chiều ngang (Mở rộng thêm cột): Dùng dấu cách hoặc dấu phẩy giữa các ma trận thành phần. Ví dụ:
[A, B]Ghép theo chiều dọc (Mở rộng thêm dòng): Dùng dấu chấm phẩy để xuống dòng. Ví dụ:
[A ; B](Yêu cầu ma trận A và B phải có cùng số lượng cột).
Bài thực hành 1: Khởi tạo và Quản lý Ma trận dòng điện (Dữ liệu mạng lưới)
Tình huống: Giả sử bạn đang quản lý một mảng dữ liệu gồm các chỉ số dòng điện hoặc ma trận hệ thống nút. Hãy dùng các lệnh cơ bản để khởi tạo và thay đổi cấu trúc ma trận.
Câu 1: Hãy tạo một vector dòng đặt tên là
V_dongchứa các giá trị từ 0 đến 20 với bước nhảy là 2.Câu 2: Hãy chuyển vector dòng
V_dongvừa tạo ở câu 1 thành một vector cột và lưu vào biếnV_cot.Câu 3: Khởi tạo một ma trận $A$ kích thước $3 \times 3$ gồm toàn số 1 (dùng hàm có sẵn), sau đó thay đổi giá trị của phần tử nằm ở dòng 2, cột 3 thành số 99.
Câu 4: Cho ma trận ngẫu nhiên
B = [10 20 30; 40 50 60; 70 80 90]. Hãy dùng lệnh trích xuất (indexing) để lấy ra ma trận con gồm dòng 1 đến dòng 2, và cột 2 đến cột 3 của ma trậnB.Câu 5: Hãy dùng lệnh để gộp ma trận dòng
[1 2 3]vào phía dưới của ma trậnBở câu 4 để tạo thành một ma trận mới có kích thước 4×3
Hướng dẫn Câu 1
Trước khi làm, học viên cần bấm Ctrl + N để mở một file Script mới, gõ toàn bộ các câu lệnh dưới đây vào rồi bấm F5 (Run) để chạy.
Bước 1: Phân tích cú pháp cần dùng
Để tạo một dãy số cách đều tự động trong MATLAB, chúng ta sử dụng cấu trúc toán tử dấu hai chấm (:):
Ten_bien = Gia_tri_dau : Buoc_nhay : Gia_tri_cuoi
Dựa vào đề bài, ta xác định các thành phần:
Ten_bien: đặt tên là V_dongGia_tri_dau: bắt đầu từ 0Buoc_nhay: khoảng cách là 2Gia_tri_cuoi: kết thúc tại 20
Bước 2: Viết câu lệnh trên phần mềm MATLAB
Học viên gõ câu lệnh sau vào cửa sổ Command Window hoặc file Script:
V_dong = 0:2:20
Bước 3: Kết quả hiển thị thực tế
Sau khi gõ xong và bấm Enter (hoặc bấm F5 nếu viết trong Script), phần mềm MATLAB 2018a sẽ xuất ra kết quả như sau:
Plaintext
V_dong =
0 2 4 6 8 10 12 14 16 18 20Hướng dẫn Câu 2
Bước 1: Phân tích cú pháp cần dùng
Để xoay một ma trận hoặc biến đổi một mảng dữ liệu nằm ngang (dòng) thành nằm đứng (cột), MATLAB sử dụng toán tử chuyển vị là dấu nháy đơn (').
Cú pháp:
Ten_bien_moi = Ten_bien_cu'
Dựa vào đề bài, ta cần:
Lấy biến cũ: V_dong
Thêm dấu nháy đơn để xoay nó lại.
Lưu vào biến mới tên là: V_cot
Bước 2: Viết câu lệnh trên phần mềm MATLAB
Học viên gõ câu lệnh sau tiếp tục vào file đang làm việc:
Matlab
V_cot = V_dong';
Bước 3: Kết quả hiển thị thực tế
Khi chạy lệnh này, các con số đang nằm ngang ở câu 1 sẽ được dựng đứng lên thành một cột duy nhất như sau:
Plaintext
V_cot =
0
2
4
6
8
10
12
14
16
18
20Hướng dẫn Câu 3
Bước 1: Phân tích cú pháp cần dùng
Câu này gồm có 2 bước nhỏ:
Bước 1a (Khởi tạo): Để tạo ma trận chứa toàn số 1, MATLAB cung cấp hàm
ones(m, n). Với ma trận $3 \times 3$, ta dùng lệnhones(3, 3).Bước 1b (Thay đổi giá trị): Để truy cập và sửa đổi một vị trí, ta dùng quy tắc tọa độ
A(dòng, cột). Vị trí cần sửa là dòng 2, cột 3, tức làA(2, 3).
Bước 2: Viết câu lệnh trên phần mềm MATLAB
Học viên gõ 2 câu lệnh sau vào phần mềm:
Matlab
A = ones(3, 3); % Tạo ma trận vuông 3x3 toàn số 1
A(2, 3) = 99; % Đè số 99 vào vị trí dòng 2, cột 3
Bước 3: Kết quả hiển thị thực tế
Sau khi chạy, ma trận A ban đầu chứa toàn số 1 sẽ bị thay đổi đúng một vị trí duy nhất ở dòng số 2:
Plaintext
A =
1 1 1
1 1 99
1 1 1Hướng dẫn Câu 4
Bước 1: Phân tích cú pháp cần dùng
Để lấy ra một vùng dữ liệu (ma trận con) từ một ma trận lớn có sẵn, ta sử dụng toán tử dấu hai chấm (:) đặt bên trong tọa độ theo quy tắc:
Ten_ma_tran_con = Ten_ma_tran_goc(dong_dau : dong_cuoi, cot_dau : cot_cuoi)
Dựa vào đề bài, ta xác định:
Phạm vi dòng cần lấy: từ dòng 1 đến dòng 2 -> gõ
1:2Phạm vi cột cần lấy: từ cột 2 đến cột 3 ->gõ
2:3
Bước 2: Viết câu lệnh trên phần mềm MATLAB
Học viên gõ 2 câu lệnh sau (dòng đầu để khai báo ma trận B của đề bài, dòng sau để trích xuất):
Matlab
B = [10 20 30; 40 50 60; 70 80 90]; % Khai báo ma trận gốc B
B_con = B(1:2, 2:3); % Trích xuất vùng dữ liệu con
Bước 3: Kết quả hiển thị thực tế
Khi chạy lệnh, phần mềm MATLAB sẽ cắt đúng phần giao giữa dòng 1, 2 và cột 2, 3 để trả về một ma trận nhỏ kích thước 2×2:
Plaintext
B_con =
20 30
50 60Hướng dẫn Câu 5
Bước 1: Phân tích cú pháp cần dùng
Để ghép nối (gộp) các ma trận lại với nhau, MATLAB sử dụng cặp dấu ngoặc vuông [ ].
Nếu muốn xếp hàng mới nằm phía dưới ma trận cũ (ghép theo chiều dọc/thêm dòng), ta dùng dấu chấm phẩy (
;) để ra lệnh xuống hàng.Cú pháp:
Ten_ma_tran_moi = [Ma_tran_cu ; Ma_tran_dong_moi]
Điều kiện bắt buộc: Hàng mới thêm vào phải có cùng số lượng cột với ma trận cũ (ở đây cả ma trận B và hàng mới đều có 3 cột nên hoàn toàn hợp lệ).
Bước 2: Viết câu lệnh trên phần mềm MATLAB
Học viên gõ câu lệnh gộp ma trận như sau:
Ma_tran_moi = [B ; [1 2 3]];
Bước 3: Kết quả hiển thị thực tế
Sau khi chạy lệnh, ma trận B (kích thước 3×3) ban đầu sẽ được nối thêm một hàng số ở dưới cùng, biến thành ma trận mới có kích thước 4 hàng và 3 cột:
Ma_tran_moi =
10 20 30
40 50 60
70 80 90
1 2 3