![]() |
Симметричная вещественная матрица A может быть представлена в виде A = P·T·P T, где P - ортогональная матрица, T - трехдиагональная матрица. Обычно это разложение матрицы находит применение в подпрограммах поиска собственных чисел вещественнных матриц. Менее известным является тот факт, что не только симметричная вещественная, но и любая эрмитова матрица может быть приведена к трехдиагональной форме унитарным преобразованием: A = Q·T·Q H.
Замечание #1
Особый интерес представляет то, что в то время, как матрица преобразования Q является унитарной (в общем случае - комплексной), трехдиагональная матрица T является вещественной. Это позволяет применять к эрмитовым матрицам весь богатый арсенал методов поиска собственных значений симметричных вещественных матриц.
Поскольку этот алгоритм представляет из себя адаптацию для комплексной арифметики аналогичного алгоритма в вещественной арифметике, то нет смысла рассматривать здесь детали реализации алгоритма.
В результаты работы подпрограммы HMatrixTD комплексная матрица A замещается трехдиагональной матрицей T и последовательностью преобразований отражения, хранящейся в упакованной форме. Форма, в которой хранятся преобразования, и параметры подпрограммы подробно описаны в комментариях к ней. Для "распаковки" матрицы Q может быть использована подпрограмма HMatrixTDUnpackQ.
Этот алгоритм перенесен из библиотеки 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. |