Как найти попарные произведения матриц

Умножение матриц

21 мая 2018

  • Домашняя работа
  • Ответы

Итак, в предыдущем уроке мы разобрали правила сложения и вычитания матриц. Это настолько простые операции, что большинство студентов понимают их буквально с ходу.

Однако вы рано радуетесь. Халява закончилась — переходим к умножению. Сразу предупрежу: умножить две матрицы — это вовсе не перемножить числа, стоящие в клеточках с одинаковыми координатами, как бы вы могли подумать. Тут всё намного веселее. И начать придётся с предварительных определений.

Согласованные матрицы

Одна из важнейших характеристик матрицы — это её размер. Мы уже сто раз говорили об этом: запись $A=left[ mtimes n right]$ означает, что в матрице ровно $m$ строк и $n$ столбцов. Как не путать строки со столбцами, мы тоже уже обсуждали. Сейчас важно другое.

Определение. Матрицы вида $A=left[ mtimes n right]$ и $B=left[ ntimes k right]$, в которых количество столбцов в первой матрице совпадает с количеством строк во второй, называются согласованными.

Ещё раз: количество столбцов в первой матрице равно количеству строк во второй! Отсюда получаем сразу два вывода:

  1. Нам важен порядок матриц. Например, матрицы $A=left[ 3times 2 right]$ и $B=left[ 2times 5 right]$ являются согласованными (2 столбца в первой матрице и 2 строки во второй), а вот наоборот — матрицы $B=left[ 2times 5 right]$ и $A=left[ 3times 2 right]$ — уже не согласованы (5 столбцов в первой матрице — это как бы не 3 строки во второй).
  2. Согласованность легко проверить, если выписать все размеры друг за другом. На примере из предыдущего пункта: «3 2 2 5» — посередине одинаковые числа, поэтому матрицы согласованы. А вот «2 5 3 2» — не согласованы, поскольку посередине разные числа.

Кроме того, капитан очевидность как бы намекает, что квадратные матрицы одинакового размера $left[ ntimes n right]$ согласованы всегда.

В математике, когда важен порядок перечисления объектов (например, в рассмотренном выше определении важен порядок матриц), часто говорят об упорядоченных парах. Мы встречались с ними ещё в школе: думаю, и ежу понятно, что координаты $left( 1;0 right)$ и $left( 0;1 right)$ задают разные точки на плоскости.

Так вот: координаты — это тоже упорядоченные пары, которые составляются из чисел. Но ничто не мешает составить такую пару из матриц. Тогда можно будет сказать: «Упорядоченная пара матриц $left( A;B right)$ является согласованной, если количество столбцов в первой матрице совпадает с количеством строк во второй».

Ну и что с того?

Определение умножения

Рассмотрим две согласованные матрицы: $A=left[ mtimes n right]$ и $B=left[ ntimes k right]$. И определим для них операцию умножения.

Определение. Произведение двух согласованных матриц $A=left[ mtimes n right]$ и $B=left[ ntimes k right]$ — это новая матрица $C=left[ mtimes k right]$, элементы которой считаются по формуле:

[begin{align} & {{c}_{i;j}}={{a}_{i;1}}cdot {{b}_{1;j}}+{{a}_{i;2}}cdot {{b}_{2;j}}+ldots +{{a}_{i;n}}cdot {{b}_{n;j}}= \ & =sumlimits_{t=1}^{n}{{{a}_{i;t}}cdot {{b}_{t;j}}} end{align}]

Обозначается такое произведение стандартно: $C=Acdot B$.

По-моему, тут всё очевидно. Дальше можно не читать. [на самом деле нет]

У тех, кто впервые видит это определение, сразу возникает два вопроса:

  1. Что это за лютая дичь?
  2. А почему так сложно?

Что ж, обо всём по порядку. Начнём с первого вопроса. Что означают все эти индексы? И как не ошибиться при работе с реальными матрицами?

Прежде всего заметим, что длинная строчка для расчёта ${{c}_{i;j}}$ (специально поставил точку с запятой между индексами, чтобы не запутаться, но вообще их ставить не надо — я сам задолбался набирать формулу в определении) на самом деле сводится к простому правилу:

  1. Берём $i$-ю строку в первой матрице;
  2. Берём $j$-й столбец во второй матрице;
  3. Получаем две последовательности чисел. Перемножаем элементы этих последовательностей с одинаковыми номерами, а затем складываем полученные произведения.

Данный процесс легко понять по картинке:

Схема перемножения двух матриц

Ещё раз: фиксируем строку $i$ в первой матрице, столбец $j$ во второй матрице, перемножаем элементы с одинаковыми номерами, а затем полученные произведения складываем — получаем ${{c}_{ij}}$. И так для всех $1le ile m$ и $1le jle k$. Т.е. всего будет $mtimes k$ таких «извращений».

На самом деле мы уже встречались с перемножением матриц в школьной программе, только в сильно урезанном виде. Пусть даны вектора:

[begin{align} & vec{a}=left( {{x}_{a}};{{y}_{a}};{{z}_{a}} right); \ & overrightarrow{b}=left( {{x}_{b}};{{y}_{b}};{{z}_{b}} right). \ end{align}]

Тогда их скалярным произведением будет именно сумма попарных произведений:

[overrightarrow{a}times overrightarrow{b}={{x}_{a}}cdot {{x}_{b}}+{{y}_{a}}cdot {{y}_{b}}+{{z}_{a}}cdot {{z}_{b}}]

По сути, в те далёкие годы, когда деревья были зеленее, а небо ярче, мы просто умножали вектор-строку $overrightarrow{a}$ на вектор-столбец $overrightarrow{b}$.

Сегодня ничего не поменялось. Просто теперь этих векторов-строк и столбцов стало больше.

Но хватит теории! Давайте посмотрим на реальные примеры. И начнём с самого простого случая — квадратных матриц.

Умножение квадратных матриц

Задача 1. Выполните умножение:

[left[ begin{array}{*{35}{r}} 1 & 2 \ -3 & 4 \end{array} right]cdot left[ begin{array}{*{35}{r}} -2 & 4 \ 3 & 1 \end{array} right]]

Решение. Итак, у нас две матрицы: $A=left[ 2times 2 right]$ и $B=left[ 2times 2 right]$. Понятно, что они согласованы (квадратные матрицы одинакового размера всегда согласованы). Поэтому выполняем умножение:

[begin{align} & left[ begin{array}{*{35}{r}} 1 & 2 \ -3 & 4 \end{array} right]cdot left[ begin{array}{*{35}{r}} -2 & 4 \ 3 & 1 \end{array} right]=left[ begin{array}{*{35}{r}} 1cdot left( -2 right)+2cdot 3 & 1cdot 4+2cdot 1 \ -3cdot left( -2 right)+4cdot 3 & -3cdot 4+4cdot 1 \end{array} right]= \ & =left[ begin{array}{*{35}{r}} 4 & 6 \ 18 & -8 \end{array} right]. end{align}]

Вот и всё!

Ответ: $left[ begin{array}{*{35}{r}}4 & 6 \ 18 & -8 \end{array} right]$.

Задача 2. Выполните умножение:

[left[ begin{matrix} 1 & 3 \ 2 & 6 \end{matrix} right]cdot left[ begin{array}{*{35}{r}}9 & 6 \ -3 & -2 \end{array} right]]

Решение. Опять согласованные матрицы, поэтому выполняем действия:[]

[begin{align} & left[ begin{matrix} 1 & 3 \ 2 & 6 \end{matrix} right]cdot left[ begin{array}{*{35}{r}} 9 & 6 \ -3 & -2 \end{array} right]=left[ begin{array}{*{35}{r}} 1cdot 9+3cdot left( -3 right) & 1cdot 6+3cdot left( -2 right) \ 2cdot 9+6cdot left( -3 right) & 2cdot 6+6cdot left( -2 right) \end{array} right]= \ & =left[ begin{matrix} 0 & 0 \ 0 & 0 \end{matrix} right]. end{align}]

Как видим, получилась матрица, заполненная нулями

Ответ: $left[ begin{matrix} 0 & 0 \ 0 & 0 \end{matrix} right]$.

Из приведённых примеров очевидно, что умножение матриц — не такая уж и сложная операция. По крайней мере для квадратных матриц размера 2 на 2.

В процессе вычислений мы составили промежуточную матрицу, где прямо расписали, какие числа входят в ту или иную ячейку. Именно так и следует делать при решении настоящих задач.

Основные свойства матричного произведения

В двух словах. Умножение матриц:

  1. Некоммутативно: $Acdot Bne Bcdot A$ в общем случае. Бывают, конечно, особые матрицы, для которых равенство $Acdot B=Bcdot A$ (например, если $B=E$ — единичной матрице), но в абсолютном большинстве случаев это не работает;
  2. Ассоциативно: $left( Acdot B right)cdot C=Acdot left( Bcdot C right)$. Тут без вариантов: стоящие рядом матрицы можно перемножать, не переживая за то, что стоит левее и правее этих двух матриц.
  3. Дистрибутивно: $Acdot left( B+C right)=Acdot B+Acdot C$ и $left( A+B right)cdot C=Acdot C+Bcdot C$ (в силу некоммутативности произведения приходится отдельно прописывать дистрибутивность справа и слева.

А теперь — всё то же самое, но более подробно.

Умножение матриц во многом напоминает классическое умножение чисел. Но есть отличия, важнейшее из которых состоит в том, что умножение матриц, вообще говоря, некоммутативно.

Рассмотрим ещё раз матрицы из задачи 1. Прямое их произведение мы уже знаем:

[left[ begin{array}{*{35}{r}} 1 & 2 \ -3 & 4 \end{array} right]cdot left[ begin{array}{*{35}{r}} -2 & 4 \ 3 & 1 \end{array} right]=left[ begin{array}{*{35}{r}}4 & 6 \ 18 & -8 \end{array} right]]

Но если поменять матрицы местами, то получим совсем другой результат:

[left[ begin{array}{*{35}{r}} -2 & 4 \ 3 & 1 \end{array} right]cdot left[ begin{array}{*{35}{r}} 1 & 2 \ -3 & 4 \end{array} right]=left[ begin{matrix} -14 & 4 \ 0 & 10 \end{matrix} right]]

Получается, что $Acdot Bne Bcdot A$. Кроме того, операция умножения определена только для согласованных матриц $A=left[ mtimes n right]$ и $B=left[ ntimes k right]$, но никто не гарантировал, что они останутся согласованными, если их поменять местами. Например, матрицы $left[ 2times 3 right]$ и $left[ 3times 5 right]$ вполне себе согласованы в указанном порядке, но те же матрицы $left[ 3times 5 right]$ и $left[ 2times 3 right]$, записанные в обратном порядке, уже не согласованы. Печаль.:(

Среди квадратных матриц заданного размера $n$ всегда найдутся такие, которые дают одинаковый результат как при перемножении в прямом, так и в обратном порядке. Как описать все подобные матрицы (и сколько их вообще) — тема для отдельного урока. Сегодня не будем об этом.:)

Тем не менее, умножение матриц ассоциативно:

[left( Acdot B right)cdot C=Acdot left( Bcdot C right)]

Следовательно, когда вам надо перемножить сразу несколько матриц подряд, совсем необязательно делать это напролом: вполне возможно, что некоторые рядом стоящие матрицы при перемножении дают интересный результат. Например, нулевую матрицу, как в Задаче 2, рассмотренной выше.

В реальных задачах чаще всего приходится перемножать квадратные матрицы размера $left[ ntimes n right]$. Множество всех таких матриц обозначается ${{M}^{n}}$ (т.е. записи $A=left[ ntimes n right]$ и [Ain {{M}^{n}}] означают одно и то же), и в нём обязательно найдётся матрица $E$, которую называют единичной.

Определение. Единичная матрица размера $n$ — это такая матрица $E$, что для любой квадратной матрицы $A=left[ ntimes n right]$ выполняется равенство:

[Acdot E=Ecdot A=A]

Такая матрица всегда выглядит одинаково: на главной диагонали её стоят единицы, а во всех остальных клетках — нули.

Идём далее. Помимо ассоциативности умножение матриц ещё и дистрибутивно:

[begin{align} & Acdot left( B+C right)=Acdot B+Acdot C; \ & left( A+B right)cdot C=Acdot C+Bcdot C. \ end{align}]

Другими словами, если нужно умножить одну матрицу на сумму двух других, то можно умножить её на каждую из этих «двух других», а затем результаты сложить. На практике обычно приходится выполнять обратную операцию: замечаем одинаковую матрицу, выносим её за скобку, выполняем сложение и тем самым упрощаем себе жизнь.:)

Заметьте: для описания дистрибутивности нам пришлось прописать две формулы: где сумма стоит во втором множителе и где сумма стоит в первом. Это происходит как раз из-за того, что умножение матриц некоммутативно (и вообще, в некоммутативной алгебре куча всяких приколов, которые при работе с обычными числами даже не приходят в голову). И если, допустим, вам на экзамене нужно будет расписать это свойство, то обязательно пишите обе формулы, иначе препод может немного разозлиться.

Ладно, всё это были сказки о квадратных матрицах. А что насчёт прямоугольных?

Случай прямоугольных матриц

А ничего — всё то же самое, что и с квадратными.

Задача 3. Выполните умножение:

[left[ begin{matrix} begin{matrix} 5 \ 2 \ 3 \end{matrix} & begin{matrix} 4 \ 5 \ 1 \end{matrix} \end{matrix} right]cdot left[ begin{array}{*{35}{r}} -2 & 5 \ 3 & 4 \end{array} right]]

Решение. Имеем две матрицы: $A=left[ 3times 2 right]$ и $B=left[ 2times 2 right]$. Выпишем числа, обозначающие размеры, в ряд:

[3; 2; 2; 2]

Как видим, центральные два числа совпадают. Значит, матрицы согласованы, и их можно перемножить. Причём на выходе мы получим матрицу $C=left[ 3times 2 right]$:

[begin{align} & left[ begin{matrix} begin{matrix} 5 \ 2 \ 3 \end{matrix} & begin{matrix} 4 \ 5 \ 1 \end{matrix} \end{matrix} right]cdot left[ begin{array}{*{35}{r}} -2 & 5 \ 3 & 4 \end{array} right]=left[ begin{array}{*{35}{r}} 5cdot left( -2 right)+4cdot 3 & 5cdot 5+4cdot 4 \ 2cdot left( -2 right)+5cdot 3 & 2cdot 5+5cdot 4 \ 3cdot left( -2 right)+1cdot 3 & 3cdot 5+1cdot 4 \end{array} right]= \ & =left[ begin{array}{*{35}{r}} 2 & 41 \ 11 & 30 \ -3 & 19 \end{array} right]. end{align}]

Всё чётко: в итоговой матрице 3 строки и 2 столбца. Вполне себе $=left[ 3times 2 right]$.

Ответ: $left[ begin{array}{*{35}{r}} begin{array}{*{35}{r}} 2 \ 11 \ -3 \end{array} & begin{matrix} 41 \ 30 \ 19 \end{matrix} \end{array} right]$.

Сейчас рассмотрим одно из лучших тренировочных заданий для тех, кто только начинает работать с матрицами. В нём нужно не просто перемножить какие-то две таблички, а сначала определить: допустимо ли такое умножение?

Рекомендую после прочтения задания не смотреть в решение, а сначала попробовать выполнить его самостоятельно. И затем сравнить с ответами.

Задача 4. Найдите все возможные попарные произведения матриц:

[A=left[ begin{array}{*{35}{r}} begin{matrix} 1 \ 1 \end{matrix} & begin{array}{*{35}{r}} -1 \ 1 \end{array} & begin{matrix} 2 \ 2 \end{matrix} & begin{array}{*{35}{r}} -2 \ 2 \end{array} \end{array} right]]; $B=left[ begin{matrix} begin{matrix} 0 \ 2 \ 0 \ 4 \end{matrix} & begin{matrix} 1 \ 0 \ 3 \ 0 \end{matrix} \end{matrix} right]$; $C=left[ begin{matrix}0 & 1 \ 1 & 0 \end{matrix} right]$.

