SLAM-ch3-实践Eigen

2023-05-16

1. eigenMatrix.cpp

#include <iostream>
#include <ctime>

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

using namespace std;

#define MATRIX_SIZE 50

int main(int argc, char *argv[])
{
    Eigen::Matrix<float, 2, 3> matrix_23;
    
    Eigen::Vector3d v_3d;
    
    Eigen::Matrix3d matrix_33 = Eigen::Matrix3d::Zero();
    
    Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> matrix_dynamic;
    
    Eigen::MatrixXd matrix_x;
    
    matrix_23 << 1, 2, 3, 4, 5, 6;
    cout << "matrix_23:"<<endl;
    cout << matrix_23 << endl;
    
    cout << "matrix_23:" << endl;
    for (int i=0;i<2;++i){
        for (int j=0;j<3;++j){
            cout<<matrix_23(i,j)<<endl;
        }
    }
    
    v_3d << 1, 2,3;
    
    Eigen::Matrix<double, 2,1> result=matrix_23.cast<double>() * v_3d;
    cout<<"result:"<<endl;
    cout<<result<<endl;
    
    matrix_33 = Eigen::Matrix3d::Random();
    cout << "matrix_33:" <<endl;
    cout << matrix_33 <<endl;
    
    cout <<"matrix_33.transpose():"<<matrix_33.transpose() <<endl;
    cout <<"matrix_33.sum():"<<matrix_33.sum()<<endl;
    cout <<"matrix_33.trace():"<<matrix_33.trace()<<endl;
    cout <<"matrix_33 * 10"<<matrix_33 * 10<<endl;
    cout <<"matrix_33.inverse():"<<matrix_33.inverse()<<endl;
    cout<<"matrix_33.determinant():"<<matrix_33.determinant()<<endl;
    
    Eigen::SelfAdjointEigenSolver<Eigen::Matrix3d> eigen_slover(matrix_33.transpose()*matrix_33);
    cout<<"eigen_slover.eigenvalues():"<<eigen_slover.eigenvalues()<<endl;
    cout<<"eigen_slover.eigenvectors():"<<eigen_slover.eigenvectors()<<endl;
    
    Eigen::Matrix<double, MATRIX_SIZE, MATRIX_SIZE> matrix_NN;
    matrix_NN = Eigen::MatrixXd::Random(MATRIX_SIZE, MATRIX_SIZE);
    Eigen::Matrix<double, MATRIX_SIZE, 1> v_Nd;
    v_Nd = Eigen::MatrixXd::Random(MATRIX_SIZE, 1);
    
    clock_t time_stt=clock();
    Eigen::Matrix<double, MATRIX_SIZE, 1> x=matrix_NN.reverse()*v_Nd;
    cout<<"time use in normal invers is"<<1000*(clock()-time_stt)/(double)CLOCKS_PER_SEC<<"ms"<<endl;
    
    time_stt=clock();
    x=matrix_NN.colPivHouseholderQr().solve(v_Nd);
    cout<<"time use in Qr compsition is"<<1000*(clock()-time_stt)/(double)CLOCKS_PER_SEC<<"ms"<<endl;
    
    
    return 0;
}
 

2. CMakeLists.txt

cmake_minimum_required(VERSION 3.0)

project(useEigen)

set(CMAKE_BUILD_TYPE "Debug")

set(CMAKE_CXX_FLAGS "-O3")

include_directories("usr/include/eigen3")

add_executable(eigenMatrix eigenMatrix.cpp)


3. 查看执行结果

/home/wzl/work/slambook/ch3/eigen/build> /home/wzl/work/slambook/ch3/eigen/build/eigenMatrix
matrix_23:
1 2 3
4 5 6
matrix_23:
1
2
3
4
5
6
result:
14
32
matrix_33:
 0.680375   0.59688 -0.329554
-0.211234  0.823295  0.536459
 0.566198 -0.604897 -0.444451
matrix_33.transpose(): 0.680375 -0.211234  0.566198
  0.59688  0.823295 -0.604897
-0.329554  0.536459 -0.444451
matrix_33.sum():1.61307
matrix_33.trace():1.05922
matrix_33 * 10 6.80375   5.9688 -3.29554
-2.11234  8.23295  5.36459
 5.66198 -6.04897 -4.44451
matrix_33.inverse():-0.198521   2.22739    2.8357
  1.00605 -0.555135  -1.41603
 -1.62213   3.59308   3.28973
matrix_33.determinant():0.208598
eigen_slover.eigenvalues():0.0242899
 0.992154
  1.80558
eigen_slover.eigenvectors():-0.549013 -0.735943  0.396198
 0.253452 -0.598296 -0.760134
