Матрица преобразований


Содержание

Элементарные преобразования матриц

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

  1. перестановка местами двух строк;
  2. умножение каждого элемента строки на одно и тоже, отличное от нуля, число;
  3. добавление к элементам строки соответствующих элементы другой строки, умноженные на некоторое ненулевое число.

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

Примеры элементарных преобразований матриц

Продемонстрируем элементарные преобразования строк на примере матрицы

1. Переставим местами первую и третью строки, при этом получится эквивалентная матрица, поэтому между ними ставим знак эквивалентности

2. Умножим первую строку последней матрицы на :

3. Прибавим к первой строке третью, умноженную на 4

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

Матрица преобразований

ОСНОВЫ 3D ГРАФИКИ
2.3. Матричные преобразования

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

Введем несколько терминов. n-мерный вектор, он же вектор размерности n, он же вектор размера n: упорядоченный набор n действительных чисел. Вообще говоря, практически то же самое, что и обычный 1D-массив. Матрица размера m на n (будет обозначаться как m*n, mxn): таблица размера m на n, в каждой клетке которой — действительное число. Это уже 2D-массив. Всего лишь. Вот пример матрицы 3×3:

Займемся определением операций над векторами и матрицами. Вектор будем записывать в столбик и рассматривать его как матрицу размера n*1.

Операция скалярного произведения векторов: определена для двух векторов одинаковых размеров. Результат есть число, равное сумме произведений соответствующих элементов векторов. Пример:

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

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

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

Операция умножения двух матриц: определена для двух матриц таких размеров a*b и c*d, что b = c. Например, если b = c, но a != d, то при перестановке множителей операция будет вообще не определена. Результатом умножения матрицы A размером a*b на матрицу B размером b*d будет матрица C размером a*d, в которой элемент, стоящий в строке i и столбце j, равен произведению строки i матрицы A на столбец j матрицы B. Произведение строки на столбец определяется как сумма произведений соответствующих элементов строки и столбца. Чтобы было хоть чуть-чуть понятно, пример умножения строки на столбец (они должны быть равной длины, кстати; поэтому и такие ограничения на размеры матриц):

А чтобы перемножить две матрицы, надо эту операцию проделать для каждого элемента. Вот пример:

Умножение и сложение матриц обладают почти тем же набором свойств, что и обычные числа, хотя некоторые привычные свойства не выполняются (например, A*B != B*A); нам на самом деле понадобится знать, что произведение вида A*B*C*D*. не зависит от того, как расставить скобки. Или, если угодно, что

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

Перенос точки (кстати, точки будут также рассматриваться как вектора с началом в начале координат и концом в собственно точке) с координатами (x,y,z) на вектор (dx,dy,dz) делается простым сложением всех координат. То есть результат — это (x+dx,y+dy,z+dz). Как бы сложили вектор-точку и вектор-перенос.

Поворот — занятие уже более интересное. Но тоже простое. Рассмотрим для примера поворот точки (x,y,z) относительно оси z. В этом случае z не меняется вообще, а (x,y) меняются так же, как и при 2D повороте относительно начала координат.

Посмотрим, какие будут координаты у точки A’ — результата поворота A(x,y) на угол alpha.

Пусть r = sqrt(x*x+y*y). Пусть угол AOx равен phi, тогда из рисунка видно, что cos(phi) = x/r, sin(phi) = y/r. Угол A’OA равен по условию alpha. Отсюда

x’ = r*cos(alpha+phi) = r*(cos(alpha)*cos(phi)-sin(alpha)*sin(phi)) =
= (r*cos(phi))*cos(alpha)-(r*sin(phi))*sin(alpha) =
= x*cos(alpha)-y*sin(alpha)

y’ = r*sin(alpha+phi) = r*(cos(alpha)*sin(phi)+sin(alpha)*cos(phi)) =
= (r*cos(phi))*sin(alpha)+(r*sin(phi))*cos(alpha) =
= x*sin(alpha)+y*cos(alpha)

Для трехмерного случая, таким образом

x’ = x*cos(alpha)-y*sin(alpha)
y’ = x*sin(alpha)+y*cos(alpha)
z’ = z

Аналогичные формулы получатся и для других осей поворота (то есть Ox, Oy). Поворот относительно произвольной оси, проходящей через начало координат, можно сделать с помощью этих поворотов — сделать поворот относительно Ox так, чтобы ось поворота стала перпендикулярна Oy, затем поворот относительно Oy так, чтобы ось поворота совпала с Oz, сделать собственно поворот, а затем обратные повороты относительно Oy и Ox. Можно даже вывести формулы для такого поворота и убедиться в том, что они очень громоздкие.

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

То есть поворот на угол alpha задается одной и той же матрицей, и с помощью этой матрицы (умножая ее на вектор-точку) можно получить координаты повернутой точки. Пока никакого выигрыша не видно — здесь умножение матрицы на вектор требует больше операций, чем расчет x’ и y’ по формулам.

Удобство матриц для нас заключается как раз в свойстве A*(B*C) = (A*B)*C. Пусть мы делаем несколько поворотов подряд, например, пять (как раз столько, сколько надо для поворота относительно произвольной оси), и пусть они задаюся матрицами A, B, C, D, E (A — матрица самого первого поворота, E — последнего). Тогда для вектора p мы получаем

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

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

На самом деле, эти преобразования тоже легко записываются в виде матриц. Только вместо матриц 3×3 и 3-мерных векторов используются так называемые однородные 4-мерные координаты и матрицы 4×4. При этом вместо векторов вида

используются вектора вида

а вместо произвольных матриц 3×3 используются матрицы 4×4 такого вида:

Видно, что если d = h = l = 0, то в результате применения всех операций получается то же самое, что и для матриц 3×3.

Матрица параллельного переноса теперь определяется как

Матрицу масштабирования можно определить и для матриц 3×3, и для матриц 4×4:

где kx, ky, kz — коэффициенты масштабирования по соответствующим осям.

Таким образом, получаем следующее. Любое нужное нам преобразование пространства можно задать матрицей 4×4 определенной структуры, разной для разных преобразований. Результат последовательного выполнений нескольких преобразований совпадает с результатом одного преобразования T, которое также задается матрицей 4×4, вычисляемой как произведение матриц всех этих преобразований. Важен порядок умножения, так как A*B != B*A. Результат применения преобразования T к вектору [ x y z ] считается как результат умножения матрицы T на вектор [ x y z 1 ]. Вот и все.

Осталось только на примере показать, почему A*B != B*A. Пусть A — матрица переноса, B — поворота. Если мы сначала перенесем объект, а потом повернем относительно центра координат (это будет B*A), получим далеко не то, что будет, если сначала объект повернуть, а потом перенести (это уже A*B).

Матрицы линейных преобразований

Раздел 2. Квадратичные формы и линейные операторы

Линейные операторы

Линейное (векторное) пространство

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

Для любых элементов , , из множества

1) (коммутативность сложения);

2) (ассоциативность сложения);

3) во множестве существует нулевой элемент такой, что для любого элемента , (существование нулевого элемента);

4) для любого элемента существует элемент , такой, что (существование противоположного элемента);

Для любых действительных чисел любых элементов , из множества ;

7) Распределительный закон ;

Определение. Множество называется линейным (векторным) пространством, а его элементы называются векторами.

Примерами векторных пространств являются множество действительных чисел, множество векторов на плоскости и в пространстве, матрицы и т.д.

Если операции сложения и умножения на число определены для действительных элементов, то линейное (векторное) пространство является вещественным пространством, если для комплексных элементов – комплексным пространством.

Свойства линейных пространств

1) В каждом линейном пространстве существует только один нулевой элемент .

2) Для каждого элемента существует только один ему противоположный элемент .

3) Для каждого элемента выполняется равенство × ;

4) Для каждого и выполняется равенство × ;

Линейные преобразования

Определение. Говорят, что в линейном пространстве задано некоторое линейное преобразование А, если любому элементу по некоторому правилу ставится в соответствие элемент .

Определение. Преобразование А называется линейным, если для любых векторов и и любого выполняются равенства

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

Пример. Является ли А линейным преобразованием А = + ; ?

Запишем преобразование А для произвольного элемента : А = + . Проверим, выполняется ли правило операции сложения для этого преобразования: Очевидно, это равенство верно только при т.е. данное преобразование А нелинейное.

Определение. Если в пространстве существуют векторы линейного преобразования , то другой вектор является линейной комбинацией векторов .

Определение. Если выполняется только при , то векторы называются линейно независимыми.

Определение. Если в линейном пространстве есть n линейно независимых векторов, а любые векторов линейно зависимы, то пространство называется n-мерным, а совокупность линейно независимых векторов называется базисом линейного пространства .

Следствие. Любой вектор линейного пространства может быть представлен в виде линейной комбинации векторов базиса.

Матрицы линейных преобразований

Пусть в — мерном линейном пространстве с базисом , ,…, задано линейное преобразование А. Тогда векторы , ,…, — являются векторами этого пространства и их можно представить в виде линейной комбинации векторов базиса:

В этом случае матрица называется матрицей линейного преобразованияА. Пусть = + +…+ — произвольный вектор в пространстве . Тогда

Эти равенства называются линейным преобразованием в базисе , ,…, .

В матричном виде

Пример. Найти матрицу линейного преобразования, заданного в виде

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

Определение. Если вектор переводится в вектор линейным преобразованием с матрицей А, а вектор в вектор линейным преобразованием с матрицей В, то последовательное применение этих преобразований равносильно линейному преобразованию, переводящему вектор в вектор (оно называется произведением составляющих преобразований).

Пример. Задано линейное преобразование А, переводящее вектор в вектор и линейное преобразование В, переводящее вектор в вектор . Найти матрицу линейного преобразования, переводящего вектор в вектор .

