Задание 3 [Проекторы. Задача наименьших квадратов. QR-разложение.] \\
Всего баллов: 47 \ Срок сдачи: 4 ноября
}{}
}
\maketitle
\section*{Рекомендованная литература}
\begin{itemize}
\item Лекции 6--8, 10--11 из \cite{trefethen1997numerical}
\item Лекция 8 из \cite{tyrtyshnikov2012brief}
\end{itemize}
\section*{Упражнения}
\begin{enumerate}
\item (3) Даны матрицы:
$$
A=\quad\begin{bmatrix}
1 & 0\\
0 & 1\\
1 & 0
\end{bmatrix},\quad
B=\quad\begin{bmatrix}
1 & 2\\
0 & 1\\
1 & 0
\end{bmatrix}
$$
\begin{itemize}
\item Получите ортогональные проекторы на пространства $\operatorname{colsp}(A)$ и $\operatorname{colsp}(B)$.
\item Вычислите (вручную) QR-разложения матриц $A$ and $B$.
\end{itemize}
\item (5)
Частица единичной массы в начальный момент времени покоится в точке $x =0$. Затем она подвергается воздействию кусочно-постоянной внешней силы $f_i \;\;(i =1\ldots10)$.
Пусть $a =\eval{(x,\: v)}_{t=10}$ --- вектор, состоящий из координаты и скорости частицы в конечный момент времени. Найдите матрицу $A$ такую, что $a = Af$. Заметьте, что она будет иметь размер $2\times10$. С помощью SVD-разложения численно найдите вектор $f$ наименьшей евклидовой нормы, при котором $a =(1,\,0)$.
Создайте датасет следующим образом: выберите $n =7$ точек $x_i$ из равномерного распределения на отрезке $[0,\,6]$. Затем вычислите $y_i = f(x_i)+\epsilon_i$, где $f(x)=10\sin(x)$, а$\epsilon_i$~---~независимые стандартные нормальные случайные величины. Изобразите на одном графике точки датасета и функцию $f$.
Аппроксимируйте датасет с помощью линейной $l(x)= w_0+ w_1 x$ и кубической $c(x)= w_0+ w_1x + w_2x^2+ w_3x^3$ функций. Изобразите на одном графике получившиеся функции и исходный датасет.
%\pagebreak
\item (7)
Загрузите \href{https://www.dropbox.com/s/qgz1x67t10fd7hf/data.npz?dl=0}{файл}с матрицами $A$ и $C$ (изображение и фильтр). Откройте его:
Изображение, хранящееся в матрице $A$, было получено из исходного изображения $A_0$с помощью свёртки с фильтром $C$ и добавления шума. Записывая матрицы как векторы описанным выше способом, мы можем написать
$$
a_0\to a = C a_0 + \epsilon,
$$
где $\epsilon$ --- вектор из независимых одинаково распределённых гауссовских случайных величин.
Фильтр $C$ размывает изображение, увеличивая при этом его размер с$16\times51$ до $25\times60$.
Вашей задачей будет восстановить исходное изображение $A_0$ по размытому изображению $A$ и фильтру $C$.
%
\begin{itemize}
\item Постройте изображение $A$.
\item Исследуйте, как фильтр $C$ меняет изображения.
\item Наивный способ восстановить $A_0$ --- это найти $a_0$ из системы $a = Ca_0$. Является ли эта система недо- или переопределённой? Вычислите $a_0$с помощью сингулярного разложения матрицы $C$ и постройте получившееся изображение.
\item Чтобы улучшить результат, попробуйте использовать только часть сингулярных чисел матрицы $C$. Выберите наиболее удачное количество.
Предполагая, что матрица $A^T A$ обратима, воспользуйтесь методом множителей Лагранжа и получите выражение для точки минимума $x$.
\item (20) Эта задача посвящена локализации точек на плоскости. Рассмотрим $n$ точек с\emph{неточными} координатами: $A_i =\brk{x_i,\, y_i}$. Измерим $m$ углов между некоторыми из них: $\theta_{ijk}=\angle\, A_i A_j A_k$. Наша цель --- используя результаты измерений, уточнить координаты точек.
В качестве примера рассмотрим $n =3$ точки с приближенными координатами: $A_1=(1,\,0),\ A_2=(-1,\,0),\ A_3=(0,\,1)$ --- и один измеренный угол $\theta_{123}=9\pi/40$. Так как наши оценки координат не согласуются с измеренным углом, мы должны их скорректировать:
При таком подходе мы конструируем $m =1$ уравнений для $2n =6$ переменных. Система обычно оказывается недоопределённой. Но мы можем рассматривать её в смысле метода наименьших квадратов, т.е. пытаться определить наименьшие поправки к координатам, которые делали бы их согласованными с измерениями. В рассмотренном примере можно найти решение
Ваша задача --- написать код, который принимает текущие оценки координат точек $(n \times2)$ и измеренные углы $\theta_{ijk}$ ($m$ значений и $m \times3$ индексов). Возвращать он должен найденные поправки $(n \times2)$.
Вы можете использовать пример из этого упражнения, чтобы протестировать свой код.