- SingularValueDecompositionDC
- SingularValueDecompositionQR
- SingularValueDecompositionQRPivot
- SingularValueDecompositionBisect
- SingularValueDecompositionJacobiHigh
- SingularValueDecompositionJacobiLow
- SingularValueDecompositionBidiagDC
- SingularValueDecompositionBidiagBisect
- SingularValueDecompositionBidiagQR
SingularValueDecompositionBidiagQR
Вычисление сингулярного разложения общей матрицы, предварительно приведенной к бидиагональному виду методом ReduceToBidiagonal. LAPACK-функция BDSQR.
Вычисления для типа matrix<double>
bool matrix::SingularValueDecompositionBidiagQR(
|
Вычисления для типа matrix<float>
bool matrix::SingularValueDecompositionBidiagQR(
|
Вычисления для типа matrix<complex>
bool matrix::SingularValueDecompositionBidiagQR(
|
Вычисления для типа matrix<complexf>
bool matrix::SingularValueDecompositionBidiagQR(
|
Параметры
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.