Замечание. Если то преобразование является вырожденным.

Элементарные преобразования матриц

Определение

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

1) Умножение каждого элемента некоторой строки на одно и то же ненулевое число. Остальные строки остаются без изменения (кратко: умножение строки на число).

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

3) Перемена местами некоторых двух строк матрицы. Остальные строки остаются без изменения.

Эти преобразования называются соответственно преобразованиями первого, второго и третьеготипа (рода). Последовательно применяя их, мы получаем более сложные преобразования.

Аналогично определяются элементарные преобразования столбцов матрицы.

Теорема

Преобразование третьего типа является некоторой комбинацией преобразований первого и второго типов.

Таким образом, преобразованием третьего типа можно отнести к более сложным, чем элементарные. Но его принято всё-же считать элементарным ради удобства.

Теорема

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

Например,

á(1) Поменяли местами первую и вторую строки (преобразование третьего типа).

(2) Первую строку, умноженную на 2, прибавили ко второй и вычли из третьей, умноженную на 3, прибавили к четвёртой (преобразования второго типа).

(3) Вторую строку вычли из третьей и вторую строку, умноженную на 14/11 вычли из четвёртой.

(4) Поменяли местами третью и четвёртую строки.ñ

Таким образом, преобразовали исходную матрицу

Теперь, поменяв местами второй и третий столбец, а затем поменяв его же с четвёртым столбцом, перемещаем второй столбец на место четвёртого, третий и четвёртый столбцы окажутся соответственно на месте второго и третьего столбцов:

тем самым преобразовали исходную матрицу в трапециедальную.

Упражнения

Привести матрицу к ступенчатому и трапециедальному видам:

Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: Увлечёшься девушкой-вырастут хвосты, займёшься учебой-вырастут рога 9789 — | 7665 — или читать все.

188.64.174.135 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.

Отключите adBlock!
и обновите страницу (F5)

очень нужно


Матричное представление преобразований Matrix Representation of Transformations

Матрица размером m × n представляет собой набор чисел, упорядоченных по m строкам и n столбцам. An m×n matrix is a set of numbers arranged in m rows and n columns. На следующем рисунке показаны несколько матриц. The following illustration shows several matrices.

Можно добавить две матрицы одного размера, добавив отдельные элементы. You can add two matrices of the same size by adding individual elements. На следующем рисунке показаны два примера добавления матрицы. The following illustration shows two examples of matrix addition.

Матрицу размером m × n можно умножить на матрицу n × p, а результатом будет матрица m × p. An m×n matrix can be multiplied by an n×p matrix, and the result is an m×p matrix. Число столбцов в первой матрице должно совпадать с количеством строк во второй матрице. The number of columns in the first matrix must be the same as the number of rows in the second matrix. Например, матрицу размером 4 × 2 можно умножить на матрицу размером 2 × 3, чтобы создать матрицу размером 4 × 3. For example, a 4×2 matrix can be multiplied by a 2×3 matrix to produce a 4×3 matrix.

Точки в плоскости, а также строки и столбцы матрицы можно рассматривать как векторы. Points in the plane and rows and columns of a matrix can be thought of as vectors. Например, (2, 5) — это вектор с двумя компонентами, а (3, 7, 1) — вектор с тремя компонентами. For example, (2, 5) is a vector with two components, and (3, 7, 1) is a vector with three components. Скалярное произведение двух векторов определяется следующим образом: The dot product of two vectors is defined as follows:

(a, б) • (c, d) = AC + BD (a, b) • (c, d) = ac + bd

(a, b, c) • (d, e, f) = AD + быть + CF (a, b, c) • (d, e, f) = ad + be + cf

Например, точка произведения (2, 3) и (5, 4) имеет значение (2) (5) + (3) (4) = 22. For example, the dot product of (2, 3) and (5, 4) is (2)(5) + (3)(4) = 22. Скалярное произведение (2, 5, 1) и (4, 3, 1) равно (2) (4) + (5) (3) + (1) (1) = 24. The dot product of (2, 5, 1) and (4, 3, 1) is (2)(4) + (5)(3) + (1)(1) = 24. Обратите внимание, что скалярное произведение двух векторов является числом, а не другим вектором. Note that the dot product of two vectors is a number, not another vector. Также обратите внимание, что можно вычислить значение с точкой, только если два вектора имеют одинаковое число компонентов. Also note that you can calculate the dot product only if the two vectors have the same number of components.

Пусть A (i, j) является записью в матрице A в i-ой строке и столбце ЖС. Let A(i, j) be the entry in matrix A in the ith row and the jth column. Например, A (3, 2) — это запись в матрице A в третьей строке и втором столбце. For example A(3, 2) is the entry in matrix A in the 3rd row and the 2nd column. Предположим, что A, B и C являются матрицами, а AB = C. Записи в языке C рассчитываются следующим образом: Suppose A, B, and C are matrices, and AB = C. The entries of C are calculated as follows:

C (i, j) = (строка i из A) • (столбец j из B) C(i, j) = (row i of A) • (column j of B)

На следующем рисунке показано несколько примеров перемножения матриц. The following illustration shows several examples of matrix multiplication.

Если вы считаете, что точка в плоскости является матрицей размером 1 × 2, эту точку можно преобразовать, умножив ее на матрицу размером 2 × 2. If you think of a point in a plane as a 1×2 matrix, you can transform that point by multiplying it by a 2×2 matrix. На следующем рисунке показано несколько преобразований, примененных к точке (2, 1). The following illustration shows several transformations applied to the point (2, 1).

Все преобразования, показанные на предыдущем рисунке, являются линейными преобразованиями. All of the transformations shown in the preceding figure are linear transformations. Некоторые другие преобразования, такие как перевод, не являются линейными и не могут быть выражены умножением матрицы 2 × 2. Certain other transformations, such as translation, are not linear, and cannot be expressed as multiplication by a 2×2 matrix. Предположим, что вы хотите начать с точки (2, 1), повернуть ее 90 градусов, перевести 3 единицы в направлении x и перевести 4 единицы в направлении по оси y. Suppose you want to start with the point (2, 1), rotate it 90 degrees, translate it 3 units in the x direction, and translate it 4 units in the y direction. Это можно сделать с помощью умножения матрицы, за которым следует Добавление матрицы. You can accomplish this by using a matrix multiplication followed by a matrix addition.

Линейное преобразование (умножение матрицы 2 × 2), за которым следует перевод (сложение матрицы размером 1 × 2), называется аффинное преобразованием. A linear transformation (multiplication by a 2×2 matrix) followed by a translation (addition of a 1×2 matrix) is called an affine transformation. Альтернатива хранению аффинных преобразований в паре матриц (одна для линейной части и другая для перевода) заключается в хранении всего преобразования в матрице размером 3 × 3. An alternative to storing an affine transformation in a pair of matrices (one for the linear part and one for the translation) is to store the entire transformation in a 3×3 matrix. Чтобы сделать эту работу, точка на плоскости должна храниться в матрице размером 1 × 3 с фиктивной третьей координатой. To make this work, a point in the plane must be stored in a 1×3 matrix with a dummy 3rd coordinate. Обычная методика — сделать все 3 Координаты равными 1. The usual technique is to make all 3rd coordinates equal to 1. Например, точка (2, 1) представлена матрицей [2 1 1]. For example, the point (2, 1) is represented by the matrix [2 1 1]. На следующем рисунке показано аффинное преобразование (поворот 90 градусов; сдвиг на три единицы в направлении по оси x, 4 единицы в направлении оси y), выраженный в виде умножения на одну матрицу размером 3 × 3. The following illustration shows an affine transformation (rotate 90 degrees; translate 3 units in the x direction, 4 units in the y direction) expressed as multiplication by a single 3×3 matrix.

В предыдущем примере точка (2, 1) сопоставляется с точкой (2, 6). In the preceding example, the point (2, 1) is mapped to the point (2, 6). Обратите внимание, что третий столбец матрицы размером 3 × 3 содержит числа 0, 0, 1. Note that the third column of the 3×3 matrix contains the numbers 0, 0, 1. Это всегда будет иметь место для матрицы аффинного преобразования, 3 × 3. This will always be the case for the 3×3 matrix of an affine transformation. Важные числа — это шесть чисел в столбцах 1 и 2. The important numbers are the six numbers in columns 1 and 2. Верхняя левая часть матрицы 2 × 2 представляет линейную часть преобразования, а первые две записи в третьей строке представляют перевод. The upper-left 2×2 portion of the matrix represents the linear part of the transformation, and the first two entries in the 3rd row represent the translation.

В GDI+ можно сохранить аффинное преобразование в Matrix объекте. In GDI+ you can store an affine transformation in a Matrix object. Поскольку третий столбец матрицы, представляющий аффинное преобразование, всегда имеет значение (0, 0, 1), при создании Matrix объекта в первых двух столбцах указывается только шесть чисел. Because the third column of a matrix that represents an affine transformation is always (0, 0, 1), you specify only the six numbers in the first two columns when you construct a Matrix object. Оператор Matrix myMatrix = new Matrix(0, 1, -1, 0, 3, 4) конструирует матрицу, показанную на предыдущем рисунке. The statement Matrix myMatrix = new Matrix(0, 1, -1, 0, 3, 4) constructs the matrix shown in the preceding figure.

Составные преобразования Composite Transformations

Составное преобразование — это последовательность преобразований, в одну за которой следуют другие. A composite transformation is a sequence of transformations, one followed by the other. Рассмотрим матрицы и преобразования в следующем списке: Consider the matrices and transformations in the following list:

Матрица A Matrix A Поворот на 90 градусов Rotate 90 degrees
Матрица B Matrix B Масштабирование по коэффициенту 2 в направлении по оси x Scale by a factor of 2 in the x direction
Матрица C Matrix C Переводить 3 единицы по оси y Translate 3 units in the y direction