Решение. Для начала запишем размеры матриц:

[A=left[ 2times 4 right]; B=left[ 4times 2 right]; C=left[ 2times 2 right]]

Получаем, что матрицу $A$ можно согласовать лишь с матрицей $B$, поскольку количество столбцов у $A$ равно 4, а такое количество строк только у $B$. Следовательно, можем найти произведение:

[Acdot B=left[ begin{array}{*{35}{r}} 1 & -1 & 2 & -2 \ 1 & 1 & 2 & 2 \end{array} right]cdot left[ begin{array}{*{35}{r}} 0 & 1 \ 2 & 0 \ 0 & 3 \ 4 & 0 \end{array} right]=left[ begin{array}{*{35}{r}}-10 & 7 \ 10 & 7 \end{array} right]]

Промежуточные шаги предлагаю выполнить читателю самостоятельно. Замечу лишь, что размер результирующей матрицы лучше определять заранее, ещё до каких-либо вычислений:

[A cdot B=left[ 2times 4 right]cdot left[ 4times 2 right]=left[ 2times 2 right]]

Другими словами, мы просто убираем «транзитные» коэффициенты, которые обеспечивали согласованность матриц.

Какие ещё возможны варианты? Безусловно, можно найти $Bcdot A$, поскольку $B=left[ 4times 2 right]$, $A=left[ 2times 4 right]$, поэтому упорядоченная пара $left( B;A right)$ является согласованной, а размерность произведения будет:

[B cdot A=left[ 4times 2 right]cdot left[ 2times 4 right]=left[ 4times 4 right]]

Короче говоря, на выходе будет матрица $left[ 4times 4 right]$, коэффициенты которой легко считаются:

[Bcdot A=left[ begin{array}{*{35}{r}} 0 & 1 \ 2 & 0 \ 0 & 3 \ 4 & 0 \end{array} right]cdot left[ begin{array}{*{35}{r}} 1 & -1 & 2 & -2 \ 1 & 1 & 2 & 2 \end{array} right]=left[ begin{array}{*{35}{r}}1 & 1 & 2 & 2 \ 2 & -2 & 4 & -4 \ 3 & 3 & 6 & 6 \ 4 & -4 & 8 & -8 \end{array} right]]

Очевидно, можно согласовать ещё $Ccdot A$ и $Bcdot C$ — и всё. Поэтому просто запишем полученные произведения:

[Ccdot A=left[ begin{array}{*{35}{r}} 1 & 1 & 2 & 2 \ 1 & -1 & 2 & -2 \end{array} right]]

[Bcdot C=left[ begin{array}{*{35}{r}}1 & 0 \ 0 & 2 \ 3 & 0 \ 0 & 4 \end{array} right]]

Это было легко.:)

Ответ: $AB=left[ begin{array}{*{35}{r}} -10 & 7 \ 10 & 7 \end{array} right]$; $BA=left[ begin{array}{*{35}{r}} 1 & 1 & 2 & 2 \ 2 & -2 & 4 & -4 \ 3 & 3 & 6 & 6 \ 4 & -4 & 8 & -8 \end{array} right]$; $CA=left[ begin{array}{*{35}{r}} 1 & 1 & 2 & 2 \ 1 & -1 & 2 & -2 \end{array} right]$; $BC=left[ begin{array}{*{35}{r}}1 & 0 \ 0 & 2 \ 3 & 0 \ 0 & 4 \end{array} right]$.

Вообще, очень рекомендую выполнить это задание самостоятельно. И ещё одно аналогичное задание, которое есть в домашней работе. Эти простые на первый взгляд размышления помогут вам отработать все ключевые этапы умножения матриц.

Но на этом история не заканчивается. Переходим к частным случаям умножения.:)

Вектор-строки и вектор-столбцы

Одной из самых распространённых матричных операций является умножение на матрицу, в которой одна строка или один столбец.

Определение. Вектор-столбец — это матрица размера $left[ mtimes 1 right]$, т.е. состоящая из нескольких строк и только одного столбца.

Вектор-строка — это матрица размера $left[ 1times n right]$, т.е. состоящая из одной строки и нескольких столбцов.

На самом деле мы уже встречались с этими объектами. Например, обычный трёхмерный вектор из стереометрии $overrightarrow{a}=left( x;y;z right)$ — это не что иное как вектор-строка. С точки зрения теории разницы между строками и столбцами почти нет. Внимательными надо быть разве что при согласовании с окружающими матрицами-множителями.

Задача 5. Выполните умножение:

[left[ begin{array}{*{35}{r}} 2 & -1 & 3 \ 4 & 2 & 0 \ -1 & 1 & 1 \end{array} right]cdot left[ begin{array}{*{35}{r}} 1 \ 2 \ -1 \end{array} right]]

Решение. Перед нами произведение согласованных матриц: $left[ 3times 3 right]cdot left[ 3times 1 right]=left[ 3times 1 right]$. Найдём это произведение:

[left[ begin{array}{*{35}{r}} 2 & -1 & 3 \ 4 & 2 & 0 \ -1 & 1 & 1 \end{array} right]cdot left[ begin{array}{*{35}{r}} 1 \ 2 \ -1 \end{array} right]=left[ begin{array}{*{35}{r}} 2cdot 1+left( -1 right)cdot 2+3cdot left( -1 right) \ 4cdot 1+2cdot 2+0cdot 2 \ -1cdot 1+1cdot 2+1cdot left( -1 right) \end{array} right]=left[ begin{array}{*{35}{r}} -3 \ 8 \ 0 \end{array} right]]

Ответ: $left[ begin{array}{*{35}{r}}-3 \ 8 \ 0 \end{array} right]$.

Задача 6. Выполните умножение:

[left[ begin{array}{*{35}{r}} 1 & 2 & -3 \end{array} right]cdot left[ begin{array}{*{35}{r}} 3 & 1 & -1 \ 4 & -1 & 3 \ 2 & 6 & 0 \end{array} right]]

Решение. Опять всё согласовано: $left[ 1times 3 right]cdot left[ 3times 3 right]=left[ 1times 3 right]$. Считаем произведение:

[left[ begin{array}{*{35}{r}} 1 & 2 & -3 \end{array} right]cdot left[ begin{array}{*{35}{r}} 3 & 1 & -1 \ 4 & -1 & 3 \ 2 & 6 & 0 \end{array} right]=left[ begin{array}{*{35}{r}}5 & -19 & 5 \end{array} right]]

На самом деле мне было в лом считать все эти три числа — посчитайте сами. А я просто запишу ответ.:)

Ответ: $left[ begin{matrix} 5 & -19 & 5 \end{matrix} right]$.

Как видите, при умножении вектор-строки и вектор-столбца на квадратную матрицу на выходе мы всегда получаем строку или столбец того же размера. Этот факт имеет множество приложений — от решения линейных уравнений до всевозможных преобразований координат (которые в итоге тоже сводятся к системам уравнений, но давайте не будем о грустном).

Думаю, здесь всё было очевидно. Переходим к заключительной части сегодняшнего урока.

Возведение матрицы в степень

Среди всех операций умножения отдельного внимания заслуживает возведение в степень — это когда мы несколько раз умножаем один и тот же объект на самого себя. Матрицы — не исключение, их тоже можно возводить в различные степени.

Такие произведения всегда согласованы:

[Acdot A=left[ ntimes n right]cdot left[ ntimes n right]=left[ ntimes n right]]

И обозначаются точно так же, как и обычные степени:

[begin{align} & Acdot A={{A}^{2}}; \ & Acdot Acdot A={{A}^{3}}; \ & underbrace{Acdot Acdot ldots cdot A}_{n}={{A}^{n}}. \ end{align}]

На первый взгляд, всё просто. Посмотрим, как это выглядит на практике:

Задача 7. Возведите матрицу в указанную степень:

${{left[ begin{matrix} 1 & 1 \ 0 & 1 \end{matrix} right]}^{3}}$

Решение. Ну ОК, давайте возводить. Сначала возведём в квадрат:

[begin{align} & {{left[ begin{matrix} 1 & 1 \ 0 & 1 \end{matrix} right]}^{2}}=left[ begin{matrix} 1 & 1 \ 0 & 1 \end{matrix} right]cdot left[ begin{matrix} 1 & 1 \ 0 & 1 \end{matrix} right]= \ & =left[ begin{array}{*{35}{r}} 1cdot 1+1cdot 0 & 1cdot 1+1cdot 1 \ 0cdot 1+1cdot 0 & 0cdot 1+1cdot 1 \end{array} right]= \ & =left[ begin{array}{*{35}{r}} 1 & 2 \ 0 & 1 \end{array} right] end{align}]

[begin{align} & {{left[ begin{matrix} 1 & 1 \ 0 & 1 \end{matrix} right]}^{3}}={{left[ begin{matrix} 1 & 1 \ 0 & 1 \end{matrix} right]}^{3}}cdot left[ begin{matrix} 1 & 1 \ 0 & 1 \end{matrix} right]= \ & =left[ begin{array}{*{35}{r}} 1 & 2 \ 0 & 1 \end{array} right]cdot left[ begin{matrix} 1 & 1 \ 0 & 1 \end{matrix} right]= \ & =left[ begin{array}{*{35}{r}} 1 & 3 \ 0 & 1 \end{array} right] end{align}]

Вот и всё.:)

Ответ: $left[ begin{matrix}1 & 3 \ 0 & 1 \end{matrix} right]$.

Задача 8. Возведите матрицу в указанную степень:

[{{left[ begin{matrix} 1 & 1 \ 0 & 1 \end{matrix} right]}^{10}}]

Решение. Вот только не надо сейчас плакать по поводу того, что «степень слишком большая», «мир не справедлив» и «преподы совсем берега потеряли». На самом деле всё легко:

[begin{align} & {{left[ begin{matrix} 1 & 1 \ 0 & 1 \end{matrix} right]}^{10}}={{left[ begin{matrix} 1 & 1 \ 0 & 1 \end{matrix} right]}^{3}}cdot {{left[ begin{matrix} 1 & 1 \ 0 & 1 \end{matrix} right]}^{3}}cdot {{left[ begin{matrix} 1 & 1 \ 0 & 1 \end{matrix} right]}^{3}}cdot left[ begin{matrix} 1 & 1 \ 0 & 1 \end{matrix} right]= \ & =left( left[ begin{matrix} 1 & 3 \ 0 & 1 \end{matrix} right]cdot left[ begin{matrix} 1 & 3 \ 0 & 1 \end{matrix} right] right)cdot left( left[ begin{matrix} 1 & 3 \ 0 & 1 \end{matrix} right]cdot left[ begin{matrix} 1 & 1 \ 0 & 1 \end{matrix} right] right)= \ & =left[ begin{matrix} 1 & 6 \ 0 & 1 \end{matrix} right]cdot left[ begin{matrix} 1 & 4 \ 0 & 1 \end{matrix} right]= \ & =left[ begin{matrix} 1 & 10 \ 0 & 1 \end{matrix} right] end{align}]

Заметьте: во второй строчке мы использовали ассоциативность умножения. Собственно, мы использовали её и в предыдущем задании, но там это было неявно.

Ответ: $left[ begin{matrix} 1 & 10 \ 0 & 1 \end{matrix} right]$.

Как видите, ничего сложного в возведении матрицы в степень нет. Последний пример можно обобщить:

[{{left[ begin{matrix} 1 & 1 \ 0 & 1 \end{matrix} right]}^{n}}=left[ begin{array}{*{35}{r}} 1 & n \ 0 & 1 \end{array} right]]

Этот факт легко доказать через математическую индукцию или прямым перемножением. Однако далеко не всегда при возведении в степень можно выловить подобные закономерности. Поэтому будьте внимательны: зачастую перемножить несколько матриц «напролом» оказывается проще и быстрее, нежели искать какие-то там закономерности.

В общем, не ищите высший смысл там, где его нет. В заключение рассмотрим возведение в степень матрицы большего размера — аж $left[ 3times 3 right]$.

Задача 9. Возведите матрицу в указанную степень:

[{{left[ begin{matrix} 0 & 1 & 1 \ 1 & 0 & 1 \ 1 & 1 & 0 \end{matrix} right]}^{3}}]

Решение. Не будем искать закономерности. Работаем «напролом»:

[{{left[ begin{matrix} 0 & 1 & 1 \ 1 & 0 & 1 \ 1 & 1 & 0 \end{matrix} right]}^{3}}={{left[ begin{matrix} 0 & 1 & 1 \ 1 & 0 & 1 \ 1 & 1 & 0 \end{matrix} right]}^{2}}cdot left[ begin{matrix}0 & 1 & 1 \ 1 & 0 & 1 \ 1 & 1 & 0 \end{matrix} right]]

Для начала возведём эту матрицу в квадрат:

[begin{align} & {{left[ begin{matrix} 0 & 1 & 1 \ 1 & 0 & 1 \ 1 & 1 & 0 \end{matrix} right]}^{2}}=left[ begin{matrix} 0 & 1 & 1 \ 1 & 0 & 1 \ 1 & 1 & 0 \end{matrix} right]cdot left[ begin{matrix} 0 & 1 & 1 \ 1 & 0 & 1 \ 1 & 1 & 0 \end{matrix} right]= \ & =left[ begin{array}{*{35}{r}} 2 & 1 & 1 \ 1 & 2 & 1 \ 1 & 1 & 2 \end{array} right] end{align}]

Теперь возведём в куб:

[begin{align} & {{left[ begin{matrix} 0 & 1 & 1 \ 1 & 0 & 1 \ 1 & 1 & 0 \end{matrix} right]}^{3}}=left[ begin{array}{*{35}{r}} 2 & 1 & 1 \ 1 & 2 & 1 \ 1 & 1 & 2 \end{array} right]cdot left[ begin{matrix} 0 & 1 & 1 \ 1 & 0 & 1 \ 1 & 1 & 0 \end{matrix} right]= \ & =left[ begin{array}{*{35}{r}} 2 & 3 & 3 \ 3 & 2 & 3 \ 3 & 3 & 2 \end{array} right] end{align}]

Вот и всё. Задача решена.

Ответ: $left[ begin{matrix} 2 & 3 & 3 \ 3 & 2 & 3 \ 3 & 3 & 2 \end{matrix} right]$.

Как видите, объём вычислений стал больше, но смысл от этого нисколько не поменялся.:)

На этом урок можно заканчивать. В следующий раз мы рассмотрим обратную операцию: по имеющемуся произведению будем искать исходные множители.

Как вы уже, наверное, догадались, речь пойдёт об обратной матрице и методах её нахождения.

Смотрите также:

  1. Определитель
  2. Обратная матрица
  3. Тест к уроку «Что такое логарифм» (средний)
  4. Тест к уроку «Площади многоугольников без координатной сетки» (легкий)
  5. Координаты вершин правильного тетраэдра
  6. Нестандартная задача B5 на площадь круга

Умножение матриц

Определение произведения матриц. Пусть даны матрицы A=(a_{ij}) размеров mtimes p и B=(b_{ij}) размеров ptimes n. Матрицу C размеров mtimes n, элементы c_{ij}, которой вычисляются по формуле

c_{ij}=a_{i1}cdot b_{1j}+a_{i2}cdot b_{2j}+ldots+a_{ip}cdot b_{pj},quad i=1,ldots,m;~j=1,ldots,m;

называют произведением матриц A и B и обозначают C=AB. Операция

умножения матрицы A на матрицу B определена только для согласованных матриц, у которых число столбцов матрицы A равно числу строк матрицы B:

underbrace{C}_{mtimes n}= underbrace{A}_{mtimes p}cdot underbrace{B}_{ptimes n}.

Рассмотрим подробнее процедуру нахождения произведения матриц. Чтобы получить элемент c_{ij}, стоящий на пересечении i-й строки и j-го столбца матрицы C, следует выделить i-ю строку матрицы A и j-й столбец матрицы B (рис. 1.3). Они содержат одинаковое число элементов, так как матрицы A и B согласованы. Затем найти сумму попарных произведений соответствующих элементов: первый элемент i-й строки умножается на первый элемент j-го столбца, второй элемент i-й строки умножается на второй элемент j-го столбца и т.д., а результаты перемножений складываются.

