Есть ли какая-либо функция для вычисления Обобщенного инверсного матрицы с использованием GSL? Как в R, мы имеем ginv(X, tol = sqrt(.Machine$double.eps))
.Обобщенная инверсная функция в GSL
1
A
ответ
2
Нет. Кажется, что нет никакой программы для прямого вычисления псевдоинверсивной матрицы (хотя here вы можете найти дискуссию о том, как ее можно получить).
Однако явное псевдообратное требование редко требуется. Вместо этого gsl предоставляет подпрограмму
int gsl_linalg_SV_solve (const gsl_matrix * U, const gsl_matrix * V, const gsl_vector * S
, const gsl_vector * b, gsl_vector * x)
см. Документацию here.
Это решает линейную систему A x = b
, что эквивалентно применению псевдо-обратной A^+
на b
и выходы x = A^+ b
.
Перед применением SVD необходимо найти с помощью процедуры gsl_linalg_SV_decomp
. Допустимый множитель tol
можно включить путем обхода особых значений S
и установки значений, меньших tol
, на ноль.
(Далее, это личное предложение: отбросьте gsl и переключитесь на Eigen, armadillo или сопоставимые современные библиотеки)