Если начать с точки (2, 1), представленной матрицей [2 1 1], и умножить ее на, то B, затем на C, точка (2, 1) пройдет три преобразования в указанном порядке. If we start with the point (2, 1) — represented by the matrix [2 1 1] — and multiply by A, then B, then C, the point (2, 1) will undergo the three transformations in the order listed.

[2 1 1] ABC = [-2 5 1] [2 1 1]ABC = [-2 5 1]

Вместо того чтобы хранить три части составного преобразования в трех отдельных матрицах, можно умножить, B и C, чтобы получить одну матрицу размером 3 × 3, которая хранит все составное преобразование. Rather than store the three parts of the composite transformation in three separate matrices, you can multiply A, B, and C together to get a single 3×3 matrix that stores the entire composite transformation. Предположим, ABC = D. Затем точка, умноженная на D, дает тот же результат, что и точка, умноженная на, а затем на B, а затем на C. Suppose ABC = D. Then a point multiplied by D gives the same result as a point multiplied by A, then B, then C.

[2 1 1] D = [-2 5 1] [2 1 1]D = [-2 5 1]

На следующем рисунке показаны матрицы A, B, C и D. The following illustration shows the matrices A, B, C, and D.

Тот факт, что матрица составного преобразования может быть сформирована путем умножения единичных матриц преобразования, означает, что любая последовательность аффинных преобразований может храниться в одном Matrix объекте. The fact that the matrix of a composite transformation can be formed by multiplying the individual transformation matrices means that any sequence of affine transformations can be stored in a single Matrix object.

Порядок составного преобразования важен. The order of a composite transformation is important. Как правило, поворот, масштабирование, преобразование не не отличается от масштабирования, затем поворота и преобразования. In general, rotate, then scale, then translate is not the same as scale, then rotate, then translate. Аналогично, важен порядок умножения матриц. Similarly, the order of matrix multiplication is important. Как правило, ABC не совпадает с БПЗ. In general, ABC is not the same as BAC.

RotateAt Translate Scale Multiply Shear RotateКласс предоставляет несколько методов для создания составного преобразования. и. Matrix The Matrix class provides several methods for building a composite transformation: Multiply, Rotate, RotateAt, Scale, Shear, and Translate. В следующем примере создается матрица составного преобразования, которая сначала поворачивает 30 градусов, затем масштабируется по коэффициенту 2 в направлении по оси y, а затем преобразует 5 единиц в направлении по оси x: The following example creates the matrix of a composite transformation that first rotates 30 degrees, then scales by a factor of 2 in the y direction, and then translates 5 units in the x direction:

На следующем рисунке показана матрица. The following illustration shows the matrix.

Элементарные преобразования матриц

Элементарными преобразованиями матриц являются:

• перестановка местами двух параллельных рядов матрицы;

• умножение всех элементов ряда матрицы на число, отличное от нуля;

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

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

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

Пример 1.4.Привести к каноническому виду матрицу

Решение: Выполняя элементарные преобразования, получаем

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

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

т. е. элемент i-й строки и k-го столбца матрицы произведения С равен cумме произведений элементов i-й строки матрицы А на соответству­ющие элементы k-го столбца матрицы В.

Получение элемента сik схематично изображается так:

Если матрицы А и В квадратные одного размера, то произведения АВ и В А всегда существуют. Легко показать, что А • Е = Е • А = А, где А — квадратная матрица, Е — единичная матрица того же размера.

Пример:

Пример:

Тогда изображение А-В не определено, так как число столбцов матрицы А(3) не совпада­ет с числом строк матрицы В(2). При этом определено произведение В х А, которое считают следующим образом:

Матрицы А и В называются перестановочными, если АВ = ВА. Умножение матриц обладает следующими свойствами:

1. А • (В • С) = (А • В) • С;

2. А(В + С) = АВ + АС;

3. (А + В) • С = АС + ВС;

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

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

1. (А + В) Т = А Т + В Т ;

2. (АВ) Т = В Т • А Т .

ОПРЕДЕЛИТЕЛИ

Основные понятия

Квадратной матрице А порядка n можно сопоставить число detA (или , или Δ), называемое ее определителем, следующим образом:

1. n = 1. A = ; det A =

2. n = 2. A = ; det A = = •

3. n = 3, A = ; det A = =

Определитель матрицы A также называют ее детерминантом. Правило вычисления детерминанта для матрицы порядка N являет­ся довольно сложным для восприятия и применения. Однако известны методы, позволяющие реализовать вычисление определителей высоких порядков на основе определителей низших порядков. Один из методов основан на свойстве разложения определителя по элементам некото­рого ряда (с. 23, свойство 7). При этом заметим, что определители невысоких порядков (1, 2, 3) желательно уметь вычислять согласно определению.

Вычисление определителя 2-го порядка иллюстрируется схемой:

Пример 2.1. Найти определители матриц

= 2 • 6 – 5 • (-3) = 12 – (-15) = 27;

= cos 2 α + sin 2 α = 1

При вычислении определителя 3-го порядка удобно пользоваться правилом треугольников (или Саррюса), которое символически можно записать так:

Пример 2.2. Вычислить определитель матрицы

det А = 5•1(-3) + (-2) • (-4) •6 + 3•0•1 — 6•1•1 — 3•(-2)•(-3) — 0•(-4) •5 = -15 + 48 — 6 — 18 = 48 — 39 = 9.

Свойства определителей

Сформулируем основные свойства определителей, присущие опре­делителям всех порядков. Некоторые из этих свойств поясним на опре­делителях 3-го порядка.

Свойство 1(«Равноправность строк и столбцов»). Определитель не изменится, если его строки заменить столбцами, и наоборот.

В дальнейшем строки и столбцы будем просто называть рядами опре­делителя.

Свойство 2. При перестановке двух параллельных рядов опреде­литель меняет знак.

Свойство 3. Определитель, имеющий два одинаковых ряда, равен нулю.

Свойство 4. Общий множитель элементов какого-либо ряда опре­делителя можно вынести за знак определителя.

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

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

Свойство 6. («Элементарные преобразования определителя»). Определитель не изменится, если к элементам одного ряда прибавить соответствующие элементы параллельного ряда, умноженные на любое число.

Пример 2.3. Доказать, что

Решение: Действительно, используя свойства 5, 4 и 3, получим

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

Миноромнекоторого элемента аij определителя n-го порядка на­зывается определитель n — 1-го порядка, полученный из исходного путем вычеркивания строки и столбца, на пересечении которых нахо­дится выбранный элемент. Обозначается mij.

Алгебраическим дополнениемэлемента aij определителя на­зывается его минор, взятый со знаком «плюс», если сумма i+ j — четное число, и со знаком «минус», если эта сумма нечетная. Обозна­чается Aij; Aij = (-1) i+ j • mij.

Свойство 7. («Разложение определителя по элементам некоторого ряда»). Определитель равен сумме произведений элементов некоторого ряда на соответствующие им алгебраические дополнения.

Проиллюстрируем и одновременно докажем свойство 7 на примере определителя 3-его порядка. В этом случае свойство 7 означает, что

В самом деле, имеем

Свойство 7 содержит в себе способ вычисления определителей вы­соких порядков.

Пример 2.4 .Вычислите определитель матрицы

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

= 3•(7•3•4 + (-1) •0•2 + 5•7•1 – (-1) •3•1 — 7•7•2 — 5•0•4) + (5•3•4 + (-1) •7•2 + 5•7•8 – (-1) • 3•8 –

— 5•7•4 — 5•7•2) – (5•0•2 + 7•1•5 + 7•3•8 — 5•0•8 — 3•1•5 -7•7•2) = 122

Свойство 8. Сумма произведений элементов какого-либо ряда оп­ределителя на алгебраические дополнения соответствующих элемен­тов параллельного ряда раина нулю.

НЕВЫРОЖДЕННЫЕ МАТРИЦЫ.

Основные понятия

Пусть А — квадратная матрица n-го порядка

Квадратная матрица A называется невырожденной, если опре­делитель Δ = detA не равен нулю: Δ = detA≠0. В противном случае (Δ = 0) матрица А называется вырожденной.

Матрицей, союзной к матрице A , называется матрица

где Aij — алгебраическое дополнение элемента aij данной матрицы А (оно определяется так же, как и алгебраическое дополнение элемента

Матрица А -1 называется обратной матрице А, если выполняется условие

A•A -1 =A -1 •A = Е, (3.1)

где Е — единичная матрица того же порядка, что и матрица А. Матрица А имеет те же размеры, что и матрица А.

Обратная матрица

Теорема 3.1. Всякая невырожденная матрица имеет обратную.

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

A = , причём det A ≠ 0

Составим союзную матрицу

и найдем произведение матриц Aи A * :

= = det A = det A • E;

т.е. A • A* = det A•E

Здесь мы использовали свойства 7 и 8 определителей (см. п. 2.2).

Аналогично убеждаемся, что

Равенства (3.2) и (3.3) перепишем в виде

Отметим свойства обратной матрицы:

2. (A • B) -1 = B -1 • A -1 ;


3. (A -1 ) T = (A T ) -1

Пример 3.1. Найти А 1 , если А =

Решение: 1) Находим detA:

det A = = 2+3 = 5 ≠ 0

Пример 3.2. Определить, при каких значениях А существует ма­трица, обратная данной:

Решение: Всякая невырожденная матрица имеет обратную. Найдем определитель матрицы А:

∆A = = 3-0+2ℷ-12-0+2ℷ = 4ℷ — 9

Если 4λ – 9 ≠ 0, т. е. λ ≠ , то ΔA ≠0, т. е. матрица А невырожденная, имеет обратную.

Пример 3.3. Показать, что матрица А является обратной для В, если

