Eigen
工作学习笔记
JunJun~
沉淀~
展开
-
Eigen的Matrix与OpenCV的Mat之间的相对转换
最近由于需要使用OpenCV的Mat计算的姿态与Eigen之间进行切换,所以涉及两个类型之间的转换;#include <iostream>#include <Eigen/Dense>#include <math.h>#include <opencv2/core/eigen.hpp> //包含该头文件前必须先包含Eigen头文件,否则...原创 2020-04-22 21:05:07 · 1683 阅读 · 0 评论 -
Eigen计算两个姿态角之间的旋转矩阵
#include <iostream>#include <Eigen/Dense>#include <iomanip>#include <math.h>#include <opencv2/core/eigen.hpp> //包含该头文件前必须先包含Eigen头文件,否则:error: Eigen does not name a...原创 2020-04-22 20:59:46 · 2401 阅读 · 0 评论 -
基于eigen计算矩阵的特征值和特征向量
有点小瑕疵,就是读取文件和生成文件的位置!备注下本文是在Ubuntu系统下构建的,一些地方可能存在着差异。1 首先是在如下的文件下建立data.txt这个文件与源程序的文件在同一个目录下,其中data.txt的数据及其格式如下:2 程序#include <iostream>#include <fstream>#include <Eig...原创 2018-12-17 23:40:58 · 5404 阅读 · 0 评论 -
Eigen学习笔记1:安装与开始
1 简单的例子1#include <iostream>#include <Eigen/Dense>using Eigen::MatrixXd;int main(){ MatrixXd m(2,2); m(0,0) = 3; m(1,0) = 2.5; m(0,1) = -1; m(1,1) = m(1,0) + m(0,1); std...翻译 2020-03-15 23:02:16 · 479 阅读 · 0 评论 -
Eigen学习笔记2:矩阵类
在Eigen中,所有矩阵和向量都是Matrix模板类的对象。向量只是矩阵的一种特殊情况,具有1行或1列。矩阵类的前三个模板参数矩阵类需要六个模板参数,其中的三个参数具有默认值。Matrix三个必需模板参数是:Matrix <类型名称标量,int RowsAtCompileTime,int ColsAtCompileTime>Scalar是标量类型,即系数的类型。...翻译 2020-03-23 22:33:44 · 1409 阅读 · 0 评论 -
Eigen学习笔记3:矩阵和向量运算
介绍Eigen通过对常见的C ++算术运算符(+,-等)的重载或提供了诸如dot()、cross()等特殊方法以实现矩阵和向量算术运算。对于Matrix类(矩阵和向量),对运算符进行重载以支持线性代数运算。For example,matrix1*matrix2means matrix-matrix product, andvector+scalaris just not al...翻译 2020-03-29 21:36:13 · 2204 阅读 · 0 评论 -
Eigen学习笔记4:Array类和逐个元素的运算
什么是Array类?与用于线性代数的Matrix类相反,Array类提供了一个通用数组。此外,Array类也提供了一种执行逐元素计算的简便方法,该运算可能没有线性代数含义,例如将常数添加到数组中的每个元素或将两个数组的元素相乘。Array类型Array是具有与Matrix相同模板参数的类模板。与Matrix一样,前三个模板参数是必需的:Array<typename Scal...翻译 2020-03-30 21:41:43 · 5223 阅读 · 0 评论 -
Eigen学习笔记5:块操作
本页说明了块操作的要点。块是矩阵或阵列的矩形部分。块表达式既可以用作右值,也可以用作左值。与本征表达式一样,只要让编译器进行优化,此抽象的运行时成本为零。使用块操作本征中最通用的块操作称为.block()。有两个版本,其语法如下:块操作 版本构造一个 动态大小的块表达式 版本构造一个 固定大小的块表达式 块大小(p,q),从开始(i,j) ...翻译 2020-04-01 21:50:12 · 578 阅读 · 0 评论 -
Eigen学习笔记6:高级初始化操作
逗号初始化Eigen提供了逗号初始化程序语法,该语法使用户可以轻松设置矩阵,向量或数组的所有系数。只需列出元素,从左上角开始,从左到右,从上到下移动。需要预先指定对象的大小。If you list too few or too many coefficients,Eigenwill complain.#include <Eigen/Dense>#include <...翻译 2020-04-02 12:21:32 · 1410 阅读 · 0 评论 -
Eigen学习笔记7:Reductions, visitors and broadcasting
减少量在Eigen中,约简是一个采用矩阵或数组并返回单个标量值的函数。最常用的归约方法之一是.sum(),它返回给定矩阵或数组内所有系数的总和。例: 输出: #include <iostream> #include <特征/密度> 使用命名空间 std; int main() { Eige...翻译 2020-04-04 10:49:06 · 391 阅读 · 0 评论 -
Eigen学习笔记8:the Map class
This page explains how to work with "raw" C/C++ arrays. This can be useful in a variety of contexts, particularly when "importing" vectors and matrices from other libraries into Eigen.介绍Occasional...翻译 2020-04-04 12:57:28 · 307 阅读 · 0 评论 -
Eigen学习笔记9:Reshape 和切片
Eigen还没有公开方便的方法来进行切片或重塑矩阵。但是,可以使用Map类轻松完成这些功能。ReshapeReshape在于修改矩阵的大小,同时保持相同的元素。Instead of modifying the input matrix itself, which is not possible for compile-time sizes, the approach consist in ...翻译 2020-04-04 15:45:07 · 3461 阅读 · 0 评论 -
Eigen学习笔记10:混叠
在Eigen中,aliasing是指相同的矩阵(或数组或向量)同时出现在赋值运算符的左侧和右侧。例如:mat = 2 * mat;或mat = mat.transpose();在第一个示例中的aliasing是无害的,但是第二个示例中aliasing会导致意外的结果。例子这是一个显示aliasing的简单示例:#include <iostream>#inc...翻译 2020-04-04 17:13:04 · 1181 阅读 · 0 评论 -
Eigen学习笔记11:存储顺序
对于矩阵和二维数组来说,存在着两种不同的存储顺序:列优先和行优先。列优先和行优先We say that a matrix is stored inrow-majororder if it is stored row by row.首先存储整个第一行,然后存储整个第二行,依此类推。考虑例如如下矩阵:8 2 2 9 9 1 4 4 3 5 4 5 如果此矩阵以行优先顺序存储...翻译 2020-04-07 07:50:38 · 1828 阅读 · 0 评论 -
Eigen学习笔记12:对未对齐数组断言的解释
好!您之所以会看到此网页,是因为您的程序由于这样的断言失败而终止:my_program:路径/到/本征/本征/src/Core/DenseStorage.h:44:特征::内部::矩阵_数组<T,大小,矩阵选项,对齐> ::内部::矩阵()[T = double,int Size = 2,int MatrixOptions = 2,bool Align = true]:断言...翻译 2020-04-07 21:46:41 · 1215 阅读 · 0 评论 -
Eigen学习笔记13:固定大小的可矢量化Eigen对象
对于固定大小的可矢量化Eigen对象的解释!Executive Summary如果Eigen对象具有固定大小并且该大小是16个字节的倍数,则称为“固定大小向量化”。示例包括:Eigen::Vector2dEigen::Vector4dEigen::Vector4fEigen::Matrix2dEigen::Matrix2fEigen::Matrix4dEigen::M...翻译 2020-04-07 21:54:27 · 750 阅读 · 0 评论 -
Eigen学习笔记14:具有Eigen成员的结构体
执行摘要如果定义的结构具有固定大小的可矢量化Eigen类型的成员,则必须重载其“ operator new”,以便它生成16字节对齐的指针。幸运的是,Eigen为您提供了一个宏EIGEN_MAKE_ALIGNED_OPERATOR_NEW来为您执行此操作。需要更改哪种代码?需要更改的代码类型是这样的:class Foo{ ... Eigen::Vector2d v; ...翻译 2020-04-08 12:24:09 · 2274 阅读 · 0 评论 -
Eigen学习笔记15:Using STL Containers with Eigen
Executive summary如果想要STL容器的参数是fixed-size vectorizable Eigen types,或具有此类成员的类,需要执行以下两个步骤:必须使用16字节对齐的分配器。Eigen确实提供了一种可供使用的方法:aligned_allocator. If you want to use the std::vector container, you need...翻译 2020-04-08 22:25:09 · 768 阅读 · 0 评论 -
Eigen学习笔记16:按值传递Eigen对象
在C ++中,按值传递对象几乎总是一个非常糟糕的做法,因为这意味着无用的副本,最好通过引用传递它们。使用Eigen时,这甚至更重要:按值传递fixed-size vectorizable Eigen types,不仅效率低下,而且可能是非法的,或者会使程序崩溃!原因是这些Eigen对象具有对齐修饰符,当按值传递它们时,这些修饰符aren't respected。因此,例如,像这样的函数:...翻译 2020-04-08 22:31:07 · 981 阅读 · 0 评论 -
Eigen学习笔记17:编译器对栈对齐做出错误假设
这是GCC 4.5的BUG,并且已修复。如果您遇到此问题,请升级到GCC 4.5并向我们报告。到目前为止,这个问题 we met only with GCC on Windows: for instance, MinGW and TDM-GCC.默认情况下,在这样的函数中:void foo(){ Eigen::Quaternionf q; //...}GCC假设栈...翻译 2020-04-08 22:45:57 · 706 阅读 · 0 评论 -
Eigen学习笔记18:Catalog of coefficient-wise math functions
下表列出了Eigen支持的按元素进行计算的数学函数目录。在此表中,a,b,代表了 Array 对象或者表达式,M代表了线性代数Matrix/Vector对象.标准标量类型缩写为:int:i32 float:f double:d std::complex<float>:cf std::complex<double>:cdFor each row...翻译 2020-04-08 23:14:38 · 3823 阅读 · 0 评论 -
Eigen学习笔记19:Quick reference guide
模块和头文件Eigen分为一个核心模块和几个其他模块。每个模块都有一个相应的头文件,必须包含该头文件才能使用该模块。TheDenseandEigenheader files are provided to conveniently gain access to several modules at once.Module Header file Contents C...翻译 2020-04-12 21:37:16 · 1143 阅读 · 0 评论 -
Eigen学习笔记20:线性代数及其分解
基本线性求解的问题:你有一个方程组,你已经写成一个矩阵方程其中A和b是矩阵(特殊情况下b可以是向量)。您想找到一个解x。该解决方案:可将各种分解之间进行选择,这取决于你的矩阵是什么一个样子,取决于你是否赞成速度或准确性。但是,让我们从一个适用于所有情况的示例开始,这是一个很好的折衷方案:例: 输出: #include <iostream>...翻译 2020-04-12 22:14:55 · 2683 阅读 · 0 评论 -
Eigen学习笔记21:Catalogue of dense decompositions
Eigen提供的Catalogue of dense decompositions Generic information, not Eigen-specific Eigen-specific 分解 矩阵要求 速度 算法的可靠性和准确性 排名公开 允许计算(除了线性求解) Eigen提供的线性求解器 Eigen实施的成熟度 ...翻译 2020-04-13 22:16:22 · 376 阅读 · 0 评论 -
Eigen学习笔记22:求解线性最小二乘系统
一个超定方程组,例如Ax=b,没有解。在这种情况下,在差异Ax-b尽可能小的意义上,搜索最接近解的向量x是有意义的。该x称为最小二乘解(如果使用欧几里得范数)。本页讨论的三种方法是SVD分解,QR分解和正态方程。其中,SVD分解通常最准确但最慢,法线方程最快但最不准确,QR分解介于两者之间。使用SVD分解的解决()中所述方法BDCSVD类可以直接用来求解线性最小二乘系统。仅计算...翻译 2020-04-14 22:11:38 · 2410 阅读 · 1 评论 -
Eigen学习笔记23:Inplace matrix 分解
从Eigen 3.3开始,LU,Cholesky和QR分解can operateinplace,即直接在给定的输入矩阵内进行。当处理大型矩阵或可用内存非常有限(嵌入式系统)时,此功能特别有用。为此,必须instantiated with a Ref<> matrix type,同时使用输入矩阵作为参数来构造分解对象。作为示例,让我们考虑an inplace LU deco...翻译 2020-04-14 22:39:33 · 583 阅读 · 0 评论 -
Eigen学习笔记24:Benchmark of 密集矩阵分解
本页对Eigen提供的密集矩阵分解方法的速度进行了分析for a wide range of square matrices and overconstrained problems.对于 the features and numerical robustness of 线性求解器和分解, 检查这个 table.该基准测试在配备有Intel Core i7 @ 2,6 GHz的笔记本电脑...翻译 2020-04-14 22:52:17 · 505 阅读 · 0 评论 -
Eigen学习笔记25:稀疏矩阵操作
处理和解决稀疏问题涉及各种模块,总结如下:模组 头文件 内容 SparseCore #include <Eigen / SparseCore> SparseMatrixandSparseVectorclasses, matrix assembly, basic sparse linear algebra (incl...翻译 2020-04-16 23:30:15 · 13213 阅读 · 2 评论 -
Eigen学习笔记26:求解稀疏线性矩阵
在Eigen中,当系数矩阵稀疏时,有几种方法可用于求解线性系统。由于此类矩阵的特殊表示,因此应格外小心,以获得良好的性能。有关Eigen中稀疏矩阵的详细介绍,请参见稀疏矩阵操作。此页面列出了Eigen中可用的稀疏求解器。还介绍了所有这些线性求解器共有的主要步骤。取决于矩阵的属性,所需的精度,最终用户能够调整这些步骤,以提高其代码的性能。请注意,不需要深入了解这些步骤背后的内容:最后一部分提供了一个...翻译 2020-04-20 22:01:29 · 4928 阅读 · 0 评论 -
Eigen学习笔记27:Matrix-free 求解器
诸如ConjugateGradient和BiCGSTAB之类的迭代求解器可以在Matrix-free上下文中使用。为此,用户必须提供一个继承EigenBase <>并实现以下方法的包装器类:Indexrows()和Indexcols():分别返回行数和列数 operator*与您的类型和Eigen密集列向量一起使用(其实际实现在internal :: generic_pro...翻译 2020-04-20 22:09:19 · 1831 阅读 · 0 评论 -
Eigen学习笔记28:Space 变换
在此页面中,我们将介绍几何模块提供的多种可能性,以处理2D和3D旋转以及投影或仿射变换。Eigen的Geometry模块提供了两种不同的几何变换:抽象转换,例如旋转(用角度和轴或四元数表示),平移,缩放。这些转换未表示为矩阵,但是您仍然可以将它们与表达式中的矩阵和向量混合,并根据需要将它们转换为矩阵。 射影或仿射变换矩阵:请参见Transform类。这些确实是矩阵。注意如果要使用O...翻译 2020-04-20 22:32:29 · 1228 阅读 · 0 评论