Схема нахождения произведения матриц

В произведения Acdot B матрицу A называют левым множителем для B и говорят об умножении матрицы B на матрицу A слева. Аналогично матрицу B называют правым множителем для A и говорят об умножении матрицы A на матрицу B справа.


Пример 1.6. Даны матрицы A= begin{pmatrix}1&2&1\0&1&2end{pmatrix}!,~B= begin{pmatrix}1&0\0&1\1&1end{pmatrix}. Вычислить произведения AB и BA

.

Решение. Используя правило умножения матриц, получаем

begin{aligned} underbrace{A}_{2times3}cdot underbrace{B}_{3times2}&= begin{pmatrix}1&2&1\0&1&2end{pmatrix}!cdot! begin{pmatrix}1&0\0&1\1&1end{pmatrix}= begin{pmatrix}1cdot1+2cdot0+1cdot1&1cdot0+2cdot1+1cdot1\0cdot1+1cdot0+2cdot1&0cdot0+1cdot1+2cdot1end{pmatrix}= underbrace{begin{pmatrix}2&3\2&3end{pmatrix}}_{2cdot2}.\[5pt] underbrace{B}_{3times2}cdot underbrace{A}_{2times3}&= begin{pmatrix}1&0\0&1\1&1end{pmatrix}!cdot! begin{pmatrix} 1&2&1\0&1&2end{pmatrix}= begin{pmatrix}1cdot1+0cdot0& 1cdot2+0cdot1& 1cdot1+0cdot2\ 0cdot1+1cdot0& 0cdot2+1cdot1& 0cdot1+1cdot2\ 1cdot1+1cdot0& 1cdot2+1cdot1& 1cdot1+1cdot2 end{pmatrix}= underbrace{begin{pmatrix} 1&2&1\ 0&1&2\ 1&3&3 end{pmatrix}}_{3times3}. end{aligned}

Оба произведения Acdot B и Bcdot A определены, но являются матрицами разных размеров, т.е. ABne BA.

Пример 1.7. Даны матрицы A= begin{pmatrix}1&2&1\0&1&2end{pmatrix}!,~x= begin{pmatrix} x_1\x_2\x_3end{pmatrix}!,~b= begin{pmatrix}1&2&3end{pmatrix}. Найти произведения Acdot x,~bcdot x,~xcdot b.

Решение. Используя правило умножения, получаем

begin{aligned} underbrace{A}_{2times3}cdotunderbrace{x}_{3times1}&= begin{pmatrix}1&2&1\0&1&2end{pmatrix}!cdot! begin{pmatrix}x_1\x_2\x_3end{pmatrix}= begin{pmatrix}1cdot x_1+2cdot x_2+1cdot x_3\0cdot x_1+1cdot x_2+2cdot x_3end{pmatrix}= underbrace{begin{pmatrix}x_1+2x_2+x_3\x_2+2x_3end{pmatrix}}_{2times1}.\[5pt] underbrace{b}_{1times3}cdotunderbrace{x}_{3times1}&= begin{pmatrix}1&2&3end{pmatrix}!cdot! begin{pmatrix}x_1\x_2\x_3end{pmatrix}= underbrace{begin{pmatrix}1cdot x_1+2cdot x_2+3cdot x_3end{pmatrix}}_{1times1}= x_1+2x_2+3x_3;\[5pt] underbrace{x}_{3times1}cdotunderbrace{b}_{1times3}&= begin{pmatrix}x_1\x_2\x_3end{pmatrix}!cdot! begin{pmatrix}1&2&2end{pmatrix}= underbrace{begin{pmatrix}x_1&2x_1&3x_1\x_2&2x_2&3x_2\x_3&2x_3&3x_3end{pmatrix}}_{3times3}. end{aligned}

Пример 1.8. Даны матрицы A=begin{pmatrix}1&2\3&4end{pmatrix}!,~ B=begin{pmatrix}0&0\1&1end{pmatrix}!,~ E=begin{pmatrix}1&0\0&1end{pmatrix}!,~ O=begin{pmatrix}0&0\0&0end{pmatrix}!.
Вычислить произведения AB,~BA,~AE,~EA,~BO,~OB.

Решение. Все матрицы квадратные второго порядка. Следовательно, все произведения будут квадратными матрицами того же порядка. Используя правило умножения, получаем

begin{aligned} Acdot B&= begin{pmatrix}1&2\3&4end{pmatrix}!cdot! begin{pmatrix}0&0\1&1end{pmatrix}=begin{pmatrix}1cdot0+2cdot1&1cdot0+2cdot1\3cdot0+4cdot1&3cdot0+4cdot1end{pmatrix}= begin{pmatrix}2&2\4&4end{pmatrix}!;\[3pt] Bcdot A&= begin{pmatrix}0&0\1&1end{pmatrix}!cdot! begin{pmatrix}1&2\3&4end{pmatrix}=begin{pmatrix}0cdot1+0cdot3&0cdot2+0cdot4\1cdot1+1cdot3&1cdot2+1cdot4end{pmatrix}= begin{pmatrix}0&0\4&6end{pmatrix}!;\[3pt] Acdot E&= begin{pmatrix}1&2\3&4end{pmatrix}!cdot! begin{pmatrix}1&0\0&1end{pmatrix}=begin{pmatrix}1cdot1+2cdot0&1cdot0+2cdot1\3cdot1+4cdot0&3cdot0+4cdot1end{pmatrix}= begin{pmatrix}1&2\3&4end{pmatrix}!;\[3pt] Ecdot A&= begin{pmatrix}1&0\0&1end{pmatrix}!cdot! begin{pmatrix}1&2\3&4end{pmatrix}= begin{pmatrix}1cdot1+0cdot3&1cdot2+0cdot4\0cdot1+1cdot3&0cdot2+1cdot4end{pmatrix}= begin{pmatrix}1&2\3&4end{pmatrix}!;\[3pt] Bcdot O&= begin{pmatrix}0&0\1&1end{pmatrix}!cdot! begin{pmatrix}0&0\0&0end{pmatrix}= begin{pmatrix}0&0\0&0end{pmatrix}!;\[3pt] Ocdot B&= begin{pmatrix}0&0\0&0end{pmatrix}!cdot! begin{pmatrix}0&0\1&1end{pmatrix}= begin{pmatrix}0&0\0&0end{pmatrix}!.end{aligned}


Замечание 1.2. Непосредственным вычислением можно доказать основное свойство единичной матрицы:

Acdot E_n=E_mcdot A для любой матрицы A размеров mtimes n.

Пример 1.9. Найти произведения

begin{array}{ll}mathsf{1)}~A=begin{pmatrix}1&2&3end{pmatrix}!,~B=begin{pmatrix}4\5\6end{pmatrix}!;&qquad mathsf{2)}~begin{pmatrix}1&2\3&1end{pmatrix}!,~ B=begin{pmatrix}-1&3\1&1end{pmatrix}!;\\[-7pt] mathsf{3)}~A=begin{pmatrix}6&1\2&1end{pmatrix}!,~B=begin{pmatrix}-4&-1\-2&1end{pmatrix}!;&qquad mathsf{4)}~begin{pmatrix}3&2&1\0&1&2end{pmatrix}!,~ B=begin{pmatrix}1&3end{pmatrix}!.end{array}

Решение. 1) Произведением Acdot B является число:

Acdot B=underbrace{begin{pmatrix}1&2&3end{pmatrix}}_{1cdot3}!cdot! underbrace{begin{pmatrix}4\5\6end{pmatrix}}_{3times1}= begin{pmatrix}1cdot4+2cdot5+3cdot6end{pmatrix}= underbrace{begin{pmatrix}32end{pmatrix}}_{1times1}=32,

а произведением Bcdot A — квадратная матрица третьего порядка:

Bcdot A= underbrace{begin{pmatrix} 4\5\6end{pmatrix}}_{3cdot1}!cdot! underbrace{begin{pmatrix}1&2&3end{pmatrix}}_{1times3}= underbrace{begin{pmatrix}4cdot1&4cdot2&4cdot3\ 5cdot1&5cdot2&5cdot3\6cdot1&6cdot2&6cdot3end{pmatrix}}_{3times3}= begin{pmatrix}4&8&12\5&10&15\6&12&18end{pmatrix}!.

Очевидно, что Acdot Bne Bcdot A.

2)

begin{aligned}Acdot B&= underbrace{begin{pmatrix}1&2\3&1end{pmatrix}}_{2times2}cdotunderbrace{begin{pmatrix}-1&3\1&1end{pmatrix}}_{2times2}= underbrace{begin{pmatrix}1cdot(-1)+2cdot1&1cdot3+2cdot1\ 3cdot(-1)+1cdot1&3cdot3+1cdot1end{pmatrix}}_{2times2}= begin{pmatrix}1&5\-1&10end{pmatrix}!;\[5pt] Bcdot A&= underbrace{begin{pmatrix}-1&3\1&1end{pmatrix}}_{2times2}cdotunderbrace{begin{pmatrix}1&2\3&1end{pmatrix}}_{2times2}= underbrace{begin{pmatrix}(-1)cdot1+3cdot3&(-1)cdot2+3cdot1\ 1cdot1+1cdot3&1cdot2+1cdot1end{pmatrix}}_{2times2}= begin{pmatrix}8&1\4&3end{pmatrix}!. end{aligned}

Оба произведения — это квадратные матрицы одного и того же порядка, но Acdot Bne Bcdot A.

3)

begin{aligned}Acdot B&= underbrace{begin{pmatrix} 6&1\2&1end{pmatrix}}_{2times2}cdot underbrace{begin{pmatrix}-4&-1\-2&1end{pmatrix}}_{2times2}= underbrace{begin{pmatrix}6cdot(-4)+1cdot(-2)&6cdot(-1)+1cdot1\ 2cdot(-4)+1cdot(-2)&2cdot(-1)+1cdot1 end{pmatrix}}_{2times2}= begin{pmatrix}-26&-5\-10&-1end{pmatrix}!;\[5pt] Bcdot A&= underbrace{begin{pmatrix}-4&-1\-2&1end{pmatrix}}_{2times2}cdot underbrace{begin{pmatrix}6&1\2&1end{pmatrix}}_{2times2}= underbrace{begin{pmatrix}(-4)cdot6+(-1)cdot2&(-4)cdot1+(-1)cdot1\ (-2)cdot6+1cdot2&(-2)cdot1+1cdot1 end{pmatrix}}_{2times2}= begin{pmatrix}-26&-5\-10&-1end{pmatrix}!. end{aligned}

Результаты умножения совпадают, т.е. Acdot B=Bcdot A.

4) произведение Acdot B не может быть найдено, так как число столбцов матрицы A (три) не равно числу строк матрицы B (одна). При этом говорят, что нельзя умножить матрицу A на матрицу B справа. В то же время можно умножить матрицу A на матрицу B слева:

Bcdot A=underbrace{begin{pmatrix}1&3end{pmatrix}}_{1times2}cdot underbrace{begin{pmatrix}3&2&1\0&1&2end{pmatrix}}_{2times3}= underbrace{begin{pmatrix}1cdot3+3cdot0&1cdot2+3cdot1&1cdot1+3cdot2end{pmatrix}}_{1times3}= begin{pmatrix}3&5&7end{pmatrix}!.


Свойства умножения матриц

Пусть lambda — любое число, A,B,C — произвольные матрицы, для которых определены операции умножения и сложения, записанные в левых частях следующих равенств. Тогда определены операции, указанные в правых частях, и справедливы равенства:

1. (AB)C=A(BC); (ассоциативность умножения матриц)

2. A(B+C)=AB+AC; (дистрибутивность умножения)

3. (A+B)C=AC+BC; (дистрибутивность умножения)

4. lambda (AB)=(lambda A)B.

Пример 1.10. Продемонстрировать справедливость свойств 1, 2, если

A=begin{pmatrix}1&2\3&4end{pmatrix}!,quad B=begin{pmatrix}5&6\7&8end{pmatrix}!,quad C=begin{pmatrix}1&0\0&2end{pmatrix}!.

Решение. Проверим свойство 1: (AB)C=A(BC).

begin{aligned}(Acdot B)cdot A&= left[begin{pmatrix}1&2\3&4end{pmatrix}!cdot! begin{pmatrix}5&6\7&8end{pmatrix}right]!cdot! begin{pmatrix}1&0\0&2end{pmatrix}= begin{pmatrix}19&22\43&50end{pmatrix}!cdot! begin{pmatrix}1&0\0&2end{pmatrix}= begin{pmatrix}19&44\43&100end{pmatrix}!,\[3pt] Acdot(Bcdot C)&= begin{pmatrix}1&2\3&4end{pmatrix}!cdot! left[begin{pmatrix}5&6\7&8end{pmatrix}!cdot! begin{pmatrix}1&0\0&2end{pmatrix}right]= begin{pmatrix}1&2\3&4end{pmatrix}!cdot! begin{pmatrix}5&12\7&16end{pmatrix}= begin{pmatrix}19&44\43&100end{pmatrix}!.end{aligned}

Проверим свойство 2: A(B+C)=AB+AC.

begin{aligned}Acdot(B+C)&= begin{pmatrix}1&2\3&4end{pmatrix}!cdot! left[begin{pmatrix}5&6\7&8end{pmatrix}+begin{pmatrix}1&0\0&2end{pmatrix}right]= begin{pmatrix}1&2\3&4end{pmatrix}!cdot! begin{pmatrix}6&6\7&10end{pmatrix}= begin{pmatrix}20&26\46&58end{pmatrix}!,\[3pt] AB+AC&= begin{pmatrix}1&2\3&4end{pmatrix}!cdot! begin{pmatrix}5&6\7&8end{pmatrix}+ begin{pmatrix}1&2\3&4end{pmatrix}!cdot! begin{pmatrix}1&0\0&2end{pmatrix}= begin{pmatrix}19&22\43&50end{pmatrix}+ begin{pmatrix}1&4\3&8end{pmatrix}= begin{pmatrix}20&26\46&58end{pmatrix}!.end{aligned}


Замечания 1.3

1. В общем случае умножение матриц не является коммутативным. Произведение зависит от перестановки множителей, т.е Acdot Bne Bcdot A. Во-первых, размеры матриц A и B могут быть такими, что произведение AB определено, а произведение BA — не существует и наоборот (в примере 1.7 найдено произведение Ax, а произведение xA не определено; в примере 1.9, г найдено произведение BA, а произведение AB не определено). Во-вторых, если оба произведения AB и BA определены, результаты могут оказаться матрицами разных размеров (см. пример 1.6 и 1.9, а). Если матрицы A и B квадратные одного порядка, то произведения AB и BA будут также квадратными матрицами того же порядка. Даже при этих условиях умножение матриц не коммутативно (см. пример 1.8 и 1.9,6, где ABne BA). С другой стороны, в примере 1.8 AE=EA=A и BO=OB=O, а в примере 1.9, в AB=BA, т.е. существуют квадратные матрицы, произведение которых не зависит от перестановки множителей.

Матрицы A и B называются перестановочными, если Acdot B=Bcdot A. Перестановочными могут быть только квадратные матрицы одного и того же порядка. В частности, например, можно показать, что диагональные матрицы одного и того же порядка перестановочны.

2. Для любой квадратной матрицы A порядка n справедливы следующие равенства

Acdot E=Ecdot A=A, где E — единичная матрица порядка n.

Другими словами, единичная матрица перестановочна с любой квадратной матрицей того же порядка.

3. Для любой матрицы A справедливы равенства

Acdot O=O и Ocdot A=O, где O — нулевые матрицы соответствующих порядков,

т.е. нулевая квадратная матрица перестановочна с любой квадратной матрицей того же порядка.

4. Множество квадратных матриц одного и того же порядка n>1 с операциями сложения матриц и умножения матриц на число представляет собой некоммутативное кольцо с единицей. Кольцо не является коммутативным, так как операция умножения квадратных матриц порядка n>1 не коммутативна. Единичным элементом кольца служит единичная матрица.

