草庐IT

c++ - 使用 eigen3/sparse 的稀疏特征值

在Eigen3中,是否有一种独特而有效的方法来查找实数、对称、非常大(比方说10000x10000)稀疏矩阵的特征值和特征向量?有一个用于稠密矩阵的特征值求解器,但它没有利用矩阵的属性,例如它是对称的。此外,我不想密集存储矩阵。或者(替代)是否有更好的(+更好的文档)库来做到这一点? 最佳答案 对于Eigen,有一个名为Spectra的库.如其网页所述,Spectra是使用C++语言重新设计的ARPACK库。与Armadillo不同,在anotheranswer中建议,Spectra确实支持longdouble和任何其他真正的浮点类

c++ - 检查 Eigen::Matrix 的任何元素是否不为零

我有一个Eigen::Matrix,我需要检查它的任何元素是否不同于0。我尝试了以下代码:Matrixm;boolf=(m!=0.0).any();但是我遇到了一个编译器错误。Invalidoperandstobinaryexpression('constEigen::Matrix'and'double') 最佳答案 在Eigen中,大多数元素操作都由Array处理。类(class)。幸运的是,有一种简单的方法可以在Matrix对象上使用它们。尝试boolf=(m.array()!=0.0).any();

ios - XCode IOS Apple LLVM 3.1 - Eigen NEON 中断

问题可能涉及使用Apple的LLVM3.1编译器,我确信可以通过禁用NEON来解决。但是我们想使用NEON。我也很肯定这是我在XCode中的设置错误,但它可能与Apple有关。实际上,我只是在寻求一些正确方向的提示。/Eigen/src/Core/util/Macros.h188:Unknowntypename'namespace'188:Expected';'aftertopleveldeclarator/Eigen/Core144:'cerrno'filenotfound/Applications/Xcode.app/Contents/Developer/Toolchains/Xc

Eigen 矩阵的LDLT分解求解线性方程组

矩阵的LDLT分解求解线性方程组1.LDLT分解原理2.Eigen库实现2.1问题定义2.2代码实现2.3输出结果1.LDLT分解原理  利用矩阵AAA的LDLTLDL^TLDLT分解来求解方程组Ax=bAx=bAx=b的方法称为LDLTLDL^TLDLT分解法。若对称矩阵AAA的各阶顺序主子式不为零,则AAA可以唯一分解为A=LDLTA=LDL^TA=LDLT。其中,LLL和DDD的形式如下:L=∣1l211l31l321⋯⋯⋯⋱ln1ln2⋯lnn−11∣L=\begin{vmatrix}1\\l_{21}&1\\l_{31}&l_{32}&1\\\cdots&\cdots&\cdots&

c++ - Eigen - 排序矩阵对角线

我拥有的是Eigen::MatrixXi类型的对角矩阵。我需要对角线上的元素按升序排序。例如像这样:200100070>>>020001007我以为我会简单地做:std::sort(matrix.diagonal().begin(),matrix.diagonal().end());但显然Eigen::Diagonal没有begin和end函数。所以问题是,是否有任何方法可以使用内部std::sort或任何类似优雅的方法对对角线上的元素进行排序?我浏览了官方文档,但没有找到任何有用的东西。 最佳答案 截至目前,还没有对矩阵排序的原生

c++ - 如何在 Eigen 中初始化 SparseVector

如何在Eigen中初始化一个SparseVector?以下代码:#defineEIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET#includeusingnamespaceEigen;SparseVectorvec(3);main(){vec(0)=1.0;}给我以下错误error:callofanobjectofaclasstypewithoutappropriateoperator()orconversionfunctionstopointer-to-functiontypevec(0)=1.0;顺便说一下,vec[0]=1.0也不起作

c++ - Eigen :高效克罗内克积

我正在将Eigen用于我正在进行的项目,其中运行时性能绝对至关重要(需要满足实时约束)。到目前为止,Eigen为我提供了相当不错的性能。但是,我需要评估Kronecker产品。我正在使用Eigen不受支持的KroneckerProduct模块,但我认为它不能满足我的需求。我用来计算Kronecker乘积的两个矩阵具有固定大小(在编译时已知)和结构。一个矩阵是正方形和对角线,我们假设它是一个单位矩阵。另一个是小方阵。在代码中,像这样:MatrixXfI=MatrixXf::Identity(4,4);MatrixXfX=MatrixXf::Random(8,8);MatrixXfP=kr

c++ - 如何使用 Eigen 和 Bazel 构建一个简单的 C++ 演示?

如何使用Eigen在使用Bazel构建的C++项目中(版本0.25.2)?我喜欢使用http_archive或git_repository获取Eigen依赖项。我试过以下方法:main.cpp#include#includeusingEigen::MatrixXd;intmain(){MatrixXdm(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::cout工作区workspace(name="EigenDemo")load("@bazel_tools//tools/build_defs/repo:http.b

c++ - 带 OpenGL/Eigen3 的反向运动学 : unstable Jacobian pseudoinverse

我正在尝试使用OpenGL、Eigen3和"Jacobianpseudoinverse"实现简单的反向运动学测试方法。系统使用“Jacobiantranspose”算法运行良好,但是,一旦我尝试使用“pseudoinverse”,关节就会变得不稳定并开始抽动(最终它们完全卡住-除非我使用“Jacobiantranspose”回退计算).我调查了这个问题,结果发现在某些情况下Jacobian.inverse()*Jacobian的行列式为零,无法反转。但是,我在互联网(Youtube)上看到其他声称使用相同方法的演示,但他们似乎没有这个问题。所以我不确定问题的原因在哪里。代码附在下面:*

c++ - Eigen 和巨大的密集二维阵列

我正在为一个项目使用2DEigen::Array,我喜欢在大型2D数组的情况下继续使用它们。为了避免内存问题,我想使用内存映射文件来管理(读/修改/写)这些数组,但我找不到工作示例。我找到的最接近的例子是this基于boost::interprocess,但它使用共享内存(虽然我更喜欢持久存储)。缺乏示例让我担心是否有更好的主流替代解决方案来解决我的问题。是这样吗?一个最小的例子会非常方便。编辑:这是一个最小的例子,在评论中解释了我的用例:#includeintmain(){//OrderofmagnitudeoftherequiredarraysEigen::Indexrows=50