jjzjj

linear-algebra

全部标签

c++ - Eigen 稀疏矩阵行列式为零

我正在尝试计算我正在操作的稀疏矩阵是否为正定矩阵。为此,我尝试使用西尔维斯特标准,这意味着领先的未成年人是积极的。为了计算矩阵的行列式,我为矩阵的每个block构建了一个sparseLU求解器,然后它可以给出矩阵的行列式。但是从某个维度(大约130*130)开始,我得到的结果是所有行列式都是0。这不是我问题中的一些特殊维度(矩阵有32*32block)所以我相信这个问题是相关的一些由Eigen应用的截断算法,其行列式简单地低于某些阈值。我对这种机制的搜索没有得到像样的结果。我的矩阵的尺寸约为16k*16k,所有非零元素都在对角线附近的96个元素上。Eigen中是否实现了任何截断机制,我

c++ - 由 n 个点定义的超平面

我有以下问题:给定空间中的n个点,我正在搜索穿过它们的超平面。此类问题的最简单示例是两点(x_1=0,x_2=0)和(1,-1),我想返回1*x_1+1*x_2=0。我的点将是32位整数的n元组。所需超平面a_1x_1+a_2x_2+...=c的系数a_i也必须是32位整数。如果不能以这种方式定义超平面,我想报告这一点。我的项目是用C++编写的。我可能可以自己编写代码,但我预计这需要大量工作。此外,我的直觉是,这是一个足够普遍的问题,可能会有一个开源库可以解决我的问题。有人知道可以解决我的问题的库吗?提前致谢! 最佳答案 实际上这并

c++ - 特征向量数组的 vector 运算

我有一个二维特征数组,其中数组中的每个项目都是一个3元素特征向量(例如,表面上的速度场)。我想将二维数组的每个元素与一个3元素EigenRowVector相乘,有效地进行点积。Eigen::ArrayvelField(5,5);Eigen::Vector3dn;//...initialisationofnandvelFieldnotshownEigen::Arrayresult(5,5);result=n.transpose()*velField;这会产生编译错误YOUMIXEDDIFFERENTNUMERICTYPES。但是,如果我不分配结果,而只是计算它:n.transpose()

c++ - UMFPACK 和 BOOST 的 uBLAS 稀疏矩阵

我在数字代码中使用Boost的uBLAS,并有一个“重型”求解器:http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?LU_Matrix_Inversion该代码运行良好,但是速度非常慢。经过一番研究,我找到了UMFPACK,这是一个稀疏矩阵求解器(除其他外)。我的代码生成大型稀疏矩阵,我需要非常频繁地求逆(更正确地求解,逆矩阵的值无关紧要),因此UMFPACk和BOOST的Sparse_Matrix类似乎是美满的结合。UMFPACK请求由三个vector指定的稀疏矩阵:条目计数、行索引和条目。(Seeexamp

c++ - 访问 eigen3 中的特征值

我正在尝试设置eigen3特征值求解器,看起来我遇到了一些麻烦。代码编译得很好,但有时会失败。失败的代码是EigenSolvereigensolver(A);cout,-1,1,0,-1,1>E=eigensolver.eigenvalues();cout以及带有错误消息的输出:tellmesomethingtellmesomethingmore(3.5,1.93649)class_out:/usr/include/eigen3/Eigen/src/Core/DenseCoeffsBase.h:407:Eigen::internal::traits::Scalar&Eigen::Den

c++ - 为什么 Armadillo 的 SVD 结果与 NumPy 不同?

在我的Python代码中,我使用numpy.linalg.svd计算一些数据的SVD:fromnumpyimportlinalg(_,_,v)=linalg.svd(m)由此返回的V矩阵是:[[0.4512937-0.81992002-0.35222884][-0.222547210.27882908-0.93419863][0.864179810.4999855-0.05663711]]在将我的代码移植到C++时,我切换到使用Armadillo用于计算SVD:#includearma::fmatM;//Inputdataarma::fmatU;arma::fvecS;arma::fm

c++ - 在 C++ 中返回多个矩阵( Armadillo 库)

我正在使用C++中的Armadillo库。首先我计算一个特殊矩阵(在我的代码中:P),然后我计算QR分解(在我的代码中:Q)。最后,我需要将P和Q以及另一个矩阵T返回到我的主函数。#include#includeusingnamespacestd;usingnamespacearma;doublephi(intn,intq){...matP(n,n);P=...matQ,R;qr(Q,R,P);returnP:returnQ;returnQ;...}intmain(){...intn,q;cout>n>>q;phi(n,q);...}我正在寻找一种无需使用指针和引用即可在Armadil

c++ - 从一组最接近直线的点中找到点的最快算法是什么?

我有:-一组已知大小的点(在我的例子中,只有6个点)-以x=s+t*r为特征的线,其中x、s和r是3Dvector我需要找到最接近给定线的点。实际距离对我来说并不重要。我查看了几个看似相关的不同问题(包括this一个),并知道如何在我的高中数学课上解决这个问题。但是我无法在不计算每个距离的情况下找到解决方案,而且我确信必须有更好/更快的方法。性能在我的应用程序中绝对至关重要。还有一件事:所有数字都是整数(点的坐标以及s和rvector的元素)。同样,出于性能原因,我希望将float学运算保持在最低限度。 最佳答案 您必须至少处理每个

c++ - 矩阵对数算法

有什么方法可以在OpenCV中计算矩阵对数?我知道它不能作为库函数使用,但是,将不胜感激指向良好来源(论文、教科书等)的指针。 最佳答案 事实上,我正在对Eigen库中的矩阵对数进行编程,该库显然在某些WillowGarage库中使用;不确定OpenCV。Higham的书(请参阅aix的回答)是我认为最好的引用,我正在他的书中实现算法11.11。这是一个相当复杂的算法。对角化(如Alexandre的评论)是一种易于编程的方法,非常适用于对称正定矩阵。它也适用于许多通用矩阵。但是,它对于特征值靠得很近的矩阵不准确,对于不可对角化的矩阵

c++ - 如何在平面上获得三个非共线点? - C++

我正在尝试实现线平面相交算法。根据Wikipedia为此,我需要平面上的三个非共线点。因此我尝试实现thisalgorithm然而,在C++中。肯定有问题,因为我可以选择任何x和y坐标并且它们将适合平面是没有意义的。如果平面是垂直的并且沿x轴怎么办?y=1的点不会在平面上。我意识到这个问题已经在StackOverflow上发布了很多,而且我看到了很多解决方案,其中平面由3个点定义。但是我只有一个普通的和一个位置。在我整理出我的非共线点查找器之前,我无法测试我的线面相交算法。现在的问题是,我正在除以normal.z,当normal.z为0时,这显然不起作用。我正在测试这个平面:Plane