Определение матрицы
Матрица – это двумерный массив значений упорядоченных в строки и столбцы. Матрицу обычно записывают в квадратных или круглых скобках и разделяют элементы запятыми или пробелами. Например, матрица 2x2:
\[A = \begin{align} \begin{pmatrix} a & b \\ c & d \\ \end{pmatrix} \end{align}\]Здесь \(a, b, c, d\) – это элементы матрицы. Эта матрица имеет две строки и два столбца.
В общем случае, форму матрицы обзначают \(m \times n\), где \(m\) – количество строк, \(n\) – количество столбцов.
\(3 \times 2\):
\[A = \begin{align} \begin{pmatrix} a & b \\ c & d \\ e & f \\ \end{pmatrix} \end{align}\]\(2 \times 3\):
\[A = \begin{align} \begin{pmatrix} a & b & c \\ d & e & f \\ \end{pmatrix} \end{align}\]Когда одна из размерностей матрицы равна единице она называется вектором. Если размерность \(m \times 1\), то такой вектор называется вектор-столбец, например:
\[x = \begin{align} \begin{pmatrix} a \\ b \\ c \\ \end{pmatrix} \end{align}\]Если размерность \(1 \times n\), то такой вектор называется вектор-строка, например:
\[y = \begin{align} \begin{pmatrix} a & b & c \\ \end{pmatrix} \end{align}\]В общем случае матрица \(m \times n\):
\[A = \begin{align} \begin{pmatrix} a_{11} & a_{12} & \ldots & a_{1n} \\ a_{21} & a_{22} & \ldots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \ldots & a_{mn} \\ \end{pmatrix} \end{align}\]Матрица со случайными элементами, равномерно распределенными на интервале (0, 1) размерностью \(2 \times 3\) в Matlab >> rand(2, 3)
:
ans =
0.8147 0.1270 0.6324
0.9058 0.9134 0.0975
Сложение и умножение матриц
Сложение матриц:
\[\begin{align} \begin{pmatrix} a & b \\ c & d \\ \end{pmatrix} + \begin{pmatrix} e & f \\ g & h \\ \end{pmatrix} = \begin{pmatrix} a+e & b+f \\ c+g & d+h \\ \end{pmatrix} \end{align}\]Числовой пример:
\[\begin{align} \begin{pmatrix} 1 & 2 \\ 3 & 4 \\ \end{pmatrix} + \begin{pmatrix} 5 & 6 \\ 7 & 8 \\ \end{pmatrix} = \begin{pmatrix} 1+5 & 2+6 \\ 3+7 & 4+8 \\ \end{pmatrix} = \begin{pmatrix} 6 & 8 \\ 10 & 12 \\ \end{pmatrix} \end{align}\]Matlab: >> [1 2; 3 4] + [5 6; 7 8]
Умножение матрицы на скаляр:
\[k \begin{pmatrix} a & b \\ c & d \\ \end{pmatrix} = \begin{pmatrix} ka & kb \\ kc & kd \\ \end{pmatrix}\]В Matlab: >> 3 * [1 1; 1 1]
Умножение двух матриц:
Для того чтобы две матрицы можно было умножить, количество столбцов первой матрицы должно совпадать с количеством строк второй матрицы.
Пусть \(A\) – матрица размера \(m \times n\) (\(m\) строк и \(n\) столбцов), а \(B\) – матрица размера \(n \times p\). Их произведение будет матрицей \(C\) размера \(m \times p\).
Элемент \(c_{ij}\) матрицы \(C\) вычисляется как скалярное произведение \(i\)-й строки матрицы \(A\) на \(j\)-й столбец матрицы \(B\). Формула для \(c_{ij}\) такова:
\[c_{ij} = a_{i1} \cdot b_{1j} + a_{i2} \cdot b_{2j} + \ldots + a_{in} \cdot b_{nj}\] \[c_{ij} = \sum_{k=1}^n a_{ik} b_{kj}\]Т.е. каждый элемент \(c_{ij}\) матрицы \(C\) равен сумме произведений соответствующих элементов \(i\)-й строки матрицы \(A\) и \(j\)-го столбца матрицы B.
Например:
\[\begin{pmatrix} a & b \\ c & d \\ \end{pmatrix} \begin{pmatrix} e & f \\ g & h \\ \end{pmatrix} = \begin{pmatrix} ae + bg & af + bh \\ ce + dg & cf + dh \\ \end{pmatrix}\]Следует иметь в виду, что операция перемножения матриц не коммутативна (\(AB \ne BA\) в общем случае):
\[\begin{pmatrix} e & f \\ g & h \\ \end{pmatrix} \begin{pmatrix} a & b \\ c & d \\ \end{pmatrix} = \begin{pmatrix} ae + cf & be + df \\ ag + ch & bg + dh \\ \end{pmatrix}\]Из \(AB=AC\) не следует, что \(B=C\):
Пусть:
\[A = \begin{pmatrix} 1 & 2 \\ 2 & 4 \\ \end{pmatrix}; B = \begin{pmatrix} 2 & 1 \\ 1 & 3 \\ \end{pmatrix}; C = \begin{pmatrix} 4 & 3 \\ 0 & 2 \\ \end{pmatrix}\]A = [1 2; 2 4]; B = [2 1; 1 3]; C = [4 3; 0 2];
isequal(A*B, A*C)
ans = 1
isequal(A, C)
ans = 0
Умножение матриц разных размерностей:
\[A = \begin{pmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ \end{pmatrix}; B = \begin{pmatrix} 7 & 8 & 9 & 10 \\ 11 & 12 & 13 & 14 \\ 15 & 16 & 17 & 18 \\ \end{pmatrix}; C = \begin{pmatrix} 19 & 20 \\ 21 & 22 \\ 23 & 24 \\ 25 & 26 \\ \end{pmatrix}\]A*B
ans =
74 80 86 92
173 188 203 218
shape = size(ans)
shape =
2 4
ans * C
ans =
7364 7696
17354 18136
shape = size(ans)
shape =
2 2
Умножение матриц ассоциативно:
\[(A \times B) \times C = A \times (B \times C)\], здесь \(A\), \(B\) и \(C\) – таких размеров, что данные произведения определены (т.е. \(A: m \times n, \space B: n \times p, \space C: p \times q\)).
Используя раннее определенные матрицы:
isequal((A*B)*C, A*(B*C))
ans = 1
Необходимость помнить о погрешностях вычисления:
Предположим, что мы хотим проверить ассоциативность умножения на случайно сгенерированных матрицах подходящих размерностей. Задав состояние (seed) случайного генератора (для того чтобы точно такой-же результат можно было повторить позже) для Matlab: rng(1)
, для Octave: rand('seed', 1)
(стоит иметь в виду, что одинаковый seed не приведет к одинаковым результатам в разных языках), сгенерируем матрицы \(A: 2 \times 3, \space B: 3 \times 4,\space C: 4 \times 5\) заполненные случайными числами из равномерного распределения (\(0, 1\)):
A = rand(2, 3); B = rand(3, 4); C = rand(4, 5);
isequal((A*B)*C, A*(B*C))
ans =
0
→ Неожиданный результат!
Проведем поэлементное сравнение:
(A*B)*C == A*(B*C)
ans =
1 0 0 1 0
0 0 0 1 1
В значительном количестве элементов матрицы не строго равны. Хотя на первый взгляд:
(A*B)*C
ans =
0.5053 0.6697 0.3570 0.4288 0.5599
1.1254 1.4416 0.6967 1.0206 1.2094
A*(B*C)
ans =
0.5053 0.6697 0.3570 0.4288 0.5599
1.1254 1.4416 0.6967 1.0206 1.2094
Точность проведения различных операций значительно выше точности вывода по умолчанию.
Специальные матрицы
Нулевая матрица
Нулевая матрица — это матрица, все элементы которой равны нулю. Обозначается часто как \(O\) или \(0\), хотя это может вызывать путаницу с нулевым скаляром. Размеры нулевой матрицы могут быть любыми, например, \(m \times n\), где \(m\) – количество строк, а \(n\) – количество столбцов.
Примеры нулевых матриц:
\[O_{2 \times 2} = \begin{pmatrix} 0 & 0 \\ 0 & 0 \\ \end{pmatrix};\]В Matlab: >> zeros(2, 2)
В Matlab: >> zeros(3, 2)
Нулевая матрица обладает рядом свойств:
- При сложении с любой другой матрицей того же размера результатом будет эта другая матрица;
- При умножении на нулевую матрицу результатом всегда будет нулевая матрица (при условии, что умножение матриц определено).
Часто нулевая матрица использется в контексте задания СЛАУ (Системы Линейных Алгебраических Уравнений) в матричной форме:
\[Ax = 0\], где:
- \(A\) – матрица коэффициентов рамзерностью: \(m \times n\);
- \(x\) – вектор-столбец размерностью \(n \times 1\);
- \(0\) – нулевой вектор-столбец размерностью \(m \times 1\).
Единичная матрица:
Единичная матрица – это квадратная матрица, у которой на главной диагонали стоят единицы, а все остальные элементы равны нулю. Обозначается обычно как \(I\) или \(I_n\), где \(n\) – размер матрицы (количество строк или столбцов, поскольку матрица квадратная).
Например, единичная матрица \(I_2\) размера \(2 \times 2\) выглядит следующим образом:
\[I_{2} = \begin{pmatrix} 1 & 0 \\ 0 & 1 \\ \end{pmatrix};\]В Matlab: >> eye(2)
Единичная матрица \(I_3\) размера \(3 \times 3\):
\[I_{3} = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ \end{pmatrix};\]В Matlab: >> eye(3)
Единичная матрица обладает рядом свойств:
- При умножении единичной матрицы на любую другую матрицу подходящего размера результатом будет эта другая матрица: \(IA = A\) и \(AI = A\), т.е. единичная матрица является нейтральным элементом операции умножения матриц;
- Обратная матрица к единичной матрице является единичной матрицей;
В Matlab функция eye(2, 3)
создаст матрицу размером \(2 \times 3\), в которой на главной диагонали стоят единицы, а все остальные элементы равны нулю. Обратим внимание, что полученная матрица не является квадратной; у неё 2 строки и 3 столбца. Строго говоря это не единичная матрица, которая должна быть квадратной, но принцип похож: единицы на главной диагонали.
Вот как будет выглядеть результат:
\[\begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ \end{pmatrix}\]Функция eye(n, m)
в общем случае создаёт матрицу размером \(n \times m\) с единицами на главной диагонали и нулями во всех остальных позициях.
Диагональная матрица
Диагональная матрица – это квадратная матрица, в которой все элементы, не лежащие на главной диагонали, равны нулю. Элементы на главной диагонали могут быть как нулевыми, так и ненулевыми.
Единичная матрица \(D_3\) размера \(3 \times 3\):
\[D_3= \begin{pmatrix} d_1 & 0 & 0 \\ 0 & d_2 & 0 \\ 0 & 0 & d_3 \\ \end{pmatrix}\]В Matlab:
diag([1 2 3])
ans =
1 0 0
0 2 0
0 0 3
В Matlab:
diag([1 2 3; 4 5 6; 7 8 9])
ans =
1
5
9
Верхнетреуголная матрица
Верхнетреугольная матрица – это квадратная матрица, у которой все элементы ниже главной диагонали равны нулю. Элементы на главной диагонали и выше не ограничены и могут принимать любые значения, включая ноль.
Верхнетреуголная матрица размера \(3 \times 3\):
\[U = \begin{pmatrix} a & b & c \\ 0 & d & e \\ 0 & 0 & f \\ \end{pmatrix}\]В Matlab:
A = [1, 2, 3; 4, 5, 6; 7, 8, 9];
U = triu(A)
U =
1 2 3
0 5 6
0 0 9
Верхнетреуголная единичная:
U = triu(ones(3,3));
U =
1 1 1
0 1 1
0 0 1
Нижнетреуголная матрица
Нижнетреугольная матрица – это квадратная матрица, у которой все элементы выше главной диагонали равны нулю. Элементы на главной диагонали и ниже не ограничены и могут принимать любые значения, включая ноль.
Нижнетреугольная матрица размера \(3 \times 3\):
\[L = \begin{pmatrix} a & 0 & 0 \\ b & c & 0 \\ d & e & f \\ \end{pmatrix}\]В Matlab:
A = [1, 2, 3; 4, 5, 6; 7, 8, 9];
L = tril(A)
L =
1 0 0
4 5 0
7 8 9
Транспонирование матрицы
Транспонирование матрицы – это операция, при которой строки исходной матрицы преобразуются в столбцы, а столбцы – в строки. Другими словами, элементы матрицы отражаются относительно её главной диагонали.
Пусть дана матрица \(A\) размером \(m \times n\). Транспонированная матрица \(A^T\) будет иметь размер \(n \times m\) и определяется следующим образом: \(\forall i,j: A^T_{ij} = A_{ji}\).
В качестве примера рассмотрим матрицу:
\[A = \begin{pmatrix} a & b \\ c & d \\ e & f \\ \end{pmatrix}\]Результатом транспонирования матрицы \(A\), будет:
\[A^T = \begin{pmatrix} a & c & e \\ b & d & f \\ \end{pmatrix}\]В Matlab:
A = [1 2 3; 4 5 6];
A'
ans =
1 4
2 5
3 6
Свойства транспонирования матрицы:
- \((A^{T})^{T} = A\);
- \((\lambda \cdot A)^T = \lambda \cdot A^{T}\);
- \((A + B)^T = A^T + B^T\);
- \((A \cdot B)^T = B^T \cdot A^T\);
Симметричная матрица
Симметричная матрица — это квадратная матрица, которая равна своей транспонированной матрице \(A = A^T\). Элементы симметричной матрицы симметричны относительно главной диагонали.
Пример симметричной матрицы:
\[A = \begin{pmatrix} a & b & c \\ b & d & e \\ c & e & f \\ \end{pmatrix}\]Проверка на симметрию в Matlab: >> isequal(A, A')
Кососимметричная матрица
Кососимметричная (или антисимметричная) матрица — это квадратная матрица, которая удовлетворяет условию \(A = -A^T\). Другими словами, транспонированная матрица является аддитивным обратным к исходной матрице. Это также означает, что все элементы на главной диагонали кососимметричной матрицы равны нулю.
Кососимметричная матрица \(3 \times 3\):
\[A = \begin{pmatrix} 0 & a & -b \\ -a & 0 & c \\ b & -c & 0 \\ \end{pmatrix}\]Проверка на кососимметрию в Matlab: >> isequal(A, -A')
Скалярное, векторное и тензерное произведение векторов
Скалярное произведение (иногда называемое внутренним произведением) двух векторов \(\overline{a}\) и \(\overline{b}\) – это сумма произведений соответствующих компонент этих векторов. Если имеются два вектора \(\overline{a} = (a_1, a_2, \ldots, a_n)\), \(\overline{b} = (b_1, b_2, \ldots, b_n)\), тогда:
\[\overline{a} \cdot \overline{b} = a_1 \cdot b_1 + a_2 \cdot b_2 + \ldots + a_n \cdot b_n\]Частые обозначения скалярного произведения: \(\overline{a} \cdot \overline{b}\), \(\langle \overline{a}, \overline{b} \rangle\), \((\overline{a}, \overline{b})\).
Геометрически:
\[\langle \overline{a}, \overline{b} \rangle = | \overline{a} | \cdot | \overline{b} | \cdot \cos \phi\]– произведение длин на косинус угла между ними.
Если \(\langle \overline{a}, \overline{b} \rangle = 0\), то \(\overline{a}\) и \(\overline{b}\) – ортогональны.
В контексте матричной алгебры скалярное произведение представляется как произведение вектора-строки на вектор-столбец, учитывая, что при создании векторов в Matlab по умолчанию создаются вектора-строки, тогда:
\[\langle \overline{a}, \overline{b} \rangle = \overline{a} \cdot \overline{b}^T\]a = [1 2 3]; b = [4 5 6];
a*b'
ans = 32
Также можно использовать специальную функцию:
dot(a, b)
ans = 32
Векторное произведение – это операция над двумя векторами в трехмерном пространстве, результатом которой является новый вектор. Этот новый вектор перпендикулярен плоскости, определяемой исходными векторами, а его длина равна площади параллелограмма, образованного этими векторами.
Если \(\overline{a} = (a_1, a_2, a_3)\), \(\overline{b} = (b_1, b_2, b_3)\) – два вектора в трехмерном пространстве, их векторное произведение \(\overline{a} \times \overline{b}\) определяется следующим образом:
\[\mathbf{A} \times \mathbf{B} = (a_2b_3 - a_3b_2, a_3b_1 - a_1b_3, a_1b_2 - a_2b_1)\]Частые обозначения векторного произведения: \(A \times B\), \([A, B]\)
Для вычисления вектороного произведения в Matlab испольузется следующая фукнция:
a = [1 2 3]; b = [4 5 6];
cross(a, b)
ans =
-3 6 -3
Тензорное произведение двух векторов – это способ комбинирования двух векторов так, чтобы получить новый математический объект, который сохраняет некоторую информацию о структуре каждого из исходных векторов. В контексте евклидовых векторов результатом тензорного произведения двух векторов \(\overline{a}\) и \(\overline{b}\) является матрица, элементы которой равны произведениям соответствующих элементов исходных векторов.
Пусть \(\overline{a}= (a_1, a_2, \ldots, a_n)\) и \(\overline{b} = (b_1, b_2, \ldots, b_m)\). Тогда тензорное произведение \(\overline{a} \otimes \overline{b}\) будет матрицей размера \(n \times m\) с элементами \(a_i \cdot b_j\):
В контексте матричной алгебры тензерное произведение двух векторов представляется как произведение вектора-столбца на вектор-строки.
Пусть:
\[u = \begin{pmatrix} u_1 \\ u_2 \\ u_3 \\ \end{pmatrix}; \space v = \begin{pmatrix} v_1 \\ v_2 \\ v_3 \\ \end{pmatrix};\]Тогда:
\[u \otimes v = u \cdot v^T = \begin{pmatrix} u_1 \\ u_2 \\ u_3 \\ \end{pmatrix} \begin{pmatrix} v_1 & v_2 & v_3\\ \end{pmatrix};\]В Matlab по умолчанию создаются вектора-строки, поэтому тензерное произведение получается путем транспонирования первого, а не второго вектора \(u \otimes v = u^T \cdot v\). Например:
a = [1 2 3]; b = [4 5 6];
a'*b
ans =
4 5 6
8 10 12
12 15 18
Что то же самое, что:
A = [a' a' a'];
B = [b; b; b];
A .* B
ans =
4 5 6
8 10 12
12 15 18
Обратная матрица
Обратная матрица – это квадратная матрица \(A^{-1}\), которая при умножении на исходную матрицу \(A\) даёт единичную матрицу того же порядка \(I\).
\[AA^{-1} = I = A^{-1}A\]Некоторые свойства обратной матрицы:
- Единственность: Для любой невырожденной (определитель которой не равен нулю) квадратной матрицы существует только одна обратная матрица.
- Существование обратной матрицы: Матрица имеет обратную тогда и только тогда, когда ее определитель не равен нулю. Если определитель равен нулю, матрица называется вырожденной, и у нее нет обратной матрицы.
- Обратная матрица произведения: Если \(A\) и \(B\) — квадратные невырожденные матрицы одного и того же порядка, то: \((AB)^{-1}=B^{-1}A^{-1}\)
- Транспонирование: Если \(A\) имеет обратную матрицу, то обратная для транспонированной матрицы \(A^T\) будет равна транспонированной матрице от \(A^-1\): \((A^T)^{-1} = (A^{-1})^T\)
- Умножение на скаляр: Если \(A\) и \(B\) — обратимые матрицы (имеют обратные), и \(c\) - скаляр, то: \((cA)^{-1} = \frac{1}{c} A^{-1}\) (где \(c\) не равно нулю)
- Обратная матрица суммы: В общем случае, сумма обратных матриц не равна обратной матрице суммы, т.е.: \((A + B)^{-1} \neq A^{-1} + B^{-1}\).
Рассмотрим пример нахождения обратной матрицы для \(A_{2 \times 2}\):
\[\begin{pmatrix} a & b \\ c & d \\ \end{pmatrix} \begin{pmatrix} x_1 & x_2 \\ y_1 & y_2 \\ \end{pmatrix} \\= \begin{pmatrix} 1 & 0 \\ 0 & 1 \\ \end{pmatrix}\], здесь вторая матрица – обратная матрица, которую необходимо найти.
Представим матричное умножение в виде системы уравнений:
\[\begin{equation} \begin{cases} ax_1 + by_1 = 1 \\ ax_2 + by_2 = 0 \\ cx_1 + dy_1 = 0 \\ cx_2 + dy_2 = 1 \\ \end{cases} \end{equation}\]Имеются 4 уравнения и 4 неизвестных → постараемся найти решение системы.
Выражая из однородных уравнений1 \(y_1\) и \(y_2\), а затем подставляя в первое и четвертое получим решение:
\[\begin{equation} \begin{cases} x_1 = \frac{d}{ad - bc} \\ y_1 = \frac{-c}{ad - bc}\\ x_2 = \frac{-b}{ad - bc} \\ y_2 = \frac{a}{ad - bc} \\ \end{cases} \end{equation}\]В иной форме:
\[A^{-1} = \frac{1}{ad - bc} \begin{pmatrix} d & -b \\ -c & a \\ \end{pmatrix}\]Заметим, что решение существует тогда, когда \(ad - bc \ne 0\), что является определителем матрицы \(A_{2 \times 2}\).
В общем случае обратную матрицу можно определить как:
\(A^{-1} = \frac{\text{adj} A}{|A|}\) , где \(\text{adj} A\) – соответсвующая присоединенная матрица, \(|A|\) – определитель матрицы \(A\).
Из этого определения следует критерий обратимости: матрица обратима тогда и только тогда, когда она невырождена, то есть её определитель не равен нулю. Для неквадратных матриц и вырожденных матриц обратных матриц не существует.
В Matlab:
A = [1 2, 3 4];
B = inv(A)
Теперь, матрица \(B\) будет содержать обратную матрицу для \(A\):
B =
-2.0000 1.0000
1.5000 -0.5000
Однако стоит быть осторожным при использовании inv()
. В некоторых случаях, особенно когда матрица \(A\) близка к вырожденной, использование inv(A)
может привести к численным неточностям. Во многих приложениях, вместо явного вычисления обратной матрицы, лучше решать систему уравнений напрямую с помощью оператора \
.
Пример. Решите систему линейных уравнений:
\[\begin{equation} \begin{cases} 3x + 4y + 5z = 2, \\ 2x - 3y + 7z = -1, \\ x - 6y + z = 3. \end{cases} \end{equation}\]A = [3, 4, 5; 2, -3, 7; 1 -6 1]
B = [2; -1; 3]
X = A \ B
A * X
A =
3 4 5
2 -3 7
1 -6 1
B =
2
-1
3
X =
2.6196
-0.2283
-0.9891
ans =
2.0000
-1.0000
3.0000
Ортогональная матрица
Ортогональная матрица — это квадратная матрица \(Q\), которая удовлетворяет условию:
\[Q \cdot Q^T = Q^T \cdot Q = I\]где \(Q^T\) — это транспонированная матрица \(Q\), а \(I\) — это единичная матрица того же порядка, что и \(Q\).
Иначе говоря, столбцы ортогональной матрицы образуют ортонормированный базис в евклидовом пространстве: все столбцы имеют длину 1 и они попарно ортогональны друг другу.
Одно из полезных свойств ортогональных матриц заключается в том, что их обратная матрица совпадает с транспонированной матрицей, т.е. \(A^{-1} = A^T\).
Ещё одно важное свойство ортогнальной матрицы – это то, что она сохраняет длину. Предположим, что имеется вектор \(v\) в некотором евклидовом пространстве. Если умножите этот вектор на ортогональную матрицу \(A\), то получившийся вектор \(Av\) будет иметь ту же длину, что и исходный вектор \(v\). Т.е. ортогональная матрица позволяет проводить преобразование без искажения длин векторов:
\[(Qv)^T (Qv) = ||Qv||^2 = v^T Q^T Q v = v^T v = ||v||^2\]Получение ортогональной матрицы в Matlab:
Имея матрицу можно воспользоваться функцией qr
проводящую QR - факторизацию (разложение матрицы на ортогональную и верхнетреугольную).
A = randn(3,3); % 3x3 random matrix
[Q, R] = qr(A); % QR decomposition
В этом примере Q
– \(3 \times 3\) ортогональная матрица.
Проверка на ортогональность матрицы в Matlab:
Можно проверить, является ли матрица ортогональной, проверив, совпадает ли её транспонированная матрица с её обратной матрицей.
is_orthogonal = norm(Q'*Q - eye(3)) < 1e-10;
Здесь рассчитывается фробениусова (евклидова) норма разницы \(Q^TQ - I\). Если эта норма очень близка к нулю (меньше некоторой маленькой погрешности, скажем, \(1^{-10}\), то пологаем, что матрица является ортогональной.
Определитель ортогональной матрицы равен \(-1\) или \(1\), если \(Q\) - ортогональная матрица, тогда >> det(Q)
\(\sim\) -1
или 1
.
Матрица вращения
Примером ортогональной матрицы служит матрица вращения.
Матрица вращения (матрица поворота) - это матрица, используемая для для выполнения вращения на заданный угол и в заданном направлении. В частности, для 2D и 3D пространств матрицы вращения часто используются в компьютерной графике (например компьютерных играх) и систем управления (например робототехнике).
Матрица поворота, исходя из правил матричной алгебры, может трансформировать как вектор, так и матрицу.
Рассмотрим сначала задачу поворота вектора. Представим, что над гладью воды зависла удочка рыбака под углом \(\phi = 45^{\circ}\). Вдруг - поклёв! Рыбак потянул удочку, и она стала быстро набирать высоту, длина лески (катет А) стала расти, а расстояние от рыбака до самой лески стало уменьшаться (катет B). Длина самой удочки совсем не изменилась, даже когда она описала в воздухе дугу и оказалась почти над головой рыбака, под углом \(\phi = 90^{\circ}\). Длина лески сравнялась с длиной удочки, а расстояние между рыбаком и леской изменилось до 0, леска оказалась в руках рыбака.
Пусть: длина удочки – \(r\), длина лески – \(y\), а \(x\) - расстояние между рыбаком и тем местом, где леска погружена в воду. Тогда, вспоминая теорему Пифагора: \(r^2 = y^2 + x^2\).
- Отношение длины лески к длине удочки – \(\sin \phi\)
- Отношение длины отрезка между рыбаком и местом погружения лески с длиной удочки — \(\cos \phi\)
→
\[r = \frac{x^2}{r} + \frac{y^2}{r} = x \cdot \cos \phi + y \cdot \sin \phi\]Пусть вектор-удочка - это радиус вектор, тогда его начальный координаты \((x, y)\), а координаты после поворота \((x', y')\). Измененный угол наклона к глади воды: \(\phi' = \phi + \theta\), где \(\theta\) угол поворота.
Так как длина удочки не меняется \(r\) можно выразить через новые углы и катеты:
\[r = x' \cos(\phi + \theta) + y' \sin(\phi + \theta) = \\ x' (\cos \phi \cos \theta - \sin \phi \sin \theta) + y' (\sin \phi \cos \theta + \cos \phi \sin \theta) = \\ \frac{x'x}{r} \cos \theta - \frac{x'y}{r} \sin \theta + \frac{y' y}{r} \cos \theta + \frac{y' x}{r} \sin \theta\]Домножив результат на \(r\):
\[x'x \cos \theta - x'y \sin \theta + y' y \cos \theta + y' x \sin \theta = \\ x' (x \cos \theta - y \sin \theta) + y' (y \cos \theta + x \sin \theta) = r^2\]Учитывая, что \(r^2 = x'^2 + y'^2\):
\[\begin{equation} \begin{cases} x' = x \cos \theta - y \sin \theta \\ y' = y \cos \theta + x \sin \theta \\ \end{cases} \end{equation}\]Принимая тригонометрические функции от угла поворота за коэффициенты, можно представить новые координаты как результат перемножения на матрицу вращения \(R_{\theta}\):
\[R_{\theta} = \begin{pmatrix} \cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \\ \end{pmatrix}\]Тогда для того чтобы получить новые координаты вектора имея старые и угол вращения:
\[R_{\theta} \begin{align} \begin{pmatrix} x \\ y \\ \end{pmatrix} = \begin{pmatrix} x' \\ y' \\ \end{pmatrix} \end{align}\]Матрица от обратного угла \(R_{-\theta}\), равна обратной матрицы \(R_{\theta}^{-1}\), а так как матрица ортогональна, то:
\[R_{-\theta} = R_{\theta}^T\]Поворот на \(\frac{\pi}{4}\) в Matlab:
theta = pi/4; % Example: 45-degree rotation in radians
R2D = [cos(theta), -sin(theta); sin(theta), cos(theta)];
v = [1; 0]; % Example 2D vector
v_rotated = R2D * v
v_rotated =
0.7071
0.7071
Итерирование по матрице с помощью цикла
Пример 1. Обработка двумерных массивов производится с помощью двух вложенных циклов. Например, посчитать сумму всех элементов можно следующим образом.
A = [
1 2 3 4,
5 6 7 8,
9 10 11 12
];
[n, m] = size(A);
s = 0;
for i = 1:n
for j = 1:m
s = s + A(i, j);
end
end
s
78
sum(sum(A))
Пример 2. Выведем элементы стоящие на главной диагонали квадратной матрицы
A = [
0 1 1 1 1
2 0 1 1 1
2 2 0 1 1
2 2 2 0 1
2 2 2 2 0
];
for i = 1:size(A, 1)
fprintf('%d ', A(i, i));
end
0 0 0 0 0
diag(A)
ans =
0
0
0
0
0
Пример 3. Выведем элементы верхнего треугольника:
for i = 1:size(A, 1)-1
for j = i+1:size(A, 1)
fprintf('%d ', A(i, j));
end
fprintf('\n');
end
1 1 1 1
1 1 1
1 1
1
triu(A)
ans =
0 1 1 1 1
0 0 1 1 1
0 0 0 1 1
0 0 0 0 1
0 0 0 0 0
Пример 4. Выведем элементы нижнего треугольника:
for i = 2:size(A, 1)
for j = 1:i-1
fprintf('%d ', A(i, j));
end
fprintf('\n');
end
2
2 2
2 2 2
2 2 2 2
tril(A)
ans =
0 0 0 0 0
2 0 0 0 0
2 2 0 0 0
2 2 2 0 0
2 2 2 2 0
-
Однородное уравнение – это уравнение, которое можно записать в виде \(P(x) = 0\), где \(P(x)\) – полином, в каждом из слагаемых которого наблюдается одинаковая сумма степеней. ↩