Линейные отображения#
Матрицы#
Мы рассматриваем матрицу размером \(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 как столбцовые векторы.
Выбираем стандартный базис в \( R^2 \).
Мы имеем функцию \( f [1; 0] = \begin{pmatrix} cos(\theta)\\ sin(\theta)\end{pmatrix} \) и \( f [0; 1] = \begin{pmatrix}-\sin(\theta)\\ \cos(\theta)\end{pmatrix}\).
Матрица представления \( A = \begin{pmatrix}\cos(\theta) -\sin(\theta)\\ \sin(\theta) \cos(\theta)\end{pmatrix} ] \) для функции \(f\).
Вычисляем \(y = Ax\), где \(x = [x; y]\).
Получаем \(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()
Задание. Видоизмените код, чтобы поворот осуществлялся на другой угол и в другую сторону.