5. Заметим, что сумма и произведение диагональных (верхних треугольных, нижних треугольных) матриц одного и того же порядка являются диагональными (верхними треугольными, нижними треугольными) матрицами. Следовательно, операции сложения и умножения матриц определены на множествах диагональных (верхних треугольных, нижних треугольных) матриц одного и того же порядка. Поэтому каждое из указанных множеств является кольцом с единицей, причем кольцо диагональных матриц коммутативное.


Пример 1.11. Найти матрицы, перестановочные с матрицей A=begin{pmatrix}1&1\0&1end{pmatrix}.

Решение. Для выполнения равенства AB=BA искомая матрица B должна быть квадратной второго порядка. Пусть она имеет вид B=begin{pmatrix}x&y\z&wend{pmatrix} и удовлетворяет равенству

begin{pmatrix}1&1\0&1end{pmatrix}!cdot! begin{pmatrix}x&y\z&wend{pmatrix} =begin{pmatrix}x&y\z&wend{pmatrix}!cdot! begin{pmatrix}1&1\0&1end{pmatrix}!.

После умножения получаем в левой и правой частях равенства квадратные матрицы второго порядка:

begin{pmatrix}x+z&y+w\z&wend{pmatrix}= begin{pmatrix}x&x+y\z&z+wend{pmatrix}!.

Записывая равенство соответствующих элементов этих матриц, получаем систему уравнений

begin{cases}x+z=x,\z=z,\y+w=x+y,\w=z+w.end{cases}

Из первого уравнения следует, что z=0, а из третьего: x=w. Следовательно, искомые матрицы имеют вид B=begin{pmatrix}x&y\0&xend{pmatrix}, где x,y — параметры, принимающие любые действительные значения.


Умножение матриц на столбцы и строки единичной матрицы

Рассмотрим два типа преобразований квадратной матрицы A n-го порядка при помощи умножения на строки и столбцы единичной матрицы.

Обозначим j-й столбец и i-ю строку единичной матрицы n-го порядка через e_j и e_i^T соответственно:

e_j= begin{pmatrix}0\vdots\0\1\0\vdots\0end{pmatrix}!_{j},quad e_i^T= mathop{begin{pmatrix}0&cdots&0&1&0&cdots&0end{pmatrix}}limits_{i}= E_n=mathop{begin{pmatrix}1&0&cdots&0\0&1&cdots&0\vdots&vdots&ddots&vdots\0&0&cdots&1end{pmatrix}}limits_{begin{matrix}e_1&e_2&cdots&e_nend{matrix}}.

1. Найдем произведения

begin{gathered}Ae_j= begin{pmatrix}a_{11}&cdots&a_{1j}&cdots&a_{1n}\ vdots&ddots&vdots&ddots&vdots\ a_{i1}&cdots&a_{ij}&cdots&a_{in}\ vdots&ddots&vdots&ddots&vdots\ a_{n1}&cdots&a_{nj}&cdots&a_{nn}end{pmatrix}!! begin{pmatrix}0\vdots\1\vdots\0end{pmatrix}=begin{pmatrix}a_{1j}\vdots\a_{ij}\vdots\a_{nj}end{pmatrix};\ e_i^T,A= begin{pmatrix}0&cdots&1&cdots&0end{pmatrix}!! begin{pmatrix}a_{11}&cdots&a_{1j}&cdots&a_{1n}\ vdots&ddots&vdots&ddots&vdots\ a_{i1}&cdots&a_{ij}&cdots&a_{in}\ vdots&ddots&vdots&ddots&vdots\ a_{n1}&cdots&a_{nj}&cdots&a_{nn}end{pmatrix}=begin{pmatrix}a_{i1}&cdots&a_{ij}&cdots&a_{in}end{pmatrix}!. end{gathered}

Как видим, в результате умножения матрицы A справа на столбец e_j выделяется j-й столбец матрицы A, а при умножении слева на строку e_i^T получаем i-ю строку матрицы A. Элемент a_{ij} матрицы A может быть получен как произведение

e_i^T,A,e_j= begin{pmatrix}0&cdots&1&cdots&0end{pmatrix}!! begin{pmatrix}a_{11}&cdots&a_{1j}&cdots&a_{1n}\ vdots&ddots&vdots&ddots&vdots\ a_{i1}&cdots&a_{ij}&cdots&a_{in}\ vdots&ddots&vdots&ddots&vdots\ a_{n1}&cdots&a_{nj}&cdots&a_{nn}end{pmatrix}!! begin{pmatrix}0\vdots\1\vdots\0end{pmatrix}= a_{ij}.


Пример 1.12. Даны матрицы

A=begin{pmatrix}1&2&3\4&5&6\7&8&9end{pmatrix},~ e_1^T=begin{pmatrix}1&0&0end{pmatrix}!,~e_2=begin{pmatrix}0\1\0end{pmatrix}!. Вычислить Ae_2,~e_1^TA,~e_1^TAe_2

Решение. Перемножая матрицы, получаем:

begin{gathered}Ae_2= begin{pmatrix}1&2&3\4&5&6\7&8&9end{pmatrix}!! begin{pmatrix}0\1\0end{pmatrix}= begin{pmatrix}2\5\8end{pmatrix}!;quad e_1^TA= begin{pmatrix}1&0&0end{pmatrix}!! begin{pmatrix}1&2&3\4&5&6\7&8&9end{pmatrix}= begin{pmatrix}1&2&3end{pmatrix}!;\[3pt] e_1^TAe_2= begin{pmatrix}1&0&0end{pmatrix}!! begin{pmatrix}1&2&3\4&5&6\7&8&9end{pmatrix}!! begin{pmatrix}0\1\0end{pmatrix}= begin{pmatrix}1&2&3end{pmatrix}!! begin{pmatrix}0&1&0end{pmatrix}=2. end{gathered}

В результате умножений из данной матрицы A выделены 2-й столбец, первая строка, элемент a_{12}=2.


2. Умножая справа матрицу A сначала на столбец a_j, а затем на строку e_j^T получаем квадратную матрицу n-го порядка, в которой все элементы равны нулю, за исключением элементов j-го столбца, который совпадает с j-м столбцом матрицы A:

Ae_je_j^T= begin{pmatrix}a_{1j}\vdots\a_{ij}\vdots\a_{nj}end{pmatrix}!! begin{pmatrix}0&cdots&1&cdots&0end{pmatrix}= begin{pmatrix}0&cdots&a_{1j}&cdots&0\ vdots&ddots&vdots&ddots&vdots\ 0&cdots&a_{ij}&cdots&0\ vdots&ddots&vdots&ddots&vdots\ 0&cdots&a_{nj}&cdots&0 end{pmatrix}!.

При помощи умножения на строки e_j^T и столбцы e_j можно, например, заменить j-й столбец матрицы A i-м столбцом матрицы B (квадратной n-го порядка):

A-Acdot e_jcdot e_j^T+Bcdot e_icdot e_j^T.


Пример 1.13. Даны матрицы, вычислить Ae_2e_2^T,~Be_1e_2^T,~A-Ae_2e_2^T+Be_1e_2^T.

A=begin{pmatrix}1&2&3\4&5&6\7&8&9end{pmatrix}!,quad B=begin{pmatrix}9&8&7\6&5&4\3&2&1end{pmatrix}!,quad e_1=begin{pmatrix}1\0\0end{pmatrix}!,quad e_2=begin{pmatrix}0\1\0end{pmatrix}!,quad e_2^T=begin{pmatrix}0&1&0end{pmatrix}!.

Решение. Выполняя действия, получаем:

begin{aligned}Ae_2e_2^T&= begin{pmatrix}1&2&3\4&5&6\7&8&9end{pmatrix}!! begin{pmatrix}0\1\0end{pmatrix}!! begin{pmatrix}0&1&0end{pmatrix}= begin{pmatrix}2\5\8end{pmatrix}!! begin{pmatrix}0&1&0end{pmatrix}= begin{pmatrix}0&2&0\0&5&0\0&8&0end{pmatrix}!;\[5pt] Be_1e_2^T&= begin{pmatrix}9&8&7\6&5&4\3&2&1end{pmatrix}!! begin{pmatrix}1\0\0end{pmatrix}!! begin{pmatrix}0&1&0end{pmatrix}= begin{pmatrix}9\6\3end{pmatrix}!! begin{pmatrix}0&1&0end{pmatrix}= begin{pmatrix}0&9&0\0&6&0\0&3&0end{pmatrix}!;\[5pt] A-Ae_2e_2^T+Be_1e_2^T&= begin{pmatrix}1&2&3\4&5&6\7&8&9end{pmatrix}- begin{pmatrix}0&2&0\0&5&0\0&8&0end{pmatrix}+ begin{pmatrix}0&9&0\0&6&0\0&3&0end{pmatrix}= begin{pmatrix}1&9&3\4&6&6\7&3&9end{pmatrix}!.end{aligned}

В результате 2-й столбец матрицы A заменен 1-м столбцом матрицы B.

Математический форум (помощь с решением задач, обсуждение вопросов по математике).

Кнопка "Поделиться"

Если заметили ошибку, опечатку или есть предложения, напишите в комментариях.

Нами были рассмотрены действия сложения, вычитания и умножения матриц на число. Еще одним действием над ними является умножение. Выполняется оно сложнее, а само правило может показаться немного странным. При его выполнении важно уметь определять размер матриц. Это понятие было рассмотрено в теме «Что такое матрица».

Онлайн-калькулятор

Как умножать матрицы

Приступим к рассмотрению умножения матриц.

Нам известно, что складывать и вычитать можно матрицы, которые имеют одинаковый размер. С умножением дела обстоят немного сложнее.

Какие матрицы можно умножать

Матрицу P можно умножить на матрицу K только в том случае, если число столбцов матрицы P равняется числу строк матрицы K. Матрицы, для которых данное условие не выполняется, умножать нельзя.

Пример 1

Определим, можно ли умножить матрицу

K=(15271810)K=begin{pmatrix}15&27\18&10end{pmatrix} на матрицу L=(3516)L=begin{pmatrix}35\16end{pmatrix}.

Матрица KK состоит из 2 строк и 2 столбцов, а матрица LL — из 2 строк и 1 столбца. Число столбцов матрицы KK равно числу строк матрицы LL, значит, матрицу KK можно умножить на матрицу LL.

Пример 2

Переставим матрицы местами и определим, можно ли умножить матрицу

F=(3516)F=begin{pmatrix}35\16end{pmatrix} на матрицу C=(15271810)C=begin{pmatrix}15&27\18&10end{pmatrix}.

Матрица FF состоит из 2 строк и 1 столбца, а матрица CC — из 2 строк и 2 столбцов. Число столбцов матрицы FF не равно числу строк матрицы CC, значит, матрицу FF нельзя умножить на матрицу CC.

Правило умножения матриц

Произведение матрицы AA размера m×nmtimes n и матрицы BB размера n×kntimes k — это матрица CC размера m×kmtimes k, в которой элемент cijc_{ij} равен сумме произведений элементов ii строки матрицы AA на соответствующие элементы jj столбца матрицы B:cij=ai1b1j+ai2b2j+…+ainbnjB: c_{ij}=a_{i1}b_{1j}+a_{i2}b_{2j}+…+a_{in}b_{nj}.

Умножение матриц осуществляется путем умножения строки на столбец. Находятся произведения первого элемента строки и первого элемента столбца, второго элемента строки и второго элемента столбца и т.д. Затем полученные произведения суммируются.

Алгоритм нахождения произведения матриц

  1. определить размеры матриц;
  2. если число столбцов первой матрицы совпадает с числом строк второй матрицы, то выполнять умножение.

Рассмотрим пример умножения матрицы

A=(a11a12a21a22a31a32a41a42)A=begin{pmatrix}a_{11}&a_{12}\a_{21}&a_{22}\a_{31}&a_{32}\a_{41}&a_{42}end{pmatrix}

на матрицу

B=(b11b12b13b21b22b23)B=begin{pmatrix}b_{11}&b_{12}&b_{13}\b_{21}&b_{22}&b_{23}end{pmatrix}.

Матрица AA состоит из 4 строк и 2 столбцов, а матрица BB — из 2 строк и 3 столбцов. Число столбцов матрицы AA равно числу строк матрицы BB, значит, можно найти произведение C=A⋅BC=Acdot B. Причем матрица CC будет иметь размер 4×34times 3. Найдем элементы c12c_{12} (выделен красными стрелками) и c33c_{33} (выделен синими стрелками):

умножение матриц .png

Для того чтобы найти элемент c12c_{12} нужно перемножать соответствующие элементы 1 строки матрицы AA и 2 столбца матрицы B:c12=a11⋅b12+a12⋅b22B: c_{12}=a_{11}cdot b_{12}+a_{12}cdot b_{22}. Для того чтобы найти элемент c33c_{33} нужно перемножать соответствующие элементы 3 строки матрицы AA и 3 столбца матрицы BB: c33=a31⋅b13+a32⋅b23c_{33}=a_{31}cdot b_{13}+a_{32}cdot b_{23}. Так находят все элементы.

Таким образом, матрица CC может быть найдена следующим образом:

A⋅B=(a11a12a21a22a31a32a41a42)⋅(b11b12b13b21b22b23)=Acdot B=begin{pmatrix}a_{11}&a_{12}\a_{21}&a_{22}\a_{31}&a_{32}\a_{41}&a_{42}end{pmatrix}cdot begin{pmatrix}b_{11}&b_{12}&b_{13}\b_{21}&b_{22}&b_{23}end{pmatrix}=

=(a11⋅b11+a12⋅b21a11⋅b12+a12⋅b22a11⋅b13+a12⋅b23a21⋅b11+a22⋅b21a21⋅b12+a22⋅b22a21⋅b13+a22⋅b23a31⋅b11+a32⋅b21a31⋅b12+a32⋅b22a31⋅b13+a32⋅b23a41⋅b11+a42⋅b21a41⋅b12+a42⋅b22a41⋅b13+a42⋅b23)=begin{pmatrix}a_{11}cdot b_{11}+a_{12}cdot b_{21}&a_{11}cdot b_{12}+a_{12}cdot b_{22}&a_{11}cdot b_{13}+a_{12}cdot b_{23}\a_{21}cdot b_{11}+a_{22}cdot b_{21}&a_{21}cdot b_{12}+a_{22}cdot b_{22}&a_{21}cdot b_{13}+a_{22}cdot b_{23}\a_{31}cdot b_{11}+a_{32}cdot b_{21}&a_{31}cdot b_{12}+a_{32}cdot b_{22}&a_{31}cdot b_{13}+a_{32}cdot b_{23}\a_{41}cdot b_{11}+a_{42}cdot b_{21}&a_{41}cdot b_{12}+a_{42}cdot b_{22}&a_{41}cdot b_{13}+a_{42}cdot b_{23}end{pmatrix}

Произведение B⋅ABcdot A нельзя найти, поскольку число столбцов матрицы BB неравно числу строк матрицы AA.

Пример 1

Найти произведение матрицы C=(15271810)C=begin{pmatrix}15&27\18&10end{pmatrix} на матрицу F=(3516)F=begin{pmatrix}35\16end{pmatrix}.

Матрица CC имеет размер 2×22times 2, матрица FF имеет размер 2×12times 1, значит, размер матрицы произведения будет 2×12times 1.

C⋅F=(15271810)⋅(3516)=(15⋅35+27⋅1618⋅35+10⋅16)=(957790)Ccdot F=begin{pmatrix}15&27\18&10end{pmatrix}cdot begin{pmatrix}35\16end{pmatrix}=begin{pmatrix}15cdot 35+27cdot 16\18cdot 35+10cdot 16end{pmatrix}=begin{pmatrix}957\790end{pmatrix}.

Как отмечалось выше, произведение матриц F⋅CFcdot C невозможно.

Пример 2

Найти произведение матриц K⋅LKcdot L и L⋅KLcdot K, если K=(12171314)K=begin{pmatrix}12&17\13&14end{pmatrix} на матрицу L=(18111210)L=begin{pmatrix}18&11\12&10end{pmatrix}.

