vscode配置eigen3

2023-11-12

目录

1. 头文件包含

2. c_cpp_properties.json

3. CMakeList.txt

4. 完整代码


 

1. 头文件包含

// Eigen 核心部分
#include <Eigen/Core>
// 稠密矩阵的代数运算(逆,特征值等)
#include <Eigen/Dense>

2. c_cpp_properties.json

"/usr/include/**",

"/usr/local/include/**",

"/usr/include/eigen3"

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "/usr/include/**",
                "/usr/local/include/**",
                "/usr/include/eigen3"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/clang",
            "cStandard": "c17",
            "cppStandard": "c++14",
            "intelliSenseMode": "linux-clang-x64"
        }
    ],
    "version": 4
}

3. CMakeList.txt

cmake_minimum_required(VERSION 2.8)
project(useEigen)

set(CMAKE_BUILD_TYPE "Release")
set(CMAKE_CXX_FLAGS "-O3")

# 添加Eigen头文件
# include_directories("/usr/include/eigen3")
add_executable(eigenMatrix eigenMatrix.cpp)

4. 完整代码

#include <iostream>

using namespace std;

#include <ctime>
// Eigen 核心部分
#include <Eigen/Core>
// 稠密矩阵的代数运算(逆,特征值等)
#include <Eigen/Dense>

using namespace Eigen;

#define MATRIX_SIZE 50

/****************************
* 本程序演示了 Eigen 基本类型的使用
****************************/