Решение: Найдем произведение матриц A и В:

Аналогично В • A = Е. Следовательно, матрица А является обратной дня В.

Ранг матрицы

Рассмотрим матрицу А размера m х n.

Выделим и ней k прок и k столбцов (k ≤ min(m;n)). Из элемен­тов, стоящих на пересечении выделенных строк и столбцов, составим определитель k-го порядка. Все такие определители называются ми­норами этой матрицы. В матрице A пунктиром выделен минор 2-го порядка. (Заметим, что таких миноров можно составить • штук, где = — число сочетаний из n элементов по k.)

Наибольший из порядков миноров данной матрицы. отличных от нуля, называется рангомматрицы. Обозначается r, r(A) иди rang А.

Очевидно, что 0≤r≤min(m; n), где min(m; n) — меньшее из чисел m и n.

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

Пример 3.4. Найти ранг матрицы:

Решение: Все миноры 3-го порядка равны нулю. Есть минор 2-го порядка, отличный от нуля

= -15 ≠ 0. Значит, r(A) = 2. Базисный минор стоит на пересечении 2 и 3 строки с 1 и 3 столбцами.

Отметим свойства ранга матрицы:

1. При транспонировании матрицы ее ранг не меняется.

2. Если вычеркнуть из матрицы нулевой ряд, то ранг матрицы не изменится.

3. Ранг матрицы не изменяется при элементарных преобразованиях матрицы.

Ранг канонической матрицы равен числу единиц на главной диа­гонали. На этом основан одни из способов вычисления ранга матрицы.

Пример 3.5.Найти ранг матрицы

используя результаты примера 1.4.

Решение: В примере 1.4 показано,

Таким образом, ранг матрицы Aравен r(A) = 2.

СИСТЕМЫ ЛИНЕЙНЫХ УРАВНЕНИЙ

Основные понятия

Системой линейных алгебраических уравнений, содержащей m уравнений и п неизвестных, называется система вида

где числа aij, i = , j = называются коэффициентами системы, числа bi — свободными членами. Подлежат нахождению числа xn.

Такую систему удобно записывать в компактной матричной форме

Здесь А — матрица коэффициентов системы, называемая основной матрицей:

X = — вектор-столбец из неизвестных ,

B = — вектор-столбец из свободных членов

Произведение матриц A•X определено, так как в матрице Aстолб­цов столько же, сколько строк в матрице X (п штук).

Расширенной матрицей системы называется матрица А системы, дополненная столбцом свободных членов

Решением системы называется п значений неизвестных х1 = c1, x2 = c2, . хn= сn, при подстановке которых все уравнения системы обраща­ются в верные равенства. Всякое решение системы можно записать в виде матрицы-столбца

Система уравнений называется совместной, если она имеет, хотя бы одно решение, и несовместной, если она не имеет ни одного решения.

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

Решить систему — это значит выяснить, совместна она или не­совместна. Если система совместна, найти ее общее решение.

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

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

Система линейных уравнений называется однородной, если все сво­бодные члены равны нулю:

Однородная система всегда совместна, так как х1 = х2 = • • • = хn = 0 является решением системы. Это решение называется нулевым или тривиальным.

Дата добавления: 2020-01-14 ; просмотров: 81 ; ЗАКАЗАТЬ РАБОТУ

Математика в Gamedev по-простому. Матрицы и аффинные преобразования

Всем привет! Меня зовут Гриша, и я основатель CGDevs. Сегодня хочется продолжить тему математики в геймдеве. В предыдущей статье были показаны базовые примеры использования векторов и интегралов в Unity проектах, а сейчас поговорим о матрицах и аффинных преобразованиях. Если вы хорошо разбираетесь в матричной арифметике; знаете, что такое TRS и как с ним работать; что такое преобразование Хаусхолдера – то вы возможно не найдёте для себя ничего нового. Говорить мы будем в контексте 3D графики. Если же вам интересна эта тема – добро пожаловать под кат.

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

TRS матрица

Вторым важным понятием в компьютерной графике является TRS матрица. С помощью неё можно описать самые частые операции, используемые при работе с компьютерной графикой. TRS матрица – это композиция трёх матриц преобразования. Матрицы перемещения (Translation), поворота по каждой оси (Rotation) и масштабирования (Scale).
Выглядит она так.

Где:
Перемещение – это t = new Vector3(d, h, l).
Масштабированиеs = new Vector3(new Vector3(a, e, i).magnitude, new Vector3(b, f, j).magnitude, new Vector3(c, g, k).magnitude);

Поворот – это матрица вида:

А теперь перейдём чуть глубже к контексту Unity. Начнём с того, что TRS матрица – это очень удобная вещь, но ей не стоит пользоваться везде. Так как простое указание позиции или сложение векторов в юнити будет работать быстрее, но во многих математических алгоритмов матрицы в разы удобнее векторов. Функционал TRS в Unity во многом реализован и в классе Matrix4x4, но он не удобен с точки зрения применения. Так как помимо применения матрицы через умножение она может в целом хранить в себе информацию об ориентации объекта, а также для некоторых преобразований хочется иметь возможность рассчитывать не только позицию, а изменять ориентацию объекта в целом (к примеру отражение, которое в Unity не реализовано)

Все примеры ниже приведены для локальной системы координат (началом координат считается позиция GameObject’а, внутри которого находится объект. Если объект является корнем иерархии в юнити, то начало координат – это мировые (0,0,0)).

Так как с помощью TRS матрицы можно в принципе описать положения объекта в пространстве, то нам нужна декомпозиция из TRS в конкретные значения position, rotation и scale для Unity. Для этого можно написать методы-расширения для класса Matrix4x4

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

На этом плюсы юнити заканчиваются, так как матрицы в Unity очень бедны на операции. Для многих алгоритмов необходима матричная арифметика, которая в юнити не реализована даже в совершенно базовых операциях, таких как сложение матриц и умножения матриц на скаляр. Кроме того, из-за особенности реализации векторов в Unity3d, так же есть, ряд неудобств, связанных с тем, что вы можете сделать вектор 4х1, но не можете сделать 1х4 из коробки. Так как дальше пойдёт речь про преобразование Хаусхолдера для отражений, то сначала реализуем необходимые для этого операции.

По сложению/вычитанию и умножению на скаляр – всё просто. Выглядит достаточно громоздко, но ничего сложного тут нет, так как арифметика простая.

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

Преобразование Хаусхолдера

В поисках того, как отразить объект относительно какой-либо оси, я часто встречаю совет поставить отрицательный scale по необходимому направлению. Это очень плохой совет в контексте Unity, так как он ломает очень много систем в движке (батчинг, коллизии и др.) В некоторых алгоритмах это превращается в достаточно нетривиальные вычисления, если вам надо отразить не банально относительно Vector3.up или Vector3.forward, а по произвольному направлению. Сам метод отражения в юнити из коробки не реализован, поэтому я реализовал метод Хаусхолдера.

Преобразование Хаусхолдера, используется не только в компьютерной графике, но в этом контексте — это линейное преобразование, которое отражает объект относительно плоскости, которая проходит через «начало координат» и определяется нормалью к плоскости. Во многих источниках оно описано достаточно сложно, и непонятно, хотя его формула – элементарна.

Где H – матрица преобразования, I в нашем случае – это Matrix4x4. >
Тут пригодятся реализованные методы и запись получится очень компактной.

Важно: planeNormal должна быть нормализована (что логично), а также последней координатой n стоит 0, чтобы не было эффекта растяжения по направлению, так как оно зависит от длинны вектора n.

Теперь для удобства работы в Unity реализуем метод расширение для трансформа

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

Спасибо за внимание!

Читают сейчас

Похожие публикации

  • 19 июня 2020 в 22:57

Моя история создания мотивационного приложения (iOS и Andro > +28 18,3k 183 17

Генерация лабиринта алгоритмом Эллера в Unity

Экспорт Terrain’а из WorldMachin в Unity3D

Вакансии

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Комментарии 23

Ну с 17 км будет сантиметровая точность. Но вообще в Unity да — floating origin. Можно придумать какой угодно маппинг, но по своей сути — это floating origin. И сохранить значения PhysX физики не так сложно (ну проскочит один кадр или можно сделать ручную компенсацию)

В целом тут две основные причины почему рендер на double особого смысла не имеет. Если камера движется вместе с симуляцией, то с помощью тех же матриц компенсировать позиции чисто для рендера — не самая страшная задача. Дабл работает медленнее, так как просто процессору нужно больше регистров складывать. И скажем PhysX сам по себе работает с флотом. С точки зрения рендера такая точность не имеет смысла, так как объект на расстоянии 17 км от камеры или 18 км от камеры это в большинстве случаев и так, и так пару пикселей. Если нужна точность для расчёта самой симуляции и без PhysX (какая-нить жидкостная симуляция или просто математическая, а юнити для визуализации) то проще считать всё в дабле в своих методах, где нужна точность, а потом делать отображение модели симуляции во флот со сдвигом.

Тут не просто PhysX на это не рассчитан, а тут сразу целый ворох проблем:
1) Обычные видеокарты работают во флотах, погуглите цену видеокарт которые могут и даблы и флоты — это Квадры и Теслы.
2) PhysX вообще изначально затачивался под ускорение на GPU (см 1) и векторизацию (см далее), так шо да — там только флоты
3) SSE будет работать быстрее — вместо 2-х double будет отрабатываться 4 float (вообще цифры от балды, надо смотреть по конкретному процессору сколько у него FPU и какая у них разрядность, но в любом случае, процессор за инструкцию сможет отрабатывать вдвое больше флотов чем даблов)
4) Память и пропускная способность памяти.

Но это все верно для векторизованных операций, для скалярных операций нет никакой разницы (хотя за счёт выравнивания можно немного потерять для float).