Матрица KK имеет размер 2×22times 2, матрица LL имеет размер 2×22times 2, значит, размер матрицы произведения будет 2×22times 2.

K⋅L=(12171314)⋅(18111210)=(12⋅18+17⋅1212⋅11+17⋅1013⋅18+14⋅1213⋅11+14⋅10)=(420302402283)Kcdot L=begin{pmatrix}12&17\13&14end{pmatrix}cdot begin{pmatrix}18&11\12&10end{pmatrix}=begin{pmatrix}12cdot 18+17cdot 12&12cdot 11+17cdot 10\13cdot 18+14cdot 12&13cdot 11+14cdot 10end{pmatrix}=begin{pmatrix}420&302\402&283end{pmatrix}

Произведение L⋅KLcdot K существует и его размер — 2×22times 2.

L⋅K=(18111210)⋅(12171314)=(18⋅12+11⋅1318⋅17+11⋅1412⋅12+10⋅1312⋅17+10⋅14)=(359460274344)Lcdot K=begin{pmatrix}18&11\12&10end{pmatrix}cdot begin{pmatrix}12&17\13&14end{pmatrix}=begin{pmatrix}18cdot 12+11cdot 13&18cdot 17+11cdot 14\12cdot 12+10cdot 13&12cdot 17+10cdot 14end{pmatrix}=begin{pmatrix}359&460\274&344end{pmatrix}

Произведение двух матриц в общем случае зависит от порядка сомножителей, т.е. оно некоммутативно: A⋅B≠B⋅AAcdot Bneq Bcdot A.

Так, для матриц K=(12171314)K=begin{pmatrix}12&17\13&14end{pmatrix} и L=(18111210)L=begin{pmatrix}18&11\12&10end{pmatrix} из рассмотренного примера K⋅L≠L⋅KKcdot L neq Lcdot K.

Перестановочные матрицы

Перестановочные, или коммутирующие, матрицы – матрицы, для которых выполняется равенство A⋅B=B⋅AAcdot B=Bcdot A. Они обязательно квадратные.

Пример 1

Проверить, являются ли перестановочными матрицы CC и DD, если C=(2342)C=begin{pmatrix}2&3\4&2end{pmatrix}, D=(3343)D=begin{pmatrix}3&3\4&3end{pmatrix}.

Найдем произведения этих матриц C⋅DCcdot D и D⋅CDcdot C.

C⋅D=(2342)⋅(3343)=(2⋅3+3⋅42⋅3+3⋅34⋅3+2⋅44⋅3+2⋅3)=(18152018)Ccdot D=begin{pmatrix}2&3\4&2end{pmatrix}cdot begin{pmatrix}3&3\4&3end{pmatrix}=begin{pmatrix}2cdot 3+3cdot 4&2cdot 3+3cdot 3\4cdot 3+2cdot 4&4cdot 3+2cdot 3end{pmatrix}=begin{pmatrix}18&15\20&18end{pmatrix},

D⋅C=(3343)⋅(2342)=(3⋅2+3⋅43⋅3+3⋅24⋅2+3⋅44⋅3+3⋅2)=(18152018)Dcdot C=begin{pmatrix}3&3\4&3end{pmatrix}cdot begin{pmatrix}2&3\4&2end{pmatrix}=begin{pmatrix}3cdot 2+3cdot 4&3cdot 3+3cdot 2\4cdot 2+3cdot 4&4cdot 3+3cdot 2end{pmatrix}=begin{pmatrix}18&15\20&18end{pmatrix}.

Таким образом, для заданных матриц выполняется равенство C⋅DCcdot D и D⋅CDcdot C, поэтому они являются перестановочными.

Пример 2

Проверить, являются ли перестановочными матрицы FF и HH, если F=(3421)F=begin{pmatrix}3&4\2&1end{pmatrix}, H=(0593)H=begin{pmatrix}0&5\9&3end{pmatrix}.

Найдем произведения этих матриц F⋅HFcdot H и H⋅FHcdot F.

F⋅H=(3421)⋅(0593)=(3⋅0+4⋅93⋅5+4⋅32⋅0+1⋅92⋅5+1⋅3)=(3627913)Fcdot H=begin{pmatrix}3&4\2&1end{pmatrix}cdot begin{pmatrix}0&5\9&3end{pmatrix}=begin{pmatrix}3cdot 0+4cdot 9&3cdot 5+4cdot 3\2cdot 0+1cdot 9&2cdot 5+1cdot 3end{pmatrix}=begin{pmatrix}36&27\9&13end{pmatrix},

H⋅F=(0593)⋅(3421)=(0⋅3+5⋅20⋅4+5⋅19⋅3+3⋅29⋅4+3⋅1)=(1053339)Hcdot F=begin{pmatrix}0&5\9&3end{pmatrix}cdot begin{pmatrix}3&4\2&1end{pmatrix}=begin{pmatrix}0cdot 3+5cdot 2&0cdot 4+5cdot 1\9cdot 3+3cdot 2&9cdot 4+3cdot 1end{pmatrix}=begin{pmatrix}10&5\33&39end{pmatrix}.

Таким образом, для заданных матриц не выполняется равенство F⋅HFcdot H и H⋅FHcdot F, поэтому они не являются перестановочными.

Контрольные работы на заказ онлайн от практикующих исполнителей!

Произведением двух матриц будет матрица , элементы которой равны сумме попарных произведений элементов строки первой матрицы на соответствующие элементы столбца второй матрицы :

Из этого следует что перемножить между собой можно матрицы в которых количество столбцов первой равно количеству строк второй . Новая матрица которая является произведением двух имеет размерность , где – количество строк первой матрицы, а – столбцов второй. Правила достаточно просты и для нахождения произведения матриц нужно уметь лиш умножать и прибавлять. Рассмотрим несколько примеров из сборника задач Дубовика В.П., Юрика И.И. «Высшая математика».

———————————————

Примеры.

Найти произведение матриц.

1) (1.110)

Для нахождения произведения умножаем строки первой матрицы на столбцы второй

2) (1.112)

Найдем элементы новой матрицы.

Записываем полученные значения в матрицу.

3) (1.114)

Согласно правилам — произведением будет матрица-вектор размерности . Вычислим ее элементы

Окончательно матрица примет вид

4) (1.115)

При вычислении произведения матриц-векторов получим квадратную матрицу размера. .

Простыми операциями умножения получили новую квадратную матрицу пятого порядка.

5) (1.116)

Результатом умножения в данном примере будет матрица которая содержит лиш один элемент.

На этом практическая часть урока закончена. Упражняйтесь в решении подобных примеров, ведь умножения — это одна из основных операций (не только в матрицах). В следующих статьях материал будет сложнее, поэтому начинайте знакомиться с матрицами с простого.

Умножение матриц: примеры, алгоритм действий, свойства произведения

Произведение двух матриц

Произведение матриц (С= АВ) — операция только для согласованных матриц А и В, у которых число столбцов матрицы А равно числу строк матрицы В:

C ⏟ m × n = A ⏟ m × p × B ⏟ p × n

  • A = a ( i j ) размеров m × n ;
  • B = b ( i j ) размеров p × n

Матрицу C , элементы c i j которой вычисляются по следующей формуле:

c i j = a i 1 × b 1 j + a i 2 × b 2 j + . . . + a i p × b p j , i = 1 , . . . m , j = 1 , . . . m

Вычислим произведения АВ=ВА:

А = 1 2 1 0 1 2 , В = 1 0 0 1 1 1

Решение, используя правило умножения матриц:

А ⏟ 2 × 3 × В ⏟ 3 × 2 = 1 2 1 0 1 2 × 1 0 0 1 1 1 = 1 × 1 + 2 × 0 + 1 × 1 1 × 0 + 2 × 1 + 1 × 1 0 × 1 + 1 × 0 + 2 × 1 0 × 0 + 1 × 1 + 2 × 1 = = 2 3 2 3 ⏟ 2 × 2

В ⏟ 3 × 2 × А ⏟ 2 × 3 = 1 0 0 1 1 1 × 1 2 1 0 1 2 = 1 × 1 + 0 × 0 1 × 2 + 0 × 1 1 × 1 + 0 × 2 0 × 1 + 1 × 0 0 × 2 + 1 × 1 0 × 1 + 1 × 2 1 × 1 + 1 × 0 1 × 2 + 1 × 1 1 × 1 + 1 × 2 = 1 2 1 0 1 2 1 3 3 ⏟ 3 × 3

Произведение А В и В А найдены, но являются матрицами разных размеров: А В не равна В А .

Свойства умножения матриц

Свойства умножения матриц:

  • ( А В ) С = А ( В С ) — ассоциативность умножения матриц;
  • А ( В + С ) = А В + А С — дистрибутивность умножения;
  • ( А + В ) С = А С + В С — дистрибутивность умножения;
  • λ ( А В ) = ( λ А ) В

Пример 1

Проверяем свойство №1: ( А В ) С = А ( В С ) :

( А × В ) × А = 1 2 3 4 × 5 6 7 8 × 1 0 0 2 = 19 22 43 50 × 1 0 0 2 = 19 44 43 100 ,

А ( В × С ) = 1 2 3 4 × 5 6 7 8 1 0 0 2 = 1 2 3 4 × 5 12 7 16 = 19 44 43 100 .

Проверяем свойство №2: А ( В + С ) = А В + А С :

А × ( В + С ) = 1 2 3 4 × 5 6 7 8 + 1 0 0 2 = 1 2 3 4 × 6 6 7 10 = 20 26 46 58 ,

А В + А С = 1 2 3 4 × 5 6 7 8 + 1 2 3 4 × 1 0 0 2 = 19 22 43 50 + 1 4 3 8 = 20 26 46 58 .

Произведение трех матриц

Произведение трех матриц А В С вычисляют 2-мя способами:

  • найти А В и умножить на С : ( А В ) С ;
  • либо найти сначала В С , а затем умножить А ( В С ) .

​​​​​Пример 3

Перемножить матрицы 2-мя способами:

4 3 7 5 × — 28 93 38 — 126 × 7 3 2 1

Алгоритм действий:

  • найти произведение 2-х матриц;
  • затем снова найти произведение 2-х матриц.

1). А В = 4 3 7 5 × — 28 93 38 — 126 = 4 ( — 28 ) + 3 × 38 4 × 93 + 3 ( — 126 ) 7 ( — 28 ) + 5 × 38 7 × 93 + 5 ( — 126 ) = 2 — 6 — 6 21

2). А В С = ( А В ) С = 2 — 6 — 6 21 7 3 2 1 = 2 × 7 — 6 × 2 2 × 3 — 6 × 1 — 6 × 7 + 21 × 2 — 6 × 3 + 21 × 1 = 2 0 0 3 .

Используем формулу А В С = ( А В ) С :

1). В С = — 28 93 38 — 126 7 3 2 1 = — 28 × 7 + 93 × 2 — 28 × 3 + 93 × 1 38 × 7 — 126 × 2 38 × 3 — 126 × 1 = — 10 9 14 — 12

2). А В С = ( А В ) С = 7 3 2 1 — 10 9 14 — 12 = 4 ( — 10 ) + 3 × 14 4 × 9 + 3 ( — 12 ) 7 ( — 10 ) + 5 × 14 7 × 9 + 5 ( — 12 ) = 2 0 0 3

Ответ: 4 3 7 5 — 28 93 38 — 126 7 3 2 1 = 2 0 0 3

Умножение матрицы на число

Произведение матрицы А на число k — это матрица В = А k того же размера, которая получена из исходной умножением на заданное число всех ее элементов:

b i , j = k × a i , j

Свойства умножения матрицы на число:

  • 1 × А = А
  • 0 × А = нулевая матрица
  • k ( A + B ) = k A + k B
  • ( k + n ) A = k A + n A
  • ( k × n ) × A = k ( n × A )

Пример 4

Найдем произведение матрицы А = 4 2 9 0 на 5.

5 А = 5 4 2 9 0 5 × 4 5 × 2 5 × 9 5 × 0 = 20 10 45 0

Умножение матрицы на вектор

Чтобы найти произведение матрицы и вектора, необходимо умножать по правилу «строка на столбец»:

  • если умножить матрицу на вектор-столбец число столбцов в матрице должно совпадать с числом строк в векторе-столбце;
  • результатом умножения вектора-столбца является только вектор-столбец:

А В = а 11 а 12 ⋯ а 1 n а 21 а 22 ⋯ а 2 n ⋯ ⋯ ⋯ ⋯ а m 1 а m 2 ⋯ а m n b 1 b 2 ⋯ b 1 n = a 11 × b 1 + a 12 × b 2 + ⋯ + a 1 n × b n a 21 × b 1 + a 22 × b 2 + ⋯ + a 2 n × b n ⋯ ⋯ ⋯ ⋯ a m 1 × b 1 + a m 2 × b 2 + ⋯ + a m n × b n = c 1 c 2 ⋯ c 1 m

  • если умножить матрицу на вектор-строку, то умножаемая матрица должна быть исключительно вектором-столбцом, причем количество столбцов должно совпадать с количеством столбцов в векторе-строке:

А В = а а ⋯ а b b ⋯ b = a 1 × b 1 a 1 × b 2 ⋯ a 1 × b n a 2 × b 1 a 2 × b 2 ⋯ a 2 × b n ⋯ ⋯ ⋯ ⋯ a n × b 1 a n × b 2 ⋯ a n × b n = c 11 c 12 ⋯ c 1 n c 21 c 22 ⋯ c 2 n ⋯ ⋯ ⋯ ⋯ c n 1 c n 2 ⋯ c n n

Найдем произведение матрицы А и вектора-столбца В :

А В = 2 4 0 — 2 1 3 — 1 0 1 1 2 — 1 = 2 × 1 + 4 × 2 + 0 × ( — 1 ) — 2 × 1 + 1 × 2 + 3 × ( — 1 ) — 1 × 1 + 0 × 2 + 1 × ( — 1 ) = 2 + 8 + 0 — 2 + 2 — 3 — 1 + 0 — 1 = 10 — 3 — 2

Найдем произведение матрицы А и вектора-строку В :

А = 3 2 0 — 1 , В = — 1 1 0 2

А В = 3 2 0 1 × — 1 1 0 2 = 3 × ( — 1 ) 3 × 1 3 × 0 3 × 2 2 × ( — 1 ) 2 × 1 2 × 0 2 × 2 0 × ( — 1 ) 0 × 1 0 × 0 0 × 2 1 × ( — 1 ) 1 × 1 1 × 0 1 × 2 = — 3 3 0 6 — 2 2 0 4 0 0 0 0 — 1 1 0 2

Ответ: А В = — 3 3 0 6 — 2 2 0 4 0 0 0 0 — 1 1 0 2

Умножение матриц

Итак, в предыдущем уроке мы разобрали правила сложения и вычитания матриц. Это настолько простые операции, что большинство студентов понимают их буквально с ходу.

Однако вы рано радуетесь. Халява закончилась — переходим к умножению. Сразу предупрежу: умножить две матрицы — это вовсе не перемножить числа, стоящие в клеточках с одинаковыми координатами, как бы вы могли подумать. Тут всё намного веселее. И начать придётся с предварительных определений.

Согласованные матрицы

Одна из важнейших характеристик матрицы — это её размер. Мы уже сто раз говорили об этом: запись $A=left[ mtimes n right]$ означает, что в матрице ровно $m$ строк и $n$ столбцов. Как не путать строки со столбцами, мы тоже уже обсуждали. Сейчас важно другое.

Определение. Матрицы вида $A=left[ mtimes n right]$ и $B=left[ ntimes k right]$, в которых количество столбцов в первой матрице совпадает с количеством строк во второй, называются .

Ещё раз: количество столбцов в первой матрице равно количеству строк во второй! Отсюда получаем сразу два вывода:

  1. Нам важен порядок матриц. Например, матрицы $A=left[ 3times 2 right]$ и $B=left[ 2times 5 right]$ являются согласованными (2 столбца в первой матрице и 2 строки во второй), а вот наоборот — матрицы $B=left[ 2times 5 right]$ и $A=left[ 3times 2 right]$ — уже не согласованы (5 столбцов в первой матрице — это как бы не 3 строки во второй).
  2. Согласованность легко проверить, если выписать все размеры друг за другом. На примере из предыдущего пункта: «3 2 2 5» — посередине одинаковые числа, поэтому матрицы согласованы. А вот «2 5 3 2» — не согласованы, поскольку посередине разные числа.

