SingularValueDecompositionJacobiHigh

Singular Value Decomposition — разложение по сингулярным значениям, алгоритм Jacobi high level (LAPACK-функция GEJSV).

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

bool  matrix::SingularValueDecompositionJacobiHigh(
   ENUM_SVDJH_A   joba,            // уровень точности расчёта
   ENUM_SVDJH_U   jobu,            // способ вычисления левых векторов
   ENUM_SVDJH_V   jobv,            // способ вычисления правых векторов
   ENUM_SVDJH_R   jobr,            // определение диапазона вычисляемых сингулярных значений
   ENUM_SVDJH_T   jobt,            // определение необходимости транспонирования при вычислении квадратной матрицы
   ENUM_SVDJH_P   jobp,            // определение возможности структурированных пертурбаций для удаления денормализованных значений
   vector&        S,               // вектор рассчитанных сингулярных значений
   matrix&        U,               // матрица рассчитанных левых векторов U
   matrix&        V,               // матрица рассчитанных левых векторов V
   vector&        work_results     // дополнительные результаты вычисления
   );

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

bool  matrix::SingularValueDecompositionJacobiHigh(
   ENUM_SVDJH_A   joba,            // уровень точности расчёта
   ENUM_SVDJH_U   jobu,            // способ вычисления левых векторов
   ENUM_SVDJH_V   jobv,            // способ вычисления правых векторов
   ENUM_SVDJH_R   jobr,            // определение диапазона вычисляемых сингулярных значений
   ENUM_SVDJH_T   jobt,            // определение необходимости транспонирования при вычислении квадратной матрицы
   ENUM_SVDJH_P   jobp,            // определение возможности структурированных пертурбаций для удаления денормализованных значений
   vectorf&       S,               // вектор рассчитанных сингулярных значений
   matrixf&       U,               // матрица рассчитанных левых векторов U
   matrixf&       V,               // матрица рассчитанных левых векторов V
   vector&        work_results     // дополнительные результаты вычисления
   );

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

bool  matrix::SingularValueDecompositionJacobiHigh(
   ENUM_SVDJH_A   joba,            // уровень точности расчёта
   ENUM_SVDJH_U   jobu,            // способ вычисления левых векторов
   ENUM_SVDJH_V   jobv,            // способ вычисления правых векторов
   ENUM_SVDJH_R   jobr,            // определение диапазона вычисляемых сингулярных значений
   ENUM_SVDJH_T   jobt,            // определение необходимости транспонирования при вычислении квадратной матрицы
   ENUM_SVDJH_P   jobp,            // определение возможности структурированных пертурбаций для удаления денормализованных значений
   vectorc&       S,               // вектор рассчитанных сингулярных значений
   matrixc&       U,               // матрица рассчитанных левых векторов U
   matrixc&       V,               // матрица рассчитанных левых векторов V
   vector&        work_results     // дополнительные результаты вычисления
   );

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

bool  matrix::SingularValueDecompositionJacobiHigh(
   ENUM_SVDJH_A    joba,                   // уровень точности расчёта
   ENUM_SVDJH_U    jobu,                   // способ вычисления левых векторов
   ENUM_SVDJH_V    jobv,                   // способ вычисления правых векторов
   ENUM_SVDJH_R    jobr,                   // определение диапазона вычисляемых сингулярных значений
   ENUM_SVDJH_T    jobt,                   // определение необходимости транспонирования при вычислении квадратной матрицы
   ENUM_SVDJH_P    jobp,                   // определение возможности структурированных пертурбаций для удаления денормализованных значений
   vectorf&        singular_values,        // вектор рассчитанных сингулярных значений S
   matrixcf&       u,                      // матрица рассчитанных левых векторов U
   matrixcf&       v,                      // матрица рассчитанных левых векторов V
   vectorf&        work_results            // дополнительные результаты вычисления
   );

Параметры

joba

[in]  Значение из перечисления ENUM_SVDJH_A, определяющее уровень точности расчёта SVD.

jobu

[in]  Значение из перечисления ENUM_SVDJH_U, определяющее способ вычисления левых сингулярных векторов.

jobv

[in]  Значение из перечисления ENUM_SVDJH_V, определяющее способ вычисления правых сингулярных векторов.

jobr

[in]  Значение из перечисления ENUM_SVDJH_R, определяющее диапазон вычисляемых значений.

jobt

[in]  Значение из перечисления ENUM_SVDJH_T, определяющее необходимость транспонирования матрицы в случае, когда он квадратная. Если матрица неквадратная, то этот параметр игнорируется.

jobp

[in]  Значение из перечисления ENUM_SVDJH_P, определяющее возможность структурированных пертурбаций для удаления денормализованных значений.

S

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

При work(1)/work(2) = единица: сингулярные значения A. Во время вычисления S содержит евклидовы нормы столбцов итерационных матриц в массиве a.

