Questions tagged «lapack»

LAPACK(线性代数包装)是用于数字线性代数任务的常用子例程库,包括方程组线性集,线性最小二乘,特征值问题和奇异值分解。LAPACK例程可与fortran,C和亲戚以及多种其他语言一起使用。

3
BLAS,LAPACK和其他线性代数库的关系是什么?
我一直在研究我一直在从事的项目的C ++线性代数库。我仍然没有掌握的东西是BLAS和LAPACK与其他线性代数库的连接。 浏览关于线性代数库的这篇文章,我发现有趣的是: 一些库独立于BLAS和LAPACK 有些需要BLAS和LAPACK 有些具有BLAS和LAPACK的可选接口 而且据我了解,您可以使用BLAS和LAPACK直接解决线性代数问题 我可以想象有些库只是用C和Fortran编写的BLAS和LAPACK库的C ++接口,而另一些则实现了自己的替代例程,但是 BLAS和LAPACK的可选接口的含义是什么?选择退出后您失去了什么,图书馆正在做什么呢? 是否有任何库提供的不仅仅是接口?例如,UMFPACK用C编写,并且具有BLAS和LAPACK的可选接口。BLAS和LAPACK不能自己做什么UMFPACK(或其他库)?

3
为什么矩阵向量乘法缩放没有缩放?
抱歉,很长的帖子,但我想一开始就包括我认为相关的所有内容。 我想要的是 我正在实现用于稠密矩阵的Krylov子空间方法的并行版本。主要是GMRES,QMR和CG。我(剖析后)意识到我的DGEMV例程是可悲的。因此,我决定通过隔离来集中精力解决这一问题。我尝试在12核计算机上运行它,但以下结果是4核Intel i3笔记本电脑的结果。趋势差异不大。 我的KMP_AFFINITY=VERBOSE输出在这里。 我写了一个小代码: size_N = 15000 A = randomly_generated_dense_matrix(size_N,size_N); %Condition Number is not bad b = randomly_generated_dense_vector(size_N); for it=1:n_times %n_times I kept at 50 x = Matrix_Vector_Multi(A,b); end 我相信这可以模拟CG进行50次迭代的行为。 我尝试过的 翻译 我最初是用Fortran编写代码的。我将其翻译为C,MATLAB和Python(Numpy)。不用说,MATLAB和Python太可怕了。令人惊讶的是,对于上述值,C比FORTRAN好一到两秒。一致。 剖析 我分析了要运行的代码,并且运行了46.075几秒钟。这是将MKL_DYNAMIC设置为FALSE并且使用了所有内核的时候。如果我将MKL_DYNAMIC设置为true,则在任何给定时间点仅使用(大约)一半数量的内核。以下是一些详细信息: Address Line Assembly CPU Time 0x5cb51c mulpd %xmm9, %xmm14 36.591s 最耗时的过程似乎是: Call Stack …

4
快速确定密集矩阵是否为低秩
在我正在从事的软件项目中,对于密集的低阶矩阵,某些计算非常容易。一些问题实例涉及密集的低秩矩阵,但是它们是完全提供给我的,而不是作为因素提供给我的,因此,如果我想利用低秩结构,就必须检查秩并分解矩阵。 所讨论的矩阵通常是完全或接近完全密集的,n的范围从一百到几千。如果矩阵的秩较低(例如小于5到10),则计算SVD并使用它形成低秩分解是值得的。但是,如果矩阵的排名不低,则将浪费精力。 因此,我想找到一种快速合理的方法来确定等级是否较低,然后再投入精力进行完整的SVD因数分解。如果在任何时候都可以确定等级高于临界值,则该过程可以立即停止。如果该过程在不正确的情况下错误地将矩阵声明为低秩,则这不是一个大问题,因为我仍然会执行完整的SVD来确认低秩并找到低秩分解。 我考虑过的选项包括显示LU或QR因式分解的等级,然后是完整的SVD作为检查对象。我还应该考虑其他方法吗?


3
了解Numpy如何执行SVD
我一直在使用不同的方法来计算矩阵的秩和矩阵方程组的解。我遇到了功能linalg.svd。与我自己用高斯消除法求解系统的努力相比,它看起来既更快又更精确。我试图了解这是怎么可能的。 据我所知,linalg.svd函数使用QR算法来计算矩阵的特征值。我知道这在数学上是如何工作的,但是我不知道Numpy如何如此迅速地做到这一点而又不会损失太多精度。 所以我的问题是:numpy.svd函数如何工作,更具体地说,如何快速,准确地实现它(与高斯消去相比)?

