矩阵开方 / 矩阵平方根的计算方法 及 程序实现
程序员文章站
2022-06-16 17:25:55
...
代码实现:
// 返回正定对称矩阵的开方, 实际上就是对矩阵的特征值开方
template <typename FloatType, int N>
Eigen::Matrix<FloatType, N, N> MatrixSqrt(
const Eigen::Matrix<FloatType, N, N>& A)
{
CheckSymmetric(A); //检查是否时对称矩阵
Eigen::SelfAdjointEigenSolver<Eigen::Matrix<FloatType, N, N>>
adjoint_eigen_solver((A + A.transpose()) / 2.);
const auto& eigenvalues = adjoint_eigen_solver.eigenvalues();
CHECK_GT(eigenvalues.minCoeff(), -1e-5) //R.minCoeff() 意思是 min(R(:))最小值
<< "MatrixSqrt failed with negative eigenvalues: "
<< eigenvalues.transpose();
return adjoint_eigen_solver.eigenvectors() *
adjoint_eigen_solver.eigenvalues()
.cwiseMax(Eigen::Matrix<FloatType, N, 1>::Zero()) //R.cwiseMax(P) 的意思是max(R, P) 对应取大
.cwiseSqrt() //// R.cwiseSqrt()意思是sqrt(P)
.asDiagonal() * // x.asDiagonal()意思是 diag(x)对角阵(没有重载<<)
adjoint_eigen_solver.eigenvectors().transpose();
}
公式推导过程转载自: https://blog.csdn.net/DoctorCuiLab/article/details/83048600
上一篇: 数学模式中的多行数学公式
推荐阅读
-
PHP实现顺时针打印矩阵及螺旋矩阵的方法
-
PHP实现图的邻接矩阵表示及几种简单遍历算法分析
-
实现两个矩阵相乘的C语言程序
-
矩阵开方 / 矩阵平方根的计算方法 及 程序实现
-
PHP实现图的邻矩阵及普利姆算法(Prim)
-
邻接矩阵prim:php实现图的邻接矩阵及普里姆(prim算法),弗洛伊德(floyd),迪杰斯特拉(dijkstra)算法
-
邻接矩阵prim:php实现图的邻接矩阵及普里姆(prim算法),弗洛伊德(floyd),迪杰斯特拉(dijkstra)算法
-
PHP实现顺时针打印矩阵及螺旋矩阵的方法
-
PHP实现顺时针打印矩阵及螺旋矩阵的方法
-
PHP实现图的邻接矩阵表示及几种简单遍历算法分析