0

我正在尝试使用 Octave C++ API 来解决稀疏线性系统。我遇到的问题是我找不到构建稀疏线性系统的有效方法。

SparseMatrix A;
int dim,nnz;
// dim = dimension
// nnz = number of non-zero entry in the matrix A

/*
    somehow assign the values for dim and nnz
*/

A = SparseMatrix ( dim, dim, nnz );

// row index array
int *pidx_r = new int[nnz];
// col index array
int *pidx_c = new int[nnz];
// value array
double *pval = new double[nnz];
// total number of nonzero elements
int tot; 

/*
    somehow assign values for pidx_r, pidx_c, pval and tot
*/

for ( int i = 0; i < tot; i++ )
    A ( pidx_r[i], pidx_c[i] ) = pval[i];

上面这段代码描述了我的幼稚实现,效率极低,我希望应该有一些成员函数可以将值大量插入稀疏矩阵。

例如,A=SparseMatrix(pidx_r,pidx_c,pval);

但是,我找不到任何这样做的成员函数。至少,幼稚的实现似乎是唯一的方法。

鉴于我已经准备了某种格式的矩阵,我想问一下是否有任何方法可以使用 Octave API for C++ 有效地构造稀疏矩阵?

4

2 回答 2

0

我刚找到这个教程,第一段中的方法看起来像你要找的。

关联

于 2013-05-23T00:07:09.857 回答
0

@wirew0rm​​ 链接中提到的方法微不足道且效率低下。

事实上,我已经找到了一个解决方案,它基本上修改了继承的成员 SparseMatrixRep 的内容。

尽管文档说明它不安全且不推荐,但性能得到了显着提高。

于 2013-05-24T14:08:13.307 回答