Кроме того, капитан очевидность как бы намекает, что квадратные матрицы одинакового размера $left[ ntimes n right]$ согласованы всегда.

В математике, когда важен порядок перечисления объектов (например, в рассмотренном выше определении важен порядок матриц), часто говорят об упорядоченных парах. Мы встречались с ними ещё в школе: думаю, и ежу понятно, что координаты $left( 1;0 right)$ и $left( 0;1 right)$ задают разные точки на плоскости.

Так вот: координаты — это тоже упорядоченные пары, которые составляются из чисел. Но ничто не мешает составить такую пару из матриц. Тогда можно будет сказать: «Упорядоченная пара матриц $left( A;B right)$ является согласованной, если количество столбцов в первой матрице совпадает с количеством строк во второй».

Ну и что с того?

Определение умножения

Рассмотрим две согласованные матрицы: $A=left[ mtimes n right]$ и $B=left[ ntimes k right]$. И определим для них операцию умножения.

Определение. $A=left[ mtimes n right]$ и $B=left[ ntimes k right]$ — это новая матрица $C=left[ mtimes k right]$, элементы которой считаются по формуле:

Обозначается такое произведение стандартно: $C=Acdot B$.

По-моему, тут всё очевидно. Дальше можно не читать. [на самом деле нет]

У тех, кто впервые видит это определение, сразу возникает два вопроса:

  1. Что это за лютая дичь?
  2. А почему так сложно?

Что ж, обо всём по порядку. Начнём с первого вопроса. Что означают все эти индексы? И как не ошибиться при работе с реальными матрицами?

Прежде всего заметим, что длинная строчка для расчёта $<_>$ (специально поставил точку с запятой между индексами, чтобы не запутаться, но вообще их ставить не надо — я сам задолбался набирать формулу в определении) на самом деле сводится к простому правилу:

  1. Берём $i$-ю строку в первой матрице;
  2. Берём $j$-й столбец во второй матрице;
  3. Получаем две последовательности чисел. Перемножаем элементы этих последовательностей с одинаковыми номерами, а затем складываем полученные произведения.

Данный процесс легко понять по картинке:

Схема перемножения двух матриц

Ещё раз: фиксируем строку $i$ в первой матрице, столбец $j$ во второй матрице, перемножаем элементы с одинаковыми номерами, а затем полученные произведения складываем — получаем $<_>$. И так для всех $1le ile m$ и $1le jle k$. Т.е. всего будет $mtimes k$ таких «извращений».

На самом деле мы уже встречались с перемножением матриц в школьной программе, только в сильно урезанном виде. Пусть даны вектора:

Тогда их скалярным произведением будет именно сумма попарных произведений:

По сути, в те далёкие годы, когда деревья были зеленее, а небо ярче, мы просто умножали вектор-строку $overrightarrow$ на вектор-столбец $overrightarrow$.

Сегодня ничего не поменялось. Просто теперь этих векторов-строк и столбцов стало больше.

Но хватит теории! Давайте посмотрим на реальные примеры. И начнём с самого простого случая — квадратных матриц.

Умножение квадратных матриц

[left[ begin<*<35>> 1 & 2 \ -3 & 4 \end right]cdot left[ begin<*<35>> -2 & 4 \ 3 & 1 \end right]]

Решение. Итак, у нас две матрицы: $A=left[ 2times 2 right]$ и $B=left[ 2times 2 right]$. Понятно, что они согласованы (квадратные матрицы одинакового размера всегда согласованы). Поэтому выполняем умножение:

[begin & left[ begin<*<35>> 1 & 2 \ -3 & 4 \end right]cdot left[ begin<*<35>> -2 & 4 \ 3 & 1 \end right]=left[ begin<*<35>> 1cdot left( -2 right)+2cdot 3 & 1cdot 4+2cdot 1 \ -3cdot left( -2 right)+4cdot 3 & -3cdot 4+4cdot 1 \end right]= \ & =left[ begin<*<35>> 4 & 6 \ 18 & -8 \end right]. end]

Задача 2. Выполните умножение:

[left[ begin 1 & 3 \ 2 & 6 \end right]cdot left[ begin<*<35>>9 & 6 \ -3 & -2 \end right]]

Решение. Опять согласованные матрицы, поэтому выполняем действия:[]

[begin & left[ begin 1 & 3 \ 2 & 6 \end right]cdot left[ begin<*<35>> 9 & 6 \ -3 & -2 \end right]=left[ begin<*<35>> 1cdot 9+3cdot left( -3 right) & 1cdot 6+3cdot left( -2 right) \ 2cdot 9+6cdot left( -3 right) & 2cdot 6+6cdot left( -2 right) \end right]= \ & =left[ begin 0 & 0 \ 0 & 0 \end right]. end]

Как видим, получилась матрица, заполненная нулями

Из приведённых примеров очевидно, что умножение матриц — не такая уж и сложная операция. По крайней мере для квадратных матриц размера 2 на 2.

В процессе вычислений мы составили промежуточную матрицу, где прямо расписали, какие числа входят в ту или иную ячейку. Именно так и следует делать при решении настоящих задач.

Основные свойства матричного произведения

В двух словах. Умножение матриц:

  1. Некоммутативно: $Acdot Bne Bcdot A$ в общем случае. Бывают, конечно, особые матрицы, для которых равенство $Acdot B=Bcdot A$ (например, если $B=E$ — единичной матрице), но в абсолютном большинстве случаев это не работает;
  2. Ассоциативно: $left( Acdot B right)cdot C=Acdot left( Bcdot C right)$. Тут без вариантов: стоящие рядом матрицы можно перемножать, не переживая за то, что стоит левее и правее этих двух матриц.
  3. Дистрибутивно: $Acdot left( B+C right)=Acdot B+Acdot C$ и $left( A+B right)cdot C=Acdot C+Bcdot C$ (в силу некоммутативности произведения приходится отдельно прописывать дистрибутивность справа и слева.

А теперь — всё то же самое, но более подробно.

Умножение матриц во многом напоминает классическое умножение чисел. Но есть отличия, важнейшее из которых состоит в том, что умножение матриц, вообще говоря, некоммутативно.

Рассмотрим ещё раз матрицы из задачи 1. Прямое их произведение мы уже знаем:

[left[ begin<*<35>> 1 & 2 \ -3 & 4 \end right]cdot left[ begin<*<35>> -2 & 4 \ 3 & 1 \end right]=left[ begin<*<35>>4 & 6 \ 18 & -8 \end right]]

Но если поменять матрицы местами, то получим совсем другой результат:

[left[ begin<*<35>> -2 & 4 \ 3 & 1 \end right]cdot left[ begin<*<35>> 1 & 2 \ -3 & 4 \end right]=left[ begin -14 & 4 \ 0 & 10 \end right]]

Получается, что $Acdot Bne Bcdot A$. Кроме того, операция умножения определена только для согласованных матриц $A=left[ mtimes n right]$ и $B=left[ ntimes k right]$, но никто не гарантировал, что они останутся согласованными, если их поменять местами. Например, матрицы $left[ 2times 3 right]$ и $left[ 3times 5 right]$ вполне себе согласованы в указанном порядке, но те же матрицы $left[ 3times 5 right]$ и $left[ 2times 3 right]$, записанные в обратном порядке, уже не согласованы. Печаль.:(

Среди квадратных матриц заданного размера $n$ всегда найдутся такие, которые дают одинаковый результат как при перемножении в прямом, так и в обратном порядке. Как описать все подобные матрицы (и сколько их вообще) — тема для отдельного урока. Сегодня не будем об этом.:)

Тем не менее, умножение матриц ассоциативно:

[left( Acdot B right)cdot C=Acdot left( Bcdot C right)]

Следовательно, когда вам надо перемножить сразу несколько матриц подряд, совсем необязательно делать это напролом: вполне возможно, что некоторые рядом стоящие матрицы при перемножении дают интересный результат. Например, нулевую матрицу, как в Задаче 2, рассмотренной выше.

В реальных задачах чаще всего приходится перемножать квадратные матрицы размера $left[ ntimes n right]$. Множество всех таких матриц обозначается $<^>$ (т.е. записи $A=left[ ntimes n right]$ и [Ain <^>] означают одно и то же), и в нём обязательно найдётся матрица $E$, которую называют единичной.

Определение. размера $n$ — это такая матрица $E$, что для любой квадратной матрицы $A=left[ ntimes n right]$ выполняется равенство:

[Acdot E=Ecdot A=A]

Такая матрица всегда выглядит одинаково: на главной диагонали её стоят единицы, а во всех остальных клетках — нули.

Идём далее. Помимо ассоциативности умножение матриц ещё и дистрибутивно:

Другими словами, если нужно умножить одну матрицу на сумму двух других, то можно умножить её на каждую из этих «двух других», а затем результаты сложить. На практике обычно приходится выполнять обратную операцию: замечаем одинаковую матрицу, выносим её за скобку, выполняем сложение и тем самым упрощаем себе жизнь.:)

Заметьте: для описания дистрибутивности нам пришлось прописать две формулы: где сумма стоит во втором множителе и где сумма стоит в первом. Это происходит как раз из-за того, что умножение матриц некоммутативно (и вообще, в некоммутативной алгебре куча всяких приколов, которые при работе с обычными числами даже не приходят в голову). И если, допустим, вам на экзамене нужно будет расписать это свойство, то обязательно пишите обе формулы, иначе препод может немного разозлиться.

Ладно, всё это были сказки о квадратных матрицах. А что насчёт прямоугольных?

Случай прямоугольных матриц

А ничего — всё то же самое, что и с квадратными.

[left[ begin begin 5 \ 2 \ 3 \end & begin 4 \ 5 \ 1 \end \end right]cdot left[ begin<*<35>> -2 & 5 \ 3 & 4 \end right]]

Решение. Имеем две матрицы: $A=left[ 3times 2 right]$ и $B=left[ 2times 2 right]$. Выпишем числа, обозначающие размеры, в ряд:

Как видим, центральные два числа совпадают. Значит, матрицы согласованы, и их можно перемножить. Причём на выходе мы получим матрицу $C=left[ 3times 2 right]$:

[begin & left[ begin begin 5 \ 2 \ 3 \end & begin 4 \ 5 \ 1 \end \end right]cdot left[ begin<*<35>> -2 & 5 \ 3 & 4 \end right]=left[ begin<*<35>> 5cdot left( -2 right)+4cdot 3 & 5cdot 5+4cdot 4 \ 2cdot left( -2 right)+5cdot 3 & 2cdot 5+5cdot 4 \ 3cdot left( -2 right)+1cdot 3 & 3cdot 5+1cdot 4 \end right]= \ & =left[ begin<*<35>> 2 & 41 \ 11 & 30 \ -3 & 19 \end right]. end]

Всё чётко: в итоговой матрице 3 строки и 2 столбца. Вполне себе $=left[ 3times 2 right]$.

Сейчас рассмотрим одно из лучших тренировочных заданий для тех, кто только начинает работать с матрицами. В нём нужно не просто перемножить какие-то две таблички, а сначала определить: допустимо ли такое умножение?

Рекомендую после прочтения задания не смотреть в решение, а сначала попробовать выполнить его самостоятельно. И затем сравнить с ответами.

Задача 4. Найдите все возможные попарные произведения матриц:

Решение. Для начала запишем размеры матриц:

[A=left[ 2times 4 right]; B=left[ 4times 2 right]; C=left[ 2times 2 right]]

Получаем, что матрицу $A$ можно согласовать лишь с матрицей $B$, поскольку количество столбцов у $A$ равно 4, а такое количество строк только у $B$. Следовательно, можем найти произведение:

[Acdot B=left[ begin<*<35>> 1 & -1 & 2 & -2 \ 1 & 1 & 2 & 2 \end right]cdot left[ begin<*<35>> 0 & 1 \ 2 & 0 \ 0 & 3 \ 4 & 0 \end right]=left[ begin<*<35>>-10 & 7 \ 10 & 7 \end right]]

Промежуточные шаги предлагаю выполнить читателю самостоятельно. Замечу лишь, что размер результирующей матрицы лучше определять заранее, ещё до каких-либо вычислений:

[A cdot B=left[ 2times 4 right]cdot left[ 4times 2 right]=left[ 2times 2 right]]

Другими словами, мы просто убираем «транзитные» коэффициенты, которые обеспечивали согласованность матриц.

Какие ещё возможны варианты? Безусловно, можно найти $Bcdot A$, поскольку $B=left[ 4times 2 right]$, $A=left[ 2times 4 right]$, поэтому упорядоченная пара $left( B;A right)$ является согласованной, а размерность произведения будет:

[B cdot A=left[ 4times 2 right]cdot left[ 2times 4 right]=left[ 4times 4 right]]

Короче говоря, на выходе будет матрица $left[ 4times 4 right]$, коэффициенты которой легко считаются:

[Bcdot A=left[ begin<*<35>> 0 & 1 \ 2 & 0 \ 0 & 3 \ 4 & 0 \end right]cdot left[ begin<*<35>> 1 & -1 & 2 & -2 \ 1 & 1 & 2 & 2 \end right]=left[ begin<*<35>>1 & 1 & 2 & 2 \ 2 & -2 & 4 & -4 \ 3 & 3 & 6 & 6 \ 4 & -4 & 8 & -8 \end right]]

Очевидно, можно согласовать ещё $Ccdot A$ и $Bcdot C$ — и всё. Поэтому просто запишем полученные произведения:

[Ccdot A=left[ begin<*<35>> 1 & 1 & 2 & 2 \ 1 & -1 & 2 & -2 \end right]]

[Bcdot C=left[ begin<*<35>>1 & 0 \ 0 & 2 \ 3 & 0 \ 0 & 4 \end right]]

Вообще, очень рекомендую выполнить это задание самостоятельно. И ещё одно аналогичное задание, которое есть в домашней работе. Эти простые на первый взгляд размышления помогут вам отработать все ключевые этапы умножения матриц.

Но на этом история не заканчивается. Переходим к частным случаям умножения.:)

Вектор-строки и вектор-столбцы

Одной из самых распространённых матричных операций является умножение на матрицу, в которой одна строка или один столбец.

Определение. — это матрица размера $left[ mtimes 1 right]$, т.е. состоящая из нескольких строк и только одного столбца.

— это матрица размера $left[ 1times n right]$, т.е. состоящая из одной строки и нескольких столбцов.

[left[ begin<*<35>> 2 & -1 & 3 \ 4 & 2 & 0 \ -1 & 1 & 1 \end right]cdot left[ begin<*<35>> 1 \ 2 \ -1 \end right]]

Решение. Перед нами произведение согласованных матриц: $left[ 3times 3 right]cdot left[ 3times 1 right]=left[ 3times 1 right]$. Найдём это произведение:

[left[ begin<*<35>> 2 & -1 & 3 \ 4 & 2 & 0 \ -1 & 1 & 1 \end right]cdot left[ begin<*<35>> 1 \ 2 \ -1 \end right]=left[ begin<*<35>> 2cdot 1+left( -1 right)cdot 2+3cdot left( -1 right) \ 4cdot 1+2cdot 2+0cdot 2 \ -1cdot 1+1cdot 2+1cdot left( -1 right) \end right]=left[ begin<*<35>> -3 \ 8 \ 0 \end right]]

Задача 6. Выполните умножение:

[left[ begin<*<35>> 1 & 2 & -3 \end right]cdot left[ begin<*<35>> 3 & 1 & -1 \ 4 & -1 & 3 \ 2 & 6 & 0 \end right]]

Решение. Опять всё согласовано: $left[ 1times 3 right]cdot left[ 3times 3 right]=left[ 1times 3 right]$. Считаем произведение:

