Trabajar Con La Libreria GSL En C/C++

Hola, por fin puedo cumplir mi promesa de poneros utilizaciones matemáticas en mi blogg. Y esta vez aplicadas a Linux.
Gracias a un anónimo he encontrado la libreía matemática libgsl0, la cual nos permite trabajar con complejos, aproximación con Chebyshev, diferenciación, polinomios,histogramas… cuando programamos en C/C++.
Para instalar dicha librería basta que abráis synaptic y en buscar pongáis libgsl0, os aparecerán unas librerías, las instaláis y ya está.


Si queréis información sobre todo lo que podéis hacer con ella la podéis encontrar en Pincha Aquí

Voy a poner el código de un sencillo programa en C++ para utilizar los números complejos.
Antes que nada hay que saber que esta librería tiene los complejos declarados como una estructura de la forma siguiente

typedef struct

{
double dat[2];

}gsl_complex;

Así pues, cuando queramos declarar una variable compleja la declararemos así:

gsl_complex nombre_de_la_variable_compleja;

La parte double dat[2] lo que me dice es que me crea un array (o vector) de dos elementos de tipo double en los cuales:

dat[0] es la parte real de los complejos
dat[1] es la parte imaginaria de los complejos

Tened en cuenta que es recomendable que en nuestro programa evitemos declarar variables con el nombre dat ya que la uilizaremos
en nuestro código para hacer la salida por terminal.

El código es:

  1. #include<iostream>
  2. //librería para utilizar cin cout
  3. #include<math.h>
  4. //librería para utilizar matemáticas
  5. #include <gsl/gsl_math.h>
  6. //librería para utilizar nuestra libgsl0
  7. #include <gsl/gsl_complex.h>
  8. //librería para utilizar los distintos tipos de complejos con gsl
  9. #include<gsl/gsl_complex_math.h>
  10. //librería para utilizar funciones y operaciones entre complejos
  11. using namespace std; //Convenio para no tener problemas con el compilador g++
  12. int main(int argc, char **argv)
  13. {
  14. gsl_complex z;
  15. //Declaro la variable compleja z con la forma de la struct que he puesto arriba
  16. gsl_complex aux;
  17. //Idem que lo que he hecho con z pero con aux
  18. cout<<"\nDime la parte real de un complejo"<<endl;
  19. cin>>z.dat[0];
  20. //Guardo la parte real en dat[0] de z
  21. cout<<"\nDime la parte imaginaria del complejo  "<<endl;
  22. cin>>z.dat[1];
  23. //Guardo la parte imaginaria de z en dat[1]
  24. cout<<"\nEl complejo es ("<<z.dat[0]<<" "<<z.dat[1]<<")"<<endl;
  25. cout<<"\nSu argumento es "<<gsl_complex_arg(z)<<endl;
  26. cout<<"\nSu modulo es "<<gsl_complex_abs(z)<<endl;
  27. cout<<"\nEl cuadrado de su módulo es "<<gsl_complex_abs2(z)<<endl;
  28. aux = gsl_complex_conjugate(z);
  29. //Utilizo una variable auxiliar para calcular el conjugado de z para así poder
  30. //visualizarlo por terminal de la forma (parte real, parte imaginaria)
  31. cout<<"\nSu conjugado  es("<<aux.dat[0]<<" "<<aux.dat[1]<<")"<<endl;
  32. //Visualizo por terminal el conjugado, para ello accedo a dat[0] y dat[1]
  33. aux = gsl_complex_inverse(z);
  34. cout<<"\nSu inverso es ("<<aux.dat[0]<<" , "<<aux.dat[1]<<")"<<endl;
  35. //Hago lo mismo que antes pero para el inverso de z
  36.  return 0;
  37. }

Una posible salida del programa puede ser esta:

Dime la parte real de un complejo
-1

Dime la parte imaginaria del complejo
-5

El complejo es (-1 , -5)

Su argumento es -1.76819

Su modulo es 5.09902

El cuadrado de su módulo es 26

Su conjugado es (-1 , 5)

Para compilarlo y ejecutarlo haremos lo siguiente, suponiendo que a nuestro programa le hemos llamado complejos.cpp, en terminal introduciremos lo siguiente (Para C cambiar g++ por gcc):

g++ complejos.cpp -o complejos -lgsl -lgslcblas -lm
./complejos

Y ya está. Hay muchas más funciones para utilizar complejos y otras utilidades matemáticas con libgsl0 que podéis ver en el enlace que os he puesto antes, en el cual podéis descargaros el manual, es muy completo.

Saludos

3 Responses to“Trabajar Con La Libreria GSL En C/C++”

  1. Ayoze
    22 mayo, 2008 at 16:17 #

    Y podrias ponerlo en C sin mas? Es que yo lo estoy intentando pero no consigo ni tan siquiera compile, y no se por que de ninguna de las maneras.

  2. 23 noviembre, 2012 at 9:43 #

    Hola, debes instalar antes GSL, está en el repositorio de Ubuntu, si es el que utilizas. Lo que tienes que instalar es libgsl0-dev. También revisa que todas las comillas estén bien puestas, ya que si has hecho un copy/paste no lo hace bien. Y pon bien la instrucción de compilación, como pongo en el post.

Comments are closed.

Proudly powered by WordPress   Premium Style Theme by www.gopiplus.com