SingularValueDecompositionBidiagQR

Вычисление сингулярного разложения общей матрицы, предварительно приведенной к бидиагональному виду методом ReduceToBidiagonal. LAPACK-функция BDSQR.

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

bool  matrix::SingularValueDecompositionBidiagQR(
   matrix&         Q,        // ортогональная матрица Q
   matrix&         PT,       // транспонированная матрица P
   vector&         S,        // вектор вычисленных сингулярных значений
   matrix&         U,        // матрица U с вычисленными левыми векторами
   matrix&         VT        // транспонированная матрица V с правыми векторами
   );

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

bool  matrix::SingularValueDecompositionBidiagQR(
   matrix&         Q,        // ортогональная матрица Q
   matrix&         PT,       // транспонированная матрица P
   vectorf&        S,        // вектор вычисленных сингулярных значений
   matrixf&        U,        // матрица U с вычисленными левыми векторами
   matrixf&        VT        // транспонированная матрица V с правыми векторами
   );

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

bool  matrix::SingularValueDecompositionBidiagQR(
   matrix&         Q,        // ортогональная матрица Q
   matrix&         PH,       // эрмитово сопряженная матрица P
   vector          S,        // вектор вычисленных сингулярных значений
   matrixc         U,        // матрица U с вычисленными левыми векторами
   matrixc         VH        // эрмитово сопряженная матрица V с правыми векторами
   );

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

bool  matrix::SingularValueDecompositionBidiagQR(
   matrixf&        Q,        // ортогональная матрица Q
   matrixf&        PH,       // эрмитово сопряженная матрица P
   vectorf&        S,        // вектор вычисленных сингулярных значений
   matrixcf&       U,        // матрица U с вычисленными левыми векторами
   matrixcf&       VH        // эрмитово сопряженная матрица V с правыми векторами
   );

Параметры

Q

[in]  Ортогональная матрица Q, полученная методом ReflectBidiagonalToQP. Если матрица Q имеет нулевой размер, то левые сингулярные векторы U не вычисляются.

PT

[in]  Транспонированная (или эрмитово-сопряжённая — в случае комплексной матрицы) матрица P, полученная методом ReflectBidiagonalToQP. Если матрица PT имеет нулевой размер, то правые сингулярные векторы VT не вычисляются.

S

[out] Вектор сингулярных значений.

U

[out] Матрица левых сингулярных векторов.

VT

[out] Матрица правых сингулярных векторов.

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

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

Примечание

BDSQR вычисляет сингулярные значения и, при необходимости, правые и/или левые сингулярные векторы из сингулярного разложения (SVD) матрицы B размером N на N (верхней или нижней) с бидиагона́льной формой, используя неявный QR-алгоритм с нулевым сдвигом. Сингулярное разложение матрицы B имеет вид:

   B = Q * S * P**T

где S — диагональная матрица сингулярных значений, Q — ортогональная матрица левых сингулярных векторов, а P — ортогональная матрица правых сингулярных векторов. Если нужно вычислить левые сингулярные векторы, эта вместо Q возвращается U∗Q, а если правые сингулярные векторы, вместо PT возвращается P**T*VT для заданных вещественных входных матриц U и VT. Если U и VT — ортогональные матрицы, которые сводят общую матрицу A к бидиагона́льной форме: A = U∗B∗VT, как при вычислении с помощью GEBRD, тогда

   A = (U*Q) * S * (P**T*VT)

— это сингулярное разложение матрицы A.