我是否正确地说,目前形式的GNU科学库(GSL)不能用于求解涉及稀疏和复杂矩阵的线性系统?
我对C不太满意,但我发现无法使用GSL的gsl_spmatrix
函数创建包含复数值的稀疏矩阵。我用
#include <stdlib.h>
#include <stdio.h>
#include <gsl/gsl_spmatrix.h>
#include <gsl/gsl_complex_math.h>
gsl_spmatrix * re_A ;
gsl_spmatrix * im_A ;
void createspmatrix_c (int n)
{
re_A = gsl_spmatrix_alloc (n,n);
im_A = gsl_spmatrix_alloc (n,n);
}
因此,我创建了稀疏矩阵来分别存储数据的实部和虚部。充其量我可以用其他地方创建的数据填充这些稀疏矩阵。我的目标是能够在GSL中使用带gsl_splinalg_itersolve_gmres
的GMRES,但无法看到我如何使用它。看gsl_spmatrix.h
,我看到了
typedef struct
{
size_t size1; /* number of rows */
size_t size2; /* number of columns */
/* i (size nzmax) contains:
*
* Triplet/CCS: row indices
* CRS: column indices
*/
size_t *i;
double *data; /* matrix elements of size nzmax */
// some more lines...
} gsl_spmatrix;
矩阵元素必须是double
类型。
gsl_spmatrix
结构很可能只适用于real
矩阵。