Но в любом случае доя обычной ТрыДэ графики только флоты и ничего более. Даблы — это все же для научных вычислений (вот там я сталкивался с тем что и двойной точности может не хватить).

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

Да, согласен.
Но если самолёт летит над танком? :-)

Один юнит равный 100м в любом случае даст такую же ошибку флота, так как коичество значащих символов не изменится, а на вход PhysX получает флот, и там он округлится

а с точки зрения рендера такой диапазон чисел просто смысла не имеет

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

О математике: зависит от математики. Иногда авторы дают сущие трюизмы. Иногда авторы дают темы, настолько нерелевантные хабру, что я не знаю, что и говорить.

Позиции в сцене юнити для рендера и позиции в симуляции не обязаны совпадать. Абстрагировать симуляцию так, чтобы у тебя камера всегда находилась в (0,0,0) в юнити сцене, а остальное двигалось с поправкой на это — не супер большая проблема. Смысла нет, так как действительно важно расстояние между камерой и объектами. OpenGL если мне не изменяет память работает с интом и флотом (GLSL), а PhysX с флотом, то есть дабл округлится в этой точке, и мы получим тоже самое. Задача симуляции — не так часто встречается и легко обыгрывается, но на уровне движка её обыгрывать нет смысла, так как это приводит к не очевидному поведению.

По проводу тривиального забавно, как быстро профессионалы забывают, что такое быть новичком и вообще не осознавать для чего знать тот же метод Хаусхолдера. При том, что встанет задача распарсить любой формат у которого ось y в отличии от юнити направлена вниз, а сам формат хранит TRS (собственно формат LDraw про который я сейчас потихоньку пишу статью) и без матриц крякнешься думать, как это всё считать.

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

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

Потом постепенно может буду увеличивать сложность материала. Но условно если брать кватернионы, про них есть крутая огромная статья объясняющая что это, и вот её цель как раз таки научить. Цель же этого цикла показать — зачем читать эту огромную статью про кватернионы к примеру, и дать готовую реализацию каких-то простых компонент для примера, чтобы было ясно, как это можно использовать в Unity. В конкретно этой статье примера нет, так как про LDraw хочется написать отдельно

>> Смысл есть — если оба, и камера, и объект на 20км от центра, при этом рядом друг с другом, то неточность float, как я предполагаю, можно будет наблюдать вблизи. Хотя бы потому, что графический mesh точно так же поплывёт.

18 км — это максимальная дальность горизонта… в море, со смотровой вышки в 25 метров. 50 км — это уже с воздушного шара и это максимальная дистанция на которой человеческий глаз будет способен заметить пламя свечи… в полной темноте.
5 км — это то расстояние на котором поверхность Земли уже имеет заметное искривление для человеческого глаза, если игровая сцена больше, то это уже надо земной шарик симулить и это уже совершенно иной уровень игр :-)

Если не делать симуляции космических миров и не заниматься научными расчетам, то я если честно плохо понимаю откуда могут взяться эти десятки километров. Если уж говорить о симуляторах, типа DCS, Orbiter, Silent Hunter, то Юнити явно не движок выбора для таких игр. Хотя вон KSP сделан на Unity, там флоты и ничего, они как-то с этим справились (хотя глюки связанные с точностью там таки вылазиют).

Яковлев Як-9, обычный, рядовой истребитель, 1943 год.
Максимальная скорость 600км/ч на высоте 4000м.
16км — это меньше двух минут.
Для 1945 нормальные скорости 680-720км/ч.
Играть в «NATOвские истребители не могут в Эстонии превысить скорость звука, потому, что территория настолько мала и кончается слишком быстро для разгона» не охота.

С другой стороны интересно посмотреть, как это всё будет летать над танками, среди которых ультра-максимальная скорость 72км/ч. Такая же для обычного эсминца.
Скорость вне дороги 16-20км/ч, что потребует до 60 минут на 16км.
Оно, конечно, если бы я хотел поэкспериментировать с самолётиками и только — это одно.

А это вот о том что я писал — уже полноценный симулятор Вы хотите. На мой взгляд это уже не на Unity надо делать. DCS, Orbiter, Ил-2, Тундра, Элит, Стар Ситтезен, и даже такие RTS, как Steel division (там тоже территории огромные) — все на самописных движках (или очень сильно переколбашенных) и писали их очень-очень пряморукие Си++ погроммисты. И эти игры очень сильно отличаются от 99% типичных.

Т.е. либо все должно происходить в масштабах максимум 5км х 5км, а все скорости и дальности стрельбы делать в логарифмическом масштабе. Например, реально танки не 70-80 км/ч раскатывают по полю боя — это вообще что-то запредельно, раскатывают по полю боя они куда медленнее. В добавок они же должны совместно с пехотой работать, а это сразу ограничение на среднею скорость. Так что на все эти 40+ км/ч — это на марше по ровному шоссе можно рассчитывать. А например, у сверхзвукового F-16 крейсерская скорость чойт порядка 0.68..0.84 Маха (скорость звука зависит от высоты, как и крейсерская и максимальная скорость самолета), т.е. 230..280 м/с, что не сильно быстрее того же Яка-9 (и даже почти как у пассажирского Боинга), у которого эти 600 км/ч (

170 м/с, т.е. примерно 0.5 Маха) бывают только по праздникам и на большой высоте (4 км и более), так то реальный диапазон скоростей у Як-9 которым он будет оперировать на практике будет думаю где-то в районе 150-300 км/ч (в общем пролетать на нем карту 5×5 игроки в среднем будут за минуту-две, что уже дофига), а реальный оперируемый диапазон скоростей у F-16 будет начинается где-то эдак с 300 км/ч (примерно с 80 м/с), а дальше уже по ситуации, а все эти 1000+ км/ч и сверхзвуки — это на форсаже. Т.е. даже у реальных объектов рядовые цифры скромнее. Ещё есть ограничения и на скорость восприятия информации человеком. В общем если сильно не упирать на симуляция, то можно немного подрезать максимальные скорости или сделать масштаб нелинейным.

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

Либо придется много страдать и костылять. А страдать придётся сильно. На процессоре с использованием SIMD инструкций производительность в даблах упадёт вдвое по сравнению с сингл, а на GPU (а главная фишка того же PhysX, то что он умеет юзать видеокарту для ускорение) производительность упадёт совсем круто и это будет куда больше чем в 2 раза, т.к. они (именно геймерские сегмент) заточены исключительно под сингл-прецижен, да ещё и память не резиновая у них. Собственно с графоном тоже могут начать вылазить косяки страдать гигантоманией (не уверен).

В общем без страданий и костылей в Unity3D чуда не случится. У разработчиков KSP — получилось, но если судить по тому как долго шла разработка и какие весёлые баги я там наблюдал как игрок, то костылей там немерено было и все это было через боль, страдания и унижения. wiki.kerbalspaceprogram.com/wiki/Deep_Space_Kraken/ru

Просто 6-7 значимых деесятичных знаков (сингл) вообще-то вполне себе хватает для большинства прикладных задач. 14-15 значимых знаков (дабл) — это уже уровень научных вычислений. Но если начать симулить солнечную систему в реальном масштабе (есть такая игра как Rodina, там нечто подобное), то тут и даблов может не хватит, но я с таким сталкивался всего пару раз в очень спецефических задачах.

Да. Похоже что так и это пичалька. Из личного опыта — был у меня как-то проект под который внезапно расширялся штат и как раз искал программиста в первую очередь и из gamedev (кстати и сейчас ищут я, но уже не ко мне и там совсем все жёстко, как раз с ТрыДэ графоном). Шерстили геймдеве И
Именно из того расчёта, что с математикой они там точно дружат, а преобразование Хаусхолдера и кватернионы (на самом деле я сам это слово пишу часто с ошибкой) для него не будут словами из заклинания по вызову Ктулху.
Ну перебрать пришлось 50+ человек, откопал 2-3 (и таки с геймдев опытом), но реально удовлитворительный математический бэкграунд был только у одного. Я сам на самом деле с детства не люблю матрицы-шматрицы и все эти комплексные и гиперкомплексные числа, но ситуация чойт совсем пичалька если честно — математику не знают и самое главное учить не хотят. И судя по рейтингу Вашего сообщения ещё и математикофобией народ страдает.

Самое забавное тут пишут про трюизмы, но я уже сбился со счета сколько раз народ спрашивает как реализовать тот же PID регулятор на Unity (даже статью тут запилил ради этого), хотя это уже давно пережеванная и избитая тема. Так что любая практическая около математическая статья полезна — у всех есть пробелы в знаниях, а человек хорошо помнит только то, чем недавно занимался… но вот рейтинги таких статей…

Элементарные преобразования матрицы.

К элементарным преобразованиям матрицы относятся:


1. Изменение порядка строк (столбцов).

2. Отбрасывание нулевых строк (столбцов).

3. Умножение элементов любой строки (столбца) на одно число.

4. Прибавление к элементам любой строки (столбца) элементов другой строки (столбца), умноженных на одно число.

Системы линейных алгебраических уравнений слу (Основные понятия и определения).

1. Системой m линейных уравнений с n неизвестными называется система уравнений вида:

2. Решением системы уравнений (1) называется совокупность чисел x1, x2, … , xn, обращающая каждое уравнение системы в тождество.

3. Система уравнений (1) называется совместной, если она имеет хотя бы одно решение; если система не имеет решений, она называется несовместной.

4. Система уравнений (1) называется определенной, если она имеет только одно решение, и неопределенной, если у нее более одного решения.

5. В результате элементарных преобразований система (1) преобразуется к равносильной ей системе (т.е. имеющей то же множество решений).

К элементарным преобразованиям систем линейных уравнений относятся:

1. Отбрасывание нулевых строк.

2. Изменение порядка строк.