[left[ begin<*<35>> 1 & 2 & -3 \end right]cdot left[ begin<*<35>> 3 & 1 & -1 \ 4 & -1 & 3 \ 2 & 6 & 0 \end right]=left[ begin<*<35>>5 & -19 & 5 \end right]]

На самом деле мне было в лом считать все эти три числа — посчитайте сами. А я просто запишу ответ.:)

Как видите, при умножении вектор-строки и вектор-столбца на квадратную матрицу на выходе мы всегда получаем строку или столбец того же размера. Этот факт имеет множество приложений — от решения линейных уравнений до всевозможных преобразований координат (которые в итоге тоже сводятся к системам уравнений, но давайте не будем о грустном).

Думаю, здесь всё было очевидно. Переходим к заключительной части сегодняшнего урока.

Возведение матрицы в степень

Среди всех операций умножения отдельного внимания заслуживает возведение в степень — это когда мы несколько раз умножаем один и тот же объект на самого себя. Матрицы — не исключение, их тоже можно возводить в различные степени.

Такие произведения всегда согласованы:

[Acdot A=left[ ntimes n right]cdot left[ ntimes n right]=left[ ntimes n right]]

И обозначаются точно так же, как и обычные степени:

На первый взгляд, всё просто. Посмотрим, как это выглядит на практике:

Задача 7. Возведите матрицу в указанную степень:

Решение. Ну ОК, давайте возводить. Сначала возведём в квадрат:

[begin & <<left[ begin1 & 1 \ 0 & 1 \end right]>^<2>>=left[ begin 1 & 1 \ 0 & 1 \end right]cdot left[ begin 1 & 1 \ 0 & 1 \end right]= \ & =left[ begin<*<35>> 1cdot 1+1cdot 0 & 1cdot 1+1cdot 1 \ 0cdot 1+1cdot 0 & 0cdot 1+1cdot 1 \end right]= \ & =left[ begin<*<35>> 1 & 2 \ 0 & 1 \end right] end]

[begin & <<left[ begin1 & 1 \ 0 & 1 \end right]>^<3>>= <<left[ begin1 & 1 \ 0 & 1 \end right]>^<3>>cdot left[ begin 1 & 1 \ 0 & 1 \end right]= \ & =left[ begin<*<35>> 1 & 2 \ 0 & 1 \end right]cdot left[ begin 1 & 1 \ 0 & 1 \end right]= \ & =left[ begin<*<35>> 1 & 3 \ 0 & 1 \end right] end]

Ответ: $left[ begin1 & 3 \ 0 & 1 \end right]$.

Задача 8. Возведите матрицу в указанную степень:

Решение. Вот только не надо сейчас плакать по поводу того, что «степень слишком большая», «мир не справедлив» и «преподы совсем берега потеряли». На самом деле всё легко:

[begin & <<left[ begin1 & 1 \ 0 & 1 \end right]>^<10>>= <<left[ begin1 & 1 \ 0 & 1 \end right]>^<3>>cdot <<left[ begin1 & 1 \ 0 & 1 \end right]>^<3>>cdot <<left[ begin1 & 1 \ 0 & 1 \end right]>^<3>>cdot left[ begin 1 & 1 \ 0 & 1 \end right]= \ & =left( left[ begin 1 & 3 \ 0 & 1 \end right]cdot left[ begin 1 & 3 \ 0 & 1 \end right] right)cdot left( left[ begin 1 & 3 \ 0 & 1 \end right]cdot left[ begin 1 & 1 \ 0 & 1 \end right] right)= \ & =left[ begin 1 & 6 \ 0 & 1 \end right]cdot left[ begin 1 & 4 \ 0 & 1 \end right]= \ & =left[ begin 1 & 10 \ 0 & 1 \end right] end]

Заметьте: во второй строчке мы использовали ассоциативность умножения. Собственно, мы использовали её и в предыдущем задании, но там это было неявно.

Как видите, ничего сложного в возведении матрицы в степень нет. Последний пример можно обобщить:

Этот факт легко доказать через математическую индукцию или прямым перемножением. Однако далеко не всегда при возведении в степень можно выловить подобные закономерности. Поэтому будьте внимательны: зачастую перемножить несколько матриц «напролом» оказывается проще и быстрее, нежели искать какие-то там закономерности.

В общем, не ищите высший смысл там, где его нет. В заключение рассмотрим возведение в степень матрицы большего размера — аж $left[ 3times 3 right]$.

Задача 9. Возведите матрицу в указанную степень:

Решение. Не будем искать закономерности. Работаем «напролом»:

[ <<left[ begin0 & 1 & 1 \ 1 & 0 & 1 \ 1 & 1 & 0 \end right]>^<3>>= <<left[ begin0 & 1 & 1 \ 1 & 0 & 1 \ 1 & 1 & 0 \end right]>^<2>>cdot left[ begin0 & 1 & 1 \ 1 & 0 & 1 \ 1 & 1 & 0 \end right]]

Для начала возведём эту матрицу в квадрат:

[begin & <<left[ begin0 & 1 & 1 \ 1 & 0 & 1 \ 1 & 1 & 0 \end right]>^<2>>=left[ begin 0 & 1 & 1 \ 1 & 0 & 1 \ 1 & 1 & 0 \end right]cdot left[ begin 0 & 1 & 1 \ 1 & 0 & 1 \ 1 & 1 & 0 \end right]= \ & =left[ begin<*<35>> 2 & 1 & 1 \ 1 & 2 & 1 \ 1 & 1 & 2 \end right] end]

Теперь возведём в куб:

[begin & <<left[ begin0 & 1 & 1 \ 1 & 0 & 1 \ 1 & 1 & 0 \end right]>^<3>>=left[ begin<*<35>> 2 & 1 & 1 \ 1 & 2 & 1 \ 1 & 1 & 2 \end right]cdot left[ begin 0 & 1 & 1 \ 1 & 0 & 1 \ 1 & 1 & 0 \end right]= \ & =left[ begin<*<35>> 2 & 3 & 3 \ 3 & 2 & 3 \ 3 & 3 & 2 \end right] end]

Вот и всё. Задача решена.

Ответ: $left[ begin 2 & 3 & 3 \ 3 & 2 & 3 \ 3 & 3 & 2 \end right]$.

Как видите, объём вычислений стал больше, но смысл от этого нисколько не поменялся.:)

На этом урок можно заканчивать. В следующий раз мы рассмотрим обратную операцию: по имеющемуся произведению будем искать исходные множители.

Как вы уже, наверное, догадались, речь пойдёт об обратной матрице и методах её нахождения.

learnopengl. Урок 1.7 — Трансформации

Теперь мы знаем как создавать объекты, раскрашивать их и накладывать на них текстуры, но они все еще довольно скучны, поскольку являются статическими объектами. Мы можем попробовать заставить их двигаться изменяя координаты вершин для каждого кадра, но это довольно муторно и требует процессорных вычислений. Есть гораздо более удобный способ для совершения трансформаций над объектом — это применение матриц. Но это не значит, что мы сейчас будем разговаривать про кунг фу и искусственный цифровой мир.

Часть 2. Базовое освещение

Часть 3. Загрузка 3D-моделей

Часть 4. Продвинутые возможности OpenGL

Часть 5. Продвинутое освещение

Матрицы — это очень мощные математические конструкции, которые поначалу пугают, но стоит к ним привыкнуть и они сразу станут крайне полезными. Во время обсуждения матриц требуется также немного углубиться в математику. Также для более склонных к математике читателей я оставлю ссылки на дополнительные ресурсы по этой теме.

Как бы то ни было, для полного понимания трансформаций мы, во первых, должны разобраться с векторами. Основная задача этой главы — дать вам основные математические знания, которые нам понадобятся позже.

Вектора

В самом простом определении, вектора — это не более чем направления. У вектора может быть направление и магнитуда (также иногда называется модулем или длиной). Вы можете представлять себе вектора в качестве направлений на карте сокровищ: “Сделайте 10 шагов налево, теперь 3 шага на север и теперь 5 шагов направо”. В данном примере “налево” — это направление, а “10 шагов” — это длина вектора. Направления на этой карте сокровищ составляются из 3 векторов. Вектора могут иметь любую размерность, но чаще всего используются двухкомпонентные и четырехкомпонентные вектора. Если вектор двухкомпонентный, то он описывает направление на плоскости (или на 2D графике), если вектор трехкомпонентный, то он описывает направление в трехмерном мире.

Ниже вы можете видеть 3 вектора, каждый из которых представлен в виде (x, y) в качестве стрелок на 2D графике. Поскольку более интуитивно представлять вектора в 2D (чем в 3D), то вы можете думать о 2D векторах, как о 3D векторах, но с нулевой z координатой. До тех пор, пока вектор описывает направление — позиция вектора не меняет его значения. На графике можно увидеть, что вектора v и w одинаковы, хотя из позиции отличаются:

Когда математики описывают вектора, они предпочитают использовать символы нижнего регистра с небольшой черточкой сверху. Пример:

Поскольку вектора зачастую описывают направление — то иногда их тяжело представить в виде позиции. Обычно мы визуализируем вектор следующим образом: мы устанавливаем центр в (0, 0, 0), а затем указываем направление, описанное точкой. Таким образом получается позиционный вектор (также мы можем взять за центр другую точку, а потом сказать “Этот вектор указывает на точку в пространстве из этой точки”). Позиционный вектор (3, 5) будет указывать на точку (3, 5) на графе с основанием (0, 0). С помощью векторов мы можем описывать как направления так и позиции в двухмерном и трехмерном пространствах.

Также мы можем производить над векторами некоторые математические действия.

Скалярные векторные операции

Скаляр — это одно число (или однокомпонентный вектор, если вы хотите продолжать работать с векторами). Во время сложения/вычитания/умножения или деления вектора на скаляр мы просто складываем/вычитаем/умножаем или делим каждый элемент вектора на этот скаляр. Пример:

Где вместо сложения может быть вычитание, умножение или деление.

Обратный вектор

Обращение (отрицание) вектора — это получение вектора, чье направление противоположно исходному. Обратный вектор для вектора, указывающего на северо-восток, будет вектор, указывающий на юго-запад. Для обращения вектора мы просто умножаем вектор на -1. Пример:

Сложение и вычитание

Сложение двух векторов производится покомпонентно. Пример:

Визуально сумма векторов v=(4,2) и k=(1,2) выглядит так:

Также как и с обычным сложением и вычитанием, вычитание векторов — это тоже сложение, но с обратным вторым вектором:

Вычитание векторов друг из друга порождают вектор, который является разницей в позициях операндов:

Длина

Для получения длины (модуля) вектора мы используем теорему Пифагора, которые вы, возможно, помните со школы. Вектор образует треугольник, если представить его компоненты в качестве сторон треугольника:

Поскольку длина сторон (x, y) известна, и мы хотим узнать длину гипотенузы — то мы делаем это следующим образом:

Где ||v|| — это длина вектора v. Такая формула легко расширяется в 3D добалением z^2. Пример расчета длины:

Вычисленное значение: 4.47

Также существует специальный вид векторов, называемый единичными векторами. Особенность таких векторов в том, что их длина всегда равна 1. Мы можем преобразовать любой вектор в единичный делением этого вектора на его длину:

Такой вектор называется нормализованным. Единичные векторы обозначаются с небольшой крышей над буквой. С ними, также, проще работать, поскольку нам приходится заботиться только о направлении такого вектора.

Умножение вектора на вектор

Умножение двух векторов выполняется довольно странно. Нормальное умножение не применимо, поскольку оно не имеет визуального смысла, но у нас есть 2 специфических подхода, из которых можно выбирать во время умножения: первый — скалярное произведение, которое изображается как точка, а второе — векторное произведение, которое изображается как крест.

Скалярное произведение

Скалярное произведение двух векторов эквивалентно скалярному произведению длин этих векторов, умноженное на косинус угла между ними. Если это предложение сбило вас с толку, то посмотрите на формулу:

Где угол между векторами описан как тета. Почему это может быть интересно? Что же, представим если вектора v и k являются единичными векторами. Соответственно формула сокращается до:

Теперь скалярное произведение определяет только угол между двумя векторами. Вы возможно помните, что функция cos становится 0, с углом в 90 градусов ну и 1 с углом 0. Это позволяет легко проверять ортогональны ли вектора или параллельны друг другу (ортогональность означает, что вектора прямоугольны). Если хотите узнать больше про sin или cosine, то рекомендую видео Khan Academy про базовую тригонометрию.

Вы также можете вычислить угол между двумя неединичными векторами, но для этого вам придется разделить результат на длины этих векторов, чтобы остаться только с cos.

Так как же считать скалярное произведение? Скалярное произведение — это умножение компонентов векторов и последующее сложение результатов. Пример:

Для вычисления угла между векторами нам потребуется обратить функцию косинуса (cos^-1) в данном случае — это 143.1 градуса. Таким образом мы эффективно вычислили угол между этими двумя векторами. Скалярное произведение очень полезно во время работы со светом.

Векторное произведение

Векторное произведение возможно только в трехмерном пространстве и принимает на вход два непараллельных вектора, а возвращает вектор, который ортогонален входным. Если входные вектора ортогональны друг другу, то векторное произведение создаст 3 ортогональных вектора. Далее вы узнаете, почему это может быть полезно. Следующее изображение показывает как это выглядит трехмерном пространстве:

В отличии от других операций, векторное произведение не очень интуитивно без углубления в линейную алгебру, так что лучше просто запомнить формулу. Ниже представлено векторное произведение между двумя ортогональными векторами A и B.

Как вы можете видеть, в этой формуле не очень много смысла. В любом случае после всех этих шагов вы получите вектор, который будет ортогонален входным.

Матрицы

Теперь, после того как мы обсудили почти все на счет векторов, настало время углубиться в матрицы. Матрица, обычно, это четырехугольних из набора чисел, символов и/или выражений. Вот пример матрицы 2х3:

Доступ к элементам матрицы осуществляется с помощью (i,j), где i — это строка, а j — это столбец. Вот почему матрица выше называется 2х3 (3 столбца и 2 строки). Такая система — обратна той, что используется в 2D графах (x, y). Для получения значения 4 из матрицы выше, мы должны указать индекс (2, 1) (вторая строка, первый столбец).

Матрицы, по факту, ничего более чем четырехугольные массивы математических выражений. Они также обладают очень приятным набором математических свойств и, также как и вектора, имеют несколько операций — сложение, вычитание и умножение.

Сложение и вычитание

Сложение матрицы со скаляром выполняется следующим образом:

Скаляр просто прибавляется во всем элементам матрицы. Тоже самое происходит и при вычитании:

Сложение и вычитание между двумя матрицами выполняется поэлементно. Таким образом операции сложения и вычитания могут быть применены только к матрицам одинакового размера. Пример:

Тоже самое, только с вычитанием:

Умножение матрицы на скаляр

Также как сложение и вычитание, умножение матрицы на скаляр производится умножением каждого элемента матрицы на скаляр. Пример:

Умножение матриц

Умножение матриц не очень сложное, но и не такое простое. Умножение имеет несколько ограничений:

  1. Вы можете умножать только матрицы, где число столбцов первой совпадает с числом строк второй матрицы.
  2. Умножение матриц не коммутативно. A * B != B * A.

Вот пример умножения двух матриц 2х2:

Сейчас, возможно вы пытаетесь понять, что же тут вообще происходит? Умножение матриц — это комбинация из нормального умножения и сложения с использованием строк левой матрицы со столбцами правой матрицы. Следующее изображение должно внести немного ясности:

В начале мы берем верхнюю строку левой матрицы и левый столбец правой матрицы. Выбранные нами строка и столбец определяет то, какой элемент результирующей матрицы мы собираемся рассчитать. Если бы мы взяли первую строку левой матрицы, то мы собираемся работать с верхней строкой результирующей матрицы, затем мы выбираем столбец в правой матрице, он определяет то, с каким столбцом результирующей матрицы мы работаем. Для вычисления нижнего-правого элемента мы должны выбрать нижнюю строку левой матрицы и правый столбец правой матрицы.

Для вычисления результирующего значения мы перемножаем элементы строки и столбца с помощью обычного умножения. Результаты умножения затем складываются и мы получаем результат. Вот оттуда и идет первое ограничение.

