Eigen实例操作

本人在Ubuntu14.04系统使用Eigen3版本特征函数库,如果在Windows操作环境中使用请自行百度Eigen的配置方法。前提提示:该代码涵盖了Eigen3的部分基本操作,包括矩阵常用操作,线性矩阵的分解,稀疏矩阵的基本操作及分解和空间                    转换的一些操作(如:旋转向量,欧式转换矩阵,四元数,旋转矩阵)。贴出的代码并没有涵盖Eigen3的所有操作,
摘要由CSDN通过智能技术生成

empty
本人在Ubuntu14.04系统使用Eigen3版本特征函数库,如果在Windows操作环境中使用请自行百度Eigen的配置方法。

前提提示:该代码涵盖了Eigen3的部分基本操作,包括矩阵常用操作,线性矩阵的分解,稀疏矩阵的基本操作及分解和空间

                    转换的一些操作(如:旋转向量,欧式转换矩阵,四元数,旋转矩阵)。贴出的代码并没有涵盖Eigen3的所有操作,

                    更加深入的学习请参考Eigen官网

代码亲测可用。

该页面分为四个板块:矩阵的基本操作,

                矩阵的分解方法实例
                稀疏矩阵的操作
                稀疏矩阵的求解
                几何模块(三维空间旋转)
各位可以有针对性的查看










1.矩阵的基本操作

#include<iostream>

#include <Eigen/Dense>
#include <Eigen/Core>
#include <Eigen/LU>


using namespace std;
void
base()
{
    Eigen::Matrix3d m=Eigen::Matrix3d::Random(3,3);
    cout<<"the matrixXd is"<<m<<endl;
    Eigen::Matrix3d n=(m+Eigen::Matrix3d::Constant(3,3,1.2))*50;
    cout<<"the matrix n is "<<n<<endl;
    Eigen::Vector3d v(1,1,3);
    v.asDiagonal();
    //v<<1,2,3;
    Eigen::RowVector2d vv(2,4);
    cout<<" the vector is "<<v<<endl;
    cout<<" the vector vv is "<<vv<<endl;
    cerr<<"Matrix cols and row are "<<m.cols()<<"  "<<m.rows()<<"\nthe size is "<<m.SizeAtCompileTime<<endl;
//    float data[] = {1,2,3,4};
//    Map<Vector3f> v1(data);       // uses v1 as a Vector3f object
//    Map<ArrayXf>  v2(data,3);     // uses v2 as a ArrayXf object
//    Map<Array22f> m1(data);       // uses m1 as a Array22f object
//    Map<MatrixXf> m2(data,2,2);   // uses m2 as a MatrixXf object
//cout<<v1<<endl;
//cout<<v2<<endl;cout<<m1<<endl;cout<<m2<<endl;
//    Eigen::Matrix2cf mat;
//    mat<<1.00256-3.256,2+0,
//            3.015-0.12,5.178-9541i;
//    cerr<<"mat is" <<mat<<endl;
    Eigen::Matrix3d m1;
    m1<<1,2,1,8,0,9,7,33,47;

    cout<<"m1  "<<m1<<endl;
    cout<<"m1 transpose "<<m1.transpose()<<endl;
    cout<<"m1 conjugate "<<m1.conjugate()<<endl;
    cout<<"m1 adjoint "<<m1.adjoint()<<endl;
    Eigen::SelfAdjointEigenSolver<Eigen::Matrix3d> eigen_solver(m1.transpose()*m1);
    cerr<<"eigen value "<<eigen_solver.eigenvalues()<<endl;
    cerr<<"eigen vector "<<eigen_solver.eigenvectors()<<endl;

  //  Eigen::Array<float,1,2> a;
    Eigen::Array<float,2,2>a;
    a<<4, 5, 8, 1;
    cout<<"a is \n"<<a<<endl;
    cerr<<"a inverse"<<a.inverse()<<endl;
 //   cout<<"a array max "<<a.pow()<<endl<<endl;
    Eigen::Matrix<float,2,2> mt,mt1;
    mt<<4,-5,8,1;
    mt1<<-4,5,8,-1;
    mt.col(0).swap(mt1.col(0));
    cout<<"mt min coefficient "<<mt.minCoeff()<<" "<<"mt max coeffcient "<<mt.maxCoeff()<<"cols max "<<mt.colwise().maxCoeff()<<"rows min"<<mt.rowwise().minCoeff()<<endl;
    cout<<"mt is \n"<<mt<<endl;
    cout<<"mt1 is "<<mt1<<endl;
    cout<<"mt inverse is\n"<<mt.inverse()<<endl;;
    cout<<" ABS suqare \n"<<mt.cwiseAbs2()<<endl;
    cout<<" matrix inverse \n"<<mt.cwiseInverse()<<endl;
    cout<<"matrix sqrt \n"<<mt.cwiseSqrt()<<endl;
    cout<<"matrix square \n"<<mt.array().square()<<endl;
    cout<<"matrix ABS IS\n"<<mt.cwiseAbs()<<endl;
    cout<<" is queal \n"<<mt.cwiseEqual(mt1)<<endl;


   Eigen::MatrixXd matrix1=Eigen::MatrixXd::Random(8,8);
   cout<<"matrix1 is \n"<<matrix1<<endl;
   cout<<"matrix1 block is \n"<<matrix1.block<1,1>(1,1)<<endl;
   cout<<"matrix1 topLeftCorner is\n"<<matrix1.topLeftCorner(3,2)<<endl;
   cout<<"matrix1 bottomLeftCorner is \n"<<matrix1.bottomLeftCorner(2,3)<<endl;
   cout<<"matrix1 topRightCorner is \n"<<matrix1.topRightCorner(2,3)<<endl;
   cout<<"matrix1 bottomRightCorner is \n"<<matrix1.bottomRightCorner(4,3)<<endl;
   cout<<"matrix1 toprows is \n"<<matrix1.topRows(2)<<endl;
   cout<<"matrix1 bottomrows is \n"<<matrix1.bottomRows(3)<<endl;
   cout<<"matrix1 leftCols is \n"<<matrix1.leftCols(1)<<endl;
   cout<<"matrix1 rightCols is \n"<<matrix1.rightCols(2)<<endl;
   cout<<"replicate 1 time matrix1 \n"<<matrix1.replicate(1,2)<<endl<<endl;
   cout<<"replicate matrix1 rowwise is \n"<<matrix1.rowwise().replicate(1)<&
  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值