Комплексная матричная инверсия с GSL
Я в процессе переноса прототипа кода 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.