C++借助Eigen库实现矩阵开方(开根号)运算

在matlab中我们可以通过sqrtm()函数实现简单的矩阵开方运算,当使用C++时,可以通过以下函数实现。

1、添加头文件:

#include "Eigen/Eigen"
#include "Eigen/Eigenvalues"

2、开方函数:

//A为待开方的矩阵,N为A矩阵的行数
Eigen::MatrixXd  MatrixSqrt( const Eigen::MatrixXd & A, int N )
{//只进行开方,不检查矩阵是否可以开方,当矩阵不能开方时,返回的结果会有错误

	Eigen::SelfAdjointEigenSolver<MatrixXd> adjoint_eigen_solver((A + A.transpose()) / 2.);//求伴随阵的特征值和特征向量
	
	Eigen::MatrixXd mata = Eigen::MatrixXd::Zero(N, 1);

	return adjoint_eigen_solver.eigenvectors() * adjoint_eigen_solver.eigenvalues().cwiseMax(mata).cwiseSqrt().asDiagonal() * adjoint_eigen_solver.eigenvectors().transpose();

}

3、主函数调用

MatrixXd Sqrtm_A = MatrixSqrt(A, A.rows());//相当于matlab的sqrtm(A)或A^(1/2)

在matlab中我们可以通过sqrtm()函数实现简单的矩阵开方运算,当使用C++时,可以通过以上函数实现。

你可能感兴趣的:(c++,矩阵,matlab)