BÀI 1: KHỞI TẠO VÀ THAO TÁC TRÊN MA TRẬN

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

Matlab
% 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_dong chứ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_dong vừa tạo ở câu 1 thành một vector cột và lưu vào biến V_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ận B.

  • 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ận B ở 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_dong

  • Gia_tri_dau: bắt đầu từ 0

  • Buoc_nhay: khoảng cách là 2

  • Gia_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:

Matlab
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    20

Hướ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
    20

Hướ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ệnh ones(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     1

Hướ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 ->1:2

  • Phạ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    60

Hướ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:

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

Plaintext
 
Ma_tran_moi =
    10    20    30
    40    50    60
    70    80    90
     1     2     3