3. Прибавление к элементам любой строки элементов другой строки, умноженных на одно число.

Методы решения систем линейных уравнений.

1) Метод обратной матрицы (матричный метод) решения систем n линейных уравнений с n неизвестными.

Системой n линейных уравнений с n неизвестными называется система уравнений вида:

Запишем систему (2) в матричном виде, для этого введем обозначения.

Матрица коэффициентов перед переменными:

X = ‒ матрица переменных.

В = ‒ матрица свободных членов.

Тогда система (2) примет вид:

Решив уравнение, получим:

1) │А│= 15 + 8 ‒18 ‒9 ‒12 + 20 = 4  0 матрицаА -1 существует.

Элементарные преобразования матриц

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

I. Перестановка двух столбцов (строк) матрицы. Пусть дана матрица [math]A[/math] размеров [math]m\times n[/math] . Для перестановки двух столбцов (i-гo и j-го) данной матрицы достаточно умножить ее справа на квадратную матрицу [math]S_<<>_>^<<>^<\Pi>>[/math] n-го порядка вида

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

Чтобы поменять местами две строки (i-ю и j-ю) данной матрицы [math]A[/math] , достаточно умножить ее слева на элементарную матрицу [math]S_<<>_>^<\land>[/math] m-го порядка вида

Эта матрица получена из единичной матрицы m-го порядка при помощи перестановки i-й и j-й строк.

Пример 1.33. Дана матрица [math]A= \left(\begin1&2&3&4\\2&4&5&6\\3&5&6&7\end\right)[/math] . Показать, что умножение данной матрицы слева на матрицу [math]S_1= \left(\begin 1&0&0\\0&0&1\\0&1&0 \end\right)[/math] приводит к перестановке 2-й и 3-й строк матрицы [math]A[/math] , а умножение данной матрицы [math]A[/math] справа на матрицу [math]S_2= \left(\begin 1&0&0&0\\ 0&0&0&1\\ 0&0&1&0\\ 0&1&0&0 \end\right)[/math] приводит к перестановке 2-го и 4-го столбцов.

Матрица [math]A[/math] имеет размеры [math]3\times4[/math] , т.е. [math]m=3,

n=4[/math] . Матрица [math]S_1[/math] получена из единичной матрицы третьего порядка при помощи перестановки 2-й и 3-й строк. Находим произведение матрицы [math][/math] на матрицу [math]S_1[/math] слева:

Сравнивая результат с исходной матрицей [math]A[/math] , замечаем, что 2-я и 3-я строки поменялись местами.

Матрица [math]S_2[/math] получена из единичной матрицы четвертого порядка при помощи перестановки 2-го и 4-го столбцов. Умножим матрицу [math]A[/math] справа на [math]S_2:[/math]

Сравнивая результат с исходной матрицей [math]A[/math] , замечаем, что 2-й и 4-й столбцы поменялись местами.

II. Умножение всех элементов одного столбца (строки) матрицы на одно и то же число, отличное от нуля. Пусть дана матрица [math]A[/math] размеров [math]m\times n[/math] . Для умножения всех элементов одного столбца (i-го) данной матрицы на одно и то же число [math]\lambda[/math] , отличное от нуля, достаточно умножить матрицу [math]A[/math] справа на элементарную матрицу:

Эта квадратная матрица n-го порядка получена из единичной матрицы n-го порядка умножением i-го столбца на число [math]\lambda[/math] .

Чтобы умножить все элементы i-й строки данной матрицы на одно и то же число [math]\lambda[/math] , отличное от нуля, достаточно умножить матрицу [math]A[/math] слева на элементарную матрицу вида:

Эта квадратная матрица m-ro порядка получена из единичной матрицы m-го порядка умножением i-й строки на число [math]\lambda[/math] .

Матрица [math]A[/math] имеет размеры [math]2\times3[/math] , т.е. [math]m=1,

n=3[/math] . Матрица [math]S_1[/math] получена из единичной матрицы второго порядка умножением первой строки на число 2. Матрица [math]S_2[/math] получена из единичной матрицы третьего порядка умножением 3-го столбца на число 3. Находим произведения:

что и требовалось показать.

III. Прибавление к элементам одного столбца (строки) соответствующих элементов другого столбца (строки), умноженных на одно и то же число. Пусть дана матрица [math]A[/math] размеров [math]m\times n[/math] . Чтобы прибавить к одному столбцу (i-му) соответствующие элементы другого столбца (j-го), умноженные на одно и то же число [math]\lambda[/math] , достаточно умножить матрицу [math]A[/math] справа на элементарную матрицу вида:

Эта квадратная матрица n-го порядка получена из единичной матрицы n-го порядка в результате прибавления к i-му столбцу соответствующих элементов j-го столбца, умноженных на число [math]\lambda[/math] .

Чтобы прибавить к одной строке (i-й) соответствующие элементы другой строки (j-й), умноженные на одно и то же число [math]\lambda[/math] , достаточно умножить матрицу [math]A[/math] слева на элементарную матрицу вида:

Эта квадратная матрица m-го порядка получена из единичной матрицы m-го порядка прибавлением к элементам i -й строки соответствующих элементов j-й строки, умноженных на число [math]\lambda[/math] .

Пример 1.35. Дана матрица [math]A=\begin1&2&3\\2&3&4\end[/math] . Показать, что умножение данной матрицы слева на матрицу [math]S_1=\begin1&0\\-2&0\end[/math] приводит к прибавлению к элементам второй строки соответствующих элементов первой строки, умноженных на (-2).

Матрица [math]A[/math] имеет размеры [math]2\times3[/math] , т.е. [math]m=2,

n=3[/math] . Матрица [math]S_1[/math] получена из единичной матрицы второго порядка путем прибавления к элементам 2-й строки соответствующих элементов 1-й строки, умноженных на число (-2). Находим произведение:

что и требовалось показать.

Приведение матрицы к ступенчатому виду (методом Гаусса) или к простейшему виду (методом Гаусса-Жордана) сводится к последовательному умножению данной матрицы на элементарные матрицы.

Пример 1.36. Привести матрицу [math]A=\begin1&2&3\\2&4&5\end[/math] к простейшему виду 2 4 5 при помощи умножения на элементарные матрицы.

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

На первом шаге ко второй строке прибавляли первую, умноженную на (- 2). Этому преобразованию соответствует умножение матрицы [math]A[/math] слева на матрицу [math]S_1=\begin1&0\\-2&1\end[/math] (см. пример 1.35):

Затем ко второму столбцу прибавили первый, умноженный на (-2), а к третьему — первый, умноженный на (-3). Эти действия соответствуют последовательному умножению данной матрицы справа на матрицы

Матрица [math]S_2[/math] получена из единичной матрицы третьего порядка путем прибавления к элементам 2-го столбца соответствующих элементов 1-го столбца, умноженных на число (-2). Матрица [math]S_3[/math] получена из единичной матрицы третьего порядка путем прибавления к элементам 3-го столбца соответствующих элементов 1-го столбца, умноженных на число (-3). Находим произведения

Последний шаг — умножение последнего столбца на (-1) и перестановка его на место второго. Этим действиям соответствует последовательное умножение преобразуемой матрицы справа на матрицы

Матрица [math]S_4[/math] получена из единичной матрицы третьего порядка путем умножения элементов 3-го столбца на число (-1). Матрица [math]S_5[/math] получена из единичной матрицы третьего порядка при помощи перестановки 2-го и 3-го столбцов. Находим произведения

Таким образом, исходная матрица [math]A[/math] с помощью умножения на элементарные матрицы приведена к простейшему виду (см. рис. 1.6).

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

При помощи элементарных преобразований эта матрица в примере 1.30 была приведена к ступенчатому виду, причем преобразования выполнялись только над ее строками. Запишем последовательность преобразований, представляя их как умножения матрицы [math]A[/math] слева на элементарные матрицы. Первое преобразование — прибавление ко второй строке первой, умноженной на (-1), — соответствует умножению матрицы [math]A[/math] слева на матрицу

Второе преобразование — прибавление к третьей строке первой, умноженной на (-2), что соответствует умножению матрицы [math]S_1A[/math] слева на матрицу

Третье преобразование — прибавление к четвертой строке первой, умноженной на (-4), что соответствует умножению матрицы [math]S_2S_1A[/math] слева на матрицу

Далее были использованы следующие преобразования: к третьей строке прибавляли вторую; умножили третью строку на 0,5; к четвертой строке прибавили третью, умноженную на (-2). Этим преобразованиям соответствует умножение матрицы [math]S_3S_2S_1A[/math] слева на матрицы:

Действительно, выполняя умножения, получаем ступенчатый вид

Приведение матрицы к простейшему виду

Указанные ранее свойства элементарных преобразований можно переформулировать следующим образом:

1. Для любой матрицы [math]A[/math] существует набор таких элементарных матриц [math]S_1,S_2,\ldots,S_p[/math] вида (1.2), (1.4), (1.6), что матрица [math]S_p\cdots S_2S_1A[/math] будет иметь ступенчатый или даже упрощенный вид. В частности, если матрица [math]A[/math] — квадратная, то матрица [math]S_p\cdots S_2S_1A[/math] будет верхней треугольной.

2. Для любой матрицы [math]A[/math] существуют набор таких элементарных матриц [math]S_1,S_2,\ldots,S_p,\,S’_1,\ldots,S’_q[/math] вида (1.1)–(1.6), что матрица [math]S_p\cdots S_2S_1AS’_1S’_2\cdots S’_q[/math] будет иметь простейший вид.

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

Теорема 1.2 о приведении матрицы к простейшему виду. Для любой матрицы [math]A[/math] размеров [math]m\times n[/math] существуют такие элементарные матрицы [math]S[/math] и [math]T[/math] m-го и n-го порядков соответственно, что матрица [math]\Lambda=S\cdot A\cdot T[/math] имеет простейший вид (см. рис. 1.6):

