Войти
ПрограммированиеСтатьиОбщее

ЧАВО по матрицам и кватернионам (2 стр)

Автор:

АРИФМЕТИКА

Что такое единичная матрица?

Единичная матрица — матрица, имеющая равное число строк и столбцов. И все элементы с индексами i=j равны 1, остальные равны 0.

К примеру, единичная матрица 4х4:
\(M=\begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{pmatrix}\)

Что такое главная диагональ матрицы?

Главная диагональ матрицы - это набор элементов, у которых номер ряда равен номеру колонки, иначе говоря:

\(M_{i,j}\), где \(i=j\)

Так что у единичной матрицы, лишь элементы главной диагонали равны 1, а все остальные 0.

Что такое транспонирование матрицы?

Транспонированная матрица это матрица, в которой поменяли все элементы матрицы относительно главной диагонали.

Это можно выразить математической операцией вида:
\(M'_{i,j} = M_{j,i}\)

Однако такое можно сделать лишь с матрицей с равным числом строк и столбцов.

Если матрица M равна:
\(M=\begin{pmatrix} 0.707 & -0.866 \\ 0.866 & 0.707 \end{pmatrix}\)

Транспонированная равна:
\(M=\begin{pmatrix} 0.707 & 0.866 \\ -0.866 & 0.707 \end{pmatrix}\)

Если имеется матрица поворота, то транспонирование гарантирует, что у матрицы есть обратная.
   

Как мне сложить две матрицы?

Правило сложения двух матриц: «добавь строку и колонку к строке и колонке».

Математически это выглядит так: \(R_{i,j}=M_{i,j}+L_{i,j}\)

При этом матрицы должны быть одного размера. К примеру, если матрица 3x3 M складывается с матрицей 3x3 L результат будет таким:
\(R = M + L =\) \(\begin{pmatrix} A & B & C \\ D & E & F \\ G & H & I \end{pmatrix} +\) \(\begin{pmatrix} J & K & L \\ M & N & O \\ P & Q & R \end{pmatrix} =\) \(\begin{pmatrix} A+J & B+K & C+L \\ D+M & E+N & F+O \\ G+P & H+Q & I+R \end{pmatrix}\).

Как мне вычесть две матрицы?

Правило вычитания двух матриц: «вычитай строку и колонку из строки и колонки».

Математически будет так: \(R_{i,j}=M_{i,j}-L_{i,j}\)

Матрицы должны быть строго одного размера.

К примеру, если матрица 3x3 L вычитается из матрицы 3x3 M результат будет таким:
\(R = M - L =\) \(\begin{pmatrix} A & B & C \\ D & E & F \\ G & H & I \end{pmatrix} - \begin{pmatrix} J & K & L \\ M & N & O \\ P & Q & R \end{pmatrix} =\) \(\begin{pmatrix} A-J & B-K & C-L \\ D-M & E-N & F-O \\ G-P & H-Q & I-R \end{pmatrix}\).

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

Правило такое: «умножай строку на колонку и сумма будет результатом».

Математически: \(R_{i,j}=\sum_{i=1}^n M_{i,j} L_{j,i}\)

Если есть две матрицы:
\(M_{AB}\) и \(L_{CD}\), то величины B и C должны быть равны.

Результат будет \(R_{AD}\)

Так что, можно умножить матрицу 4xN с матрицей 4x4, но не наоборот. К примеру, если матрица 4x4 M описана так:
\(M=\begin{pmatrix} A & B & C & D \\ E & F & G & H \\ I & J & K & L \\ M & N & O & P \end{pmatrix}\)

и матрица 4x2 L описана так:

\(L=\begin{pmatrix} Q&R \\ S&T \\ U & V \\ W & X \end{pmatrix}\)

то размер результата будет 2x4:

\(R = M * L =\) \(\begin{pmatrix} A & B & C & D \\ E & F & G & H \\ I & J & K & L \\ M & N & O & P \end{pmatrix}* \begin{pmatrix} Q&R \\ S&T \\ U & V \\ W & X \end{pmatrix} =\) \(\begin{pmatrix} AQ+BS+CU+DW & AR+BT+CV+DX \\ EQ+FS+GU+HW & ER+FT+GV+HX \\ IQ+JS+KU+LW & IR+JT+KV+LX \\ MQ+NS+OU+PW & MR+NT+OV+PX \end{pmatrix}\)

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

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

К примеру,
\(M^{-1}\) — обратная матрица,

\(M^0\) — единичная матрица,

\(M^1\) — матрица не меняется,

\(M^2\) — возводит в квадрат,

\(M^3\) — куб матрицы.

Возведение матрицы в степень больше одного означает умножить матрицу на себя n-число раз.

К примеру:

\(M^2 = M \times M\)

\(M^3 = M \times M \times M\)

и так далее.

Возведение в степень единичной матрицы всегда даёт единичную матрицу: \(I^n = I\)

Как мне умножить один и более векторов на матрицу?

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

Если N векторов должны быть умножены на матрицу 4х4, они могут быть выражены в виде одной матрицы 4хN:
 
\(M=\begin{pmatrix}A & B & C & D \cr E & F & G & H \cr I & J & K & L \cr M & N & O & P\end{pmatrix}\)

а список векторов:

\(V=\begin{pmatrix}x_1&x_2&x_3&x_4&x_5\cr y_1&y_2&y_3&y_4&y_5\cr z_1&z_2&z_3&z_4&z_5\cr 1&1&1&1&1\end{pmatrix}\)

Заметьте, что вся дополнительная четвертая строка равна константе 1. Она не играет никакой роли, используется, чтобы порядок матрицы M совпадал с порядком списка V.
 
Умножение производится так:

\(M*V=V'\)
\(\begin{pmatrix} A&B&C&D \cr E&F&G&H \cr I&J&K&L \cr M&N&O&P \end{pmatrix} * \begin{pmatrix} x_1&x_2&x_3&x_4&x_5\cr y_1&y_2&y_3&y_4&y_5\cr z_1&z_2&z_3&z_4&z_5\cr 1&1&1&1&1 \end{pmatrix} =\) \(\begin{pmatrix} A*x_1+B*y_1+C*z_1+D&A*x_2+B*y_2+C*z_2+D&...\cr E*x_1+F*y_1+G*z_1+H&E*x_2+F*y_2+G*z_2+H&...\cr I*x_1+J*y_1+K*z_1+L& I*x_2+J*y_2+K*z_2+L&...\cr M*x_1+N*y_1+O*z_1+P&M*x_2+N*y_2+O*z_2+P&... \end{pmatrix}\)

На каждый вектор в списке приходится в общем 12 умножений, 16 сложений и 1 деление для перспективы. Если известно, что это матрица поворота или переноса, то можно не делить.

Страницы: 1 2 3 4 5 6 Следующая »

#C++, #FAQ, #OpenGL, #кватернионы, #математика, #матрицы

9 марта 2011 (Обновление: 5 дек 2021)

Комментарии [40]