GSL 中的广义反函数
Generalized Inverse function in GSL
有没有使用GSL计算矩阵广义逆的函数?
就像在 R 中一样,我们有 ginv(X, tol = sqrt(.Machine$double.eps))
.
没有。好像没有直接计算矩阵伪逆的例程(虽然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
.
应用前,必须通过例程gsl_linalg_SV_decomp
找到SVD。您提到的容差因子 tol
可以通过遍历奇异值 S
并将那些小于 tol
的值设置为零来合并。
(此外,这是个人建议:放弃 gsl 并切换到 Eigen、armadillo 或类似的现代库)
有没有使用GSL计算矩阵广义逆的函数?
就像在 R 中一样,我们有 ginv(X, tol = sqrt(.Machine$double.eps))
.
没有。好像没有直接计算矩阵伪逆的例程(虽然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
.
应用前,必须通过例程gsl_linalg_SV_decomp
找到SVD。您提到的容差因子 tol
可以通过遍历奇异值 S
并将那些小于 tol
的值设置为零来合并。
(此外,这是个人建议:放弃 gsl 并切换到 Eigen、armadillo 或类似的现代库)