где [math]0\leqslant r\leqslant\min\[/math] . Матрицы [math]S[/math] и [math]T[/math] будем называть элементарными преобразующими матрицами .

Алгоритм приведения матрицы к простейшему виду

Для приведения матрицы [math]A[/math] к простейшему виду (1.7) и нахождения элементарных преобразующих матриц [math]S[/math] и [math]T[/math] нужно выполнить следующие действия.

1. Приписав к матрице [math]A[/math] (размеров [math]m\times n[/math] ) справа и снизу единичные матрицы [math]E_m[/math] и [math]E_n[/math] соответственно, составить блочную матрицу:

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

2. При помощи элементарных преобразований, выполняемых над строками и столбцами блочной матрицы, привести ее левый верхний блок [math]A[/math] к простейшему виду (1.7). При этом блочная матрица преобразуется к виду

где [math]\Lambda[/math] — матрица простейшего вида, а [math]S[/math] и [math]T[/math] — искомые преобразующие матрицы, связанные с матрицей [math]A[/math] равенством (1.7).

Действительно, элементарные преобразования (указанные в п.2 алгоритма) относятся к первым [math]m[/math] строкам и первым [math]n[/math] столбцам блочной матрицы (1.8). Этим преобразованиям соответствует умножение матрицы (1.8) слева на матрицу [math]\beginS&\!\!\vline&\!\! O\\ \hline O&\!\!\vline&\!\!E_n\end[/math] и справа на матрицу [math]\beginT&\!\!\vline&\!\! O\\ \hline O&\!\!\vline&\!\!E_m\end[/math] , где символом [math]O[/math] обозначены нулевые матрицы соответствующих размеров. Выполняя умножение блочных матриц, получаем

Эта матрица совпадает с (1.9), если [math]\Lambda=S\cdot A\cdot T[/math] . Другими словами, если в результате п.2 алгоритма левый верхний блок [math]A[/math] матрицы (1.8) приведен к простейшему виду [math]\Lambda[/math] , то в других блоках матрицы (1.9) получаем искомые преобразующие матрицы [math]S[/math] и [math]T[/math] .

Пример 1.38. Привести матрицу [math]A=\begin1&-1&2&0\\-1&2&-3&1\\0&1&-1&1\end[/math] к простейшему виду. Найти элементарные преобразующие матрицы [math]S[/math] и [math]T[/math] , удовлетворяющие равенству (1.7).

Припишем к матрице [math]A[/math] справа и снизу единичные матрицы соответствующих размеров

Возьмем в качестве ведущего элемент [math]a_<11>=1\ne0[/math] . Ко второй строке прибавим первую:

Ко второму столбцу прибавим первый, к третьему — первый, умноженный на (-2):

Теперь возьмем в качестве ведущего элемент [math]a_<22>=1\ne0[/math] . К третьей строке прибавим вторую, умноженную на (-1):

К третьему столбцу прибавим второй, а к четвертому столбцу — второй, умноженный на (-1):

В результате преобразований на месте исходной матрицы [math]A[/math] получена матрица

простейшего вида (1.7), а на месте единичных матриц — элементарные преобразующие матрицы

Проверим равенство [math]\Lambda=S\cdot A\cdot T[/math] , вычисляя произведение

1. Элементарные преобразующие матрицы [math]S[/math] и [math]T[/math] находятся неоднозначно, так как зависят от выбранной последовательности преобразований.

2. Если требуется найти одну из элементарных преобразующих матриц, например, [math]S[/math] , то достаточно применить рассмотренный выше алгоритм к матрице [math](A\mid E_m)[/math] . Выполняя элементарные преобразования над строками матрицы [math](A\mid E_m)[/math] и над первыми ее столбцами, входящими в левый блок, получим матрицу [math](\Lambda\mid S)[/math] , где [math]\Lambda[/math] — матрица простейшего вида, а [math]S[/math] — искомая матрица. Если требуется найти одну матрицу [math]T[/math] , то выполняем преобразования матрицы [math]\begin\dfrac\end\sim \begin\dfrac<\Lambda>\end[/math] .

3. Учитывая свойство 1 элементарных преобразований, теорему 1.1 можно сформулировать следующим образом: для любой матрицы [math]A[/math] размеров [math]m\times n[/math] существует такая элементарная матрица [math]S[/math] m-го порядка, что матрица [math]SA[/math] имеет упрощенный вид (см. рис. 1.5).

Для нахождения матрицы [math]S[/math] нужно составить блочную матрицу [math](A\mid E_m)[/math] , затем при помощи элементарных преобразований, выполняемых только над строками матрицы [math](A\mid E_m)[/math] , привести ее левый блок [math]A[/math] к упрощенному виду. При этом блочная матрица преобразуется к виду [math](\Lambda\mid S)[/math] , где , [math]\Lambda[/math] — матрица упрощенного вида (см. рис. 1.5), а [math]S[/math] — искомая элементарная матрица.

4. Диагональная матрица является элементарной.

Пример 1.39. Найти элементарную преобразующую матрицу [math]S[/math] , приводящую матрицу [math]A=\begin1&-1&2&0\\-1&2&-3&1\\0&1&-1&1\end[/math] к упрощенному виду (см. рис. 1.5).

Припишем к матрице [math]A[/math] справа единичную матрицу 3-го порядка.

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

Левый блок [math]\Lambda[/math] матрицы [math]\begin\Lambda\mid S\end[/math] имеет упрощенный вид, а правый блок -искомая матрица [math]S[/math] . Проверим равенство [math]\Lambda=SA[/math] , вычисляя произведение

Матрица [math]SA[/math] действительно имеет упрощенный вид.

Линейные преобразования для «чайников»

На двух ближайших уроках я вкратце расскажу вам ещё об одном разделе высшей алгебры, который касается линейных преобразований… и тут сразу, заметьте, напрашивается добавить «преобразований чего-то». Тема обширная, тема интересная, и моя скромная задача состоит в том, чтобы в доступной форме донести до читателя её основы. В этой связи статья будет посвящена не только абстрактным алгебраическим вопросам, но и наполнена богатым геометрическим содержанием. Кроме того, сегодня мы обобщим такое важное понятие как вектор, имеющий к сему содержанию лишь частное отношение.

Есть ли среди вас начинающие изучать высшую математику? …хотя, чего тут спрашивать, конечно же, есть… – не смогли ведь пройти мимо заголовка! …Ну вот вы мне и попались, голубчики =) Для эффективного изучения материала нужно знать основы алгебры, аналитической геометрии, а также уметь выполнять действия с матрицами. На самом деле всё довольно просто, но если у вас возникнут вопросы (или уже встретился какой-то непонятный термин), то, пожалуйста, воспользуйтесь ссылками.

Обобщение понятия вектора. Векторное пространство

Ожидание казни хуже самой казни и поэтому лучше сразу почувствовать леденящий холодок настоящей алгебры =) Начнём с обещанного разбора полётов, а именно с понятия вектора. Давайте вспомним, что мы о нём знаем. Палочка со стрелочкой, знакомая ещё из школы. В высшей математике эта палочка «поднялась» до свободного вектора плоскости и пространства. Хорошо…. Далее слово «вектор» встретилось нам в ходе изучения матриц. Так, например, матрицу «один на два» мы называем вектором-строкой, а матрицу «три на один» – вектором-столбцом. Это векторы? Да, это векторы! Причём эти векторы сами по себе не имеют никакого отношения к геометрии. В своих статьях по алгебре я неоднократно оговаривался, что «данный вектор нужно понимать в алгебраическом смысле» и на уроке о ранге матрицы привёл краткую теоретическую справку по этому поводу: вектор – это упорядоченный набор чисел (обычно действительных)… и далее по тексту. А вот это уже более близко к истине: здесь, скажем, двумерный вектор понимается именно как упорядоченная пара чисел, которую, в частности можно интерпретировать, как координаты геометрического вектора. Или как решение системы линейных уравнений (см., например, статью об однородных системах). Или ещё как-нибудь.

Но и это частность! На самом деле в определённом контексте векторами являются матрицы, многочлены, функции и т.д. …и даже наши «обычные» действительные числа! А почему нет? Пожалуйста: множество векторов (никаких геометрических ассоциаций!), имеющих в наборе одно действительное число .

Так что же такое вектор? Что объединяет все эти случаи?

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

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

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

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

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

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


В курсе линейной алгебры проводится скрупулезная проверка различных множеств на предмет того, образуют ли они линейное пространство. И если удастся определить сложение и умножение на скаляр медведей на велосипеде и доказать для данных операций выполнение указанных 8 аксиом, то векторами будут и эти объекты =)

А теперь к основной теме урока:

Что такое линейное преобразование?

Если в линейном пространстве каждому вектору по некоторому правилу поставлен в соответствие вектор этого же пространства, то говорят, что в данном пространстве задана векторная функция векторного аргумента: (во избежание разночтений с другими математическими записями скобки нередко опускают: ).

Данная функция называется линейным преобразованием, если для неё выполнены пресловутые свойства линейности, с которыми вы ещё не раз столкнётесь в ходе изучения высшей математики:

,
, где – произвольные векторы данного пространства, а – действительное число.

Линейное преобразование также называют линейным оператором.

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

Никакой геометрии. – то, что я сформулировал в статье о ранге матрицы, называется
-мерным арифметическим векторным пространством, и сейчас мы имеем дело с частным арифметическим пространством размерности 2.

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

Здесь мы воспользовались дистрибутивностью умножения на скаляр относительно сложения векторов (одна из аксиом векторного пространства)

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

