Матрица линейного оператора

Федеральное государственное образовательное бюджетное учреждение

Высшего образования

«ФИНАН

«ФИНАНСОВЫЙ УНИВЕРСИТЕТ ПРИ ПРАВИТЕЛЬСТВЕ

РОССИЙСКОЙ ФЕДЕРАЦИИ»

Департамент анализа данных, принятия решений и финансовых технологий

 

С.А.Зададаев

 

 

Спектральное и сингулярное разложение матриц (RStudio)

Учебно-методические рекомендации для проведения

семинара №31 по компьютерному практикуму

 

Для бакалавров направления 38.03.01 «Экономика»

 

 

Электронное издание

 

 

Москва 2018


Спектральное и сингулярное разложение матриц (RStudio)

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

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

Матрица линейного оператора

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

,

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

или в развернутом виде

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

.

Найти каким окажется вектор  после такого поворота.

Решение. Умножим матрицу поворота на столбец координат поворачиваемого вектора :

,

что и даст нам координаты повернутого вектора.

В коде R получаем:

X <- c(7, -20)    # Вводим столбец координат вектора X

A <- cbind(c(cos(pi/3), sin(pi/3)), c(-sin(pi/3), cos(pi/3))) # Вводим матрицу поворота

Y <- A %*% X # Вычисляем координаты повернутого вектора Y=AX

Y                       # Выводим на экран столбец координат Y

с результатом в консоли:

> X <- c(7, -20)    # Вводим столбец координат вектора X

> A <- cbind(c(cos(pi/3), sin(pi/3)), c(-sin(pi/3), cos(pi/3))) # Вводим матрицу поворота

> Y <- A %*% X      # Вычисляем координаты повернутого вектора

> Y                 # Выводим на экран столбец координат Y

     [,1]

[1,] 20.820508

[2,] -3.937822

Ниже на рисунке 1 представлен найденный поворот: синим – первоначальный вектор с координатами X, красным – повернутый вектор с координатами Y.

Код процедуры построения рисунка здесь следующий:

plot(0, 0, type = "p", col = "blue", xlim = c(-25, 25), ylim = c(-25, 25)) # Строим начало координат и масштабируем рисунок

abline(h = 0, v = 0, lty = "84")                     # Рисуем оси координат пунктиром

arrows(0, 0, 7, -20, col = "blue", lwd = 2)    # Строим первый вектор X (стрелку)

arrows(0, 0, Y[1], Y[2], col = "red", lwd = 2) # Строим повернутый вектор Y (стрелку)

Рис. 1

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

Замечание. Знайте, что всякий раз, когда изображение на экране компьютера поворачивается, каждая двумерная точка экрана претерпевает подобное преобразование.

 

Задание 2. Повернуть на угол  против часовой стрелки относительно начала координат график функции

.

Решение. Отличие данного задания от предыдущего заключается лишь в том, что повернуть надо не одну точку (одну пару координат), а множество точек, составляющих график функции.

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

x <- seq(-5, 5, length.out = 100)  # Разбиваем отрезок [-5, 5] на 100 точек

y <- x + sin(3*x)                      # Вычисляем значения функции в точках разбиения

plot(x, y, type = " l ", col = "blue", lwd = 2) # Строим график функции f(x)

abline(h = 0, v = 0, lty = "84") # Рисуем оси координат пунктиром

X <- rbind(x, y)                        # Образуем множество пар точек, которые надо повернуть

Y <- A %*% X                         # Поворачиваем сразу все точки матрицей поворотов

lines(Y[1, ], Y[2, ], type = " l ", col = "red", lwd = 2) # Достраиваем повернутый график  

с убедительным результатом на рисунке 2:

Рис. 2.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: