问题标签 [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 回答
1647 浏览

c++ - 无法在 Windows 7 中执行 makefile

我正在尝试 在 Windows 7 上使用 MinGW编译库https://github.com/PetterS/SuiteSparse/tree/master/CSparse 。

生成文件内容:

我正在输入 cmd.exe:

我的路径变量:

我已经重新启动了 Windows。我还尝试在 cmd.exe 中设置 path=C:\MinGW\bin,但没有任何改变。

谁能告诉我我做错了什么?

0 投票
1 回答
76 浏览

matlab - Matlab选择线性直接稀疏求解器

我需要使用 SuiteSparse 的 QR 求解器在 Matalab 中求解稀疏线性系统。我该如何选择它?我知道,根据矩阵结构,调用“\”运算符时会使用 QR 求解器。但是我还没有找到任何直接使用它的方法。有文件吗?

干杯

0 投票
1 回答
1559 浏览

c - 无法在我自己的代码中使用 CHOLMOD 和 CUDA 加速

我正在尝试CHOLMOD在. 我按照用户指南编译,可以在文件夹下成功运行,说明GPU在做部分工作。但是,当我尝试使用 运行自己的代码时,发现 GPU 调用的次数始终为 0。我确实设置为 1,环境变量也设置为 1。我的 Makefile 如下所示。库路径是正确的。对我有什么建议吗?CUDASuiteSparse 4.4.4gpu.shDemoCHOLMODCommon->useGPUCHOLMOD_USE_GPU

实际上我应该提到我只是在运行一个最简单的测试用例来解决线性系统。

我尝试了 UF Sparse Matrix Collection 中的几个矩阵,但nvprof显示没有CUDA分析任何应用程序。

我尝试过的一些矩阵:

bmw7st_1:http ://www.cise.ufl.edu/research/sparse/matrices/GHS_psdef/bmw7st_1.html

nd6k: http ://www.cise.ufl.edu/research/sparse/matrices/ND/nd6k.html

nd24k: http ://www.cise.ufl.edu/research/sparse/matrices/ND/nd24k.html

代码:

生成文件:

0 投票
0 回答
544 浏览

c++ - Eigen SuiteSparse (Eigen::SPQR) 不匹配 num 行

我正在使用 Eigen::SPQR 来解决稀疏矩阵系统这是会给出运行时错误的最小示例

输出为 500 400 500 1 400 400。错误消息为“断言 `this->rows()==B.rows() && “SPQR::solve(): 右侧矩阵 B 的行数无效” ' 失败的。”

0 投票
0 回答
262 浏览

c++ - `cholmod_updown_solve()` 的任何示例(在 CHOLMOD 中更新)?

我正在使用 C++ 中的 CHOLMOD 进行 Cholesky 分解更新的项目。我能找到的唯一参考是用户指南。cholmod_updown_solve()似乎对我来说是正确的功能。但是这个函数没有例子,我不能得到正确的结果。

以下是我的代码的重要部分。根据用户指南,唯一需要注意的似乎是C提前对更新矩阵进行排序。但这不起作用。谁能告诉我我是否错过了任何重要的步骤?

另外,我很困惑,因为用户指南说解决方案phi将“按照排列顺序,而不是您的原始顺序”给出。在不知道置换矩阵的情况下如何恢复顺序?(L->Perm不起作用。)

0 投票
1 回答
120 浏览

c++ - 当 A 矩阵很大时,无法使用 CXSparse 中的 cs_qrsol 在 C++ 中求解 x=A\b

我正在尝试使用 Tim Davis 的 CXSparse 库(http://faculty.cse.tamu.edu/davis/suitesparse.html)求解线性方程组 x = A\b。我在 Windows 7 x64 上使用 MS Visual Studio 2012 开发我的 C++ 程序(使用 OpenCV)。

我有一个 A 矩阵,它是一个稀疏矩阵和 b 矩阵。我想找到 x = A\b。我的 A 矩阵的大小约为 700,000 x 30,000。由于这不是方阵,我将函数称为 cs_qrsol(因为该函数接受非方阵 mxn 矩阵。

我已经尝试使用 cs_qrsol 使用下面的代码解决一个小问题,它给出了预期的结果。但是,当我尝试将它与我的真实 A 矩阵一起应用时,该函数始终返回 0。(我尝试过 order = 0 到 3)。

为了证明我的问题 A,b 有一个解 x,我在 MATLAB 中输入矩阵 A,b 并且可以成功得到结果。

所以,我想知道我的代码可能有问题或者功能有任何限制??如果有人能帮助指出我做错了什么,我将不胜感激。非常感谢。

0 投票
1 回答
392 浏览

c++ - SuiteSparse(4.5.1) 的 SPQR - 调用 cholmod_allocate_triplet 始终返回 NULL

我正在尝试使用 SuiteSparse SPQR 来求解线性方程组 x = A\b; 我的 A 矩阵是稀疏的,它是一个矩形矩阵,所以我选择了 SPQR 来解决这个问题。我使用https://github.com/jlblancoc/suitesparse-metis-for-windows提供的 Windows 7 x64 上的 MS Visual Studio 2012 构建了 SuiteSparse 。

为了测试该功能,我修改了 spqr_example 项目以在转换为稀疏矩阵之前分配三元组,而不是最初从标准输入读取输入以创建稀疏矩阵。我输入了一个小的 A 和 b 矩阵进行测试。程序编译成功。我调试了程序,发现我对 cholmod_allocate_triplet() 的调用失败了,因为在此函数的声明中它具有以下代码:

这总是返回 false (即使我的 common 成功启动)。

我不想明确地更改这一行,因为我可能在某处犯了错误,或者我忘记做一些我必须做的事情,因为我是新来使用这个库。

任何人都可以帮我就如何使我的程序正常运行提供一些建议吗?我下面的代码是根据提供的 spqr_example 修改的。非常感谢。

0 投票
0 回答
1378 浏览

matlab - 如何像 MATLAB 那样调用 UMFPACK?

问题

我希望求解线性方程组 A*x=b 的一般系统。m×m 矩阵是稀疏的、实数的、方形的、条件较差的、非对称的,但它是奇异的(rank(A)==m-1),因为x只知道一个加性常数。

i我可以通过在三个向量( 、j和)中指定其非零条目来创建矩阵 A,v使得A(i(k),j(k)) = v(k)

原始方程

我可以解决这个原始方程如下:

如果我想要一个唯一的解决方案,我可以在计算非唯一解决方案后施加一个约束(例如,x(4) == 3.14159):

修正方程

我可以通过添加一个额外的唯一性约束来创建一个新的全秩矩阵C,如下所示:

数字

我知道,当我通过x = A \ b或求解这些方程时y = C \ b,MATLAB 将 解释\mldivide()命令(链接),该命令对矩阵运行一些测试并找出求解例程的最佳算法(有关详细信息,请参阅链接)。

通过设置 MATLAB 的稀疏矩阵求解参数,这些细节在运行时变得冗长spparms('spumoni',2)

当我计算x和/或y时,我注意到以下内容:

  • MATLAB 通过 UMFPACK V5.4.0 将 LU 分解用于平方 m×m 原始方程。
  • MATLAB 通过 SuiteSparseQR 1.1.0 对 m×(m+1) 修改方程使用 QR 分解。

UMFPACK 和 SuiteSparseQR 都是 SuiteSparse 软件包(链接)的一部分。

(有点出乎意料的是,求解修改后的方程会产生比原始方程更多的错误。虽然很重要,但这个错误仍然处于可接受的低阈值。)

我的问题

现在我可以在 MATLAB 中解决这个问题,我希望在 Fortran 中这样做。不幸的是,MATLAB 的mldivide()命令是一个黑匣子,我看不到它是如何设置或调用SuiteSparse例程的。

鉴于我在 Fortran (90+) 中有三个稀疏向量,如下所示,如何使用SuiteSparse解决问题?

或者,是否有人知道与 UMFPACK 接口的任何 F90 包装例程以使这更容易?

如果有人可以帮助解决这个问题,我会非常高兴——无论是原始方程还是修正方程。(如果你帮助一个,我可能会得到另一个。)

让我感到困惑的是以下几点:

  • MATLAB 在幕后做了什么来设置对 SuiteSparse 的调用?(它似乎没有记录在案......)
  • 从 Fortran 中调用 SuiteSparse 需要做什么?(如果有足够的时间,我可能可以从这个演示中弄清楚大部分,但奇怪的是它多次调用例程......)

注意:尽管我在提出这个问题时考虑到了一个特定的问题(谁不是!?),但我相信这足够普遍,对其他人也有用。

0 投票
0 回答
212 浏览

sparse-matrix - Eigen::SPQR 模块在使用最小二乘法求解时抱怨行不匹配

我正在使用Eigen::SPQR模块来解决最小二乘问题Ax = b,并且在解决步骤中出现错误,抱怨行不匹配。一般来说,我的代码包括使用三元组初始化 A,使用括号运算符初始化 b,然后计算 QR 分解并最终求解。

向量 b 的大小等于创建,A.rows()所以我确信它是正确的。但是,当我检查函数时QR.rows(),它会返回A.cols(). 这是某种错误吗?我检查了它Eigen::SparseQR可以解决它而没有错误,但是速度要慢得多,所以我想改用该SuiteSparse模块。有任何想法吗?

0 投票
0 回答
117 浏览

matlab - Suitesparse 等价于复半对称矩阵的 MATLAB A/b

我目前正在使用 MATLAB 对结构对称但值不对称的非常大、非常稀疏、复杂的矩阵进行矩阵除法(即 A(1,2)=3+4i 和 A(2,1)=3- 4i)。

我现在正在将我的代码转换为 Java。Suitesparse/LApack 中 A\b 的正确等效函数是什么?

我知道这是 MATLAB 为 A\b 运行的,但 chol 似乎仅限于实数对称矩阵。