| New Reply |
GNU Scientific Library determinant of complex array help |
Share Thread | Thread Tools |
| Mar15-12, 05:26 PM | #1 |
|
|
GNU Scientific Library determinant of complex array help
So I suck at programming, but I need to find the determinant of a complex 6x6 array using GSL in C (not GSL complex, complex.h complex). Here is what has failed so far starting with a 6x6 double complex array named mymatrix:
gsl_matrix_complex_view m = gsl_matrix_complex_view_array(mymatrix, 6, 6); int s; gsl_permutation *p = gsl_permutation_alloc(6); gsl_linalg_complex_LU_decomp(&m.matrix, p, &s); gsl_complex det2 = gsl_linalg_complex_LU_det(&m.matrix, s); double complex det1 = GSL_REAL(det2)+I*GSL_IMAG(det2); I refuse to convert my entire program to GSL's complex stuff if you think that would fix it. Here is the error message when compiling in gcc: lorenz_odd_1.c: In function ‘det’: lorenz_odd_1.c:122:1: warning: passing argument 1 of ‘gsl_matrix_complex_view_array’ from incompatible pointer type /usr/local/include/gsl/gsl_matrix_complex_double.h:128:1: note: expected ‘double *’ but argument is of type ‘__complex__ double *’ |
| Mar15-12, 06:23 PM | #2 |
|
Recognitions:
|
Welcome to PF, tosburn3!
![]() To make any function of GSL work with complex numbers, you need to convert your complex numbers to GSL complex stuff. Yeah... so I'm suggesting that one. Sorry. |
| Mar15-12, 06:54 PM | #3 |
|
|
gsl_matrix_complex_view m = gsl_matrix_complex_view_array(mymatrix, 6, 6); Will take "mymatrix" and make a gsl_matrix_complex called "m", and then at the end I convert back to a regular complex number (quite inefficiently I might add). |
| Mar15-12, 06:59 PM | #4 |
|
Recognitions:
|
GNU Scientific Library determinant of complex array help
It does not matter if it's inefficient.
In terms of performance, calculating a determinant is so much more computationally difficult, that a conversion of complex numbers matters not at all. It's only a little more code. But... what is your problem then? |
| Mar15-12, 07:08 PM | #5 |
|
|
FWIW here is the error message when compiling with gcc (updated original post for recent version):
lorenz_odd_1.c: In function ‘det’: lorenz_odd_1.c:122:1: warning: passing argument 1 of ‘gsl_matrix_complex_view_array’ from incompatible pointer type /usr/local/include/gsl/gsl_matrix_complex_double.h:128:1: note: expected ‘double *’ but argument is of type ‘__complex__ double *’ |
| Mar15-12, 07:20 PM | #6 |
|
|
|
| Mar15-12, 07:21 PM | #7 |
|
Recognitions:
|
Oh okay, so your "mymatrix" is of the wrong type, apparently something like "double complex*".
How did you define "mymatrix"? Anyway, I strongly recommend that you convert your mymatrix to the type gsl_matrix_complex_view_array() expects. Just allocate the gsl matrix and fill it with 2 for-loops. It really does not pay to try to make any shortcuts here. Generally any shortcuts work against you. If not now, then later. |
| Mar15-12, 07:24 PM | #8 |
|
|
|
| Mar15-12, 07:59 PM | #9 |
|
|
While I'm still not sure why the other way didn't work, looping through each component seems to work. At least it compiles...
Thanks! |
| Mar15-12, 08:16 PM | #10 |
|
Recognitions:
|
Good!
|
| Mar15-12, 10:05 PM | #11 |
Recognitions:
|
Alternatively you could use LAPACK, which will work on an ordinary Fortran array.
|
| New Reply |
| Thread Tools | |
Similar Threads for: GNU Scientific Library determinant of complex array help
|
||||
| Thread | Forum | Replies | ||
| Determinant of a Complex Matrix | General Math | 2 | ||
| Need help using GNU scientific library | Programming & Comp Sci | 15 | ||
| GSL(GNU Scientific Library) | Programming & Comp Sci | 3 | ||
| Fortran, complex array with rank one | Programming & Comp Sci | 7 | ||
| C++ complex array | Programming & Comp Sci | 3 | ||