int main(int argc, char **argv) {
  // Eigen 中所有向量和矩阵都是Eigen::Matrix,它是一个模板类。它的前三个参数为:数据类型,行,列
  // 声明一个2*3的float矩阵
  Matrix<float, 2, 3> matrix_23;

  // 同时,Eigen 通过 typedef 提供了许多内置类型,不过底层仍是Eigen::Matrix
  // 例如 Vector3d 实质上是 Eigen::Matrix<double, 3, 1>,即三维向量
  Vector3d v_3d;
  // 这是一样的
  Matrix<float, 3, 1> vd_3d;

  // Matrix3d 实质上是 Eigen::Matrix<double, 3, 3>
  Matrix3d matrix_33 = Matrix3d::Zero(); //初始化为零
  // 如果不确定矩阵大小,可以使用动态大小的矩阵
  Matrix<double, Dynamic, Dynamic> matrix_dynamic;
  // 更简单的
  MatrixXd matrix_x;
  // 这种类型还有很多,我们不一一列举

  // 下面是对Eigen阵的操作
  // 输入数据(初始化)
  matrix_23 << 1, 2, 3, 4, 5, 6;
  // 输出
  cout << "matrix 2x3 from 1 to 6: \n" << matrix_23 << endl;

  // 用()访问矩阵中的元素
  cout << "print matrix 2x3: " << endl;
  for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 3; j++) cout << matrix_23(i, j) << "\t";
    cout << endl;
  }

  // 矩阵和向量相乘(实际上仍是矩阵和矩阵)
  v_3d << 3, 2, 1;
  vd_3d << 4, 5, 6;

  // 但是在Eigen里你不能混合两种不同类型的矩阵,像这样是错的
  // Matrix<double, 2, 1> result_wrong_type = matrix_23 * v_3d;
  // 应该显式转换
  Matrix<double, 2, 1> result = matrix_23.cast<double>() * v_3d;
  cout << "[1,2,3;4,5,6]*[3,2,1]=" << result.transpose() << endl;

  Matrix<float, 2, 1> result2 = matrix_23 * vd_3d;
  cout << "[1,2,3;4,5,6]*[4,5,6]: " << result2.transpose() << endl;

  // 同样你不能搞错矩阵的维度
  // 试着取消下面的注释,看看Eigen会报什么错
  // Eigen::Matrix<double, 2, 3> result_wrong_dimension = matrix_23.cast<double>() * v_3d;

  // 一些矩阵运算
  // 四则运算就不演示了,直接用+-*/即可。
  matrix_33 = Matrix3d::Random();      // 随机数矩阵
  cout << "random matrix: \n" << matrix_33 << endl;
  cout << "transpose: \n" << matrix_33.transpose() << endl;      // 转置
  cout << "sum: " << matrix_33.sum() << endl;            // 各元素和
  cout << "trace: " << matrix_33.trace() << endl;          // 迹
  cout << "times 10: \n" << 10 * matrix_33 << endl;               // 数乘
  cout << "inverse: \n" << matrix_33.inverse() << endl;        // 逆
  cout << "det: " << matrix_33.determinant() << endl;    // 行列式

  // 特征值
  // 实对称矩阵可以保证对角化成功
  SelfAdjointEigenSolver<Matrix3d> eigen_solver(matrix_33.transpose() * matrix_33);
  cout << "Eigen values = \n" << eigen_solver.eigenvalues() << endl;
  cout << "Eigen vectors = \n" << eigen_solver.eigenvectors() << endl;

  // 解方程
  // 我们求解 matrix_NN * x = v_Nd 这个方程
  // N的大小在前边的宏里定义,它由随机数生成
  // 直接求逆自然是最直接的,但是求逆运算量大

  Matrix<double, MATRIX_SIZE, MATRIX_SIZE> matrix_NN
      = MatrixXd::Random(MATRIX_SIZE, MATRIX_SIZE);
  matrix_NN = matrix_NN * matrix_NN.transpose();  // 保证半正定
  Matrix<double, MATRIX_SIZE, 1> v_Nd = MatrixXd::Random(MATRIX_SIZE, 1);

  clock_t time_stt = clock(); // 计时
  // 直接求逆
  Matrix<double, MATRIX_SIZE, 1> x = matrix_NN.inverse() * v_Nd;
  cout << "time of normal inverse is "
       << 1000 * (clock() - time_stt) / (double) CLOCKS_PER_SEC << "ms" << endl;
  cout << "x = " << x.transpose() << endl;

  // 通常用矩阵分解来求,例如QR分解,速度会快很多
  time_stt = clock();
  x = matrix_NN.colPivHouseholderQr().solve(v_Nd);
  cout << "time of Qr decomposition is "
       << 1000 * (clock() - time_stt) / (double) CLOCKS_PER_SEC << "ms" << endl;
  cout << "x = " << x.transpose() << endl;

  // 对于正定矩阵,还可以用cholesky分解来解方程
  time_stt = clock();
  x = matrix_NN.ldlt().solve(v_Nd);
  cout << "time of ldlt decomposition is "
       << 1000 * (clock() - time_stt) / (double) CLOCKS_PER_SEC << "ms" << endl;
  cout << "x = " << x.transpose() << endl;

  return 0;
}

 

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

