我想解决线性方程组:
Ax = b
Run Code Online (Sandbox Code Playgroud)
A是n x m矩阵(不是正方形),b和x都是n x 1矢量.在已知A和b的情况下,n约为50-100,m约为2(换句话说,A可以是最大值[100×2]).
我知道解决方案x:$x = \inv(A^T A) A^T b$
我找到了几种方法来解决它:uBLAS(Boost),Lapack,Eigen等等但我不知道使用这些包的'x'的CPU计算时间有多快.我也不知道这个数字是否快速为什么解决'x'
对我来说重要的是,由于我是新手,CPU计算时间尽可能短,文档也很好.
在求解正规方程后,Ax = b我想使用回归来改进我的近似,并且可能稍后应用卡尔曼滤波器.
我的问题是哪个C++库是robuster,并且我在上面描述的需求更快?
我想使用 lapack 并为其制作 C++ 矩阵包装器,但 lapack 是用 Fortran 编写的,有一些 clapack 但我想从源代码使用它。首先将 *.f 和 *.cpp 文件编译为目标文件,然后将其链接到应用程序中。
我拥有以下应用程序和来源。
我该如何申请,请帮忙...
我的操作系统是 Windows 7 和 CPU Core2Duo,并且我没有 Intel 数学内核
我是C ++编程的新手,但我有一个任务是为尺寸很大的矩阵计算对称矩阵(和Hermitian)的特征值和特征向量(标准本征问题Ax = lx)):Binomial(L,L / 2)其中L大约是18-22岁。现在,我正在具有7.7 GB可用内存的机器上对其进行测试,但最终我将可以访问具有64GB RAM的PC。
我从Lapack ++开始。一开始,我的项目假设仅针对对称实矩阵解决此问题。
这个图书馆很棒。非常快速且占用少量RAM。它具有计算特征向量并将其放置在输入矩阵A中的选项,以节省内存。有用!我以为Lapack ++ eigensolver可以处理Hermitian矩阵,但是由于未知的原因而不能(也许我做错了)。我的项目不断发展,对于埃尔米特矩阵,我也应该能够计算出这个问题。
因此,我尝试将库更改为Armadillo库。它可以正常工作,但是不如Lapack ++取代mat Aall eigenvec,但它当然支持埃尔米特矩阵。
L = 14的一些统计
Lapack ++ RAM 126MB时间7.9s本征+本征向量
犰狳 RAM 216MB时间12s本征
Armadillo RAM 396MB时间15s本征值+本征向量
让我们做一些计算:double变量大约是8B。我的矩阵的大小为
binomial(14,7)= 3432,因此在理想情况下它应具有3432 ^ 2 * 8/1024 ^ 2 = 89 MB。
我的问题是:是否可以修改或强制Armadillo像Lapack ++一样做一个不错的技巧?犰狳的用法LAPACK和BLAS例程。或者,也许有人可以推荐使用另一个库解决此问题的另一种方法? …
首先,我是 C++ 新手。
我正在为我的硕士论文编写一个程序,其中一部分假设以递归方式解决回归问题。
我想解决:
Ax = y
Run Code Online (Sandbox Code Playgroud)
就我而言,计算速度不可忽视,这就是我想知道 Boost::BLAS 是否使用
x = (A^T A)^{-1}A^Ty
Run Code Online (Sandbox Code Playgroud)
需要比 Lapackpp 更少的计算时间(我使用的是 gentoo)。
PS 我能够在 Lapackpp 项目站点找到类文档,但找不到示例。有人可以给我提供一些例子,以防 Lapack 比 Boost::BLAS 更快吗
谢谢
c++ ×4
lapack++ ×4
boost ×2
armadillo ×1
eigen ×1
eigenvalue ×1
eigenvector ×1
fortran ×1
lapack ×1
windows ×1