问题标签 [suitesparse]

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 投票
1 回答
47 浏览

julia - 从压缩 Q 中恢复 Q(spqr,以稀疏方式)

根据我的问题,我想跟进并从 spqr 过程的输出以(内存)有效的方式计算 Q 矩阵。到目前为止,似乎只实现了 matrix() 。但是,我只需要稀疏格式的 Q 矩阵,没有足够的内存稍后将其转换为稀疏矩阵:

输出:

不幸的是,我在标准库中找不到执行 Matrix(FQ) 的例程,否则我可以自己用稀疏的方式替换它。

最好的,

五。

0 投票
0 回答
92 浏览

c++ - 来自 suitesparse 的并行 SPQR

我正在尝试使用 eigen 中的 sparsesuite SPQR 支持模块来解决启用多线程的系统。

我已经用 -fopenmp 标志和 tbb 编译了相应的库。我正在运行的是

使用不同数量的线程(1、2、4、16)运行它,即使 Eigen::nbThreads() 返回正确的值,我也看到绝对没有加速。

如果我改用共轭梯度,增加线程数有明显的好处。

所以我的问题是:你知道为什么并行化似乎不能使用 SPQR 吗?我在某个地方忘记了什么吗?

提前感谢您的回答,

0 投票
1 回答
146 浏览

c++ - 当稀疏矩阵变得太大时,通过 Eigen 的 Cholmod 失败(Int 溢出错误)

我正在尝试Ax=b在基于 Eigen libary c++ 的项目中使用 Cholmod 超节点求解器求解(我通过 Eigen 调用 cholmod),A它是一个尺寸为 5Mx5M 的稀疏矩阵,并且在运行时出现以下错误:

这是文件中 cholmod 源代码的一部分,cholmod_super_symbolic.c line: 683我认为第二个错误是由于第一个错误。

我想可能是因为 int 索引溢出但我不知道如何修复它,我尝试过更小的矩阵并且效果很好。我也试图改变特征定义()中稀疏矩阵A的_StorageIndexint到,但我有这个编译错误:.long intEigen::SparseMatrix<double,0,long int > SPaMtrcannot convert argument 3 from 'const long *' to 'const int *'

0 投票
0 回答
35 浏览

windows - 当索引为 Suitesparse 长时,cholmod 超节点不 spd

我有一个非常奇怪的问题,我正在尝试通过 eigen 解决具有 cholmod 超节点的系统,但是当我将稀疏矩阵的存储索引设置为 long 时,我有这个警告(CHOLMOD 警告:矩阵不是正定的。文件:C:\suitesparse \SuiteSparse\CHOLMOD\Supernodal\t_cholmod_super_numeric.c 行:911),解决方案是 0 。当存储索引为 Int 时,解决方案是正确的,我没有任何警告。我的问题有必要使用长存储索引,因为问题太大而且我有 int 溢出。这个问题只存在于 windows 上,在 ubuntu 上完美运行。
提前致谢

0 投票
0 回答
80 浏览

c++ - 在 C++ 中为具有零对角线的稀疏带矩阵实现简单的 LDL^T CHOLMOD

我正在实现简单的 LDL^T CHOLMOD 来求解我的 C++ 项目中的线性方程组,该项目具有稀疏带矩阵(维度在 1,000 到 3,000 之间)。该矩阵有多个零对角线,因此 CHOLMOD 有时会为某些项目/矩阵提供错误的结果。

我使用 CHOLMOD(dbound) 来修改零对角线。它的工作原理是给出正确的结果,但前提是 dbound 很小,在我的情况下它应该小于 2.0E-8。问题是 CHOLMOD 变慢了。如果我使用大于 4.0E-3 的 dbound,CHOLMOD 将比我使用 2.0E-8 dbound 快 3-4 倍(但给出错误的结果)。

这是预期的吗?有没有办法既能得到正确的结果又能保持 CHOLMOD 的性能?我尝试了许多其他解决方案,例如手动修改零对角线或 dk[0](例如 t_cholmod_rowfac.c 中的第 414 行),但它们也会降低性能(但给出正确的结果)。非常感谢您提前阅读和帮助。

PS。为保密而未提供代码表示歉意。我只是想得到你的一般建议。但是,如果您需要示例代码来提供建议,我会尽力提供。

0 投票
0 回答
69 浏览

c++ - CSparse LU 分解

我正在尝试使用 CSparse 库(它是https://github.com/DrTimothyAldenDavis/SuiteSparse套件的一部分)对稀疏矩阵执行 LU 分解以求解稀疏线性矩阵方程。

为了验证功能,我在 MATLAB 中使用任意行、列、值三元组值定义了一个A大小为 的稀疏矩阵,条件是确保系统可以被分解/求解,以及一个大小为 的密集矩阵。(10, 10)cond(full(A)) < 100B(10)

使用下面代码中定义的值,A矩阵可以简单地在 MATLAB 中使用[L, U, P] = lu(A).

但是,此例程失败,因为cs_lu top = cs_spsolve (L, A, col, xi, x, pinv, 1)返回值10,因此循环for (p = top ; p < n ; p++)不会执行/迭代。

我尝试使用不同的ordertol值(cs_lusol分别是 的第一个和最后一个参数),但表现出相同的行为。

MATLAB 返回以下 L、U 和 P 矩阵:

,并且能够毫无问题地解决系统。

是否有人能够识别上述代码的任何语义错误或其他问题?任何帮助将不胜感激。