В результате получается матрица размером (n, m), где n — количество строк в левой матрице, а m — количество столбцов в правой матрице.

Если у вас возникла проблема — то не волнуйтесь. Просто продолжайте вычислять руками и возвращайтесь к этому уроку, когда возникают сложности. Вскоре умножение матриц будет на автомате.

Давайте закроем вопрос умножения матриц одним большим примером. Для представления алгоритма использованы цвета. Для тренировки попробуйте сами посчитать результат, а затем сравнить с результатом в примере.

Как вы можете видеть умножение матриц довольно муторный процесс с большим количеством мест, где можно ошибиться. И эти проблемы лишь растут при увеличении размеров. Если вы все еще жаждите больше математических свойств матриц я крайне рекомендую видео Khan Academy.

Умножение матрицы на вектор

Мы уже использовали вектора в прошлых уроках. Мы использовали их, чтобы представлять позиции, цвета и текстурные координаты. Теперь давайте немного углубимся в кроличью нору и расскажем, что вектор — это на самом деле просто Nx1 матрица, где N — это количество компонентов вектора. Если вы чуть подумаете об этом — это имеет смысл. Вектора, прямо как матрицы — массив чисел, но только с 1 колонкой. И как же нам поможет эта информация? Что же, если у нас есть матрица MxN мы сможем ее умножить на Nx1 вектор, так как количество столбцов матрицы равно количеству строк вектора.

Но зачем нам вообще уметь умножать матрицу на вектор? Довольно много различных 3D/2D трансформаций можно выполнить, умножая матрицу на вектор, получая измененный вектор. Если вы все еще не уверены в том, что полностью понимаете текст выше, то вот немного примеров:

Единичная матрица

В OpenGL обычно работают с матрицами трансформации размерами 4х4 по той причине, что большинство векторов имеет 4 компонента. Самая простая матрица трансформации которую можно обсудить — это единичная матрица. Единичная матрица — это NxN матрица, заполненная нулями, но с 1 по диагонали. Как мы можете заметить эта матрица совершенно не изменяет вектор:

Вектор выглядит нетронутым. Это становится очевидно из правил умножения: первый результирующий элемент — это каждый элемент первой строки матрицы, умноженные на каждый элемент вектора. Поскольку каждый элемент строки равен 0, кроме первого — то мы получаем 1 * 1 + 0 * 2 + 0 * 3 + 0 * 4 = 1. Тоже самое применяется и к остальным 3 элементам вектора.

Вы можете спросить, зачем вообще может понадобится матрица трансформации, которая ничего не трансформирует? Единичная матрица зачастую является отправной точкой для генерации других матриц трансформации и если мы углубимся в линейную алгебру, это также очень удобная матрица для доказательства теорем и решения линейных уравнений.

Матрица масштабирования

Когда мы масштабируем вектор — мы увеличиваем длину стрелки на величину масштабирования, сохраняя направление. Пока мы работаем в 2 или 3 размерностях мы можем определить масштабирование вектором из 2 или 3 величин, каждая из которых масштабирует одну из осей (x, y или z).

Давайте попробуем масштабировать вектор v = (3,2). Мы будем масштабировать вектор по оси x на 0.5, что сделает его в 2 раза уже; и масштабируем вектор по оси y на 2, что увеличит высоту в 2 раза. Давайте посмотрим как будет выглядеть если мы масштабируем вектор на (0.5, 2). Запишем результат в виде s.

Помните, что OpenGL зачастую работает в 3D пространстве, соответственно для 2D можно оставить Z координату, равную 1. Операция масштабирования, которую мы только что выполнили, является неоднородной, поскольку величина масштабирования для каждой оси различается. Если бы величина масштабирования была бы одинаковой — то такое преобразование называется однородным.

Давайте построим матрицу трансформации которая выполнит для нас масштабирование. Мы уже увидели на единичной матрице, что диагональный элемент будет умножен на соответствующий элемент вектора. Что если мы заменим единицы в единичной матрице на тройки? В таком случае мы умножим все элементы вектора на это значение. Соответственно если мы представим величины масштабирования как (S1, S2, S3) то мы сможем определить матрицу масштабирования для любого вектора (x, y, z):

Заметьте, что 4 элемент вектора равняется 1. Этот компонент обозначается как w и будет потом использован для других задач.

Матрица сдвига

Сдвиг — это процесс добавления одного вектора к другому для получения нового вектора с другой позицией, то-есть сдвиг вектора на основании вектора сдвига. Мы уже обсуждали сложение векторов, поэтому для вас это не будет чем-то новым.
Также как и с матрицей масштабирования в матрице 4х4 есть несколько позиций для выполнения требуемых операций, для сдвига — это верхние 3 элемента четвертой колонки. Если мы представим вектор сдвига как (Tx, Ty, Tz) — то мы можем определить матрицу сдвига следующим образом:

Это работает, потому что все значения вектора умножаются на w компонент вектора и складываются с начальным значениями. Это было бы невозможно при использовании матриц 3х3.

Гомогенные координаты
Компонента вектора w также называется гомогенной координатой. Для получения 3D вектора из гомогенной координаты мы делим x, y и z координаты на w. Обычно этого не замечают, так как w большую часть времени равна 1.0. Использование гомогенных координат имеет несколько преимуществ: они позволяют нам выполнять сдвиги на 3D векторах (без w компоненты это было бы невозможно) и в следующей главе мы используем значение w для создания 3D визуализаций.
Также когда гомогенная координата равна 0 — то вектор считается вектором направления, так как вектор с компонентой w равной 0 не может быть сдвинут.

С матрицей сдвига мы можем двигать объекты по всем 3 направлениям (x, y, z), что делает эту матрицу крайне полезной для наших задач.

Матрица вращения

Последние пару трансформаций были довольно просты для понимания и представления в 2D или 3D пространстве, но вращения немного более заковыристые. Если вы хотите узнать как же именно эти матрицы формируются — то я рекомендую видео Khan Academy про линейную алгебру.

Для начала давайте определим что вообще такое — вращение вектора. Вращение в 2D и 3D определяется углом. Угол может выражаться в углах или в радианах, в которых полный оборот — это 360 градусов или 2Pi соответственно. Я предпочитаю работать с градусами, поскольку они более логичны для меня.

Большинство вращательных функций требует угол в радианах, но благо преобразование из одной системы в другую выполнить довольно просто:
Градусы = радианы * (180.0f / PI)
Радианы = градусы * (PI / 180.0f)
Где PI примерно 3.14159265359

Вращение на половину круга — требует от нас вращения на 360/2 = 180 градусов. Вращение на 1/5 направо требует от нас вращение на 360/5 = 72 градуса направо. Вот пример обычного 2D вектора, где v повернут на 72 градуса направо от k.

Вращение в 3D описывается углом и осью вращения. Угол определяет то насколько вектор будет повернут относительно данной оси. При вращении 2D векторов в 3D мире, к примеру, мы установим ось вращения — Z.

С помощью тригонометрии мы можем преобразовывать вектора в повернутые на определенный угол. Обычно это делается хитрой комбинацией sin и cos функций. Обсуждение того, как генерируется матрицы трансформации — выходит за пределы нашего урока.

Матрица вращения определена для каждой оси в 3D пространстве, где угол показан как тета.
Матрица вращения вокруг оси X:

Матрица вращения вокруг оси Y:

Матрица вращения вокруг оси Z:

С помощью матриц вращения мы можем вращать наши вектора по одной из трех осей. Также можно совмещать их, например в начале повернуть по X оси, а потом по Y. Правда такой подход быстро приведет к проблеме, называемый проблемой шарнирного замка (Gimbal Lock). Мы не будем вдаваться в детали, но лучше использовать вращение по конкретной оси, например (0.662, 0.2, 0.722) (заметьте, что это единичный вектор), вместо того, чтобы совмещать вращения по конкретным осям. Матрица для таких преобразований существует и выглядит она следующим образом, где (Rx, Ry, Rz) — это ось вращения:

Математические обсуждения на счет генерации такой матрицы выходят за рамки этого урока. Просто держите в голове, что даже такая матрица не решает проблему шарнирного замка полность (ее просто сложнее получить). Для того, чтобы полностью решить эту проблему нам придется работать с вращениями с помощью кватернионов, которые не просто безопаснее, но еще и гораздо дружелюбнее с точки зрения вычислений. Как бы то ни было обсуждение кватернионов отведено в более поздний урок.

Комбинирование матриц

Для того, чтобы достичь максимальной полезности использования матриц для трансформаций мы должны комбинировать матрицы трансформации в одну матрицу. Давайте посмотрим, сможем ли мы сгенерировать матрицу трансформации, которая будет в себя включать несколько трансформаций. Например у нас есть вектор (x, y, z) и мы хотим масштабировать его в 2 раза и сдвинуть на (1, 2, 3). Для этого нам потребуются матрицы масштабирования и смещения. В результате мы получим что-то вроде:

Заметьте, что во время умножения матриц мы в начале выполняем сдвиг, а потом масштабирование. Умножение матриц не коммутативно, что означает, что порядок умножения важен. Во время умножения матриц правая матрица умножается на вектор, поэтому вам надо читать умножения справа налево. Рекомендуется в начале масштабировать, затем вращать и в конце сдвигать, во время объединения матриц, в ином случае они могут отрицать друг-друга. Например если вы в начале выполните сдвиг, а затем масштабирование, то матрица сдвига тоже будет масштабировать!

В итоге матрица трансформации применяется следующим образом:

Отлично, вектор масштабирован в 2 раза и смещен на (1, 2, 3).

На практике

После того, как мы обсудили всю теорию настало время применять ее на практике. OpenGL не имеет встроенной поддержки матричных или векторных преобразований, поэтому нам придется использовать собственные математические класса и функции. В этих уроках мы абстрагируемся от тонких математических деталей и просто используем готовые математические библиотеки. К счастью уже есть простая в использовании и заточенная под OpenGL математическая библиотека, под названием GLM.

GLM это аббревиатура от OpenGL Mathematics. Эта библиотека является заголовочной, что означает, что нам достаточно подключить требуемые заголовочные файлы. Не нужно заморачиваться ни с линковкой ни с компиляцией. GLM можно скачать с официального сайта. Скопируйте корневую директорию с заголовочными файлами в вашу папку includes и можно начинать.

Большая часть функциональности GLM можно найти в 3 заголовочных файлах:

Давайте посмотрим, сможем ли мы применить наши знания в преобразованиях для сдвига вектора (1, 0, 0) на (1, 1, 0) (заметьте, что мы обозначили из как glm::vec4 с гомогенной координатой равной 1.0):

В начале мы создали вектор названный vec с помощью встроенного в GLM векторного класса. Затем мы определяем mat4, которая является единичной матрицей 4х4. Затем мы создаем матрицу трансформации, передавая нашу единичную матрицу в функцию glm::translate, вместе с вектором сдвига.
Затем мы умножаем наш вектор на матрицу трансформации и выводим результат. Если вы все еще помните как работает матрица сдвига — то вы понимаете, что результирующий вектор должен быть (1+1, 0+1, 0+0), который равен (2, 1, 0). Код выше выводит 210, что означает, что матрица сдвига сделала свою работу.

Давайте попробуем сделать нечто более интересное и попробуем масштабировать, а затем повернуть объект из прошлого урока. В начале мы повернем контейнер на 90 градусов против часовой стрелки. Затем масштабируем его на 0.5 для того, чтобы уменьшить его в 2 раза. Давайте построим матрицу трансформации для этого.

В начале мы уменьшаем контейнер на 0.5, по каждой оси, а затем поворачиваем контейнер на 90 градусов по Z координате. Заметьте, что текстура также повернулась. Поскольку мы передаем матрицу в каждую из GLM функций, GLM автоматически перемножает матрицы, в результате получая матрицу трансформации.

Некоторые версии GLM принимают углы в радианах, а не в градусах. Если у вас такая версия — то преобразуйте градусы в радианы с помощью glm::radians(90.0f).

Следующий большой вопрос — это как передать матрицу трансформации в шейдер? Ранее мы уже говорили, что GLSL имеет тип mat4. Так что нам осталось принять mat4 в качестве uniform переменной и умножить вектор позиции на эту матрицу.

В GLSL также имеются типы mat2 и mat3, которые предоставляют такие же операции, что и вектора. Все затронутые в этой статье операции доступны в матричных типах.

Мы добавили uniform и умножили позиционный вектор на трансформационную матрицу перед тем как передать ее в gl_Position. Наш контейнер теперь должен стать меньше в 2 раза и повернуться на 90 градусов. Но нам все еще надо передать трансформационную матрицу в шейдер?

В начале мы получаем позицию uniform переменной и затем отправляем в нее данные матрицы с помощью функции glUniform с постфиксом Matrix4fv. Первый аргумент должен быть позицией переменной. Второй аргумент сообщает OpenGL сколько матриц мы собираемся отправлять, в нашем случае 1. Третий аргумент говорит требуется ли транспонировать матрицу. OpenGL разработчики часто используют внутренних матричный формат, называемый column-major ordering, который используется в GLM по умолчанию, поэтому нам не требуется транспонировать матрицы, мы можем оставить GL_FALSE. Последний параметр — это, собственно, данные, но GLM не хранит данные точно так как OpenGL хочет их видеть, поэтому мы преобразовываем их с помощью value_ptr.

Мы создали матрицу трансформации, объявили uniform в вершинном шейдере, и отправили матрицу в шейдере с помощью которой мы корректируем вершинные координаты. В результате должно получиться что-то вроде этого:

Отлично! Наш контейнер действительно повернут налево и стал в 2 раза меньше, так что трансформация прошла успешно. А теперь давайте заставим вращаться наш контейнер в реальном времени, а также передвинем его в нижний правый угол. Для того, чтобы это сделать придется производить вычисления при каждой итерации основного цикла. Мы используем функцию GLFW для получения времени, чтобы менять угол со временем:

Держите в голове, что раньше мы могли объявить матрицу трансформации где угодно, но теперь мы создаем ее при каждой итерации, чтобы мы могли обновлять вращение на каждый кадр. Это значит, что мы должны пересоздавать матрицу трансформации на каждой итерации игрового цикла. Обычно, когда на сцене несколько объектов, то их матрицы трансформации пересоздаются с новыми значениями при каждой итерации отрисовки.

Теперь мы вращаем объект вокруг центра (0, 0, 0), а после этого сдвигаем повернутую версию в нижний-правый угол экрана. Помните, что реальная последовательность применения трансформаций читается в обратном порядке: даже в коде мы в начале сдвигаем, а потом поворачиваем, то трансформации применяются в обратном порядке, в начале поворот, затем сдвиг. Понимание всех этих трансформаций и того как они влияют на объекты довольно затруднительно. Попробуйте поэкспериментировать с трансформациями и вы быстро с ними свыкнитесь.

Если вы все сделали правильно — то вы получите что-то вроде этого:

Вот и все. Сдвинутый контейнер, поворачивающийся с течением времени, и все это выполнено с помощью одной матрицы трансформации! Теперь вы можете видеть, почему матрицы настолько сильны в графическом мире. Мы можем определить безграничное количество трансформаций и совмещать их в одну матрицу для последующего повторного использования. Использование подобных трансформаций в вершинном шейдере позволяет нам не менять вершинные данные, что сохраняет нам процессорное время, поскольку нам не требуется отправлять данные в буфер.

Если вам не удалось получить правильный результат или вы где-то застряли — то взгляните на исходный код вместе с вершинным и фрагментным шейдерами.

В следующем уроке мы обсудим как использовать матрицы для определения различных координатных пространств для наших вершин. Это будет новым шагом в мир 3D графики в реальном времени!

источники:

http://www.berdov.com/works/matrix/umnozhenie-matric/

http://habr.com/ru/post/319144/

Понравилась статья? Поделить с друзьями:
  • Как найти шрифты в проводнике
  • Как можно найти ребусы
  • Как найти реферат по философии
  • Вместо видеокарты работает intel hd graphics как исправить
  • Как найти вес одного символа в битах