
Eigen的全面解析
铿锵的玫瑰
业余爱好者
展开
-
Map类
定义Map类与声明Map变量使用Map变量实例改变映射的数组实例原创 2018-10-11 08:43:15 · 243 阅读 · 0 评论 -
置换矩阵分解
从Eigen 3.3开始,LU,Cholesky和QR分解可以在适当的位置运行,即直接在给定的输入矩阵内运行。 在处理大型矩阵时,或者当可用内存非常有限时(嵌入式系统),此功能特别有用。为此,必须使用Ref <>矩阵类型实例化相应的分解类,并且必须使用输入矩阵作为参数来构造分解对象。 作为一个例子,让我们考虑使用部分旋转的就地LU分解。这里,lu对象计算并存储由矩阵A保持的...原创 2018-10-13 20:09:43 · 1270 阅读 · 0 评论 -
密集矩阵分解的基准
该基准测试是在配备英特尔酷睿i7 @ 2,6 GHz的笔记本电脑上运行的,并且在启用了AVX和FMA指令集的情况下进行了编译,但没有多线程。 它使用单精度浮点数。 对于double,您可以通过将时间乘以因子2来获得良好的估计。方形矩阵是对称的,对于过约束矩阵,报告的时序包括基于Cholesky和LU计算前四个求解器的对称协方差矩阵$ A ^ TA $的成本,用*符号表示(右上角) 角落的一部分...原创 2018-10-13 20:09:35 · 401 阅读 · 0 评论 -
稀疏矩阵操作
操纵和解决稀疏问题的模块稀疏矩阵格式在许多应用中(例如,有限元方法),通常处理非常大的矩阵,其中只有少数系数与零不同。 在这种情况下,通过使用仅存储非零系数的专用表示,可以减少存储器消耗并提高性能。 这种矩阵称为稀疏矩阵。SparseMatrix类是Eigen稀疏模块的主要稀疏矩阵表示; 它提供高性能和低内存使用率。 它实现了广泛使用的压缩列(或行)存储方案的更通用的变体。 它由四...原创 2018-10-13 20:09:27 · 5338 阅读 · 0 评论 -
求解稀疏线性系统
稀疏求解器列表稀疏求解器概念计算步骤在compute()函数中,矩阵通常被分解:自伴随矩阵的LLT,一般厄米特矩阵的LDLT,非厄米特矩阵的LU和矩形矩阵的QR。 这些是使用直接求解器的结果。 对于这类精确求解器,计算步骤进一步细分为analyzePattern()和factorize()。 analyzePattern()的目标是重新排序矩阵的非零元素,以便分解...原创 2018-10-12 21:24:50 · 1572 阅读 · 0 评论 -
Eigen的入门与概述
什么是EigenEigen是一个高层次的C ++库,有效支持线性代数,矩阵和矢量运算,数值分析及其相关的算法。Eigen是一个开源库,从3.1.1版本开始遵从MPL2许可。 Eigen适用范围广,支持包括固定大小、任意大小的所有矩阵操作,甚至是稀疏矩阵;支持所有标准的数值类型,并且可以扩展为自定义的数值类型;支持多种矩阵分解及其几何特征的求解;它不支持的模块生态系统提供了许多专门的功能,如非...原创 2018-10-05 10:26:35 · 626 阅读 · 0 评论 -
基于CodeBlocks安装Eigen
在Ubuntu下配置的具体步骤从网站http://eigen.tuxfamily.org/index.php?title=Main_Page 下载Eigen的安装包,并解压。 在codeblocks中的设置-编译器-全局编译器设置-搜索路径-编译器,添加解压后的Eigen安装包即可 编写简单的程序测试 #include <iostream>#include ...原创 2018-10-05 11:35:59 · 2917 阅读 · 0 评论 -
EIgen的Matrices和Vectors
在运行时设置矩阵的大小#include <iostream>#include <Eigen/Dense>using namespace Eigen;using namespace std;int main(){ MatrixXd m = MatrixXd::Random(3,3); m = (m + MatrixXd::Constant(3,3,1....原创 2018-10-07 20:57:16 · 699 阅读 · 0 评论 -
Matrix类详解
Matrix的三参数定义原型Matrix的三参数实例列Vector与行Vector的常用定义动态向量与数组的定义Vector与Matrix构造器矩阵与向量的系数存储操作实例#include <iostream>#include <Eigen/Dense>using namespace Eigen;int main(...原创 2018-10-07 21:46:12 · 5900 阅读 · 0 评论 -
Matrix和vector算术运算
Matrix和vector的加减运算#include <iostream>#include <Eigen/Dense>using namespace Eigen;int main(){ Matrix2d a; a << 1, 2, 3, 4; MatrixXd b(2,2); b << 2, 3, ...原创 2018-10-07 22:41:48 · 3141 阅读 · 0 评论 -
数组类与系数运算
数组的类型 指定数组内部的数值实例#include <Eigen/Dense>#include <iostream>using namespace Eigen;using namespace std;int main(){ ArrayXXf m(2,2); // assign some values coefficient by co...原创 2018-10-10 14:43:12 · 308 阅读 · 0 评论 -
块操作
块操作的使用块的常用表示语法: 动态块与固定块的使用实例#include <Eigen/Dense>#include <iostream>using namespace std;int main(){ Eigen::MatrixXf m(4,4); m << 1, 2, 3, 4, 5, 6, 7, 8, ...原创 2018-10-10 15:09:48 · 347 阅读 · 0 评论 -
高级初始化
利用逗号进行初始化常用实例特别的矩阵与数组实例使用临时对象#include <iostream>#include <Eigen/Dense>using namespace Eigen;using namespace std;int main(){ MatrixXd m = MatrixXd::Random(3,3); ...原创 2018-10-10 15:58:29 · 162 阅读 · 0 评论 -
求解线性最小二乘系统
一个超定方程组,比如Ax = b,没有解。 在这种情况下,在差值Ax-b尽可能小的意义上,搜索最接近解的向量x是有意义的。 这个x被称为最小二乘解(如果使用欧几里德范数)。本页讨论的三种方法是SVD分解,QR分解和正规方程。 其中,SVD分解通常是最准确的,但最慢的正规方程是最快但最不准确的,并且QR分解介于两者之间。使用SVD分解BDCSVD类中的solve()方法可以直接用于求解线性方...原创 2018-10-16 12:35:04 · 955 阅读 · 0 评论 -
密集矩阵分解目录
Eigen提供的分解目录注意:LDLT算法存在两种变体。 Eigen的一个产生一个纯对角D矩阵,因此它不能处理不定矩阵,不像Lapack产生一个块对角D矩阵。 EIgen,SVD和Schur分解依赖于迭代算法。 它们的收敛速度取决于特征值的分离程度。 我们的JacobiSVD是双面的,为方形矩阵提供经过验证的最佳精度。 对于非方形矩阵,我们必须首先使用QR预处理器。 默认选...原创 2018-10-16 12:35:10 · 351 阅读 · 0 评论 -
调整形状与分片
ReshapeSlicing原创 2018-10-11 08:58:52 · 185 阅读 · 0 评论 -
混叠处理
什么是混叠如何解决混叠问题常用避免混叠的函数混叠与元素操作实例混叠与矩阵的乘法操作如果Mata是平方矩阵,那么语句Mata= Mata*Mata;是安全的。总结在所有其他情况下,Eigen假定没有混叠问题,因此如果实际上出现混叠,则会产生错误的结果。 要防止这种情况,您必须使用eval()或其中一个xxxInPlace()...原创 2018-10-11 09:31:24 · 2044 阅读 · 0 评论 -
存储顺序
行优先与列优先的存储方式实例如何选择存储方式您的用户可能希望您使用特定的存储订单。 或者,您可以使用除Eigen之外的其他库,而这些其他库可能需要某个存储顺序。 在这些情况下,在整个程序中使用此存储顺序可能是最简单和最快速的。 由于更好的数据局部性,当矩阵以行主顺序存储时,逐行遍历矩阵的算法将更快。 类似地,列主要矩阵的逐列遍历更快。 可能值得进行一些实验,以找出特定应用...原创 2018-10-11 09:38:55 · 478 阅读 · 0 评论 -
对未对齐数组的断言的说明
错误说明引起问题的原因结构中有Eigen对象作为成员(Structures having Eigen objects as members) STL容器或手动内存分配(STL Containers or manual memory allocation) 按值传递Eigen对象(Passing Eigen objects by value) 编译器对堆栈对齐做...原创 2018-10-11 10:11:30 · 305 阅读 · 0 评论 -
固定大小的可矢量化Eigen对象
执行摘要与解释如果Eigen对象具有固定大小并且该大小是16字节的倍数,则称为“固定大小可矢量化”。 首先,“固定大小”应该是明确的:如果特征对象的行数及其列数在编译时是固定的,则它具有固定大小。 因此,例如Matrix3f具有固定大小,但MatrixXf没有(与固定大小相反的是动态大小)。 固定大小的特征对象的系数数组是普通的“静态数组”,它不是动态分配的。 例如,Matrix4f背后的...原创 2018-10-11 10:17:35 · 281 阅读 · 0 评论 -
结构体中拥有Eigen成员
执行摘要如果定义具有固定大小可矢量化Eigen类型成员的结构,则必须重载其“operator new”,以便生成16字节对齐的指针。 幸运的是,Eigen为您提供了一个宏EIGEN_MAKE_ALIGNED_OPERATOR_NEW,可以为您完成。哪种代码需要改动代码应当如何修改代码需要改动的原因是否需要将所有的Eigen类型的成员放置在类的开头如果想要...原创 2018-10-11 10:34:42 · 1362 阅读 · 0 评论 -
使用带有Eigen的STL容器
执行摘要在固定大小的可矢量化Eigen类型或具有此类类型成员的类上使用STL容器需要采取以下两个步骤:必须使用16字节对齐的分配器。 Eigen确实提供了一个可以使用的:aligned_allocator。 如果要使用std :: vector容器,则需要#include <Eigen / StdVector>。这些问题仅出现在固定大小的可矢量化Eigen类型和具有这种特征...原创 2018-10-11 10:53:32 · 1431 阅读 · 0 评论 -
将Eigen作为函数参数传递
使用Eigen,这更为重要:按值传递固定大小的可矢量化特征对象不仅效率低,而且可能是非法的或使程序崩溃! 原因是这些Eigen对象具有在通过值传递时不受尊重的对齐修饰符。...原创 2018-10-11 10:56:02 · 2739 阅读 · 0 评论 -
编译器在堆栈对齐上做出错误的假设
局部解决方案全局解决方案原创 2018-10-11 11:12:38 · 206 阅读 · 0 评论 -
系数数学函数目录
标准标量类型缩写常用数学函数原创 2018-10-16 12:35:41 · 170 阅读 · 0 评论 -
快速参考手册
模块与头文件数组、矩阵与向量类型基本的矩阵操纵预定义矩阵映射外部数组算术运算符系数与数组运算符子矩阵操作斜对角矩阵三角矩阵对称矩阵...原创 2018-10-16 12:35:34 · 320 阅读 · 0 评论 -
空间转化
转化类型通用的API访问转化类型仿射变换欧拉转化原创 2018-10-16 12:35:26 · 385 阅读 · 0 评论 -
线性代数与分解
基本的线性求解实例#include <iostream>#include <Eigen/Dense>using namespace std;using namespace Eigen;int main(){ Matrix3f A; Vector3f b; A << 1,2,3, 4,5,6, 7,8,10; b...原创 2018-10-16 12:35:17 · 742 阅读 · 0 评论 -
常用简约、访问与广播函数
Reductions函数#include <iostream>#include <Eigen/Dense>using namespace std;int main(){ Eigen::Matrix2d mat; mat << 1, 2, 3, 4; cout << "Here is mat.sum():...原创 2018-10-10 16:54:15 · 314 阅读 · 0 评论