FactorizationQRTallSkinny

Вычисляет блочное QR-разложение высокой узкой матрицы размера m на n (m>n): A = Q * R. Функция LAPACK LATSQR.

Вычисления для типа matrix<double>

bool  matrix::FactorizationQRTallSkinny(
   long&           mb,           // размер блока строк для блочного QR-разложения
   long&           nb,           // размер блока столбцов для блочного QR-разложения
   matrix&         Q,            // ортогональная матрица Q
   matrix&         R             // верхнетреугольная матрица R
   );

Вычисления для типа matrix<float>

bool  matrix::FactorizationQRTallSkinny(
   long&           mb,           // размер блока строк для блочного QR-разложения
   long&           nb,           // размер блока столбцов для блочного QR-разложения
   matrixf&        Q,            // ортогональная матрица Q
   matrixf&        R             // верхнетреугольная матрица R
   );

Вычисления для типа matrix<complex>

bool  matrix::FactorizationQRTallSkinny(
   long&           mb,           // размер блока строк для блочного QR-разложения
   long&           nb,           // размер блока столбцов для блочного QR-разложения
   matrixc&        Q,            // унитарная матрица Q
   matrixc&        R             // верхнетреугольная матрица R
   );

Вычисления для типа matrix<complexf>

bool  matrix::FactorizationQRTallSkinny(
   long&           mb,           // размер блока строк для блочного QR-разложения
   long&           nb,           // размер блока столбцов для блочного QR-разложения
   matrixcf&       Q,            // унитарная матрица Q
   matrixcf&       R             // верхнетреугольная матрица R
   );

Параметры

mb

[in,out] Размер блока строк для блочного QR-разложения. MB > N. Если в параметре передано значение 0, оптимальное значение MB будет вычислено функцией ILAENV и возвращено.

nb

[in,out] Размер блока столбцов для блочного QR-разложения. N >= NB >= 1. Если в параметре передано значение 0, оптимальное значение NB будет вычислено функцией ILAENV и возвращено.

Q

[out]  Ортогональная или унитарная матрица Q.

R

[out]  Верхнетреугольная матрица R.

 

Возвращаемое значение

Возвращает true в случае успеха, иначе false в случае ошибки.

Примечание

Несмотря на то, что LAPACK-функция ILAENV рассчитывает оптимальные значения MB и NB, можно самостоятельно подобрать эти параметры с учётом размера кеша процессора. Это даст значительный прирост производительности. Хорошее правило:

NB = min(N, 32 или 64)

MB = max(2*N, cache_target_rows)

MB = min(M-1, MB)

где cache_target_rows выбирается так, чтобы блок MB x N помещался в кеш L2/L3: MB ≈ cache_bytes / (8 * N) для типа double.