问题标签 [umfpack]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
10344 浏览

c++ - Ax=b 线性代数系统的 C++ 内存高效解决方案

我正在使用 Boost UBlas 的数值库绑定来解决一个简单的线性系统。以下工作正常,除了它仅限于处理相对较小的“m”的矩阵 A(mxm)。

在实践中,我有一个更大的矩阵,尺寸 m= 10^6(最多 10^7)。
是否存在有效使用内存的解决 Ax=b 的现有 C++ 方法。

0 投票
3 回答
11510 浏览

c++ - 用于稀疏酉矩阵的最佳 C++ 矩阵库

我正在寻找一个好的(最好是积极维护的)C++ 矩阵库。因此它应该被模板化,因为我想使用一个复杂的有理数作为数字类型。我正在处理的矩阵主要是稀疏和单一的。

能否请您推荐一些库,并简要说明为什么要使用它们,因为我知道如何找到它们,但我无法真正决定什么适合我,因为我错过了使用它们的经验。

编辑:

我处理的主要操作是矩阵乘法与向量的标量乘法kronecker 积。矩阵的大小是指数级的,我希望至少能够处理高达 1024x1024 条目的矩阵。

0 投票
1 回答
4029 浏览

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 要求由三个向量指定的稀疏矩阵:条目计数、行索引和条目。(见示例)。

我的问题归结为,我可以从 BOOST 的稀疏矩阵类中有效地获取这三个向量吗?

0 投票
4 回答
640 浏览

c++ - 有什么有效的方法可以动态改变 boost 中的 compress_matrix 吗?

我正在使用 ublas::Compressed Matrix 与稀疏线性求解器 UMFPACK 一起工作。由于我正在进行模拟,因此每次线性系统的构造都略有不同,这可能涉及放大/缩小系数矩阵和一些稀疏矩阵乘法。线性系统的规模约为 25k。

即使有用于 UMFPACK 的 boost 绑定补丁,我仍然需要不时更改矩阵,有时甚至计算非零值的数量也会很耗时(理想情况下,我必须给出数字初始化矩阵时的非零值)。此外,我使用 ublas::range 动态附加列/行。

所以我的问题是:有没有有效的方法来做到这一点?现在对我来说太慢了。转置一个尺寸为 15k 的矩阵花费近 6 秒,附加大约 12k 行很快(因为我猜它是一个行主矩阵),但将相同数量的列附加到矩阵可能花费高达 20 秒(我猜同样原因如上所述,所以即使我使用了列主矩阵,所需的总时间也是相同的)。

这里有点绝望。欢迎任何建议。

干杯。

0 投票
1 回答
179 浏览

c++ - 如何设置 UMFPACK 的容差

我在 C++ 中使用 umfpack 来解决稀疏矩阵。我无法找到[UMFPACK PIVOT TOLERANCE]参数的设置位置。有人知道如何设置这个控制参数吗?

我目前的代码是

0 投票
2 回答
476 浏览

c++ - 在 UMFPACK 中,我们需要多久进行一次符号和数字分解?

我有一个系统 Ax = b,其中 B 是一个常数,但 A 在每次迭代中都会发生少量变化。我正在使用 UMFPACK 5 再次解决这个线性系统,就像 A 的变化一样。我可以通过两种方式完成上述操作:

  1. 在开始时计算矩阵 A 的符号和数值因式分解,并使用此数值对象在每次迭代中求解 Ax = b(当然在稀疏矩阵表示中,Ax 随着 A 的变化而变化。Ap 和 Ai 保持不变)。
  2. 在每次迭代中计算矩阵 A 的符号和数值因式分解(即随着 A 的变化产生一个新的数值对象)并使用这个新的数值对象来求解 Ax = b。

以上哪种方式是正确的?对于上述两个过程,我得到了完全不同的答案(如预期的那样)。任何帮助或评论表示赞赏。谢谢。

0 投票
0 回答
94 浏览

umfpack - 使用 UMFPACK 求解系统,其中 x = (AtA)^-1 b

我有一个稀疏矩阵 A,需要求解系统 (AtA)X = B。现在我将 At 乘以 A 并使用 AtA 来求解系统。是否有更快的替代方案(例如将 A 传递给 UMFPACK 并让它更快地找到分解)?

顺便说一下,A是矩形的。

0 投票
2 回答
832 浏览

gcc - 使用 UMFPACK 编译示例文件时出错

我想从 UMFPACK 的 Demos 编译一个非常 umfpack_simple.c 但我收到以下错误:

可以看出,我错过了一些定义 ceil 和 sqrt 的库。我正在使用 GotoBLAS2 和 UMFPACK。请让我知道问题出在哪里。谢谢

0 投票
0 回答
185 浏览

c++ - 没有扩展名的c++文件

我有一个引发编译错误的项目,我有一个名为“UmfPackSupport”的文件,该文件包含在另一个名为“PoissonBlender.hpp”的文件中,其中包含以下行:

然后我在行中有一个错误:

说的是

那个没有扩展名的文件是什么??

0 投票
1 回答
2004 浏览

linux - 在 Linux 上使用英特尔 MKL 编译 SuiteSparse (UMFPACK)

我正在尝试使用 Intel MKL 的 BLAS 和 LAPACK编译SuiteSparse 。但是,make 似乎找不到这些库。考虑到 makefile 使用的 BLAS 和 LAPACK 的 SuiteSparse_config.mk 文件部分如下所示:

我试图将英特尔的 libmkl_blas_95ilp64.a 和 libmkl_blas95_lp64.a 复制到稀疏套件文件夹中并设置

但后来它说它找不到这样的文件。我还尝试为这些库提供完整的路径,但随后它编译了除演示之外的所有内容,这些都有未解决的错误。如何设置这些库以使 SuiteSparse 工作?