-0.796459  0.316906 -0.514998
time use in normal invers is0.002ms
time use in Qr compsition is0.049ms
*** 已完成 ***

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SLAM-ch3-实践Eigen 的相关文章

  • eigen 是否有像 H.transpose()*H 这样的自转置乘法优化

    我浏览过 eigen 的教程https eigen tuxfamily org dox devel group TutorialMatrixArithmetic html 它说 注意 对于担心性能的 BLAS 用户 c noalias 2
  • 通过 CMake 添加外部库(例如 Eigen)

    我已经处理这个问题几个星期了 我知道我可能只是错过了一个我没有意识到的小步骤 因此 任何见解都将受到高度赞赏 我正在尝试添加一些外部库并在我的 C 项目中使用它们 但似乎无法弄清楚如何 我阅读了互联网上有关添加外部库的所有帖子 但我相信我错
  • Eigen 库 - 矩阵的伪逆(Matlab - pinv)

    我正在尝试使用特征库找到矩阵的伪逆 他们有一个类确实实现了它 但是我不知道如何编写脚本语法 这是它在网站上显示的方式 https eigen tuxfamily org dox classEigen 1 1CompleteOrthogona
  • 在 C++ 中重塑张量

    TensorFlow 的 C 接口似乎没有 reshape 方法 有谁知道如何转换 例如 A B C D into A B C D 看起来唯一的方法就是使用 Eigen 然而 那里的文档非常薄弱 代码是模板地狱 不容易解析 检查重塑张量是否
  • Eigen::Tensor 和 Eigen::Matrix 性能比较

    我想用单个 3 D Eigen Tensor 替换代码中的一系列矩阵 考虑到这一点 我尝试比较张量和矩阵的性能 下面的函数 tensorContractTest 执行 n n n 3 阶张量与大小为 n n 500 的 1 阶张量的收缩 此
  • 在 Windows 中配置 cmake 项目时未找到 Eigen3_DIR

    我想编译一个开放项目 https github com ppwwyyxx OpenPano 它需要 Eigen3 我遵循了它的指南 但停留在这一步 将环境变量 Eigen3 DIR 设置为 YOUR EIGEN3 DIRECTORY eig
  • 如何在 CUDA 内核中使用 Eigen

    Eigen 是一个 C 线性代数库http eigen tuxfamily org http eigen tuxfamily org 使用基本数据类型 例如基本浮点数组 很容易 只需将其复制到设备内存并将指针传递给 cuda 内核即可 但是
  • 从稀疏矩阵中提取块作为另一个稀疏矩阵

    如何从a中提取一个块Eigen SparseMatrix
  • 使用特征值测试奇点:识别共线列

    我正在尝试使用特征值方法检查我的矩阵是否是奇异的 即 如果特征值之一为零 则矩阵是奇异的 这是代码 z lt matrix c 3 2 1 4 9 6 3 12 5 5 9 4 nrow 4 ncol 3 eigen t z z value
  • 为什么 C++ 编译器不做更好的常量折叠?

    我正在研究加速大部分 C 代码的方法 该代码具有用于计算雅可比的自动导数 这涉及在实际残差中做一些工作 但大部分工作 基于分析的执行时间 是计算雅可比矩阵 这让我感到惊讶 因为大多数雅可比都是从 0 和 1 向前传播 所以工作量应该是函数的
  • Eigen::MatrixXd typedef 的替换

    全部更换最简单的方法是什么Eigen MatrixXds and Eigen VectorXd具有向量和矩阵long double元素 我的代码中的每个基本浮点变量都是类型long double 另外 每次使用矩阵或向量时 我都会使用以下类
  • 将特征矩阵转换为 C 数组

    The Eigen http eigen tuxfamily org 库可以将现有内存映射到特征矩阵 float array 3 Map
  • 连接稀疏矩阵特征值

    我在特征中有两个稀疏矩阵 我想将它们垂直连接成一个 例如 代码的目标是 SparseMatrix
  • C++ 在张量流中使用 Eigen

    张量流和特征值之间有什么关系 特别是关于tensor数据结构 有一些较旧的引文 例如 其中指出tensorflow正在广泛使用Eigen 据我所知 tensorflow人员已经扩展了Eigen代码 然而 最近的张量流文档似乎没有明确提及 E
  • cygwin_exception::open_stackdumpfile:将堆栈跟踪转储到 *.exe.stackdump

    我收到 cygwin exception open stackdumpfile 将堆栈跟踪转储到 TestProject exe stackdump 错误 我的项目只不过是一个 C HalloWorld 项目 其中包含一个附加类 我在其中设
  • 重用 Eigen::SimplicialLLT 的符号分解

    我在 Eigen 库的 API 上遇到了一些困难 即用于稀疏矩阵 Cholesky 分解的 SimplcialLLT 类 我需要分解三个矩阵 然后用它们来求解许多方程组 仅更改右侧 因此我只想将这些矩阵分解一次 然后重新使用它们 此外 它们
  • Eigen 如何沿特定维度连接矩阵?

    我有两个特征矩阵 我想将它们连接起来 就像在 matlab 中一样cat 0 A B eigen 有等价物吗 Thanks 您可以使用逗号初始值设定项语法 水平方向 MatrixXd C A rows A cols B cols C lt
  • Eigen 库:在函数中返回矩阵块作为左值

    我试图将矩阵块作为函数的左值返回 假设我的函数如下所示 Block
  • 如何查看Eigen C++模板库的版本号?

    我添加了几个不同版本的 Eigen 默认值 包括 Visual C 的目录 但是我在使用的时候遇到了崩溃的问题LDLT Cholesky 分解 一些测试数值示例 所以我想在调试代码时确定哪个版本实际上是活动的 是否有任何函数可以指示当前活动
  • 特征矩阵库逐系数模运算

    在我正在开发的项目的一个函数中 我需要找到特征库矩阵的每个元素除以给定数字后的余数 这是与我想要做的等效的 Matlab mod X num 其中 X 是被除数矩阵 num 是除数 实现这一目标的最简单方法是什么 您可以使用 C 11 la

随机推荐