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

Приведение прямоугольной матрицы к двухдиагональной форме

Прямоугольная матрица A может быть представлена в виде A = Q·B·P T, где Q и P - ортогональные матрицы, B - двухдиагональная матрица.

Как и другие алгоритмы ортогональной факторизации (например, алгоритмы QR и LQ-разложения), этот алгоритм использует последовательность элементарных отражений для преобразования матрицы A. Преобразования применяются к матрице слева и справа, последовательно устраняя внедиагональные элементы, пока не будут обнулены все диагонали, кроме двух. Если число строк матрицы A не меньше числа столбцов, то мы получим верхнюю двухдиагональную матрицу, иначе мы получим нижнюю двухдиагональную матрицу.

В результаты работы подпрограммы RMatrixBD матрица A замещается двухдиагональной матрицей B и последовательностью преобразований отражения, хранящейся в упакованной форме. Форма, в которой хранятся преобразования, и параметры подпрограммы подробно описаны в комментариях к ней.

Во многом прослеживается аналогия с QR-разложением, которое использует нижнюю часть матрицы R для хранения матрицы Q, только здесь в упакованной форме хранится не одна, а две матрицы - матрица Q хранится под диагоналями матрицы B, а матрица P хранится над ними.

Как и в случае с QR-разложением, представлены подпрограммы для "распаковки" матриц Q и P: RMatrixBDUnpackQ и RMatrixBDUnpackPT. Первая подпрограмма позволяет получить всю матрицу Q или часть её столбцов, вторая подпрограмма позволяет получить всю матрицу P T или часть её строк. Подпрограмма RMatrixBDUnpackDiagonals позволяет "распаковать" диагонали двухдиагональной матрицы.

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

Manual entries

C++ ortfac.h   
C# ortfac.cs   
MPFR ortfac.h   
Delphi ortfac.pas   
FreePascal ortfac.pas   
VBA ortfac.bas   

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

 

Visual Basic

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

Downloads page

 

 

ALGLIB project, 1999-2010