diff --git a/book/syslinear/decompose_overview.md b/book/syslinear/decompose_overview.md index 0623535..6ca3b84 100644 --- a/book/syslinear/decompose_overview.md +++ b/book/syslinear/decompose_overview.md @@ -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-разложение @@ -54,35 +74,44 @@ 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}$ определяют локальный минимум. Разложение используется для решения линейных систем, проверки матрицы на положительную определённость, нахождение детерминанта и обращении матриц. @@ -90,18 +119,83 @@ QR-разложение выводится из ортогонализации Вычислительная стоимость $\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}`внешних произведений ` + +```{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` +``` diff --git a/book/syslinear/lu.md b/book/syslinear/lu.md index de58712..d14fb41 100644 --- a/book/syslinear/lu.md +++ b/book/syslinear/lu.md @@ -29,6 +29,8 @@ include("../src.jl") На практике оказывается, что проще работать не с самой матрицей, а с представлением её в виде произведения нескольких матриц, которое называется разложением. В данном разделе выводится алгоритм решения системы уравнений, представляющий исходную матрицу в виде произведения $\mathbf{A}=\mathbf{L}\mathbf{U}$, после чего пользующийся прямой и обратной подстановкой. + +(sec:sysnonlinear:outer_product)= ## Внешнее произведение Вывод алгоритма разложения основывается на внешнем произведении векторов (*outer product*).