Что такое матрица?
Матрица со m
столбцами и n
строками представляет функцию, которая использует вектор * с m
элементами (или координатами) и создает вектор с n
элементами.
Из этого вы можете заметить, что если и только если матрица является квадратной, размерность вектора не изменится. Например. Вы получаете 3D вектор от преобразования 3D вектора, 2D от 2D и т. д.
* : В физике векторы обычно используются для обозначения сил или других «влияний», которые «движутся» вокруг таких вещей, как скорость или ускорение. Но ничто не мешает вам использовать вектор для представления точки или любого произвольного массива чисел (некоторые библиотеки и языки программирования даже используют «вектор» в значении «1D массив»). Для использования с матрицами все элементы вашего вектора (даже строки или цвета) могут быть чем угодно, при условии, что у вас есть способ сложения, вычитания и умножения их на любые элементы вашей матрицы. Отсюда и название вектора , что означает «перевозчик» - он несет или хранит для вас значения.
Что означает умножение на матрицу?
Итак, если матрица - это функция, то какая это функция ? Что делает функция? Рецепт для этого определяется элементами матрицы. Давайте назовем вход u
, выход v
, матрицу M
(умножение M*u=v
тогда такое же, какf(u)=v
) и u(i)
даст i
элемент th u
(например, 2-й элемент - это координата 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
by n
должна работать с m
вектором и создаватьn
вектор.)
Еще один способ думать об этом - скажем, мы делаем преобразование 3D в 3D, поэтому матрица 3x3 (или 3D преобразование, как их часто называют, потому что вы можете притвориться, что эта «функция» «перемещает» 3D-точки, даже если на самом деле это просто меняю цифры). Допустим, первый ряд[1 2 0]
. Это значит, чтобы получить x результата, получить 1 из входных данных x, 2 из входных данных y и 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])? Это не очень очевидно, но давайте возьмем другую 2D-матрицу, чтобы объяснить это. Матрица:
[ 0 1
1 0 ]
Или [0 1; 1 0]
используя удобную запись Matlab. Что делает эта матрица? Он преобразует двумерный вектор следующим образом: для x результата возьмите 1 из y входных данных. Для y результата возьмите 1 из x входных данных. Мы только что поменяли координаты x и y на входе - эта матрица отражает точки вокруг линии x = y. Это что-то полезное! По расширению вы увидите, что все матрицы с 1 по линии SW - NE отражают. Вы также можете увидеть, почему единичные матрицы возвращают вам входные данные (для 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 на некоторые синусы и косинусы тэты. Вы должны быть в состоянии легко написать матрицу вращения, используя синусы и косинусы, которые соответствуют этой функции.
С неквадратными матрицами вы также можете изменить размерность ввода. Превращение 2D-ввода в 3D не очень полезно, так как трудно «изготовить» что-то, чтобы вставить новую координату, но 3D в 2D очень полезно. Помимо всего прочего, это то , как ваш компьютер знает проецировать *** 3D - сцены в 2D - изображение , чтобы нарисовать на экране монитора.
Поскольку векторы могут содержать разные вещи, вы могли бы даже описать матрицу, которая зашифровывает строку из n символов за раз, перетасовывая их или «умножая» их (вам придётся придумать функцию умножения / сложения).
*** : Когда вы проецируете , вы берете 3D-объект, например, скульптуру, освещаете его и видите, какой вид 2D-тени падает на стену.
Каковы ограничения матриц?
Можете ли вы сделать каждую функцию с матрицами? Нет. Если мыслить графически, трудно представить то, что матрица не может сделать (но она существует: например, эффект «вихря» не может быть достигнут). Тем не менее, вот простой пример: допустим, функция f
такова, что f(u)
возвращает вас u
с каждым элементом в квадрате . Вы увидите, что вы не можете написать матрицу для этого: с матрицами есть только средство для описания рецептов, которые умножают координаты на постоянное число, никакие другие необычные функции, такие как мощность, не могут быть выражены.
**** : По этой же причине она называется линейной алгеброй - степенная функция нелинейна , она не образует прямую линию при построении графика.
О странной лишней строке в 4D матрицах
Теперь, почему матрица в вашем примере 4 на 4? Разве это не означает 4-мерное пространство? У нас нет 4D компьютеров, так почему? На самом деле это интересный трюк с матрицами, который относится к предыдущему пункту о линейных операциях.
Относительно того, какие функции не могут быть выполнены с матрицами: Какова матрица для перемещения 2D-точки на 2 единицы вправо (которая создает точку (x+2, y)
? Опять же, мы застряли. Есть способ умножить ввод, но нет способа добавить константа. Для 2D-работы хитрость заключается в том, чтобы притворяться, что вы на самом деле не в 2D-пространстве, а в 3D-пространстве, за исключением того, что высота (координата z или 3-й элемент) всего всегда равна 1 (это немного похоже на то, как 2D-юниверс просто «пластинка», лежащая ровно по полу трехмерной вселенной - в этом случае третья координата всегда равна 0). Затем вы можете использовать эту магическую последнюю координату как константу, потому что вы знаете, что она всегда равна 1 для каждого входа.
Аналогично, для перемещения 3D-точек вам нужны 4D-координаты. Вот почему все матрицы 3D-преобразования, которые вы видите, будут иметь [0 0 0 1]
последнюю строку - вы никогда не должны изменять 4-е измерение, иначе результат будет слишком сложным для представления в 3D!