Questions tagged «linear-algebra»

有关线性代数的算法/计算方面的问题,包括线性系统的解,最小二乘问题,本征问题和其他此类问题。

10
关于可用的快速C ++矩阵库的建议?
是否有人对可用的快速C ++矩阵库有建议? 我的意思是以下内容: 矩阵对象具有直观的界面(例如:建立索引时可以使用行和列) 我可以使用LAPACK和BLAS做的矩阵类做任何事情 易于学习和使用的API 在Linux上安装相对容易(我现在使用Ubuntu 11.04) 对我而言,可用性比现在的速度或内存使用率更为重要,以避免过早的优化。在编写代码时,我总是可以使用一维数组(或STL向量)和适当的索引或指针算法来模拟矩阵,但我最好不要这样做,以免出现错误。我还想将精力集中在要解决的实际问题上,并编程到问题域中,而不是用有限的注意力来记住我以前将矩阵模拟为数组的所有编程技巧。 ,并记住LAPACK命令等等。另外,我必须编写的代码越少,标准化程度越高,效果越好。 稀疏还是稀疏无关紧要;我正在处理的某些矩阵将是稀疏的,但不是全部。但是,如果特定的程序包可以很好地处理密集或稀疏矩阵,则值得一提。 模板对我来说也没有太大关系,因为我将使用标准数字类型,并且不需要存储双精度,浮点型或整数型的东西。很好,但是对于我想做的事情不是必需的。

17
是否有适用于Python的高质量非线性编程求解器?
我要解决几个具有挑战性的非凸全局优化问题。目前,我使用了MATLAB的Optimization Toolbox(特别是fmincon()使用algorithm = 'sqp'),它非常有效。但是,我的大部分代码是在Python中进行的,我也想在Python中进行优化。是否存在可以与Python绑定竞争的NLP求解器fmincon()?它必须 能够处理非线性等式和不等式约束 不需要用户提供雅可比行列式。 如果不保证全局最优(fmincon()没有),也可以。我正在寻找一种即使在遇到挑战性问题时也可以收敛到局部最优的东西,即使它比慢一些fmincon()。 我尝试了OpenOpt提供的几种求解器,发现它们不如MATLAB的fmincon/sqp。 只是为了强调,我已经有了一个易于处理的公式和一个好的求解器。我的目标仅仅是更改语言,以使工作流程更加简化。 Geoff指出问题的某些特征可能是相关的。他们是: 10-400个决策变量 4-100个多项式相等约束(多项式范围从1到大约8) 有理不等式约束的数量大约等于决策变量数量的两倍 目标函数是决策变量之一 等式约束的雅可比行列是密集的,不等式约束的雅可比行列是密集的。

4
选择稀疏线性系统求解器时应遵循哪些准则?
稀疏线性系统在应用中会随着频率的增加而出现。解决这些系统有很多例程可供选择。在最高级别,直接方法(例如,稀疏的高斯消除或Cholesky分解,使用特殊的排序算法和多前沿方法)与迭代方法(例如,GMRES,(双)共轭梯度)方法之间存在分水岭。 如何确定使用直接方法还是迭代方法?做出了这样的选择之后,如何选择一种特定的算法?我已经知道对称性的利用方法(例如,将共轭梯度用于稀疏对称正定系统),但是在选择方法时还需要考虑其他类似因素吗?

4
MATLAB反斜杠运算符如何求解平方矩阵的
我将一些代码与“常规” MATLAB代码进行了比较。我对结果感到惊讶。 我运行了一个示例代码(稀疏矩阵) n = 5000; a = diag(rand(n,1)); b = rand(n,1); disp('For a\b'); tic;a\b;toc; disp('For LU'); tic;LULU;toc; disp('For Conj Grad'); tic;conjgrad(a,b,1e-8);toc; disp('Inv(A)*B'); tic;inv(a)*b;toc; 结果: For a\b Elapsed time is 0.052838 seconds. For LU Elapsed time is 7.441331 seconds. For Conj Grad Elapsed time is 3.819182 seconds. Inv(A)*B Elapsed time …

3
如何选择一种求解线性方程的方法
据我所知,有四种方法可以解决线性方程组(如果有更多方法,请纠正我): 如果系统矩阵是满级方阵,则可以使用Cramer规则; 计算系统矩阵的逆或伪逆; 使用矩阵分解方法(将高斯或高斯-乔丹消除法视为逻辑分解); 使用迭代方法,例如共轭梯度法。 实际上,您几乎从不希望通过使用Cramer规则或计算逆或伪逆来求解方程,尤其是对于高维矩阵,因此第一个问题是何时分别使用分解方法和迭代方法。我猜这取决于系统矩阵的大小和属性。 就您所知,第二个问题是,就数值稳定性和效率而言,哪种分解方法或迭代方法最适合某些系统矩阵。 例如,使用共轭梯度法来求解方程,其中矩阵是对称和正定的,虽然它也可以应用到任何线性方程通过转换Ax=bAx=b\mathbf{A}x=b到ATAx=ATbATAx=ATb\mathbf{A}^{\rm T}\mathbf{A}x=\mathbf{A}^{\rm T}b。对于正定矩阵,也可以使用Cholesky分解方法来寻找解。但是我不知道何时选择CG方法以及何时选择Cholesky分解。我的感觉是,对于大型矩阵,我们最好使用CG方法。 对于矩形矩阵,我们可以使用QR分解或SVD,但同样,我也不知道如何选择其中之一。 对于其他矩阵,我现在不介绍如何选择合适的求解器,例如厄米/对称矩阵,稀疏矩阵,带矩阵等。