Читателям, которым предстоит изучать теорию высшей алгебры, следует привыкнуть к таким доказательствам. Беспощадно формально, но, как сказали бы древние римляне, Dura algebra sed algebra =)

Таким образом, – это линейное преобразование.

Разумеется, далеко не всякий оператор является линейным, и в других источниках информации можно найти массу примеров, как на удачную, так и неудачную проверку различных преобразований на линейность. И со строгостью доказательств на практике обычно всё попроще, …хотя, тут от преподавателя зависит – и по-хорошему, в математике ещё нужно обосновать, почему «ноль не равен единице».

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

Если задан какой-либо базис, то линейное преобразование удобнее представить в матричном виде. Как записать оператор в виде матрицы? На этот счёт существует общее правило: чтобы записать матрицу линейного преобразования в -мерном базисе нужно последовательно и строго по порядку применять данный оператор к базисным векторам, а результаты заносить в столбцы матрицы (слева направо).

Наш случай элементарен: сначала применим линейное преобразование к первому базисному вектору: и запишем результат в 1-й столбец: . Затем «обрабатываем» 2-й орт: и заносим полученные координаты во 2-й столбец:

– матрица линейного преобразования в базисе .

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

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

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

Линейное преобразование называется преобразованием подобия или гомотетией, причём:

– если , то речь идёт об однородном растяжении (увеличении) объектов плоскости в раз;
– если – то о сжатии (уменьшении) в раз;
– если , то преобразование тождественно (ничего не меняет).
И если по модулю меньше нуля, то дополнительно к растяжению/сжатию/неизменности векторы меняют направление, а точки отображаются симметрично относительно начала координат.

При имеет место так называемое нулевое преобразование.

Следует отметить, что на прикладном и «любительском» уровне линейные преобразования чаще всего как раз и ассоциируются именно с геометрическими преобразованиями. Рассмотрим ещё несколько популярных примеров по теме, и, чтобы разнообразить серые геометрические будни, мысленно нарисуем на координатной плоскости кошачью морду. Можно и не мысленно =)

…Представили? Нарисовали? Отлично!

Преобразование растягивает объекты плоскости по направлению вектора (горизонтали) в 2 раза, после чего кот Леопольд радует нас своей широкой-широкой улыбкой!

…хотя у многих, наверное, не кот… да и не факт, что с улыбкой… – как говорится, у каждого в голове своя морда =)

И в самом деле, преобразуем точку :
– «иксовая» координата увеличилась в 2 раза, а «игрековая» – не изменилась.

Преобразование сожмёт кота по горизонтали в 3 раза. Желающие могут по ходу объяснений приготовить мясорубку тестировать для рассматриваемых матриц различные векторы и точки. Читателям с маломальскими навыками матричного умножения не составит особого труда делать это устно.

Преобразование вытянет все ненулевые объекты плоскости по направлению вектора (по вертикали) в полтора раза. Это будет очень удивлённый кот.

Дополнительные знаки «минус» приведут к зеркальному отображению объектов (относительно оси ординат либо начала координат).

– образно говоря, «челюсть налево, лоб направо». Это преобразование называется перекосом или сдвигом плоскости в направлении вектора (в данном случае).

– данное преобразование поворачивает векторы системы против часовой стрелки на угол .

И, наконец, венчает все эти метаморфозы ещё один лохматый пример:
преобразование переводит единичный квадрат с вершинами в параллелограмм с вершинами .

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

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

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

В некотором аффинном базисе задано линейное преобразование . Найти образ точки . Используя обратное преобразование, выполнить проверку.

Решение: потихоньку нагружаю вас терминологией: образ – это то, что должно получиться в результате преобразования. В данном случае, очевидно, должна получиться некоторая точка . Исходная точка , соответственно, является прообразом.

! Надеюсь, все понимают, что штрихи в данном контексте не имеют никакого отношения к производным.

Образы векторов и точек мы уже неоднократно находили выше:

Таким образом, линейное преобразование перевело точку в точку .

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

«Развернём» уравнение в привычном порядке:

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

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

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

– получены координаты исходной точки , что и требовалось проверить.

Ответ:

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

Творческая задача для самостоятельного решения:

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

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

Даны два линейных преобразования:

Спокойно, спокойно, сейчас во всём разберёмся…

Средствами матричного исчисления найти преобразование, выражающее через .

Решение: и как раз первое, что здесь можно сказать – это отсутствие информации о характере векторов . Известно только, что они заданы в некотором базисе, ибо матрица линейного преобразования НЕ МОЖЕТ существовать без базиса (т.к. она порождается базисными векторами). Сам базис нам тоже не известен, но для решения задачи информация о нём и не нужна.

Тем не менее, для пущего понимания предположим, что все дела происходят в обычной декартовой системе координат . И, чтобы не прослыть живодёром, я рассмотрю 3D-модель кота Леопольда =)

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

Данный оператор определённым образом преобразует все векторы (а значит и точки) пространства. Геометрически это означает, что кот Леопольд, оказывается, например, сплющенным (не знаю, не проверял).

Теперь ВНИМАТЕЛЬНО записываем матрицу второго преобразования: (здесь существует немалый риск поставить ноль не там где нужно). Данное преобразование переводит векторы в образы , в результате чего «сплющенный кот», скажем, растягивается вдоль какой-нибудь плоскости.

Аналогично – запишем преобразование в матричном виде:
или:

По условию, нужно найти результирующее (композиционное) преобразование, которое нам сразу даст «сплющенного и растянутого Леопольда». Подставим в уравнение :

Всё оказалось до безобразия просто – главное, матрицы перемножить в правильном порядке. Вычислим матрицу композиционного преобразования:

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

Осуществим матричное умножение в правой части:

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

Выполним проверку. Для этого подставим уравнения , левой системы (см. условие) в правую часть каждого уравнения 2-й системы:

Что и требовалось проверить.

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

Ответ:

Как пользоваться этой системой? Очень просто – берём например, вектор и тупо подставляем его координаты:
– таким образом, он превратился в вектор .

Более академичный способ – использование матричного уравнения .

Энтузиасты могут смоделировать деформацию кота Леопольда с помощью специализированного программного обеспечения и отправить мне картинку, которую я обязательно опубликую. Мне и самому интересно, что же там с ним на самом деле произошло =)

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

«Плоский» случай для самостоятельного решения:

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

Найти образ вектора двумя способами:

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

Был велик соблазн вас запутать, но всё же я воздержался. Однако на практике нужно иметь в виду следующее:

– системы запросто могут быть переставлены местами;

– условие задачи может требовать выразить через и тогда потребуется дополнительно находить обратную матрицу результирующего преобразования;

В этой связи очень важно РАЗОБРАТЬСЯ в сути задания, и если что-то осталось недопонятым, обязательно перечитайте объяснения ещё раз – не лишним будет даже порисовать.

А сейчас переходим к вопросу, который назревал в течение всего урока:

Матрица линейного преобразования в различных базисах

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

Но ведь на «школьном» базисе свет клином не сошёлся! Ничто нам не мешает перейти к произвольному базису , где это же линейное преобразование, очевидно, выразится другой матрицей. Но сам-то оператор не изменится – он будет по-прежнему увеличивать векторы плоскости в 2 раза. Таким образом, справедливо следующее утверждение, которое по существу уже было озвучено ранее:

Одно и то же линейное преобразование в разных базисах в общем случае имеет РАЗНЫЕ матрицы.

И следующие две задачи как раз посвящены этому вопросу:

В базисе задано линейное преобразование . Найти матрицу данного преобразования в базисе , если

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

, где – матрица перехода от базиса к базису .

Составляется она просто: берём вектор и «укладываем» коэффициенты его разложения (внимание!) в 1-й столбец матрицы: . Затем рассматриваем вектор и заносим коэффициенты его разложения во 2-й столбец:

Внимание! Базисные векторы, в данном случае векторы , следует «перебирать» строго по порядку!

Остальное дело техники. Находим обратную матрицу:

И, наконец, матрицу рассматриваемого линейного преобразования в новом базисе:

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

Ответ:

Ещё раз повторим смысл задания: само линейное преобразование не поменялось – оно по-прежнему растягивает ненулевые объекты плоскости вдоль «старого» вектора в 2 раза и не деформирует их в направлении вектора , но в новом базисе матрица данного преобразования уже другая. И вы видите её в ответе.

Очевидно, что найденная матрица задаёт обратное преобразование, т.е. выражает старые базисные векторы через новые. Аккуратно «транспонируем» столбцы матрицы в коэффициенты соответствующей системы: . Таким образом, при желании всегда можно вернуться к старому базису: . Обратная формула следует из простых логических соображений, но её можно вывести и формально – разрешив матричное уравнение относительно .

Иногда матрицы и называют подобными.

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

Трехмерный случай для самостоятельного решения:

Найти матрицу линейного преобразования в базисе , где , , , если она задана в базисе .

Пожалуйста, не путайте это задание с Примером № 3 – по первой оглядке здесь тоже какие-то похожие равенства, тоже штрихи, но смысл совершено другой. Если там шла речь о двух линейных преобразованиях и взаимосвязи координат векторов, то здесь – об одном и том же преобразовании и взаимосвязи векторов двух базисов.

Краткое решение и ответ совсем рядом.

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

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

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

Решения и ответы:

Пример 2: Решение: найдём матрицу обратного преобразования:
(см. урок. Как найти обратную матрицу)
Найдём прообразы:

Ответ:

Пример 4: Решение: запишем матрицы преобразований:

1) Последовательно применим к вектору преобразования и :

2) Найдём результирующее преобразование:

Таким образом:

Ответ: (нулевой вектор)

Пример 6: Решение: Решение: Используем формулу . Запишем матрицу перехода к новому базису:

Найдём матрицу обратного перехода:

Вычислим:

Ответ:

Илон Маск рекомендует:  Что такое код zip_close
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL