Eigen练习
#include<iostream>
#include<ctime>
#include<Eigen/Core>
#include<Eigen/Dense>
using namespace Eigen;
using namespace std;
int main(){
Matrix<double,2,3> M23;
Vector3d V3;
Matrix3d M33=Matrix3d::Zero();
Matrix<double, Dynamic,Dynamic> Mtest(3,3);
MatrixXd Mtest1(3,3);
Mtest <<1,2,3,
4,5,6,
7,8,9;
cout<<Mtest<<endl;
cout<<M33(0,0)<<endl;
M33=Matrix3d::Random();
cout<<M33<<endl<<endl;
Mtest1=M33*Mtest;
cout<<Mtest1<<endl<<endl;
cout<<M33.transpose()<<endl<<endl;
cout<<M33.sum()<<endl<<endl;
cout<<M33.trace()<<endl<<endl;
cout<<M33.determinant()<<endl<<endl;
SelfAdjointEigenSolver<Matrix3d> eigen_solver(M33.transpose()*M33);
cout<<eigen_solver.eigenvalues()<<endl<<endl;
cout<<eigen_solver.eigenvectors()<<endl<<endl;
MatrixXd matrixNN=MatrixXd::Random(50,50);
VectorXd v_N=VectorXd::Random(50);
clock_t c1=clock();
auto x=v_N;
x=matrixNN.inverse()*v_N;
cout<<"Time:"<<1000*(clock()-c1)/(double)CLOCKS_PER_SEC<<"ms"<<endl;
c1=clock();
auto v=v_N;
v=matrixNN.colPivHouseholderQr().solve(v_N);
cout<<"Time:"<<1000*(clock()-c1)/(double)CLOCKS_PER_SEC<<"ms"<<endl;
x=x-v;
auto c=x.sum();
cout<<c<<endl;
return 0;
}
Eigen几何模块
#include <iostream>
#include <cmath>
#include <Eigen/Core>
#include <Eigen/Geometry>
using namespace std;
using namespace Eigen;
int main(int argc,char** argv){
Matrix3d testMatrix=Matrix3d::Identity();
AngleAxisd rotationV(M_PI_4,Vector3d (0,0,1));
cout.precision(3);
cout<<"Rotation matrix:\n "<<rotationV.matrix()<<endl;
cout<<"Rotation matrix:\n "<<rotationV.toRotationMatrix()<<endl;
testMatrix=rotationV.matrix();
Eigen::Vector3d v ( 1,0,0 );
v<<1,0,0;
Eigen::Vector3d v_rotated = rotationV * v;
cout<<"(1,0,0) after rotation = "<<v_rotated<<endl;
v_rotated=rotationV.matrix()*v;
cout<<"(1,0,0) after rotation = "<<v_rotated.transpose()<<endl;
Vector3d eulerAngle=testMatrix.eulerAngles(2,1,0);
cout<<"Euler angle (yaw, pitch ,roll )"<<eulerAngle.transpose()<<endl;
Isometry3d T=Isometry3d::Identity();
T.rotate(rotationV);
T.pretranslate(Vector3d(1,3,4));
cout<<"Transform matrix=\n"<<T.matrix()<<endl;
Vector3d V_T=T*v;
cout<<V_T<<endl;
Quaterniond q=Quaterniond(rotationV);
cout<<"Quaternion q ="<<q.coeffs().transpose()<<endl;
q=Quaterniond(testMatrix