Домашнее задание#
Задача 1. Стохастическая матрица и собственное значение равное 1.#
Утверждение. Пусть дана матрица \(А\), в которой элементы неотрицательны и сумма в каждой строке равна 1. Тогда 1 максимальное собственное значение такой матрицы.
Доказательство.
Возьмём вектор \(\mathrm{v}\) из всех 1 и вычислим \(Av\).
В силу равенства 1 суммы элементов в каждой строке \(Av\) также будет вектором из всех 1.
Значит вектор \(\mathrm{v}\) собственный вектор для собственного значения 1
Теперь воспользуемся теоремой Гершгорина: все собственные значения лежат в объединении кругов с центром в точках \(а_{ii}\) и радиусом \(1 - а_{ii}\)
Значит ни один из шаров не имеет точек расположенных дальше 1 и -1
А значит и все собственные значения по модулю меньше 1
Сгенерируйте случайным образом много таких матриц и для каждой проверьте утверждение. Нарисуйте круги Гершгорина и собственные значения, воспользовавшись программой из документа семинара.
Задача 2. PageRank и степенные итерации.#
Обычно вычисление собственных значений и собственных векторов необходимо для изучения
вибраций в механических структурах
снижения сложности моделей сложных систем
Более половины вычислительных мощностей в мире тратится на решение задач такого типа для задач.
Одна из самых известных задач о вычислении собственных векторов - задача о ранжировании \(n\) веб-страниц (Google PageRank). Подход, который вам нужно будет реализовать в этой задаче, был одним из главных в работе Google на раннем этапе.
Всё, что мы собираемся использовать - структуру взаимных ссылок между страницами. PageRank определяется рекурсивно: важность \(i\)-й страницы определяется как среднее значение важностей всех страниц, которые ссылаются на \(i\)-ю. Обозначим важность \(i\)-й страницы \(p_{i}\), тогда это определение может быть записано в виде линейной системы:
где \(l_{i j}=1\) если \(j\)-я страница ссылается на \(i\)-ю (в противном случае \(\left.l_{i j}=0\right)\), а \(L(j)-\) количество исходящих ссылок со страницы \(j\). Система может быть переписана в виде задачи на собственное значение:
Если в графе есть „подвешенные“ узлы (все элементы какого-то столбца равны нулю), то весь столбед заполняется числом \(1 / n\). Наконец, вводится параметр \(0<\beta<1\) так что матрица \(G\) заменяется на
где \(e\) - вектор, состоящий из единиц. Обратите внимание, что задача свелась к нахождению собственного вектора \(p\) матрицы \(G\), отвечающего собственному значению \(1 .\) Можно показать, что 1 - максимально возможное собственное значение матрицы \(G .\)
Придумайте самостоятельно небольшой граф связности ( 10 узлов), постройте соответствуюшие матрицы \(l\) и \(G\) и найдите численно собственный вектор, отвечающий PageRank.
Скачайте файл, в котором представлен ориентированный граф, узлы которого составляют страницы stanford.edu, а направленные рёбра - ссылки между ними (граф задан матрицей смежности \(l\) ). Распакуйте архив и загрузите его:
Найдите PageRank для матрицы из предыдущего пункта. Для этого реализуйте степенную итерацию для нахождения собственного вектора, отвечающего максимальному собственному значению \(G .\) Возьмите \(\beta=0.8\)
Итерируйте до тех пор, пока 1-норма изменения вектора-кандидата не станет меньше \(10^{-4}\). Сколько итераций понадобилось?
Какому собственному значению отвечает найденный вектор и у какого узла наибольший РаgеRапk?
Докажите, что 1 - максимально возможное собственное значение матрицы G.
Задача 3. Метод обратных итераций и итерации Рэлея.#
Напишите программу для нахождения минимального по модулю собственного значения и соответствующего собственного вектора симметричной матрицы при использовании обратных итераций Рэлея. С её помощью решите задачу для
матрицы Гильберта
матрицы Лемера
матрицы Паскаля
для симметричной трёхдиагональной матрицы, где на главной диагонали стоят 2, а на боковых диагоналях -1.
Напишите на основе этой программы функцию, которая ищет ближайшее к заданному числу собственное значение.
Для перечисленных матриц вывести ответ для n = 2, 3, … 10.
Матрицей Лемера называют матрицу, у которой элементы равны:
\(a_{i j}=\frac{\min (i, j)}{\max (i, j)} \) (нумерация от 1)
Матрицей Паскаля называют матрицу, у которой элементы равны:
\(S_{i j}=\left(\begin{array}{l} n \\ r \end{array}\right)=\frac{n !}{r !(n-r) !}, \quad n=i+j, \quad r=i\) (нумерация от 0)
Примечание. Для некоторых матриц можно использовать также выражение обратной матрицы в явном виде.
Матрица, обратная к матрице Гильберта, может быть выражена в явном виде через биномиальные коэффициенты:
где \(n\) - порядок матрицы. Таким образом, элементы обратной матрицы \(H^{-1}-\) целые числа.
Задача 4. PageRank с помощью библиотек на Python.#
Мы можем вычислить PageRank с помощью библиотек на Python. Будем использовать бибилотеку networkx для работы с графами, она может быть установлена с помощью следующей команды
conda install networkx
Возьмём простой пример графа Zachary karate club. Этот граф был собран вручную в 1977, и является классическим графом для анализа соцсетей. https://en.wikipedia.org/wiki/Zachary’s_karate_club
import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt
import networkx as nx
kn = nx.read_gml('graph.gml')
#nx.write_gml(kn, 'karate2.gml')
nx.draw_networkx(kn) #Draw the graph
Сейчас мы можем вычислить PageRank, используя функцию, встроенную в NetworkX. Мы также изобразим вершины графа пропорционально тому, наскольку они важны в смысле величины PageRank’a.
pr = nx.algorithms.link_analysis.pagerank(kn)
pr_vector = list(pr.values())
pr_vector = np.array(pr_vector) * 3000
nx.draw_networkx(kn, node_size=pr_vector, labels=None)
Самостоятельно проделайте это всё для страниц stanford.edu
Задача 5. Матрица вида диагональная матрица плюс матрица малого ранга.#
Собственные значения матрицы вида
вычислить не так просто!
Характеристический многочлен имеет вид
Тогда (докажите!!)
Подсказка: найдите \(\operatorname{det}\left(I+w u^*\right)\) используя два факта:
\(\operatorname{det}(C)=\prod_{i=1}^n \lambda_i(C)\)
\(\operatorname{trace}(C)=\sum_{i=1}^n \lambda_i\).
import numpy as np
lm = [1, 2, 3, 4]
M = len(lm)
D = np.array(lm)
a = np.min(lm)
b = np.max(lm)
t = np.linspace(-1, 6, 1000)
u = 0.5 * np.ones(M)
rho = 1
def fun(lam):
return 1 + rho * np.sum(u**2/(D - lam))
res = [fun(lam) for lam in t]
plt.plot(t, res, 'k')
plt.plot(t, np.zeros_like(t))
plt.ylim([-6, 6])
plt.xticks(fontsize=18)
plt.yticks(fontsize=18)
_ = plt.xlabel("$\lambda$", fontsize=18)
Эта функция имеет только один корень на каждом отрезке \(\left[d_i, d_{i+1}\right]\)
Мы показали справедливость теоремы Коши о чередовании (что происходит с собственными числами после внесения возмущения ранга 1).
Сформулируйте самостоятельно и докажите эту теорему.
Задача 6. Нелинейное характеристическое уравнение.#
Решите нелинейное уравнение для \(\lambda\)
Указания:
Метод Ньютона не сработает (изобразите касательные к графику , можно использовать графики из прошлой задачи).
Заметим, что метод Ньютона - это по сути линейная аппроксимация функции \(f(\lambda)\) на каждой итерации.
Лучше аппроксимировать с помощью гиперболы вида:
Для вычисления коэффициентов нам нужно вычислить \(f(\lambda)\) и \(f^{\prime}(\lambda)\) в некоторых точках.
После чего получить апроксимацию из решения квадратного уравнения
Задача 7. Теорема Лёвнера (Charles Loewner).#
Докажите теорему Лёвнера.
Важный недостаток метода «разделяй и властвуй»
Устойчивость: этот метод игнорировали долгое время из-за неустойчивого вычисления собственных векторов.
Нам нужно вычислить собственные векторы матрицы \(D+\rho u u^*\).
Точное выражение для собственных векторов \(v_i\), для которых найдены собственные значения \(\alpha_i\) :
То есть \(v_i \in \operatorname{span}\left(\left\{\left(D-\alpha_i I\right)^{-1} u\right\}\right)\)
Причины неустойчивости:
если есть два близких собственных числа \(\alpha_i\) и \(\alpha_{i+1}\), то соответствующие векторы \(\left(D-\alpha_i I\right)^{-1} u\) и \(\left(D-\alpha_{i+1} I\right)^{-1} u\) будут близки, хотя долждны быть ортогональны
если \(\alpha_i\) и \(\alpha_{i+1}\) очень близки, то они близки к числу \(d_i\) между ними, то есть матрицы \(D-\alpha_i I\) и \(D-\alpha_{i+1} I\) близки к вырожденным
Теорема Лёвнера (Charles Loewner)
Решение проблемы неустойчивости можно получить с помощью теоремы Лёвнера:
Если \(\alpha_i\) и \(d_i\) удовлетворяют теореме о чередовании
Тогда существует вектор \(\widehat{u}\) такой что \(\alpha_i\) - точное собственное значение матрицы
и
Использование вектора \(\widehat{u}\) вместо \(u\) даёт устойчивое вычисление собственного вектора!
Таким образом, сначала вычисляются собственные значения, затем \(\widehat{u}\) и только потом собственные векторы.
Задача 8. Верхне-гессенберговая форма#
Напишите функцию, которая решает СЛАУ методом отражений Хаусхолдера. И вторую функцию, которая приводит матрицу к верхне-гессенберговой форме.
Пример работы алгоритма.
Решим для примера систему уравнений «вручную» методом отражений.
Система уравнений:
Расширенная матрица системы:
Шar \(1, k=1\)
Шаг \(2, k=2\)
По полученной расширенной матрице А \({ }^{(2)}\) запишем систему уравнений, эквивалентную исходной системе:
из третьего уравнения находим \(x_3\), подставляем его во второе уравнение, находим \(x_2\), подставляем х \({ }_2\) и х в первое уравнение, и находим \(x_1\). Получим
по ссылке (формальный параметр с префиксом var).