Ma trận là gì?
Một ma trận với m
các cột và n
các hàng biểu thị một hàm tiêu thụ một vectơ * với m
các phần tử (hoặc tọa độ) và tạo ra một vectơ với n
các phần tử.
Từ đó bạn có thể quan sát thấy rằng nếu và chỉ khi một ma trận vuông, thì chiều của vectơ sẽ không thay đổi. Ví dụ. bạn có được một vectơ 3D từ việc chuyển đổi một vectơ 3D, 2D từ 2D, v.v.
* : Trong vật lý, vectơ thường được sử dụng để chỉ các lực hoặc "ảnh hưởng" khác "di chuyển xung quanh" những thứ như vận tốc hoặc gia tốc. Nhưng không có gì ngăn bạn sử dụng một vectơ để biểu thị một điểm hoặc bất kỳ mảng số tùy ý nào (một số thư viện và ngôn ngữ lập trình thậm chí sử dụng "vectơ" để có nghĩa là "mảng 1D"). Để sử dụng với ma trận, bất cứ thứ gì cũng có thể là các phần tử của vectơ của bạn (thậm chí là chuỗi hoặc màu), miễn là bạn có cách thêm, trừ và nhân chúng với bất kỳ yếu tố nào trong ma trận của bạn. Do đó , vectơ tên , có nghĩa là "người vận chuyển" - nó mang hoặc giữ các giá trị cho bạn.
Nhân với một ma trận có nghĩa là gì?
Vậy nếu một ma trận là một hàm thì loại hàm nào? Hàm này làm gì? Công thức cho nó được xác định bởi các yếu tố của ma trận. Chúng ta hãy gọi đầu vào u
, đầu ra v
, ma trận M
(phép nhân M*u=v
giống như sau f(u)=v
) và u(i)
đưa ra i
phần tử thứ của u
(ví dụ phần tử thứ 2 là tọa độ y). Đối với ma trận, M(i,j)
có nghĩa là hàng i
, cột j
.
Xây dựng phần tử v(1)
, phần đầu tiên trong kết quả, được mô tả bởi hàng đầu tiên của ma trận. u(1)
lần M(1,1)
, cộng u(2)
lần M(1,2)
, ... cộng u(i)
lần M(1,i)
. Một ma trận giống như một ngôn ngữ lập trình rất đơn giản, chỉ tốt cho các chức năng lập trình hoạt động bằng cách xáo trộn xung quanh các đầu vào, thêm chúng vào chính chúng, v.v. **
Thật hữu ích khi tưởng tượng rằng bạn đang làm việc trên một yếu tố đầu ra tại một thời điểm, do đó, bạn chỉ sử dụng một hàng của ma trận tại một thời điểm. Bạn viết ra u
theo chiều ngang. Bạn viết hàng thứ i M
bên dưới nó. Bạn nhân từng cặp trên / dưới và viết các sản phẩm bên dưới, sau đó thêm các sản phẩm. Lặp lại cho mỗi hàng để có được mọi yếu tố v
. (Bây giờ bạn thấy tại sao một ma trận m
theo n
phải hoạt động trên một m
vectơ và tạo ra một n
vectơ.)
Một cách khác để suy nghĩ về điều này - giả sử chúng ta đang thực hiện chuyển đổi 3D sang 3D, do đó, ma trận 3x3 (hoặc biến đổi 3D như chúng thường được gọi vì bạn có thể giả vờ "chức năng" này là "di chuyển" các điểm 3D, mặc dù thực sự đó là chỉ cần thay đổi số lượng). Hãy nói hàng đầu tiên là [1 2 0]
. Điều này có nghĩa, để có được x kết quả, hãy lấy 1 của x đầu vào, 2 của y đầu vào và 0 của z của đầu vào. Vì vậy, nó thực sự là một công thức.
** : Nếu một ma trận là ngôn ngữ lập trình, thì nó thậm chí còn chưa hoàn thành Turing.
Nhân hai ma trận có nghĩa là gì?
Nếu họ là cả hai ma trận kích thước thích hợp, sau đó A*B
có nghĩa là "một chức năng mà áp dụng đầu tiên B
sau đó A
". Bạn có thể thấy lý do tại sao các ràng buộc về kích thước cho phép nhân tồn tại, bởi vì kích thước xác định kích thước đầu vào và đầu ra và một ma trận tiêu thụ đầu ra của cái kia. Tại sao phép nhân có nghĩa là kết hợp các hàm? Nó dễ dàng hơn để nhận thấy rằng nó phải được. Nếu A*u
là giống như f(u)
và B*u
là giống như g(u)
sau đó f(g(u))
là giống như f(B*u)
là giống như A*(B*u)
.
Tương tự, các ứng dụng lặp lại của cùng một chức năng có thể được hiển thị dưới dạng quyền hạn, vì A*A*A
có nghĩa là áp dụng chức năng A
đại diện cho ba lần.
Ma trận hữu ích như thế nào?
Điều gì tốt khi thực hiện chuyển đổi như thế nào new_x = 1*x+2*y+0*z
(nếu hàng đầu tiên là [1 2 0])? Điều đó không rõ ràng lắm, nhưng hãy lấy một ma trận 2D khác để giải thích điều đó. Ma trận là:
[ 0 1
1 0 ]
Hoặc [0 1; 1 0]
sử dụng ký hiệu Matlab thuận tiện. Ma trận này làm gì? Nó biến đổi một vectơ 2D như vậy: Đối với x kết quả, lấy 1 trong số y của đầu vào. Đối với y kết quả, lấy 1 trong số x của đầu vào. Chúng ta vừa hoán đổi tọa độ x và y của đầu vào - ma trận này phản ánh các điểm về đường x = y. Điều đó thật hữu ích! Bằng cách mở rộng, bạn sẽ thấy rằng tất cả các ma trận có 1s dọc theo đường SW - NE phản ánh. Bạn cũng có thể thấy lý do tại sao ma trận danh tính cung cấp cho bạn đầu vào trở lại (đối với x đầu ra, lấy x đầu vào; đối với y đầu ra, lấy y đầu vào ...).
Bây giờ bạn thấy tại sao các biểu tượng là ví dụ. Xx
,Yx
- họ có nghĩa là có bao nhiêu đầu vào X
, Y
vv đi vào sản lượng x
.
Làm thế nào khác là ma trận hữu ích?
Những chuyển đổi khác bạn có thể làm gì? Bạn có thể thay đổi kích thước bằng cách lấy một ma trận danh tính, nhưng với một số khác với 1 dọc theo đường chéo. Ví dụ,[2.5 0; 0 22.5]
sẽ nhân mọi tọa độ của đầu vào với 2,5 và nếu bạn áp dụng ma trận này cho mọi điểm trong ảnh, ảnh sẽ lớn hơn 2,5. Nếu bạn chỉ đặt 2,5 trong một hàng ( [2.5 0; 0 1]
) thì chỉ tọa độ x sẽ được nhân, do đó bạn sẽ chỉ kéo dài dọc theo x.
Các ma trận khác có thể đưa ra các phép biến đổi khác, chẳng hạn như "xiên", có mức độ hữu dụng khác nhau. Cá nhân, xiên là yêu thích ít nhất của tôi bởi vì ma trận trông rất đơn giản nhưng bản thân biến đổi hiếm khi làm bất cứ điều gì ngoại trừ mang một hình ảnh. Một cách hữu ích là "xoay" - làm thế nào để bạn xoay một điểm? Hãy thử làm việc ở vị trí của điểm(x, y)
sau khi xoay theo theta
độ ngược chiều kim đồng hồ về điểm gốc. Bạn sẽ thấy rằng cả tọa độ x và y mới đều xuất phát từ việc nhân x và y cũ với một số sin và cosin của theta. Bạn sẽ có thể dễ dàng viết một ma trận xoay bằng cách sử dụng sin và cos tương ứng với chức năng này.
Với ma trận không vuông, bạn cũng có thể thay đổi kích thước của đầu vào. Biến đầu vào 2D thành 3D không hữu ích lắm, vì thật khó để "sản xuất" thứ gì đó để đưa vào tọa độ mới, nhưng 3D thành 2D rất hữu ích. Trong số những thứ khác, đây là cách máy tính của bạn biết để chiếu *** một cảnh 3D vào hình ảnh 2D để vẽ trên màn hình của bạn.
Vì các vectơ có thể chứa những thứ khác nhau, bạn thậm chí có thể mô tả một ma trận mã hóa một chuỗi ký tự n tại một thời điểm, bằng cách xáo trộn chúng xung quanh hoặc "nhân" chúng (bạn sẽ phải đưa ra hàm nhân / cộng).
*** : Khi bạn chiếu , bạn lấy một vật thể 3D như một tác phẩm điêu khắc, chiếu ánh sáng vào nó và xem loại bóng 2D nào rơi trên tường.
Những hạn chế của ma trận là gì?
Bạn có thể làm mọi chức năng với ma trận? Không. Suy nghĩ bằng đồ họa, thật khó để tưởng tượng điều gì đó mà ma trận không thể làm được (nhưng nó tồn tại: chẳng hạn như hiệu ứng "xoáy"). Tuy nhiên, đây là một ví dụ dễ hiểu: Giả sử chức năng f
là như vậy f(u)
mang lại cho bạn u
mọi bình phương . Bạn sẽ thấy rằng bạn không thể viết một ma trận cho điều này: Với ma trận chỉ có cơ sở để mô tả các công thức nhân các tọa độ với một số không đổi, không có chức năng ưa thích nào khác như sức mạnh có thể được biểu thị.
**** : Đây cũng là lý do tại sao nó được gọi là đại số tuyến tính - hàm công suất là phi tuyến tính , nó không tạo ra một đường thẳng khi được vẽ.
Trên hàng phụ kỳ lạ trong ma trận 4D
Bây giờ, tại sao ma trận trong ví dụ 4 của bạn là 4? Điều này không có nghĩa là không gian 4 chiều? Chúng ta không có máy tính 4D, vậy tại sao? Đây thực sự là một mẹo thú vị với ma trận liên quan đến điểm trước đó về các hoạt động tuyến tính.
Về các chức năng không thể được thực hiện với ma trận: Ma trận để di chuyển điểm 2D bằng 2 đơn vị sang phải (điều này tạo ra điểm (x+2, y)
? Một lần nữa, chúng ta bị kẹt. Có một cách để nhân đầu vào, nhưng không có cách nào để thêm Đối với công việc 2D, mẹo là giả vờ bạn thực sự không ở trong không gian 2D, nhưng trong không gian 3D, ngoại trừ chiều cao (tọa độ z hoặc phần tử thứ 3) của mọi thứ luôn là 1 (giống như cách vũ trụ 2D chỉ là một "cái đĩa" nằm phẳng dọc theo sàn của vũ trụ 3D - trong trường hợp đó tọa độ thứ ba luôn là 0). Sau đó, bạn có thể sử dụng phép phối hợp cuối cùng này như một hằng số, bởi vì bạn biết nó luôn luôn là 1 cho mỗi đầu vào.
Tương tự, để di chuyển các điểm 3D, bạn cần tọa độ 4D. Đó cũng là lý do tại sao tất cả các ma trận chuyển đổi 3D mà bạn thấy sẽ có [0 0 0 1]
hàng cuối cùng - bạn không bao giờ phải thay đổi kích thước thứ 4, hoặc kết quả sẽ quá phức tạp để thể hiện trong 3D!