GNU Scientific Library determinant of complex array help

In summary, the programmer attempted to solve a problem with a complex array using GSL but was unsuccessful. They suggest converting the array to the correct type first. The problem was that the determinant was too difficult to calculate for a complex array of double complex numbers.
  • #1
tosburn3
6
0
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 *’
 
Last edited:
Technology news on Phys.org
  • #2
Welcome to PF, tosburn3! :smile:

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.
 
  • #3
I like Serena said:
Welcome to PF, tosburn3! :smile:

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.

I don't care if I have to use GSL crap as intermediate steps. I just want to start with a regular complex array and end with a regular complex number. It was my understanding that:

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).
 
  • #4
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?
 
  • #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 *’
 
  • #6
I like Serena said:
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?

Also, the inefficiency was actually that I computed the determinant once for the real part then again for the imaginary part, which would in fact take a lot longer.
 
  • #7
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.
 
  • #8
I like Serena said:
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.

mymatrix is in fact a double complex. I will try that.
 
  • #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!
 
  • #10
Good! :wink:
 
  • #11
Alternatively you could use LAPACK, which will work on an ordinary Fortran array.
 

1. What is the purpose of the GNU Scientific Library determinant of complex array?

The purpose of the GNU Scientific Library determinant of complex array is to calculate the determinant of a complex matrix or array. This is a useful tool for solving systems of linear equations and determining the invertibility of a matrix.

2. How do I use the GNU Scientific Library determinant of complex array?

You can use the GNU Scientific Library determinant of complex array by including the appropriate header file and calling the gsl_linalg_complex_det function. This function takes in a pointer to the complex array and its size as parameters and returns the determinant as a complex number.

3. Can the GNU Scientific Library determinant of complex array handle large matrices?

Yes, the GNU Scientific Library determinant of complex array can handle large matrices as long as there is enough memory available. However, for extremely large matrices, the computation time may be significant.

4. What is the accuracy of the GNU Scientific Library determinant of complex array?

The GNU Scientific Library determinant of complex array uses a stable and accurate algorithm to compute the determinant. The accuracy of the result depends on the precision of the input data and the size of the matrix.

5. Are there any limitations to using the GNU Scientific Library determinant of complex array?

One limitation of using the GNU Scientific Library determinant of complex array is that it only works for square matrices. Additionally, the function may not be suitable for problems that require high precision due to rounding errors in floating-point calculations.

Similar threads

  • Programming and Computer Science
Replies
15
Views
5K
  • Atomic and Condensed Matter
Replies
1
Views
3K
  • Differential Equations
Replies
1
Views
6K
Back
Top