vscode配置eigen3 的相关文章

  • 《视觉SLAM十四讲》学习笔记-第四讲部分习题的证明思路

    1 验证SO 3 SE 3 和Sim 3 关于乘法成群 证明 先看SO 3 定义为 SO 3 R R3 3 RR I det R 1 S O 3 R
  • SLAM入门

    SLAM定义 SLAM Simultaneous localization and mapping 同时定位 我在哪里 与建图 我周围有什么 当某种移动设备 汽车 扫地机 手机 无人机 机器人 从一个未知环境的未知地点出发 在运动过程中 通
  • ubuntu系统下配置vscode编译cmake

    文章目录 一 配置vs code运行c 代码 三个关键文件介绍 1 tasks json run helloworld cpp 1 1 打开cpp文件 使其成为活动文件 1 2 按编辑器右上角的播放按钮 1 3生成task文件 1 4 此时
  • 基于深度相机的三维重建技术

    本文转载自http www bugevr com zblog id 14 原创作者bugeadmin 转载至我的博客 主要是为了备份 日后查找方便 谢谢原创作者的分享 三维重建 3D Reconstruction 技术一直是计算机图形学和计
  • 各向异性(anisotropic)浅提

    文章目录 各向异性 anisotropic 定义 哪种物体具有各向异性反射 什么导致各向异性反射 总结 各向异性 anisotropic 定义 它指一种存在方向依赖性 这意味着在不同的方向不同的特性 相对于该属性各向同性 当沿不同轴测量时
  • 【大一立项】如何亲手搭建ROS小车:硬件和软件介绍

    本次博客将详细介绍上篇博客中提到的ROS小车的硬件和软件部分 由于十一实验室不开门 所以部分代码还没有上传到Github 下位机 下位机使用Arduino 因为大一上刚学完用Arduino做循迹小车 其实Arduino作为ROS小车的下位机
  • Sophus使用记录

    sophus库是一个基于Eigen的C 李群李代数库 可以用来方便地进行李群李代数的运算 头文件 主要用到以下两个头文件 include
  • 从零开始一起学习SLAM(9)不推公式,如何真正理解对极约束?

    文章目录 对极几何基本概念 如何得到极线方程 作业 此文发于公众号 计算机视觉life 原文链接 从零开始一起学习SLAM 不推公式 如何真正理解对极约束 自从小白向师兄学习了李群李代数和相机成像模型的基本原理后 感觉书上的内容没那么难了
  • 经典坐标变换案例代码剖析

    题目 设有小萝卜一号和小萝卜二号位于世界坐标系中 记世界坐标系为W 小萝卜们的坐标系为R1和 R2 小萝卜一号的位姿为q2 0 35 0 2 0 3 0 1 T t1 0 3 0 1 0 1 T 小萝卜二号的位姿为q2 0 5 0 4 0
  • 图像匹配算法

    图像匹配算法分为3类 基于灰度的匹配算法 基于特征的匹配算法 基于关系的匹配算法 1 基于灰度的模板匹配算法 模板匹配 Blocking Matching 是根据已知模板图像到另一幅图像中寻找与模板图像相似的子图像 基于灰度的匹配算法也称作
  • Sophus安装踩坑

    装SLAM十四讲第二版提供的Sophus Eigen版本3 4 0 报错 home ch 下载 Sophus 13fb3288311485dc94e3226b69c9b59cd06ff94e test core test so2 cpp 9
  • 高斯牛顿法求非线性最小二乘的步骤和c++代码实现

    slam图优化的本质是一个非线性优化问题 Gauss Newton求解步骤 1 线性化误差函数 2 构建线性系统 3 求解线性系统 4 更新解 并不断迭代直至收敛 一个简单的代码实现 一维参数xy 高维变为对应的矩阵即可 include
  • lego-LOAM跑自己的数据包无法显示全局点云地图解决(速腾聚创RS-LiDAR-16 雷达 )---SLAM不学无术小问题

    LeGo LOAM跑自己的数据包无法显示全局地图问题 注意 本文笔者使用环境 Ubuntu18 04 ROS melodic 版本 背景 3D SLAM新手 在看到了各种狂拽炫酷的3D点云图的之后决定亲自上手一试 首先当然的是最为经典的LO
  • LeGO-LOAM中的数学公式推导

    LeGO LOAM是一种在LOAM之上进行改进的激光雷达建图方法 建图效果比LOAM要好 但是建图较为稀疏 计算量也更小了 本文原地址 wykxwyc的博客 github注释后LeGO LOAM源码 LeGO LOAM NOTED 关于代码
  • LOAM算法详解

    激光SLAM 帧间匹配方法 Point to Plane ICP NDT Feature based Method 回环检测方法 Scan to Scan Scan to Map LOAM创新点 定位和建图的分离 里程计模块 高频低质量的帧
  • LIO-SAM运行自己数据包遇到的问题解决--SLAM不学无数术小问题

    LIO SAM 成功适配自己数据集 注意本文测试环境 Ubuntu18 04 ROS melodic版本 笔者用到的硬件以简单参数 激光雷达 速腾聚创16线激光雷达 RS Lidar 16 IMU 超核电子CH110型 9轴惯导 使用频率1
  • ORB_SLAM2运行官方数据集/自己数据集

    官方数据集运行结果 WeChat 20230210194425 可以正常运行 自己数据集运行结果 自己的数据集 主要是用手机摄像头采集的实验室进行了一下简单的运行 可以成功运行 但是由于查看的相关程序的是死循环不能像运行官方数据集那样完整保
  • Todesk突然高速通道使用已结束

    今天使用Todesk直接报出如下错误 好像对于海外用户需要付费购买海外会员 大家有没有什么可以替换的远程控制软件的吗 能分享一下吗
  • 什么是深度学习的无监督学习与有监督学习

    无监督学习 深度学习中的无监督学习方法是一种训练算法 它在没有标注输出的情况下从输入数据中学习模式和特征 这种方法的核心是探索和理解数据的内在结构和分布 而不是通过已知的输出来指导学习过程 无监督学习在深度学习领域有许多不同的形式和应用 以
  • KITTI校准文件中参数的格式

    我从以下位置访问了校准文件KITTI 的部分里程计 http www cvlibs net datasets kitti eval odometry php 其中一个校准文件的内容如下 P0 7 188560000000e 02 0 000