2
使用LAPACK和BLAS 对求解
我正在将现有代码从MATLAB移植到C ++,并具有一个线性系统来解决(而不是更典型的形式)A x = bxA=bxA=bxA=bAx=bAx=bAx=b 矩阵是密集的,具有一般形式,但不大于1000x1000。因此在MATLAB中,可以通过函数或正斜杠表示法找到解决方案AAAmrdivide(b,A)x = b/A; 如何使用BLAS和LAPACK例程在C ++代码中解决此问题? 我熟悉的LAPACK程序DGESV解决了为。xAx=bAx=bAx=bxxx 因此,我的一个想法是使用矩阵转置身份进行一些操作: (xA)T=bT(xA)T=bT(xA)^T=b^T ATxT=bTATxT=bTA^T x^T = b^T xT=(AT)−1bTxT=(AT)−1bTx^T = (A^T)^{-1} b^T 然后通过DGESV对转置的进行运算来求解最终形式。(因此转置成本和解决系统的成本)一ATATA^TAAA 有没有一种方法更有效或以其他方式更好? 我正在使用矩阵和向量类以及BOOST uBLAS库中的BLAS实现以及与LAPACK库例程的绑定。我已经成功地将此设置用于其他操作,并希望找到限于这些库的解决方案。 另外,我应该注意,我在代码设置期间仅执行了几次此类操作,因此性能并不是关键问题。 也许此MATLAB 文档对其mrdivide他人有帮助。

2
Matlab [Q,R,E] = qr(A)后面对应的LAPACK函数是什么?
我目前试图廉价地为矩阵计算一个好的秩估计。因此,我使用计算了一个columnt枢轴QR分解AAA [Q,R,E]=qr(A) 在Matlab中。我估计军衔使用AAA tol = size(A,n)*eps*norm(A,'fro'); r = sum(abs(diag(R))>tol) 这可以正常工作,并且在R的所有对角线条目上绘制图如下所示: RRR 这两个实验的输入矩阵完全相同。 我的问题现在是Matlab旋转QR分解的列依赖哪个LAPACK函数? 感谢您的帮助,Grisu 编辑: DGEQPF给出相同的错误结果。 编辑2: AAAE+sign(E,F)E+sign(E,F)E+sign(E,F) AAA RRR 我将LAPACK 3.4.0与OpenBlas / GotoBLAS(64位)一起使用 Matlab 7,2007b,2010b Linux 32位 Edit3:-使用GDB,我发现Matlab 2010b从/usr/ubuntu10.04/matlabr2010b/bin/glnx86/../../bin/glnx86/../中在dgeqp3_()中调用DGEQP3:#3 0xaa46ce2f。 ./bin/glnx86/mllapack.so为什么使用LAPACK会得到错误的结果(3.4.0包括工作说明176中提到的修复程序)?
12 matlab  lapack 


4
带有Fortran 95和LAPACK的倾斜Hermitian矩阵的矩阵指数
我只是迷上了fortran 95,进行了一些量子力学模拟。老实说,我被Octave宠坏了,所以我认为矩阵求幂是理所当然的。给定大小为的(小,)个斜度-厄密矩阵,使用LAPACK解决此问题的最有效方法是什么?我没有使用LAPACK95包装器,只是直接调用LAPACK。n≤36n≤36n\leq 36n×nn×nn\times n
11 fortran  lapack 

1
寻找特征值重新排序算法的基准问题
可以使用正交模拟变换将每个实矩阵简化为实Schur形式。此处,矩阵为准三角形形式,在主对角线上具有1 x 1或2 x 2块。每1由1块对应于一个真实特征值和每个2×2块对应于一对复共轭本征值的。一个一个AŤ= UŤ一个üŤ=üŤ一个üT = U^T A UüüUŤŤT一个一个A一个一个A 特征值重排序问题包括找到正交相似度变换,使得用户对的特征值的选择沿着S = V T T V的左上角的对角线出现。VVV一个一个A小号= VŤŤV小号=VŤŤVS = V^T T V 在LAPACK中,相关的例程双精度例程称为DTRSEN。Daniel Kressner写了一个被封锁的版本,名称为BDTRSEN。ScaLAPACK例程是PDTRSEN。 我正在寻找能够解决特征值重排序问题的真正优势的应用程序和算法。 我们可以轻松地生成准三角形式的测试矩阵,但是在确定用户特征值选择的实际分布形状时遇到了麻烦。 在我看来,具有Ritz加速度的子空间迭代是测试重新排序算法改进的理想算法。它需要(稀疏)矩阵向量乘法,高QR算法和重排序算法。 但是,对于我来说很难发现现实生活中的问题,因为很明显,一组特定的特征对在物理上是有趣的。 我们可以使用共享内存机器对维度为40,000的密集矩阵进行特征值重新排序。当用户选择所有特征值的约50%时,可获得最佳性能。


