使用GSL进行复杂矩阵求逆

时间:2017-01-13 15:12:33

标签: c linear-algebra gsl matrix-inverse

我正在将原型matlab代码移植到C中,并且在反转复数的nxn矩阵时遇到了麻烦。

我使用GSL使用以下代码执行LU分解和反转:

size_t matSize = 4;
gsl_permutation *perm = gsl_permutation_calloc(matSize);
gsl_matrix_complex *mat = gsl_matrix_complex_calloc(matSize, matSize);
gsl_matrix_complex *inv = gsl_matrix_complex_calloc(matSize, matSize);

gsl_complex temp;
for(int i = 0; i < matSize; i++) {
    for(int j = 0;j < matSize; j++) {
        GSL_SET_COMPLEX(&temp,i+1,j+1);
        gsl_matrix_complex_set(mat,i,j,temp);
    }
}

int s;
gsl_linalg_complex_LU_decomp(mat, perm, &s);
gsl_linalg_complex_LU_invert(mat, perm, inv);

for(int i = 0; i < matSize; i++) {
    for(int j = 0; j < matSize; j++) {
        printf("%f + %fi \n",GSL_REAL(gsl_matrix_complex_get(inv, i, j)),GSL_IMAG(gsl_matrix_complex_get(inv, i, j)));
    }
}

然而,比较我得到matlab的结果,它们完全不相似。我知道matlab并不总是使用LU进行反演,因为它有一个取决于矩阵属性的算法决策树,但我期望得到可比较的结果。

欢迎任何帮助。除了对其他库/反演技术的建议(不是说GSL是错误的,毫无疑问我是!)我所拥有的矩阵是fftw_complex类型,我宁愿避免转换/从gsl_complex_matrix转换。

0 个答案:

没有答案