Для work(1)≠work(2): сингулярные значения A равны (work(1)/work(2)) * S(1:n). Такая факторизованная форма используется в случаях, когда σ_max(A) выходит за пределы диапазона представления чисел (overflow, переполнение) или если малые сингулярные значения были сохранены от потери точности (underflow) путем масштабирования входной матрицы A.

При jobr = 'R' некоторые сингулярные значения могут быть возвращены как точные нули, полученные путем "обнуления", если они ниже порога численного ранга или являются денормализованными числами.

U

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

V

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

work_results

[out]  Вектор, состоящий из 7 статистик, полученных в результате расчёта.

work(1) = scale = work(2)/work(1) — коэффициент масштабирования, такой что scale*sva(1:n) — вычисленные сингулярные значения A. См. также описание S.

work(2) = work(1) — см. описание work(1).

work(3) = sconda — это оценка числа обусловленности столбца, уравновешенного A. Если joba = 'E' или 'G', sconda — это оченка sqrt(||(R**t * R)**(-1)||_1). Вычисляется с использованием ?pocon. Удовлетворяет неравенству n**(-1/4) * sconda ≤ ||R**(-1)||_2 ≤ n**(1/4) * sconda, где R — треугольный множитель из QR-разложения матрицы A. Если же R усечен и численный ранг оказывается строго меньше n, sconda возвращается как -1, что означает, что самые малые сингулярные значения могут быть утеряны.

Если требуется полное разложение по сингулярным значениям SVD, для анализа алгоритма полезны следующие два числа обусловленности. Для из использования нужно понимать особенности и детали метода.

work(4) — оценка числа обусловленности треугольного множителя в первом QR-разложении.

work(5) — оценка числа обусловленности треугольного множителя во втором QR-разложении.

Если jobt = 'T', вычисляются два дополнительных параметра. Для их использования необходимо понимать особенности и детали метода.

work(6) — энтропия матрицы A**t*A, равная энтропии Шеннона diag(A**t*A) / Trace(A**t*A), взятой как точка в симплексе вероятности.

work(7) — энтропия матрицы A*A**t.

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

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

Примечание

Количество строк матрицы не должно быть меньше количества столбцов.

ENUM_SVDJH_A

Перечисление, определяющее уровень точности расчёта SVD.

Идентификатор

Описание

SVDJHA_C

Вычисление как в 'C', но с дополнительной оценкой числа обусловленности. Это дает более реалистичную границу погрешности.

SVDJHA_E

Вычисление как в SVDJHA_C, но с дополнительной оценкой числа обусловленности. Это дает более реалистичную границу погрешности.

SVDJHA_F

Более высокая точность, чем у SVDJHA_C.

SVDJHA_G

Вычисление как в SVDJHA_F, но с дополнительной оценкой числа обусловленности.

SVDJHA_A

Малые сингулярные значения считаются шумом, и матрица рассматривается как численно вырожденная по рангу.

SVDJHA_R          

Аналогично SVDJHA_A, но с повышенной точностью.

ENUM_SVDJH_U

Перечисление, определяющее способ вычисления левых сингулярных векторов.

Идентификатор

Описание

SVDJHU_U

Возвращаются N столбцов матрицы U в массиве U.

SVDJHU_F

Возвращается полный набор из M левых сингулярных векторов в массиве U.

SVDJHU_N

Матрица U не вычисляется.

ENUM_SVDJH_V

Перечисление, определяющее способ вычисления правых сингулярных векторов.

Идентификатор

Описание

SVDJHV_V

Возвращаются N столбцов матрицы V в массиве V.

SVDJHV_J

В массиве V возвращаются N столбцов матрицы V, но они вычисляются как произведение вращений Якоби.

SVDJHV_N

V is not computed

ENUM_SVDJH_R

Перечисление, определяющее диапазон вычисляемых значений.

Идентификатор

Описание

SVDJHR_N

Не обнулять малые столбцы матрицы c*A.

SVDJHR_R

Ограниченный диапазон для sigma(c*A). Этот вариант рекомендуется.

ENUM_SVDJH_T

Перечисление, определяющее необходимость транспонирования матрицы в случае, когда он квадратная.

Идентификатор

Описание

SVDJHT_T

Транспонировать, если энтропийный тест указывает на возможную более быструю сходимость процесса Якоби.

SVDJHT_N

Не использовать транспонирование. Не делать предположений.

ENUM_SVDJH_P

Перечисление, определяющее возможность структурированных пертурбаций для удаления денормализованных значений.

Идентификатор

Описание

SVDJHP_P

Использовать пертурбацию.

SVDJHP_N          

Не использовать пертурбацию. Do not perturb.

Смотри также

SingularValueDecompositionDC, SingularValueDecompositionQR