疎な線形システムを解くために 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);
ただし、そのためのメンバー関数が見つかりません。少なくとも、素朴な実装が唯一のアプローチのようです。
何らかの形式で行列を用意したので、C++ 用の Octave API を使用して効率的に疎行列を作成する方法はありますか?