Để diễn giải bài học từ loạt video “Essence of Linear Algebra” của 3Blue1Brown, chúng ta cần hiểu rằng các video này tập trung vào việc xây dựng trực giác hình học về các khái niệm đại số tuyến tính, thay vì chỉ cung cấp công thức toán học khô khan. Loạt bài này đặc biệt hiệu quả cho những người học trực quan và muốn hiểu “tại sao” các phép toán lại hoạt động như vậy trong không gian.
Loạt video này không có cấu trúc “bài học” theo nghĩa truyền thống với bài tập cụ thể, mà là một chuỗi các khái niệm được xây dựng nối tiếp nhau. Do đó, phần thực hành sẽ tập trung vào việc hình dung và vẽ tay để củng cố trực giác.
Loạt video “Essence of Linear Algebra” của 3Blue1Brown trên YouTube
Chương 1: Vector, Span, và Basis (Vector, Không gian con và Cơ sở)
Mục tiêu: Xây dựng trực giác hình học về khái niệm vector, hiểu cách chúng kết hợp để tạo ra không gian con, và định nghĩa cơ sở như một tập hợp vector độc lập tuyến tính “phủ” toàn bộ không gian.
Lý thuyết (Trực giác hình học):
- Vector:
- Không chỉ là một danh sách các con số, mà là một mũi tên trong không gian.
- Có độ lớn (độ dài mũi tên) và hướng.
- Đại diện cho một sự dịch chuyển từ điểm gốc (thường là (0,0) trong 2D hoặc (0,0,0) trong 3D) đến điểm đầu mũi tên.
- Phép cộng Vector:
- Diễn giải như việc nối đuôi các mũi tên.
- Vector kết quả là mũi tên từ điểm bắt đầu của vector đầu tiên đến điểm kết thúc của vector cuối cùng.
- Phép nhân Vector với một số vô hướng (Scalar Multiplication):
- “Kéo dài” hoặc “thu nhỏ” vector đó.
- “Lật ngược” nó nếu số vô hướng âm.
- Không gian con (Span):
- Tập hợp tất cả các vector có thể đạt được bằng cách kết hợp tuyến tính (linear combination) của một tập hợp các vector cho trước.
- Kết hợp tuyến tính: Lấy mỗi vector trong tập hợp, nhân với một số vô hướng tùy ý, rồi cộng các kết quả lại.
- Ví dụ:
- Với 1 vector: Một đường thẳng đi qua gốc tọa độ.
- Với 2 vector không cùng phương: Một mặt phẳng đi qua gốc tọa độ.
- Với 3 vector không đồng phẳng: Toàn bộ không gian 3D.
- Cơ sở (Basis):
- Một tập hợp các vector độc lập tuyến tính mà thông qua sự kết hợp tuyến tính của chúng, bạn có thể tạo ra bất kỳ vector nào trong không gian đó.
- Độc lập tuyến tính: Không vector nào trong tập hợp có thể được biểu diễn dưới dạng kết hợp tuyến tính của các vector còn lại. Nói cách khác, chúng “chỉ” theo các hướng khác nhau.
- Ví dụ:
- Trong không gian 2D: \hat{i} = \begin{bmatrix} 1 \\ 0 \end{bmatrix} (vector đơn vị dọc theo trục X) và \hat{j} = \begin{bmatrix} 0 \\ 1 \end{bmatrix} (vector đơn vị dọc theo trục Y) tạo thành một cơ sở quen thuộc. Mọi điểm (x,y) đều có thể được biểu diễn là x\hat{i} + y\hat{j}.
Ví dụ phân tích:
- Vector \vec{v} = \begin{bmatrix} 3 \\ -2 \end{bmatrix}: Một mũi tên từ gốc (0,0) đến điểm (3,-2).
- Cộng vector \vec{a} = \begin{bmatrix} 1 \\ 2 \end{bmatrix} và \vec{b} = \begin{bmatrix} -2 \\ 1 \end{bmatrix}: Đặt gốc của \vec{b} vào đầu của \vec{a}. Vector kết quả là mũi tên từ gốc ban đầu đến đầu của \vec{b}, tức là \begin{bmatrix} -1 \\ 3 \end{bmatrix}.
- Span của vector \begin{bmatrix} 2 \\ 2 \end{bmatrix}: Là đường thẳng đi qua gốc tọa độ và điểm (2,2).
- Span của vector \begin{bmatrix} 1 \\ 0 \end{bmatrix} và \begin{bmatrix} 0 \\ 1 \end{bmatrix}: Là toàn bộ không gian 2D, vì mọi điểm (x,y) đều có thể được biểu diễn là x \begin{bmatrix} 1 \\ 0 \end{bmatrix} + y \begin{bmatrix} 0 \\ 1 \end{bmatrix}. Hai vector này tạo thành một cơ sở.
- Các vector \begin{bmatrix} 1 \\ 0 \\ 0 \end{bmatrix}, \begin{bmatrix} 0 \\ 1 \\ 0 \end{bmatrix} và \begin{bmatrix} 0 \\ 0 \\ 1 \end{bmatrix} tạo thành một cơ sở cho không gian 3D.
Thực hành:
- Vẽ tay:
- Vẽ các vector \vec{u} = \begin{bmatrix} -2 \\ 3 \end{bmatrix} và \vec{v} = \begin{bmatrix} 4 \\ 1 \end{bmatrix} trên mặt phẳng tọa độ.
- Vẽ \vec{u} + \vec{v}, \vec{v} – \vec{u} và 3\vec{u}.
- Vẽ span của vector \begin{bmatrix} 1 \\ 1 \end{bmatrix}.
- Vẽ span của vector \begin{bmatrix} 1 \\ 0 \\ 1 \end{bmatrix} và \begin{bmatrix} 0 \\ 1 \\ 1 \end{bmatrix} (bạn sẽ hình dung ra một mặt phẳng trong không gian 3D).
- Tưởng tượng:
- Tập hợp các vector nào có thể “phủ” toàn bộ không gian 3D?
- Điều gì xảy ra nếu bạn cố gắng sử dụng 2 vector để tạo ra một cơ sở cho không gian 3D? (Bạn sẽ chỉ tạo ra được một mặt phẳng).
- Tại sao các vector \begin{bmatrix} 1 \\ 2 \end{bmatrix} và \begin{bmatrix} 2 \\ 4 \end{bmatrix} không thể tạo thành một cơ sở cho không gian 2D? (Chúng cùng phương, không độc lập tuyến tính).
- Sử dụng NumPy (Python): (Không bắt buộc, nhưng hữu ích để thử nghiệm)
import numpy as np
import matplotlib.pyplot as plt
# Định nghĩa vector
v = np.array([3, -2])
# Vẽ vector
plt.quiver(0, 0, v[0], v[1], angles=’xy’, scale_units=’xy’, scale=1, color=’b’, label=’v’)
plt.xlim(-5, 5)
plt.ylim(-5, 5)
plt.axhline(0, color=’black’, linewidth=0.5)
plt.axvline(0, color=’black’, linewidth=0.5)
plt.grid(color=’gray’, linestyle=’–‘, linewidth=0.5)
plt.legend()
plt.show()
# Phép cộng vector
a = np.array([1, 2])
b = np.array([-2, 1])
sum_ab = a + b
print(“a + b =”, sum_ab)
# Nhân vector với số vô hướng
scaled_v = 3 * v
print(“3 * v =”, scaled_v)
Lời khuyên:
- Tập trung vào hình dung: Cố gắng “thấy” các vector và phép toán trong không gian.
- Vẽ tay: Đây là cách tốt nhất để củng cố trực giác.
- Thử nghiệm với NumPy: Nếu bạn quen thuộc với Python, hãy sử dụng NumPy để tạo và thao tác với vector. Điều này giúp bạn kết nối trực giác hình học với các phép toán số học.
Chương 1 đặt nền móng quan trọng cho các khái niệm đại số tuyến tính tiếp theo. Hãy đảm bảo bạn hiểu rõ về vector, cách chúng kết hợp để tạo ra không gian con, và định nghĩa cơ sở trước khi tiếp tục.
Chương 2: Phép nhân Ma trận như một Phép biến đổi Tuyến tính (Matrix Multiplication as Linear Transformation)
Mục tiêu: Hiểu rằng ma trận là cách mô tả các phép biến đổi tuyến tính, và phép nhân ma trận với vector là việc áp dụng phép biến đổi đó. Đồng thời, hiểu phép nhân ma trận với ma trận là việc thực hiện liên tiếp các phép biến đổi.
Lý thuyết (Trực giác hình học):
* Phép biến đổi (Transformation):
* Một “hàm” hoặc “hành động” lấy một vector làm đầu vào và trả về một vector khác làm đầu ra.
* Về mặt hình học, nó di chuyển vector từ vị trí ban đầu đến một vị trí mới.
* Phép biến đổi Tuyến tính (Linear Transformation):
* Một loại phép biến đổi đặc biệt có hai đặc tính hình học quan trọng:
* Đường thẳng vẫn là đường thẳng: Mọi đường thẳng trong không gian trước khi biến đổi sẽ vẫn là đường thẳng sau khi biến đổi (không bị cong, uốn).
* Gốc tọa độ (Origin) giữ nguyên: Điểm (0,0) (hoặc (0,0,0) trong 3D) không bị di chuyển.
* Đây là lý do tại sao các lưới tọa độ (grid lines) đều đặn và song song vẫn giữ được tính chất đó sau khi biến đổi tuyến tính.
* Ma trận và Phép biến đổi Tuyến tính:
* Ma trận là cách mô tả một phép biến đổi tuyến tính.
* Các cột của ma trận: Đây là điểm mấu chốt! Các cột của một ma trận đại diện cho nơi mà các vector cơ sở tiêu chuẩn (standard basis vectors) hạ cánh sau khi phép biến đổi được áp dụng.
* Trong 2D, các vector cơ sở tiêu chuẩn là \hat{i} = \begin{bmatrix} 1 \\ 0 \end{bmatrix} (vector đơn vị trên trục X) và \hat{j} = \begin{bmatrix} 0 \\ 1 \end{bmatrix} (vector đơn vị trên trục Y).
* Nếu một ma trận M = \begin{bmatrix} a & b \\ c & d \end{bmatrix}, thì sau khi biến đổi, \hat{i} sẽ hạ cánh tại \begin{bmatrix} a \\ c \end{bmatrix} và \hat{j} sẽ hạ cánh tại \begin{bmatrix} b \\ d \end{bmatrix}.
* Phép nhân Ma trận với Vector (M\vec{v}):
* Về mặt hình học, đây là việc áp dụng phép biến đổi mà ma trận M đại diện lên vector \vec{v}.
* Về mặt đại số, nếu \vec{v} = \begin{bmatrix} x \\ y \end{bmatrix} và M = \begin{bmatrix} a & b \\ c & d \end{bmatrix}, thì M\vec{v} = x \begin{bmatrix} a \\ c \end{bmatrix} + y \begin{bmatrix} b \\ d \end{bmatrix}.
* Điều này có nghĩa là vector đầu ra là một kết hợp tuyến tính của các cột của ma trận, với các hệ số là các thành phần của vector đầu vào. Điều này có lý vì vector đầu vào (x,y) là x\hat{i} + y\hat{j}, và do tính chất tuyến tính của phép biến đổi, T(x\hat{i} + y\hat{j}) = xT(\hat{i}) + yT(\hat{j}).
* Phép nhân Ma trận với Ma trận (M_1 M_2):
* Về mặt hình học, đây là việc thực hiện liên tiếp hai phép biến đổi tuyến tính.
* Thứ tự quan trọng: Phép nhân M_1 M_2 có nghĩa là bạn áp dụng phép biến đổi M_2 trước, sau đó áp dụng phép biến đổi M_1 lên kết quả của M_2.
* Để xác định các cột của ma trận kết quả (M_1 M_2): lấy từng cột của ma trận M_2, áp dụng phép biến đổi M_1 lên nó, và kết quả sẽ là cột tương ứng trong ma trận sản phẩm.
* Đây là lý do tại sao phép nhân ma trận nói chung không giao hoán (M_1 M_2 \ne M_2 M_1).
Ví dụ phân tích:
* Ma trận đơn giản: M = \begin{bmatrix} 2 & 0 \\ 0 & 1 \end{bmatrix}
* \hat{i} = \begin{bmatrix} 1 \\ 0 \end{bmatrix} hạ cánh tại \begin{bmatrix} 2 \\ 0 \end{bmatrix}.
* \hat{j} = \begin{bmatrix} 0 \\ 1 \end{bmatrix} hạ cánh tại \begin{bmatrix} 0 \\ 1 \end{bmatrix}.
* Phép biến đổi này kéo dài không gian theo trục X gấp đôi, trong khi giữ nguyên trục Y.
* Áp dụng cho vector \vec{v} = \begin{bmatrix} 3 \\ 4 \end{bmatrix}:
M\vec{v} = \begin{bmatrix} 2 & 0 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} 3 \\ 4 \end{bmatrix} = 3 \begin{bmatrix} 2 \\ 0 \end{bmatrix} + 4 \begin{bmatrix} 0 \\ 1 \end{bmatrix} = \begin{bmatrix} 6 \\ 0 \end{bmatrix} + \begin{bmatrix} 0 \\ 4 \end{bmatrix} = \begin{bmatrix} 6 \\ 4 \end{bmatrix}.
(Vector (3,4) bị biến thành (6,4), phù hợp với việc kéo dài trục X).
* Ma trận quay 90 độ ngược chiều kim đồng hồ: R = \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix}
* \hat{i} = \begin{bmatrix} 1 \\ 0 \end{bmatrix} hạ cánh tại \begin{bmatrix} 0 \\ 1 \end{bmatrix}.
* \hat{j} = \begin{bmatrix} 0 \\ 1 \end{bmatrix} hạ cánh tại \begin{bmatrix} -1 \\ 0 \end{bmatrix}.
* Điều này phù hợp với việc quay 90 độ ngược chiều kim đồng hồ.
* Phép nhân Ma trận với Ma trận:
* Giả sử bạn có M_1 = \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} (quay 90 độ) và M_2 = \begin{bmatrix} 2 & 0 \\ 0 & 1 \end{bmatrix} (kéo dài X).
* M_1 M_2 = \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} \begin{bmatrix} 2 & 0 \\ 0 & 1 \end{bmatrix} = \begin{bmatrix} 0 \times 2 + (-1) \times 0 & 0 \times 0 + (-1) \times 1 \\ 1 \times 2 + 0 \times 0 & 1 \times 0 + 0 \times 1 \end{bmatrix} = \begin{bmatrix} 0 & -1 \\ 2 & 0 \end{bmatrix}
* Để hiểu ma trận kết quả này:
* Áp dụng M_2 lên \hat{i}: \begin{bmatrix} 2 \\ 0 \end{bmatrix}.
* Sau đó áp dụng M_1 lên \begin{bmatrix} 2 \\ 0 \end{bmatrix}: \begin{bmatrix} 0 \\ 2 \end{bmatrix} (cột đầu tiên của M_1 M_2).
* Áp dụng M_2 lên \hat{j}: \begin{bmatrix} 0 \\ 1 \end{bmatrix}.
* Sau đó áp dụng M_1 lên \begin{bmatrix} 0 \\ 1 \end{bmatrix}: \begin{bmatrix} -1 \\ 0 \end{bmatrix} (cột thứ hai của M_1 M_2).
* Thứ tự: Đầu tiên kéo dài X, sau đó quay 90 độ.
Thực hành:
* Vẽ tay:
* Hiểu phép biến đổi:
* Vẽ một lưới tọa độ 2D đơn giản (ví dụ: các đường từ -2 đến 2 trên cả trục X và Y).
* Vẽ các vector cơ sở \hat{i} (1,0) và \hat{j} (0,1).
* Chọn một ma trận 2×2 bất kỳ (ví dụ: M = \begin{bmatrix} 1 & 1 \\ 0 & 1 \end{bmatrix} – một phép cắt (shear)).
* Áp dụng phép biến đổi này lên \hat{i} và \hat{j} bằng cách tìm nơi chúng “hạ cánh” (chính là các cột của ma trận M).
* Dựa trên vị trí mới của \hat{i} và \hat{j}, vẽ lại lưới tọa độ sau khi biến đổi. Quan sát cách các đường lưới thay đổi (vẫn song song và đều đặn, gốc vẫn tại chỗ).
* Áp dụng phép biến đổi lên một vector:
* Chọn một vector \vec{v} = \begin{bmatrix} 2 \\ 1 \end{bmatrix}.
* Trên cùng một lưới biến đổi, vẽ vector \vec{v} ban đầu và vector M\vec{v} (tính toán kết quả phép nhân ma trận).
* Quan sát xem M\vec{v} có hạ cánh đúng vị trí so với lưới biến đổi không.
* Tưởng tượng:
* Nếu một phép biến đổi tuyến tính biến toàn bộ không gian thành một đường thẳng, thì các cột của ma trận tương ứng sẽ có mối quan hệ gì với nhau? (Chúng sẽ cùng phương, hay nói cách khác là phụ thuộc tuyến tính).
* Tại sao phép nhân ma trận không giao hoán? Hãy tưởng tượng bạn mặc áo rồi mặc áo khoác (áo khoác sau áo) và so sánh với mặc áo khoác rồi mặc áo (áo sau áo khoác). Thứ tự khác nhau, kết quả khác nhau.
* Sử dụng NumPy (Python):
import numpy as np
import matplotlib.pyplot as plt
# Ma trận biến đổi (ví dụ: shear)
M = np.array([[1, 1], [0, 1]])
# Vector gốc
v = np.array([2, 1])
# Thực hiện phép biến đổi
transformed_v = M @ v # Phép nhân ma trận với vector
print(“Original vector v:”, v)
print(“Transformed vector Mv:”, transformed_v)
# # — Minh họa trực quan (cần thêm code phức tạp hơn để vẽ lưới biến đổi) —
# fig, ax = plt.subplots(1, 2, figsize=(10, 5))
#
# # Original grid
# for i in range(-2, 3):
# ax[0].plot([-2, 2], [i, i], ‘r–‘, lw=0.5)
# ax[0].plot([i, i], [-2, 2], ‘r–‘, lw=0.5)
# ax[0].quiver(0, 0, 1, 0, angles=’xy’, scale_units=’xy’, scale=1, color=’blue’, label=’i_hat’)
# ax[0].quiver(0, 0, 0, 1, angles=’xy’, scale_units=’xy’, scale=1, color=’green’, label=’j_hat’)
# ax[0].quiver(0, 0, v[0], v[1], angles=’xy’, scale_units=’xy’, scale=1, color=’purple’, label=’v’)
# ax[0].set_title(‘Original Space’)
# ax[0].set_xlim(-3, 3)
# ax[0].set_ylim(-3, 3)
# ax[0].grid(True)
# ax[0].set_aspect(‘equal’, adjustable=’box’)
#
# # Transformed grid
# for i in range(-2, 3):
# # Transform grid lines
# line_h = np.array([np.linspace(-2, 2, 100), np.full(100, i)])
# line_v = np.array([np.full(100, i), np.linspace(-2, 2, 100)])
# transformed_h = M @ line_h
# transformed_v = M @ line_v
# ax[1].plot(transformed_h[0], transformed_h[1], ‘r–‘, lw=0.5)
# ax[1].plot(transformed_v[0], transformed_v[1], ‘r–‘, lw=0.5)
#
# transformed_i_hat = M @ np.array([1, 0])
# transformed_j_hat = M @ np.array([0, 1])
# ax[1].quiver(0, 0, transformed_i_hat[0], transformed_i_hat[1], angles=’xy’, scale_units=’xy’, scale=1, color=’blue’, label=’M@i_hat’)
# ax[1].quiver(0, 0, transformed_j_hat[0], transformed_j_hat[1], angles=’xy’, scale_units=’xy’, scale=1, color=’green’, label=’M@j_hat’)
# ax[1].quiver(0, 0, transformed_v[0], transformed_v[1], angles=’xy’, scale_units=’xy’, scale=1, color=’purple’, label=’M@v’)
# ax[1].set_title(‘Transformed Space’)
# ax[1].set_xlim(-3, 3)
# ax[1].set_ylim(-3, 3)
# ax[1].grid(True)
# ax[1].set_aspect(‘equal’, adjustable=’box’)
#
# plt.tight_layout()
# plt.show()
# # ————————————————————————-
# Phép nhân ma trận với ma trận
M1 = np.array([[0, -1], [1, 0]]) # Quay 90 độ
M2 = np.array([[2, 0], [0, 1]]) # Kéo dài X
M_product_12 = M1 @ M2 # Áp dụng M2 trước, sau đó M1
M_product_21 = M2 @ M1 # Áp dụng M1 trước, sau đó M2
print(“\nM1 @ M2:\n”, M_product_12)
print(“M2 @ M1:\n”, M_product_21)
print(“Are M1 @ M2 and M2 @ M1 equal?”, np.array_equal(M_product_12, M_product_21))
Chương này là trái tim của việc hiểu Đại số Tuyến tính theo một cách hình học. Việc nắm vững cách ma trận “biến đổi” không gian là chìa khóa để hiểu tất cả các khái niệm tiếp theo. Hãy dành thời gian để hình dung và thực hành vẽ các phép biến đổi này.
Chương 3: Định thức (Determinant)
Mục tiêu: Nắm bắt ý nghĩa trực quan của định thức như một hệ số tỷ lệ về diện tích (trong 2D) hoặc thể tích (trong 3D) của không gian khi một phép biến đổi tuyến tính được áp dụng.
Lý thuyết (Trực giác hình học):
1 Định thức là gì?
• Định thức của một ma trận là một con số duy nhất, nó cho chúng ta biết mức độ thay đổi của diện tích (trong 2D) hoặc thể tích (trong 3D) khi chúng ta áp dụng phép biến đổi tuyến tính mà ma trận đó đại diện.
• Hãy tưởng tượng một hình vuông đơn vị (diện tích 1) được tạo bởi các vector cơ sở \hat{i} và \hat{j}. Sau khi áp dụng phép biến đổi ma trận, hình vuông đó sẽ biến thành một hình bình hành. Giá trị tuyệt đối của định thức chính là diện tích của hình bình hành mới này.
• Tương tự trong 3D, nếu bạn có một khối lập phương đơn vị (thể tích 1) được tạo bởi \hat{i}, \hat{j}, và \hat{k}, sau khi biến đổi nó sẽ trở thành một hình hộp song song. Định thức sẽ là thể tích của hình hộp đó.
2 Ý nghĩa của giá trị Định thức:
• \text{det}(A) = 0:
• Đây là trường hợp quan trọng nhất! Nếu định thức bằng 0, điều đó có nghĩa là phép biến đổi đã bóp méo (squish) toàn bộ không gian vào một không gian con có chiều thấp hơn.
• Ví dụ: một phép biến đổi 2D thành một đường thẳng (tức là từ 2D xuống 1D), hoặc một phép biến đổi 3D thành một mặt phẳng (tức là từ 3D xuống 2D).
• Khi định thức bằng 0, các cột của ma trận (tức là các vector cơ sở sau biến đổi) là phụ thuộc tuyến tính. Chúng không còn đủ “hướng” để phủ toàn bộ không gian ban đầu.
• \text{det}(A) > 0:
• Phép biến đổi giữ nguyên định hướng (orientation) của không gian. Tức là, nếu trục X ban đầu ở bên phải trục Y, thì sau biến đổi, trục X mới vẫn sẽ ở bên phải trục Y mới.
• \text{det}(A) < 0:
• Phép biến đổi đã đảo ngược định hướng của không gian (flipped orientation). Tưởng tượng như bạn đã “lật” không gian qua một trục hoặc một mặt phẳng. Nếu trục X ban đầu ở bên phải trục Y, giờ nó có thể ở bên trái.
• Giá trị tuyệt đối của định thức vẫn là hệ số thay đổi diện tích/thể tích.
3 Công thức tính Định thức (trong 2D):
• Cho ma trận A = \begin{bmatrix} a & b \\ c & d \end{bmatrix}
• \text{det}(A) = ad – bc
• 3Blue1Brown giải thích công thức này bằng cách phân tích sự dịch chuyển của \hat{i} và \hat{j} và cách chúng tạo ra hình bình hành.
Ví dụ phân tích:
1 Ma trận co giãn (Scaling):
• A = \begin{bmatrix} 3 & 0 \\ 0 & 2 \end{bmatrix}
• \text{det}(A) = (3)(2) – (0)(0) = 6.
• Ý nghĩa: Mọi diện tích sẽ được mở rộng gấp 6 lần. Hình vuông đơn vị sẽ biến thành hình chữ nhật có cạnh dài 3 và 2, diện tích 6. Định hướng được giữ nguyên (dương).
2 Ma trận lật qua trục Y:
• A = \begin{bmatrix} -1 & 0 \\ 0 & 1 \end{bmatrix}
• \text{det}(A) = (-1)(1) – (0)(0) = -1.
• Ý nghĩa: Diện tích không đổi (hệ số 1), nhưng định hướng bị đảo ngược (âm).
3 Ma trận làm suy biến không gian (Singular Matrix):
• A = \begin{bmatrix} 1 & 2 \\ 2 & 4 \end{bmatrix}
• \text{det}(A) = (1)(4) – (2)(2) = 4 – 4 = 0.
• Ý nghĩa: Các cột của ma trận \begin{bmatrix} 1 \\ 2 \end{bmatrix} và \begin{bmatrix} 2 \\ 4 \end{bmatrix} là phụ thuộc tuyến tính (cột thứ hai là 2 lần cột thứ nhất). Phép biến đổi này sẽ “ép” toàn bộ không gian 2D vào một đường thẳng (span của vector \begin{bmatrix} 1 \\ 2 \end{bmatrix}). Diện tích của hình bình hành suy biến thành 0.
Thực hành:
1 Vẽ tay và Hình dung:
• Vẽ một lưới tọa độ 2D và một hình vuông đơn vị (từ (0,0) đến (1,1) bao gồm các vector cơ sở \hat{i} và \hat{j}).
• Chọn một ma trận 2×2 bất kỳ (ví dụ: \begin{bmatrix} 2 & 1 \\ 1 & 2 \end{bmatrix}).
• Tính định thức của ma trận đó.
• Áp dụng phép biến đổi lên \hat{i} và \hat{j} (tức là vẽ các vector cột của ma trận mới).
• Vẽ hình bình hành được tạo bởi các vector đã biến đổi này.
• So sánh diện tích của hình bình hành mới với định thức bạn đã tính. Nếu định thức âm, hãy nhớ rằng diện tích luôn dương, nhưng dấu âm cho biết định hướng đã bị lật.
• Lặp lại với một ma trận có định thức bằng 0 (ví dụ: \begin{bmatrix} 1 & 1 \\ 1 & 1 \end{bmatrix}). Quan sát hình bình hành “suy biến” thành một đường thẳng.
2 Thử nghiệm với NumPy (Python): Sử dụng thư viện NumPy để tính định thức và quan sát các kết quả. Điều này giúp bạn củng cố mối liên hệ giữa trực giác và tính toán.
import numpy as np
import matplotlib.pyplot as plt
def plot_transformation(matrix, ax, title):
# Original basis vectors
i_hat_orig = np.array([1, 0])
j_hat_orig = np.array([0, 1])
# Transformed basis vectors
i_hat_trans = matrix @ i_hat_orig
j_hat_trans = matrix @ j_hat_orig
# Plot original basis
ax.quiver(0, 0, i_hat_orig[0], i_hat_orig[1], angles=’xy’, scale_units=’xy’, scale=1, color=’gray’, linestyle=’–‘, width=0.008, label=’Original $\\hat{i}$’)
ax.quiver(0, 0, j_hat_orig[0], j_hat_orig[1], angles=’xy’, scale_units=’xy’, scale=1, color=’gray’, linestyle=’–‘, width=0.008, label=’Original $\\hat{j}$’)
# Plot transformed basis
ax.quiver(0, 0, i_hat_trans[0], i_hat_trans[1], angles=’xy’, scale_units=’xy’, scale=1, color=’blue’, label=’Transformed $\\hat{i}$’)
ax.quiver(0, 0, j_hat_trans[0], j_hat_trans[1], angles=’xy’, scale_units=’xy’, scale=1, color=’green’, label=’Transformed $\\hat{j}$’)
# Plot the parallelogram formed by transformed basis vectors
parallelogram_points = np.array([
[0, 0],
i_hat_trans,
i_hat_trans + j_hat_trans,
j_hat_trans,
[0, 0]
])
ax.plot(parallelogram_points[:, 0], parallelogram_points[:, 1], ‘r-‘, lw=1.5, label=’Transformed Unit Square’)
det_val = np.linalg.det(matrix)
ax.set_title(f”{title}\nDet: {det_val:.2f}”)
ax.set_xlim(-4, 4)
ax.set_ylim(-4, 4)
ax.axhline(0, color=’black’, linewidth=0.5)
ax.axvline(0, color=’black’, linewidth=0.5)
ax.grid(True, linestyle=’:’, alpha=0.7)
ax.set_aspect(‘equal’, adjustable=’box’)
ax.legend(fontsize=8)
fig, axes = plt.subplots(1, 3, figsize=(15, 5))
# Example 1: Scaling Matrix
M1 = np.array([[3, 0], [0, 2]])
plot_transformation(M1, axes[0], “Scaling Matrix”)
# Example 2: Reflection Matrix (flip orientation)
M2 = np.array([[-1, 0], [0, 1]])
plot_transformation(M2, axes[1], “Reflection Matrix”)
# Example 3: Singular Matrix (determinant = 0)
M3 = np.array([[1, 2], [2, 4]])
plot_transformation(M3, axes[2], “Singular Matrix”)
plt.tight_layout()
plt.show()
# Tính định thức bằng NumPy
print(“Determinant of M1:”, np.linalg.det(M1))
print(“Determinant of M2:”, np.linalg.det(M2))
print(“Determinant of M3:”, np.linalg.det(M3))
Tổng kết:
Định thức không chỉ là một công thức toán học, mà nó là một thước đo mạnh mẽ về việc một phép biến đổi tuyến tính làm thay đổi “kích thước” của không gian như thế nào. Đặc biệt, việc định thức bằng 0 có ý nghĩa rất lớn: nó báo hiệu rằng phép biến đổi đã làm suy biến không gian, mất đi một số chiều, và các cột của ma trận đó phụ thuộc tuyến tính.
Sau khi nắm vững chương này, bạn sẽ có cái nhìn sâu sắc hơn về “sức mạnh” của các phép biến đổi tuyến tính và tại sao định thức lại là một con số quan trọng đến vậy trong Đại số Tuyến tính.