16
计算科学中“两个容易,三个很难​​”的好例子
我最近遇到了一个元现象的表述:“ 两个很容易,三个很困难 ”(Federico Poloni用这种方式表述),可以描述如下: 当为两个实体提出特定问题时,相对容易解决。但是,用于三实体公式化的算法极大地增加了难度,甚至可能使解决方案不可行或无法实现。 (我欢迎提出建议,以使措辞更加美观,简洁和准确。) 您知道在计算科学的各个领域(从纯线性代数开始,到总括式计算物理结束)有哪些好例子?

2
微小的行列式是否暗含矩阵的病态?
如果我有一个平方的可逆矩阵,并且采用它的行列式,并且发现,这是否意味着该矩阵的条件差?det(A)≈0det(A)≈0\det(A) \approx 0 反过来也正确吗?病态矩阵的行列式几乎为零吗? 这是我在Octave中尝试过的方法: a = rand(4,4); det(a) %0.008 cond(a)%125 a(:,4) = 1*a(:,1) + 2*a(:,2) = 0.000000001*ones(4,1); det(a)%1.8E-11 cond(a)%3.46E10

4
处理正定对称(协方差)矩阵的逆矩阵?
在统计数据及其各种应用中,我们经常计算协方差矩阵,该方差矩阵是正定的(在考虑的情况下)并且是对称的,用于各种用途。有时,我们需要此矩阵的逆进行各种计算(例如,以该逆为(仅)中心矩阵的二次形式)。考虑到该矩阵的质量和预期用途,我想知道: 就数值稳定性而言,逆运算的最佳计算或使用方法(一般来说是二次形式或矩阵矢量乘法)是什么?可以派上用场的一些分解?

7
计算一般矩阵最大特征值的最快方法是什么?
编辑:我正在测试是否任何特征值具有一个或更大的幅度。 我需要找到一个大型的稀疏,非对称矩阵的最大绝对特征值。 我一直在使用R eigen()函数,该函数使用EISPACK或LAPACK中的QR算法查找所有特征值,然后使用它abs()来获取绝对值。但是,我需要做得更快。 我也尝试过在igraphR包中使用ARPACK接口。但是,它给了我的一个矩阵一个错误。 最终实现必须可以从R访问。 可能会有多个相同大小的特征值。 你有什么建议吗? 编辑: 精度只需要是1e-11。到目前为止,“典型”矩阵是。我已经能够对此进行QR分解。但是,也可以有更大的对象。我目前开始阅读有关Arnoldi算法的信息。我了解这与Lanczsos有关。386 × 386386×386386\times 386 EDIT2:如果我有多个矩阵正在“测试”,并且我知道有一个不变的大子矩阵。是否可以忽略/丢弃它?

5
在numpy中就地置换矩阵
我想通过使用python的numpy库更改其若干行和列的顺序来就地修改密集的正方形转换矩阵。从数学上讲,这对应于将矩阵乘以置换矩阵P并将其乘以P ^ -1 = P ^ T,但这并不是计算合理的解决方案。 现在,我正在手动交换行和列,但是我希望numpy有一个不错的函数f(M,v),其中M具有n行和列,而v具有n项,以便f(M,v)更新M根据索引排列v。也许我只是在搜索互联网上失败了。 numpy的“高级索引”可能会发生这种情况,但是我的理解是这样的解决方案不会就位。同样,对于某些简单情况,仅跟踪索引排列可能就足够了,但是在我的情况下这并不方便。 补充: 有时当人们谈论排列时,它们仅表示对随机排列进行采样,例如,这是在统计中获取p值的过程的一部分。或者,它们的意思是计数或枚举所有可能的排列。我不是在谈论这些事情。 补充: 矩阵足够小以适合桌面RAM,但又足够大,我不想深思熟虑地复制它。实际上,我想使用尽可能大的矩阵,但我不想处理无法将其保存在RAM中的不便,并且我会对矩阵执行O(N ^ 3)LAPACK运算,这也会限制实际矩阵的大小。我目前不必要地复制这么大的矩阵,但我希望可以很容易地避免这种排列的情况。

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(或其他库)?


2
为什么我的迭代线性求解器不收敛?
使用KSP(PETSc)的预先设定的Krylov方法时会出什么问题的线性求解器程序包)中的求解稀疏线性系统(例如通过离散化和线性化偏微分方程获得的线性系统)时,会出现什么问题? 我可以采取什么步骤来确定问题出了什么问题? 为了成功有效地求解线性系统,我可以进行哪些更改?

3
求解方程组线性系统的Krylov子空间方法收敛的原理是什么?
据我了解,解决线性方程组的方法有两大类: 固定方法(Jacobi,Gauss-Seidel,SOR,Multigrid) Krylov子空间方法(共轭梯度,GMRES等) 我了解到,大多数固定方法都是通过迭代地放松(平滑)错误的傅立叶模式而起作用的。据我了解,共轭梯度法(Krylov子空间法)通过“逐步”遍历来自应用于第ñnn个残差的矩阵的幂的最佳搜索方向集而工作。这个原理对所有Krylov子空间方法都通用吗?如果不是,那么,一般来说,我们如何表征Krylov子空间方法收敛的原理?

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.