随机推荐

  • OPENGL学习(二)OPENGL渲染管线

    Vertex processor 对顶点进行预处理 原始点都是三维的 最终我们看到的点都是二维的 这个映射过程和点的实际位置 和我们从哪个视角去看都有关系 需要通过一系列矩阵调整点的坐标 另外 还需要确定点的颜色 这个和点到镜头的距离和光照
  • 前端与后端通信最简单的三个方式

    在HTML和Java后端之间进行通信通常是通过使用服务器端的技术来实现的 以下是一些常用的方法 使用表单提交 在HTML中 可以使用表单元素来收集用户输入的数据 当用户提交表单时 可以使用POST或GET方法将数据发送到Java后端 在Ja
  • R语言 判别分析:线性判别、K最邻近、有权重的K最邻近、朴素贝叶斯

    关注微信公共号 小程在线 关注CSDN博客 程志伟的博客 class包 提供Knn 函数 kknn包 提供kknn 函数及miete数据集 房租信息 kknn函数 实现有权重的K最近邻 knn函数 实现K最近邻算法 klaR包 提供Navi
  • Spring Boot 实现Mybatis多数据源

    文章目录 Spring Boot 多数据源 1 背景 2 定义数据源 2 1 定义动态数据源 2 3 定义自定义数据源 3 配置数据库链接 4 编写数据源切面 Spring Boot 多数据源 1 背景 项目日产生的数据量比较大 所以规定每
  • 基于FPGA的FFT算法实现

    基于FPGA的FFT算法实现 项目简述 FFT IP的定制及详解 Block Design设计 仿真结果 总结 项目简述 前面的一篇博客我们已经讲解了FFT算法的发展历程 至于FFT的原理感兴趣的同学可以查阅书本数字信号处理 书本上面的知识
  • 1.6 CPU性能公式

    CPU时间 一个程序在CPU上运行的时间 不包括 I O 时间 时钟周期 系统的时间周期越短 相应的CPU性能就越好 程序的时钟周期数 CPU时间 执行程序所需的时钟周期数 X 时钟周期时间 时钟周期时间是时钟频率的倒数 指令周期数 CPI
  • Cross-Domain Adaptive Teacher for Object Detection安装环境以及运行代码

    1 首先在官网上下载代码以及数据集 代码下载如下 git clone URL网址 git clone https github com facebookresearch adaptive teacher git 2 安装环境 这是作者给的r
  • [蓝桥杯]乘积尾零

    核心思路 想要出现0 即2 5 4 5 8 5 4 8又可以分解为2 末尾本来就有0的也可以分解为5 所以我们只需要把这100个数都尽量拆分为因子 2 5 相乘的形式 并统计2 5的个数 然后看一共有多少对 2 5 即可 ok 上ACcod
  • pytorch实现LSTM(附code)

    目录 一 数据集介绍 二 数据预处理 三 python代码实现 参考 最近搞了一个NASA PCoE的IGBT加速老化数据 想基于pytorch框架写一个LSTM模型进行IGBT退化状态的预测 于是有了这篇文章 注 LSTM的原理就不多讲了
  • 我为什么放弃了 LangChain?

    如果你关注了过去几个月中人工智能的爆炸式发展 那你大概率听说过 LangChain 简单来说 LangChain 是一个 Python 和 JavaScript 库 由 Harrison Chase 开发 用于连接 OpenAI 的 GPT
  • 使用scrollIntoView和监听滚动区域子div的相对于视口的顶部的距离,来实现导航定位功能

    一 需求分解 1 滚动左侧内容 关联激活右侧导航节点 2 单击右侧导航节点 右侧相应的段落滚动到可视区顶部 二 关键技术点提前知 技术点1 Element scrollIntoView scrollIntoView 方法会滚动元素的父容器
  • 安装android时遇到的困难

    1 The type org openqa selenium remote http HttpClient Factory cannot be resolv 的解决方法就是更换2 53 0的selenium的jar包 2 在dos中输入an
  • mysql数据库sequence序列表使用记录

    一 需求背景 如何确保一个序列号是按自己定义的规则依次递增 实际项目需求如下 在商户表有商户费率模板号这个字段 我们要求该字段的规则是 ST 当前日期YYYYMMDD 6位序列号 左边不够是用0填补 如 TS20200610000001和T
  • sql中视图视图的作用

    视图是一个虚拟表 其内容由查询定义 同真实的表一样 视图包含一系列带有名称的列和行数据 但是 视图并不在数据库中以存储的数据值集形式存在 行和列数据来自由定义视图的查询所引用的表 并且在引用视图时动态生成 对其中所引用的基础表来说 视图的作
  • 解决OracleOraDb10g_home1TNSListener配置问题

    解决方式一 从客户端连接到服务器 出现了这个错误 ora12541 TNS 没有监听器 于是 在服务器中启动OracleOraHome92TNSListener服务 显示 在本地计算机无法启动OracleOraHome92TNSListen
  • Windows环境下Robot Framework 安装包下载及安装流程

    RobotFramework 32位 安装 一 准备安装包 1 python 2 7 13 msi下载 2 robotframework 3 0 2 tar gz下载 3 robotframework ride 1 3 win32 exe下
  • PicGo + 阿里云图床上传失败解析

    在图片上传失败的时候 直接去看PicGo的配置文件 上传失败就是你配置哪里有问题 因为服务器不可能出问题 你typora的软件也不可能出问题 出问题的就只有PickGo这个中间配置软件了 其实就是一个json 配置文件 里面有需要的各种账户
  • 安装Scala

    前言 本文主要讲解如何在Windows10中安装Scala 并在IDEA中配置Scala的开发环境 Scala作为大数据开发中的常用编程语言 特别是Spark更是直接用Scala开发而来 因此使用Scala进行大数据开发十分必要 下载安装包
  • dos命令弹出对话框---Msg命令详解

    dos命令弹出对话框 Msg命令详解 cmd下执行 在当前用户的桌面弹出一个对话框 显示哈哈二字 并且十秒后自动关闭 usename 是系统环境变量 表当前用户名 msg username time 10 哈哈 表示向局域网中的192 16
  • vscode配置eigen3

    目录 1 头文件包含 2 c cpp properties json 3 CMakeList txt 4 完整代码 1 头文件包含 Eigen 核心部分 include