Skip to content

Commit

Permalink
Новый материал: линейные системы: сингулярное разложение и литература…
Browse files Browse the repository at this point in the history
… по вычислительной линейной алгебре (#81)

* feat(qr): чуть больше о qr разложении
* feat(sysnonlinear): об svd разложении
* feat(syslinear); больше о разложениях
* feat(sysnonlinear): литература и ссылки на документацию к разложениям

Related #77
  • Loading branch information
stepanzh authored Aug 6, 2024
1 parent c849be9 commit 662e137
Show file tree
Hide file tree
Showing 2 changed files with 110 additions and 14 deletions.
122 changes: 108 additions & 14 deletions book/syslinear/decompose_overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,26 @@ include("../src.jl")
# Обзор других разложений и задач

В данном разделе приведены некоторые разложения матриц и их применение.
Для углублённого изучения вычислительной линейной алгебры мы можем посоветовать следующие материалы.

- Driscoll, Tobin A., and Richard Braun.
2018.
Fundamentals of Numerical Computation.
Philadelphia: Society for Industrial and Applied Mathematics.
ISBN 978-1-61197-507-9.
- Trefethen, Lloyd N., and David Bau.
1997.
Numerical Linear Algebra.
Philadelphia: Society for Industrial and Applied Mathematics.
ISBN 978-0-89871-361-9.
- Golub, Gene H., and Charles F. Van Loan.
2013.
Matrix Computations.
Fourth edition.
Johns Hopkins Studies in the Mathematical Sciences.
Baltimore: The Johns Hopkins University Press.
ISBN 978-1-4214-0859-0.


## LU-разложение

Expand Down Expand Up @@ -54,54 +74,128 @@ L, U, p = plufact(A)

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



(chapter_syslinear_qr)=
## QR-разложение

QR-разложение выводится из ортогонализации по Граму-Шмидту и применяется для прямоугольной матрицы
QR-разложение можно получить из ортогонализации по Граму-Шмидту.
Оно применяется для прямоугольной матрицы

```{math}
\mathbf{A}_{m\times n} = \mathbf{Q R},
\mathbf{A}_{m\times n} = \mathbf{Q}_{m \times m}\ \mathbf{R}_{m \times n}, \quad (m \ge n)
```

где $\mathbf{Q}$ -- ортогональная матрица, а $\mathbf{R}$ -- верхнетреугольная.
где $\mathbf{Q}$ -- ортогональная матрица, а $\mathbf{R}$ -- верхнетреугольная (строки $i > m$ нулевые).
Это разложение "раскладывает" столбцы матрицы $\mathbf{A}$ по ортогональному базису из столбцов матрицы $\mathbf{Q}$.

Данное разложение применятся для переопределённых систем (число уравнений превышает число неизвестных), например, в методе наименьших квадратов. Кроме того, разложение позволяет найти ядро преобразования и пространство столбцов. А в случае квадратной матрицы $\mathbf{A}_{n\times n}$ разложение применимо для решения линейной системы, как и LU-разложение.
QR-разложение применяется для решения переопределённых систем (число уравнений превышает число неизвестных), например, в методе наименьших квадратов.
Кроме того, разложение позволяет найти ядро преобразования и пространство столбцов.
А в случае квадратной матрицы $\mathbf{A}_{n\times n}$ разложение применимо для решения линейной системы ($\mathbf{R} \mathbf{x} = \mathbf{Q}^{\top} \mathbf{b}$), как и LU-разложение.

В одном из вариантов метода Бройдена решения нелинейной системы уравнений эффективней (по времени работы) использовать QR-разложение. Подобная ситуация встречается и в других алгоритмах, где-то одно разложение несёт больше необходимой алгоритму информации, а где-то подходящее разложение экономит время вычислений.
В одном из вариантов метода Бройдена решения нелинейной системы уравнений эффективней (по времени работы) использовать QR-разложение вместо LU-разложения.
Подобная ситуация встречается и в других алгоритмах: иногда одно разложение несёт больше необходимой алгоритму информации, что обычно экономит количество вычислений.

Вычислительная сложность $\propto 2mn^2 - \frac{2}{3} n^3$.



(syslinear_ch_cholesky)=
## Разложение Холецкого

Данное разложение применяется для квадратной симметричной положительно-определённой матрицы $\mathbf{x}^\top \mathbf{A} \mathbf{x} > 0$
Разложение Холецкого (Cholesky decomposition) применимо для квадратной симметричной положительно-определённой матрицы $\mathbf{x}^\top \mathbf{A} \mathbf{x} > 0$

```{math}
\mathbf{A}_{n\times n} = \mathbf{L}\mathbf{L}^\top,
\mathbf{A}_{n \times n} = \mathbf{L}_{n \times n}\ \mathbf{L}^\top_{n \times n},
```

где $\mathbf{L}$ -- нижнетреугольная матрица.

Подобные матрицы возникают, например, в задаче оптимизации (нахождение минимума функции $f(\mathbf{x})$), где ноль градиента и положительная определённость гессиана определяют локальный минимум.
Подобные матрицы возникают, например, при нахождении минимума функции $f(\mathbf{x})$ (задача оптимизации), где ноль градиента и положительная определённость гессиана $\mathbf{A}$ определяют локальный минимум.

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

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

Вычислительная стоимость $\propto \frac{1}{3} n^3$ флопс.

## Спектральное разложение

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

Спектральное разложение представляет квадратную матрицу $\mathbf{A}$ в виде
## Спектральное разложение

Спектральное разложение (eigenvalue или spectral decomposition) представляет квадратную матрицу $\mathbf{A}$ в виде

```{math}
\mathbf{A}_{n\times n} = \mathbf{VDV}^{-1},
\mathbf{A}_{n \times n} = \mathbf{V}_{n \times n}\ \mathbf{D}_{n \times n}\ \mathbf{V}^{-1}_{n \times n}, \quad (\mathbf{A} \upsilon_{i} = \lambda_{i} \upsilon_{i})
```

где $\mathbf{V}$ -- матрица, составленная из собственных векторов матрицы $\mathbf{A}$, а $\mathbf{D}$ -- диагональная матрица из собственных значений $\mathbf{A}$.
где $\mathbf{V}$ -- матрица, составленная из собственных векторов матрицы $\mathbf{A}$, а $\mathbf{D}$ -- диагональная матрица из собственных значений матрицы $\mathbf{A}$.

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

Обобщением является сингулярное разложения (*SVD*-разложение).


## Сингулярное разложение

Сингулярное разложение (singular value decomposition, SVD) представляет матрицу в виде

```{math}
\mathbf{A}_{m \times n} = \mathbf{U}_{m \times m}\ \mathbf{\Sigma}_{m \times n}\ \mathbf{V}^{\top}_{n \times n}, \quad (m \ge n)
```
где матрицы $\mathbf{U}$ и $\mathbf{V}$ ортогональны, а матрица $\mathbf{\Sigma}$ диагональна (строки $m > n$ нулевые).
Диагональные элементы матрицы $\mathbf{\Sigma}$ называют сингулярными значениями $\sigma_i$, которые упорядочивают по неубыванию.

SVD-разложение имеет геометрическую интерпретацию.
Она состоит в том, что всякое линейное преобразование может быть представлено в виде комбинации поворота и растяжений.
Так, в двумерном случае единичная окружность с ортогональными полуосями $\mathbf{v}_1$ и $\mathbf{v}_2$ при преобразовании $\mathbf{A}$ переходит в эллипс с полуосями $\mathbf{A} \mathbf{v}_{1,2} = \sigma_{1,2} \mathbf{u}_{1,2}$.

SVD-разложение имеет фундаментальную важность для вычислительной линейной алгебры и имеет множество применений.
Мы упомянем одно из них: приближение матрицы матрицей меньшего ранга (low-rank approximation).
Матрицу $\mathbf{A}$ можно записать в виде суммы {ref}`внешних произведений <sec:sysnonlinear:outer_product>`

```{math}
\mathbf{A} = \sum^{r}_{j = 1} \sigma_j \mathbf{u}_j \mathbf{v}^{\top}_j,
```
где $r = \mathrm{rank}(\mathbf{A})$ это ранг матрицы $\mathbf{A}$.
Определим теперь матрицу $\mathbf{A}_{\nu}$ как сумму первых $\nu$ слагаемых из уравнения выше

```{math}
\mathbf{A}_{\nu} = \sum^{\nu}_{j = 1} \sigma_j \mathbf{u}_j \mathbf{v}^{\top}_j. \quad (\nu \le r)
```

Тогда

```{math}
\| \mathbf{A} - \mathbf{A}_{\nu} \|_2
= \sigma_{\nu + 1}.
```
(Для корректности в случае $\nu = r$: $\sigma_{\nu + 1} = 0$.)

Таким образом, матрицу $\mathbf{A}$ можно приближать другими матрицами, меньшего ранга.
Например, в ситуации матрицы с сильным отличием сингулярных значений $\sigma_{1 \dots 10} \gg \sigma_{11 \dots 100}$ достаточно использовать лишь одну десятую ($\nu = 10$) от всей размерности пространства.
Это может использоваться в уменьшении количества вычислений ([model order reduction](https://en.wikipedia.org/wiki/Model_order_reduction)) или, например, в алгоритмах сжатия данных ([пример](https://dmicz.github.io/machine-learning/svd-image-compression/)).



## Разложения матриц в Julia

Большинство упомянутых разложений входят в стандартный Julia пакет [LinearAlgebra](https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/).

```{list-table}
:header-rows: 1
* - Разложение
- Ссылка
* - LU
- `LinearAlgebra.lu`
* - QR
- `LinearAlgebra.qr`
* - Холецкого
- `LinearAlgebra.cholesky`
* - Холецкого (модифицированное)
- [PositiveFactorizations.jl](https://github.com/timholy/PositiveFactorizations.jl/)
* - Спектральное
- `LinearAlgebra.eigen`
* - Сингулярное
- `LinearAlgebra.svd`
```
2 changes: 2 additions & 0 deletions book/syslinear/lu.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ include("../src.jl")
На практике оказывается, что проще работать не с самой матрицей, а с представлением её в виде произведения нескольких матриц, которое называется разложением.
В данном разделе выводится алгоритм решения системы уравнений, представляющий исходную матрицу в виде произведения $\mathbf{A}=\mathbf{L}\mathbf{U}$, после чего пользующийся прямой и обратной подстановкой.


(sec:sysnonlinear:outer_product)=
## Внешнее произведение

Вывод алгоритма разложения основывается на внешнем произведении векторов (*outer product*).
Expand Down

0 comments on commit 662e137

Please sign in to comment.