Questions tagged «linear-solver»

指用于求解方程式线性系统的方法。

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,(双)共轭梯度)方法之间存在分水岭。 如何确定使用直接方法还是迭代方法?做出了这样的选择之后,如何选择一种特定的算法?我已经知道对称性的利用方法(例如,将共轭梯度用于稀疏对称正定系统),但是在选择方法时还需要考虑其他类似因素吗?

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,但同样,我也不知道如何选择其中之一。 对于其他矩阵,我现在不介绍如何选择合适的求解器,例如厄米/对称矩阵,稀疏矩阵,带矩阵等。

3
求解
我有矩阵AAA和GGG。AAA是稀疏的,并且是n×nn×nn\times n其中nnn非常大(可以达到几百万个数量级。)GGG是一个n×mn×mn\times m高的矩阵,其中mmm很小(1<m<10001<m<10001 \lt m \lt 1000),每列只能有一个111条目其余为的,以使得。很大,所以反转起来真的很困难,我可以求解一个线性系统,例如000GTG=IGTG=IG^TG = IAAAAx=bAx=bAx = b迭代地使用Krylov子空间方法,例如,但我没有明确地拥有。BiCGStab(l)BiCGStab(l)\mathrm{BiCGStab}(l)A−1A−1A^{-1} 我想解决以下形式的系统:,其中和是长度向量。一种实现方法是在迭代算法中使用迭代算法来为外部迭代算法的每次迭代求解。但是,这将在计算上极其昂贵。我想知道是否有一种计算上更简单的方法来解决这个问题。x b m A − 1(GTA−1G)x=b(GTA−1G)x=b(G^TA^{-1}G)x = bxxxbbbmmmA−1A−1A^{-1}

2
解决稀疏线性系统的库
有许多不同的库可以解决稀疏的线性方程组,但是我发现很难找出区别。 据我所知,主要有三个软件包: Trilinos,PETSc和Intel MKL。它们都可以做稀疏矩阵求解,它们都很快(据我所知,我还不能在其中任何一个上找到可靠的基准),并且它们都是可并行化的。我找不到的是差异。 那么,那里的不同的稀疏线性系统求解器之间有什么区别呢?

3
共轭梯度比GMRES更好的问题
我对共轭梯度比GMRES方法更好的情况感兴趣。 通常,在许多SPD(对称-正定)情况下,CG是首选,因为它需要较少的存储,并且CG的理论收敛速度是GMRES的两倍。实际观察到这样的费率有什么问题吗?对于相同数量的spmvs(稀疏矩阵矢量乘法),GMRES的性能好于CG或与CG相当吗?


3
使用直接方法时出现不适的症状是什么?
假设我们有一个线性系统,并且对它的条件一无所知,也没有关于解的初步信息。我们盲目地应用高斯消去法并得到一些解xxx。如果不对矩阵进行全面的初步分析,是否可以确定该解决方案是否值得信赖(即系统状况良好)?枢纽的数量是否能提供可靠的信息? 通常,“动态”检测疾病的主要准则是什么?

1
如何激发Krylov加速的Multigrid(使用MG作为前提条件)?
通过构造初始猜测值并对重复以下步骤,直到收敛为止,可以使用Multigrid(MG)求解线性系统:X 0我= 0 ,1 ..甲X = bAx=bAx=bX0x0x_0我= 0 ,1 ..i=0,1..i=0,1.. 计算残差[R一世= b - A x一世ri=b−Axir_i = b-Ax_i 应用多重网格周期以获得近似值,其中。甲é 我 = - [R 我Δ X一世≈ è一世Δxi≈ei\Delta x_i \approx e_iAei=riAei=riAe_i = r_i 更新xi+1←xi+Δxixi+1←xi+Δxix_{i+1} \gets x_i + \Delta x_i 多重网格周期是应用于以产生的平滑,内插,约束和精确的粗网格求解操作的序列。这通常是一个V周期或W周期。这是一个线性运算,因此我们写成。 Δ X 我 Δ X 我 = 乙ř 我ririr_iΔxiΔxi\Delta x_iΔxi=BriΔxi=Bri\Delta x_i = B …

3
Thomas算法是求解对称对角占优稀疏三对角线性系统的最快方法吗
我想知道托马斯算法是否是解决算法复杂性(不寻找像LAPACK之类的实现包)方面最快的方法(可证明?)来解决对称对角占优的稀疏三对角线系统。我知道,托马斯算法和多重网格都为复杂度,但是多重网格的常数因子可能较小吗?在我看来,Multigrid可能不会更快,但我并不乐观。O(n)O(n)O(n) 注意:我正在考虑矩阵很大的情况。可以采用直接方法或迭代方法。

3
单浮点精度与双浮点精度
单精度浮点数占用一半的内存,在现代机器上(甚至在GPU上),使用它们进行运算的速度几乎是双精度浮点数的两倍。我发现许多FDTD代码专门使用单精度算术和存储。有什么经验可以解决使用单精度求解大型稀疏方程组的问题?我认为它必须在很大程度上取决于矩阵条件数。 此外,是否有任何有效的技术在必要时使用双精度,而在不需要双精度的情况下使用单精度。例如,我认为对于矩阵矢量乘法或矢量点积,将结果累加到双精度变量中(以避免抵消误差)可能是一个好主意,但是各个条目要彼此相乘可以使用单精度乘以 现代FPU是否无缝地允许从单精度(浮动)转换为双精度(双精度),反之亦然?还是这些昂贵的运营?

2
用另一种krylov方法预处理krylov方法
在类似gmres或bicgstab的方法中,使用另一种krylov方法作为前置条件可能会很有吸引力。毕竟,它们很容易以无矩阵的方式并在并行环境中实现。例如,一个库尔使用未经预处理的bigcstab的几次迭代(约5次)作为gmres的预处理器,或krylov方法的任何其他组合。在文学界,我没有太多参考这种方法,所以我希望这是因为它不是很有效。我想了解为什么效率不高。在某些情况下,这是一个不错的选择吗? 在我的研究中,我对在并行(MPI)环境中解决3D椭圆问题感兴趣。

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他人有帮助。

3
适用于许多右侧的稀疏线性求解器
我需要用多个右侧(300至1000)来解决相同的稀疏线性系统(300x300至1000x1000)。除了第一个问题外,我还想解决不同的系统,但是具有相同的非零元素(只是不同的值),那就是许多稀疏系统具有恒定的稀疏性模式。我的矩阵是不确定的。 分解和初始化的性能并不重要,但是求解阶段的性能很重要。目前,我正在考虑使用PaStiX或Umfpack,并且我可能会使用Petsc(支持这两个求解器)是否有能够利用我的特定需求(向量化,多线程)的库,或者我应该依赖于通用求解器?也许根据我的需要对其进行一些修改? 如果稀疏矩阵大到怎么办?106× 106106×10610^6 \times 10^6

5
使用相同的,不同的重复求解
我正在使用MATLAB解决一个涉及解决,其中每个时间步随着时间变化。现在,我正在使用MATLAB的:bAx=bAx=b\mathbf{A} \mathbf{x}=\mathbf{b}bb\mathbf{b}mldivide x = A\b 我可以灵活地进行所需的预计算,因此我想知道是否有比更快和/或更准确的方法mldivide。通常在这里做什么?谢谢大家!

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.