Линейные отображения

Линейные отображения#

Матрицы#

Мы рассматриваем матрицу размером \(m × n\):

\([ A = \begin{pmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{pmatrix} ]\)

Которая представляет собой двумерное распределение элементов из множества K. Выбирая столбцы а(1), а(2)… a(n), мы записываем ее как:

\([ A = \begin{pmatrix} a_1 & a_2 & \cdots & a_n \end{pmatrix} ]\)

Элемент \(a(i,j)\) в пересечении \(i\)-ой строки и \(j\)-го столбца называется \((i, j)\)-элементом матрицы \(A\). В частности, матрица формы \((n, n)\) с одинаковым количеством строк и столбцов называется квадратной матрицей порядка n, а ее \((i, i)\)-элементы \(a(i, i)\) \((i = 1, 2...n)\) называются диагональными элементами. Квадратная матрица называется диагональной, если все ее элементы, кроме диагональных, равны нулю. Две матрицы \(A\) и \(B\) равны только в том случае, если они имеют одинаковую форму и соответствующие элементы равны.

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

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

Представим, у нас есть линейное отображение \( f : V \to W \) между пространствами \( V \) и \( W \). Мы хотим выразить \( y = f(x) \), где \( x \) и \( y \) - векторы.

Если \( X \) и \( Y \) - базисы для \( V \) и \( W \), и \( f \) переводит базисные векторы в \( Y \), мы можем использовать матрицу \( A \), чтобы описать это отображение \( f \).

Таким образом, операция линейного отображения \( f \) от вектора \( x \) в базисе \( X \) до вектора \( y \) в базисе \( Y \) может быть записана как \( y = Ax \), где матрица \( A \) называется матрицей линейного отображения.

Матрица \( A \) полностью описывает линейное отображение \( f \) между пространствами \( V \) и \( W \) с использованием выбранных базисов \( X \) и \( Y \), позволяя нам переходить между представлениями векторов в разных базисах.

Также, если \( (v_1, v_2, ... v_n) \) - базис \( V \), а \( (w_1, w_2, ... w_m) \) - базис \( W \), то линейное отображение \( f : V -> W \) можно представить в виде \( f(v) = Ax \), где \( x \) - координаты вектора \( v \) в базисе \( V \), а \( f(v) \) - координаты вектора \( f(v) \) в базисе \( W \).

Матрица линейного отображения \( f \) представляется матрицей \( A \) с элементами \( a(i; j) \), где каждый столбец матрицы \( A \) представляет векторы \( f(v_i) \) в базисе \( W \).

Таким образом, для любого вектора \( x \) из \( V \), мы можем найти вектор \( y = f(x) \) с помощью умножения матрицы \( A \) на вектор \( x \).

При вращении плоскости \( R^2 \) на угол θ градусов против часовой стрелки вокруг начала координат, мы используем линейное преобразование. Представим векторы R2 как столбцовые векторы.

  1. Выбираем стандартный базис в \( R^2 \).

  2. Мы имеем функцию \( f [1; 0] = \begin{pmatrix} cos(\theta)\\ sin(\theta)\end{pmatrix} \) и \( f [0; 1] = \begin{pmatrix}-\sin(\theta)\\ \cos(\theta)\end{pmatrix}\).

  3. Матрица представления \( A = \begin{pmatrix}\cos(\theta) -\sin(\theta)\\ \sin(\theta) \cos(\theta)\end{pmatrix} ] \) для функции \(f\).

  4. Вычисляем \(y = Ax\), где \(x = [x; y]\).

  5. Получаем \(y = \begin{pmatrix}x \cos \theta - y \sin \theta\\ x \sin \theta + y \cos \theta\end{pmatrix}\). Таким образом, точка \((x, y)\) преобразуется в \((x \cos \theta - y \sin \theta, x \sin \theta + y \cos θ)\). Maтрица \(A\), полученная здесь, известна как матрица поворота вокруг начала координат на угол \(\theta\) в \( R^2 \), с против часовой стрелкой как положительным направлением

Создание файла mypict1.txt

from PIL import Image as Img
from numpy import array

A = array(Img.open('mypict1.jpg'))
B = A < 200
m, n = B.shape[0], B.shape[1]
h = max(m, n)
x0, y0 = m / h, n / h

def f(i, j):
    return (y0 * (-1 + 2 * j / (n - 1)), x0 * (1 - 2 * i / (m - 1)))

P = [f(i, j) for i in range(m) for j in range(n) if B[i, j, 0]]
with open('mypict1.txt', 'w') as fd:
    fd.write(repr(P))

Строка 5: A - это матрица поворота на угол t. Строки 7, 8: P - это список, считанный из mypict1.txt. Строка 10: Q - это список точек, полученных поворотом точек из P. Строки 11, 12: Отобразили точки в Q на координатной плоскости. Строка 13: Получен рисунок.

from numpy import array, pi, sin, cos
import matplotlib.pyplot as plt

t = pi / 4
A = array([[cos(t), -sin(t)], [sin(t), cos(t)]])

with open('mypict1.txt', 'r') as fd:
    P = eval(fd.read())

Q = [A.dot(p) for p in P]
x, y = zip(*Q)
plt.scatter(x, y, s=1)
plt.axis('equal')
plt.show()
_images/bfdcd2f5366a856c423a080e0cd8c8046f21781ae3e566a4fee14332f54bd7f6.png

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