![]() |
Симметричная матрица A может быть представлена в виде A = Q·T·Q T, где Q - ортогональная матрица, T - трехдиагональная матрица. Аналогично, можно сказать, что матрица A приводится к трехдиагональной преобразованием подобия: Q T·A·Q = T.
Как и другие алгоритмы ортогональной факторизации (например, алгоритмы QR и LQ-разложения), этот алгоритм использует последовательность элементарных отражений для преобразования матрицы A. Преобразования применяются к матрице слева и справа, сохраняя на каждом этапе симметрию матрицы и последовательно устраняя внедиагональные элементы, пока не будут обнулены все элементы, кроме главной диагонали и двух побочных.
В результаты работы подпрограммы SMatrixTD матрица A замещается трехдиагональной матрицей T и последовательностью преобразований отражения, хранящейся в упакованной форме. Форма, в которой хранятся преобразования, и параметры подпрограммы подробно описаны в комментариях к ней, при этом во многом прослеживается аналогия с QR-разложением, которое использует нижнюю часть матрицы R для хранения матрицы Q, используя очень похожий формат хранения данных. Как и в случае с QR-разложением, представлена подпрограмма для "распаковки" матрицы Q : SMatrixTDUnpackQ.
Этот алгоритм перенесен из библиотеки LAPACK.
| C++ | ortfac subpackage | |
| C# | ortfac subpackage |
This article is intended for personal use only.
Исходный код на C#
Исходный код на C++
Исходный код на C++, использующий библиотеки MPFR/GMP.
Исходный код GMP доступен на сайте gmplib.org. Исходный код MPFR доступен на сайте www.mpfr.org.
Исходный код на Free Pascal.
Исходный код на Delphi.
Исходный код на VB.NET.
Исходный код на VBA.
Исходный код на Python (CPython и IronPython).
|
ALGLIB® - numerical analysis library, 1999-2012. |