Главная       Скачать       Коммерческая поддержка       FAQ       Forum       О нас       Английская версия

LDLT разложение

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

При LDLT-разложении матрица A представляется в виде A = L·D·L T или A = U·D·U T. Отличий от разложения Холецкого два. Во-первых, появилась матрица D - блочно-диагональная матрица с блоками размером 1x1 или 2x2. Во-вторых, матрицы L и U являются не треугольными матрицами, а произведениями треугольных матриц и матриц перестановок:

L = PL·...·PL·...
U = PL·...·PL·...

Здесь v - столбец, ширина s которого равна ширине k-ого блока на диагонали матрицы D (1 или 2), а высота - k-s для матрицы U, n-k-s+1 - для матрицы L.

Можно видеть, что структура LDLT-разложения значительно сложнее, чем у разложения Холецкого или LU-разложения, но это разложение позволяет факторизовать любую симметричную матрицу (в отличие от разложения Холецкого), и выполняется быстрее, чем более общее LU-разложение. Следует отметить, что LDLT-разложение по скорости находится между разложением Холецкого и LU-разложением, так что если есть возможность применить разложение Холецкого, то оно все же является предпочтительным вариантом.

Описание подпрограммы

Разложение матрицы осуществляется подпрограммой SMatrixLDLT, которая принимает матрицу A, заданную верхним или нижним треугольником, и замещает её матрицами L и D (или U и D), хранящимися в компактной форме (описанной в комментариях к программе).

Алгоритмы обращения матриц и решения систем линейных уравнений работают с матрицами, заданными именно в компактной форме, а сами по себе матрицы L или U обычно не представляют интереса, так что подпрограмм для их "распаковки" не предусмотрено. Подробное описание структуры матриц L и U есть в комментариях к подпрограммам, так что в случае необходимости программист может самостоятельно произвести "распаковку" матриц.

Этот алгоритм перенесен из библиотеки LAPACK.

Manual entries

C++ ldlt subpackage   
C# ldlt subpackage   

This article is intended for personal use only.

Скачать ALGLIB

C#

Исходный код на C#

Downloads page

 

C++

Исходный код на C++

Downloads page

 

C++, арифметика высокой точности

Исходный код на C++, использующий библиотеки MPFR/GMP.

Исходный код GMP доступен на сайте gmplib.org. Исходный код MPFR доступен на сайте www.mpfr.org.

Downloads page

 

FreePascal

Исходный код на Free Pascal.

Downloads page

 

Delphi

Исходный код на Delphi.

Downloads page

 

VB.NET

Исходный код на VB.NET.

Downloads page

 

VBA

Исходный код на VBA.

Downloads page

 

Python

Исходный код на Python (CPython и IronPython).

Downloads page

 

 

ALGLIB® - numerical analysis library, 1999-2012.
ALGLIB is registered trademark of the ALGLIB Project.