3
使用Fortran 95和LAPACK的实数不对称矩阵的矩阵指数
最近,我对倾斜的Hermitian矩阵提出了同样的问题。受此问题的成功启发,在将我的头撞在墙上几个小时之后,我正在研究真实的非对称矩阵的矩阵指数。寻找特征值和特征向量的方法似乎有些复杂,我怕迷路了。 背景:前段时间,我在理论物理学SE上问了这个问题。结果使我可以将主方程式表达为真实的非对称矩阵。在与时间无关的情况下,通过对该矩阵求幂来求解主方程。在与时间有关的情况下,将需要集成。我现在只关心时间独立性。 看完我认为应该调用的各种子例程(?gehrd,?orghr,?hseqr ...),尚不清楚将矩阵从转换real*8为complex*16并进行这些例程的复杂双精度版本是否更简单,或坚持使用real*8,将数组的数量加倍,然后再制成一个复杂的矩阵。 那么,我应该调用哪些例程(以什么顺序),并且应该使用实数双精度版本还是复数双精度版本?下面是使用真正的双重版本进行此操作的尝试。我陷入了寻找的特征值和特征向量的困境L*t。 function time_indep_master(s,L,t) ! s is the length of a side of L, which is square. ! L is a real*8, asymmetric square matrix. ! t is a real*8 value corresponding to time. ! This function (will) compute expm(L*t). integer, intent(in) :: s real*8, intent(in) :: …

3
如何开始在C ++中使用LAPACK?
我是计算机科学的新手,我已经学习了积分,插值的基本方法,以及C ++上的RK4,Numerov等方法,但是最近我的教授要求我学习如何使用LAPACK解决与矩阵有关的问题。例如,寻找复杂矩阵的特征值。我从未使用过第三方库,并且几乎总是编写自己的函数。我已经搜寻了几天,但找不到任何适合lapack的业余爱好者指南。所有这些都是用我不理解的语言编写的,我也不知道为什么使用已经编写的函数应该这么复杂。他们到处都是zgeev,dtrsv等单词,我很沮丧。我只想编写类似以下伪代码的代码: #include <lapack:matrix> int main(){ LapackComplexMatrix A(n,n); for... for... cin>>A(i,j); cout<<LapackEigenValues(A); return 0; } 我不知道我是傻还是业余。但是,这不应该那么难吗?我什至不知道我应该使用LAPACK还是LAPACK ++。(我用C ++编写代码,不了解Python或FORTRAN)以及如何安装它们。
10 lapack 

3
LAPACK使用的原因是什么
LAPACK的QR例程将Q存储为Householder反射器。它缩放反射向量与,所以结果的第一个元素变成,所以它不具有被存储。并且它存储一个单独的向量,其中包含所需的比例因子。所以反射矩阵是这样的:vvv1 /v1个1/v11/v_11个11ττ\tauH= 我- τvvŤ,H=一世-τvvŤ,H=I-\tau v v^T, 其中未标准化。而在教科书中,反射矩阵是vvv H= 我− 2 伏vŤ,H=一世-2vvŤ,H = I-2vv^T, 其中,是标准化。vvv 为什么LAPACK 用缩放,而不是对其进行归一化?vvv1 /v1个1个/v1个1/v_1 所需的存储空间是相同的(而不是,必须存储),之后,应用可以更快地完成,因为不需要与进行乘法(可以优化教科书版本中与乘法,如果不是简单归一化,则将缩放为)。ττ\tauv1个v1个v_1HHHττ\tau222vvv2–√/ ∥v∥2/‖v‖\sqrt 2/\|v\| (我的问题的原因是我正在编写QR和SVD例程,并且我想知道此决定的原因,无论是否需要遵循它)

1
矩阵平衡算法
我一直在从头开始编写控制系统工具箱,而纯粹是在Python3中编写(无耻插件:)harold。从我过去的研究中,我总是care.m出于技术/无关的原因而抱怨Riccati求解器。 因此,我一直在编写自己的例程集。我找不到解决方法的一件事是获得一种高性能的平衡算法,至少与一样好balance.m。在提到它之前,xGEBALfamily在Scipy中公开,并且基本上可以从Scipy进行如下调用,假设您具有一个float类型的2D数组A: import scipy as sp gebal = sp.linalg.get_lapack_funcs(('gebal'),(A,)) # this picks up DGEBAL Ab, lo, hi, scaling , info = gebal(A, scale=1 , permute=1 , overwrite_a=0 ) 现在,如果我使用以下测试矩阵 array([[ 6. , 0. , 0. , 0. , 0.000002], [ 0. , 8. , 0. , 0. , 0. ], …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.