Що таке матриця?
Матриця зі m
стовпцями та n
рядками являє собою функцію, яка споживає вектор * з m
елементами (або координатами) та створює вектор з n
елементами.
З цього можна помітити, що якщо і лише якщо матриця квадратна, розмірність вектора не зміниться. Напр. ви отримуєте 3D-вектор від перетворення 3D-вектора, 2D з 2D і т.д.
* : У фізиці вектори зазвичай використовуються для позначення сил або інших "впливів", які "рухаються навколо" таких речей, як швидкість або прискорення. Але ніщо не заважає вам використовувати вектор для представлення точки або будь-якого довільного масиву чисел (деякі бібліотеки та мови програмування навіть використовують "вектор", щоб означати "1D масив"). Для використання з матрицями будь-що може бути елементами вашого вектора (навіть рядки або кольори), якщо у вас є спосіб їх додавання, віднімання та множення на будь-які елементи вашої матриці. Звідси вектор імені , що означає "оператор" - він несе або утримує значення для вас.
Що означає множення на матрицю?
Отже, якщо матриця - це функція, то яка функція ? Що робить функція? Рецепт його визначається елементами матриці. Назвемо вхід u
, вихід v
, матрицю M
(множення M*u=v
тоді те саме f(u)=v
) і u(i)
подаємо i
th елемент u
(наприклад, другий елемент - координата y). Для матриці M(i,j)
означає рядок i
, стовпець j
.
Побудова елемента v(1)
, перший в результаті, описується першим рядком матриці. u(1)
раз M(1,1)
, плюс u(2)
раз M(1,2)
, ... плюс u(i)
раз M(1,i)
. Матриця трохи схожа на дуже просту мову програмування, що добре тільки для функцій програмування, які працюють, переміщуючись навколо входів, додаючи їх до себе тощо. **
Корисно уявити, що ви працюєте над одним елементом виводу одночасно, отже, ви використовуєте лише один рядок матриці за один раз. Ви виписуєте u
горизонтально. Ви пишете i-й рядок M
під ним. Ви перемножуєте кожну пару вище / нижче і записуєте продукти нижче, а потім додаєте продукти. Повторіть для кожного рядка, щоб отримати кожен елемент v
. (Тепер ви бачите , чому з m
допомогою n
матриці повинні працювати на m
вектор і виробляти n
вектор.)
Ще один спосіб подумати над цим - скажімо, ми робимо перетворення 3D в 3D, тому матриця 3x3 (або 3D-трансформація, як їх часто називають, тому що ви можете зробити вигляд, що ця "функція" - це "переміщення" 3D-точок, хоча насправді це просто зміна чисел). Скажімо, перший ряд є [1 2 0]
. Це означає, щоб отримати х результату, отримайте 1 вхідних х, 2 вхідних у і 0 вхідних z. Так що це справді рецепт.
** : Якщо матриця є мовою програмування, вона навіть не закінчена.
Що означає множення двох матриць?
Якщо вони обидві матриці відповідного розміру, то A*B
означає «функцію , яка застосовує перший B
потім A
». Ви можете зрозуміти, чому існують обмеження щодо розмірів для множення, оскільки розмір визначає розмір вводу та виводу, а одна матриця споживає вихід іншої. Чому множення означає комбінувати функції? Легше помітити, що це має бути. Якщо A*u
це те саме, що f(u)
і B*u
є те саме, що і g(u)
тоді, f(g(u))
є те саме, f(B*u)
що і те саме, що і те саме A*(B*u)
.
Так само повторне застосування однієї і тієї ж функції може бути показане як повноваження, оскільки A*A*A
означає застосування функції, яка A
представляє тричі.
Чим корисні матриці?
Що корисного для такого перетворення new_x = 1*x+2*y+0*z
(якщо перший рядок є [1 2 0])? Це не дуже очевидно, але для пояснення цього візьмемо ще одну двовимірну матрицю. Матриця така:
[ 0 1
1 0 ]
Або [0 1; 1 0]
використовуючи зручні позначення Matlab. Що робить ця матриця? Він перетворює 2D вектор так: Для х результату візьміть 1 з y вхідного сигналу. Для y результату візьміть 1 з x введення. Ми щойно поміняли координати x і y на вході - ця матриця відображає точки щодо лінії x = y. Це щось корисне! За розширенням ви побачите, що всі матриці з 1s по лінії SW - NE відображають. Ви також можете побачити, чому матриці ідентичності повертають вам вхід назад (для x виводу, x x введення; для y виведення, y у введення ...).
Тепер ви бачите, чому символи є, наприклад. Xx
, Yx
- вони мають в виду , скільки вхідних X
, Y
і т.д. переходить у вихідний x
.
Як ще корисні матриці?
Які ще перетворення ви можете зробити? Ви можете змінити розмір, взявши матрицю ідентичності, але з іншим числом, ніж 1 по діагоналі. Наприклад, [2.5 0; 0 22.5]
помножить кожну координату вводу на 2,5, а якщо застосувати цю матрицю до кожної точки зображення, зображення буде на 2,5 більше. Якщо ви помістите лише 2,5 в один ряд ( [2.5 0; 0 1]
), тоді буде помножена лише координата x, тож ви будете лише розтягуватися вздовж x.
Інші матриці можуть давати інші перетворення, наприклад "перекос", які мають різний ступінь корисності. Особисто косий мій найулюбленіший, оскільки матриця виглядає настільки просто, але сама трансформація рідко робить щось, окрім маніпулювання зображення. Корисним є "обертання" - як ви обертаєте точку? Спробуйте опрацювати положення точки (x, y)
після обертання на theta
градуси проти годинникової стрілки щодо початку. Ви побачите, що нові координати x і y виходять із множення старого x і y на деякі синуси та косинуси. Ви повинні мати можливість легко записати матрицю обертання, використовуючи синуси та косинуси, що відповідає цій функції.
За допомогою неквадратичних матриць ви також можете змінити розмірність введення. Перетворення двовимірного вводу в 3D не дуже корисно, оскільки важко «виготовити» щось, щоб ввести нову координату, але 3D в 2D дуже корисно. Крім усього іншого, саме так ваш комп'ютер знає, як проектувати *** 3D-сцену на 2D зображення, щоб намалювати на моніторі.
Оскільки вектори можуть вміщувати різні речі, ви навіть можете описати матрицю, яка зашифровує рядкові n-символи одночасно, перетасовуючи їх навколо або «множуючи» їх (вам доведеться придумати функцію множення / додавання).
*** : Коли ви проектувати , ви берете 3D - об'єкт , як скульптури, пролити світло на нього, і подивитися , які 2D тіні падає на стіну.
Які обмеження матриць?
Чи можете ви виконати кожну функцію з матрицями? Ні. Якщо подумати графічно, важко уявити щось, чого матриця не змогла зробити (але вона існує: наприклад, ефект "вихору" неможливо зробити). Однак ось простий приклад: Скажімо, функція f
така, що f(u)
повертає вас u
з кожним елементом у квадрат . Ви побачите, що ви не можете написати матрицю для цього: З матрицями є лише можливість опису рецептів, що множать координати на постійне число, ніяких інших фантазійних функцій, таких як потужність, не можна виразити.
**** : Ось чому його називають лінійною алгеброю - функція живлення нелінійна , вона не робить пряму при графіку.
На дивному додатковому рядку в 4D матрицях
Тепер, чому матриця у вашому прикладі 4 на 4? Це не означає 4-мірний простір? У нас немає 4D-комп'ютерів, так чому? Це насправді цікавий трюк з матрицями, що стосується попереднього пункту про лінійні операції.
Щодо того, які функції неможливо виконати за допомогою матриць: Що таке матриця для переміщення 2D точки на 2 одиниці праворуч (що створює крапку (x+2, y)
? Знову ми зациклюємось. Є спосіб множення вводу, але немає способу додати константа. Для роботи в 2D фокус полягає в тому, щоб зробити вигляд, що ви насправді не в двовимірному просторі, а в тривимірному просторі, за винятком висоти (координата z або третього елемента) все завжди 1 (це трохи схоже на те, як 2D Всесвіт просто "тарілка", що лежить плоскою вздовж підлоги 3D-Всесвіту - у цьому випадку третя координата завжди дорівнює 0). Тоді ви можете використовувати цю магічну останню координату як постійну, тому що ви знаєте, що це завжди 1 на кожен вхід.
Так само для переміщення 3D точок потрібні 4D координати. Ось чому всі матриці 3D-перетворень, які ви бачите, матимуть [0 0 0 1]
як останній рядок - ви ніколи не повинні змінювати 4-й вимір, інакше результат буде занадто складним для подання у 3D!