Anuncio

Colapsar
No hay ningún anuncio todavía.

Problema al compilar

Colapsar
X
 
  • Filtro
  • Hora
  • Mostrar
Borrar todo
nuevos mensajes

  • C/C++ Problema al compilar

    Hola, estoy compilando un código en C, pero me aparece el siguiente error:

    Código:
    $ gc archivo.c 
    Warning: archivo.c:24: syntax error in line 24 near 'void'

    El preámbulo que uso es el siguiente:

    Código:
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #include<gsl/gsl_sf_legendre.h>
    #include<gsl/gsl_linalg.h>
    #include<gsl/gsl_complex.h>
    #include<gsl/gsl_complex_math.h>
    #include<gsl/gsl_matrix_complex_double.h>
    #include<gsl/gsl_cblas.h>
    
    # define imax 101
    # define nmax 150
    # define deltat 0.01 /*    delatat = t/nmax      */
    # define PI 3.1415926
    # define cuarta .25
    # define L 2
    
    void LU (double ro, gsl_complex cero, gsl_complex l_0,gsl_vector_complex *b,gsl_vector_complex *new );
    
    gsl_complex interior (int i,double ro,gsl_vector_complex *old ,gsl_complex punto);
    
    int
    main (void)
    O es que no recuerdo bien como compilar, hace bastante tiempo que no uso C, agradecería si alguien me pudiera ayudar.

    Un saludo.
    Última edición por [Beto]; 07/05/2013, 02:41:24.

  • #2
    Re: Problema al compilar

    Ese codigo que intentas compilar no es valido, esta incompleto, faltan cosas despues de la ultima linea, por eso el compilador te da error.
     \left\vert{     \Psi_{UNIVERSE}       }\right>  = \sum \alpha_i   \left\vert{     \Psi_{WORLD_i}       }\right> \text{   } \hspace{3 mm}  \sum  \left\vert{} \alpha_i   \right\vert{}^2 = 1

    Comentario


    • #3
      Re: Problema al compilar

      Escrito por abuelillo Ver mensaje
      Ese codigo que intentas compilar no es valido, esta incompleto, faltan cosas despues de la ultima linea, por eso el compilador te da error.
      Lo sé, esta incompleto solo he copiado una parte del código (para especificar el preámbulo que estoy usando), la última línea es donde sale el error, sucede que en esa línea no alcanzó a ver ningún error de sintaxis.
      Última edición por [Beto]; 07/05/2013, 04:03:42.

      Comentario


      • #4
        Re: Problema al compilar

        Has dejado la funcion main a medio definir, no es sintacticamente correcta en lenguaje C.
        Necesitas poner dos llaves despues del main, para definir por lo menos una funcion que no hace nada, sin las dos llaves, el codigo es erroneo.


        Código:
        int main (void)
        {
        }
         \left\vert{     \Psi_{UNIVERSE}       }\right>  = \sum \alpha_i   \left\vert{     \Psi_{WORLD_i}       }\right> \text{   } \hspace{3 mm}  \sum  \left\vert{} \alpha_i   \right\vert{}^2 = 1

        Comentario


        • #5
          Re: Problema al compilar

          Escrito por abuelillo Ver mensaje
          Has dejado la funcion main a medio definir, no es sintacticamente correcta en lenguaje C.
          Necesitas poner dos llaves despues del main, para definir por lo menos una funcion que no hace nada, sin las dos llaves, el codigo es erroneo.


          Código:
          int main (void)
          {
          }
          Como dije es solo una parte del código, las llaves si están en lo que sigue del código, pero es que son como 400 líneas, hace unos días me compiló y desde ese día no lo he tocado, lo único raro que pasó fue que se actualizó mi versión de kubuntu, aunque no creo que eso fuese motivo para dar problemas ¿verdad?

          Comentario


          • #6
            Re: Problema al compilar

            int main (void) tal cual sin nada mas es sintacticamente incorrecto en C. Ese codigo es imposible que te haya compilado sin errores anteriormente.
            Como minimo tiene que acabar en punto y coma para que sea sintacticamente correcta y que el compilador no se queje (aunque se quejara despues por no estar definida la funcion main)
            Última edición por abuelillo; 07/05/2013, 04:47:52.
             \left\vert{     \Psi_{UNIVERSE}       }\right>  = \sum \alpha_i   \left\vert{     \Psi_{WORLD_i}       }\right> \text{   } \hspace{3 mm}  \sum  \left\vert{} \alpha_i   \right\vert{}^2 = 1

            Comentario


            • #7
              Re: Problema al compilar

              Escrito por abuelillo Ver mensaje
              int main (void) tal cual sin nada mas es sintacticamente incorrecto en C. Ese codigo es imposible que te haya compilado sin errores anteriormente.
              Como minimo tiene que acabar en punto y coma para que sea sintacticamente correcta y que el compilador no se queje (aunque se quejara despues por no estar definida la funcion main)
              No me hecho entender las llaves si estan colocadas el documento original, arriba solo copie una parte del código para que se pueda apreciar el preámbulo, el documento original tiene mas o menos la siguiente estructura:


              Código:
              #include<stdio.h>
              #include<stdlib.h>
              #include<math.h>
              #include<gsl/gsl_sf_legendre.h>
              #include<gsl/gsl_linalg.h>
              #include<gsl/gsl_complex.h>
              #include<gsl/gsl_complex_math.h>
              #include<gsl/gsl_matrix_complex_double.h>
              #include<gsl/gsl_cblas.h>
              
              
              
              
              # define imax 101
              
              
              # define nmax 150
              # define deltat 0.01 /*    delatat = t/nmax      */
              
              
              # define PI 3.1415926
              # define cuarta .25
              # define L 2
              
              
              void LU (double ro, gsl_complex cero, gsl_complex l_0,gsl_vector_complex *b,gsl_vector_complex *new );
              
              
              gsl_complex interior (int i,double ro,gsl_vector_complex *old ,gsl_complex punto);
              
              
              
              
              int
              main (void)
              {
              }
              
              void 
              LU (double ro,gsl_complex cero, gsl_complex l_0,gsl_vector_complex *b, gsl_vector_complex *new  )
              {
              
              }
              
              
              gsl_complex interior 
              (int i, double ro, gsl_vector_complex *a ,gsl_complex punto)
              {
              
              }
              Aclaro que esa es la estructura del documento no el código completo, entre las llaves hay más contenido.

              Un saludo.

              Comentario


              • #8
                Re: Problema al compilar

                Este ultimo codigo que has puesto funciona correctamente en mi compilador de C, aunque podria fallar si se compila con el compilador de C++, o quizas hay algun error en las lineas que no has puesto. Esta llamando al compilador con "gc" o "gcc" ?
                Prueba con:
                gcc archivo.c
                o
                gcc -x c archivo.c
                Última edición por abuelillo; 07/05/2013, 05:46:10.
                 \left\vert{     \Psi_{UNIVERSE}       }\right>  = \sum \alpha_i   \left\vert{     \Psi_{WORLD_i}       }\right> \text{   } \hspace{3 mm}  \sum  \left\vert{} \alpha_i   \right\vert{}^2 = 1

                Comentario


                • #9
                  Re: Problema al compilar

                  Si no me equivoco, el error está en que estás poniendo un argumento para la función main que sería tipo void pero sin que esté declarada la variable a la que afecta. Prueba a escribir int main() {....}
                  A mi amigo, a quien todo debo.

                  Comentario


                  • #10
                    Re: Problema al compilar

                    No hay problema en poner void, ya que significa que la funcion no debe recibir ningun argumento/parametro, no tiene sentido indicar una variable despues de void, el compilador daria error en ese caso.
                    Es buena practica de programacion poner void en las funciones que no admiten parametros, asi si por un descuido se llama a una de esas funciones desde otra parte del codigo especificando algun parametro, el compilador se dara cuenta de que es un error y avisara en la fase de compilacion. Si no se indica void, el compilador no nos avisaria y el error pasaria desapercibido.
                    Última edición por abuelillo; 07/05/2013, 09:25:09.
                     \left\vert{     \Psi_{UNIVERSE}       }\right>  = \sum \alpha_i   \left\vert{     \Psi_{WORLD_i}       }\right> \text{   } \hspace{3 mm}  \sum  \left\vert{} \alpha_i   \right\vert{}^2 = 1

                    Comentario


                    • #11
                      Re: Problema al compilar

                      Escrito por abuelillo Ver mensaje
                      Este ultimo codigo que has puesto funciona correctamente en mi compilador de C, aunque podria fallar si se compila con el compilador de C++, o quizas hay algun error en las lineas que no has puesto. Esta llamando al compilador con "gc" o "gcc" ?
                      Prueba con:
                      gcc archivo.c
                      o
                      gcc -x c archivo.c
                      Hola denuevo, he seguido tu sugerencia pero no logro que se compile adecuadamente, colocaré todo el código a continuación, espero me puedan ayudar ya que es algo extenso como para revisarlo minuciosamente, yo lo he hecho pero no he encontrado nada raro.

                      Código:
                      #include<stdio.h>
                      #include<stdlib.h>
                      #include<math.h>
                      #include<gsl/gsl_sf_legendre.h>
                      #include<gsl/gsl_linalg.h>
                      #include<gsl/gsl_complex.h>
                      #include<gsl/gsl_complex_math.h>
                      #include<gsl/gsl_matrix_complex_double.h>
                      #include<gsl/gsl_cblas.h>
                      
                      
                      
                      
                      # define imax 101
                      
                      
                      # define nmax 150
                      # define deltat 0.01 /*    delatat = t/nmax      */
                      
                      
                      # define PI 3.1415926
                      # define cuarta .25
                      # define L 2
                      
                      
                      void LU (double ro, gsl_complex cero, gsl_complex l_0,gsl_vector_complex *b,gsl_vector_complex *new );
                      
                      
                      gsl_complex interior (int i,double ro,gsl_vector_complex *old ,gsl_complex punto);
                      
                      
                      
                      
                      int
                      main (void)
                      {
                          FILE *psi;    
                          
                      /* ===================  SE CREA EL ESPACIO PARA LAS MATRICES Y VECTORES  ==================== */
                      
                      
                      
                      
                          /* Vectores utilazados para crear los coeficientes l */
                      
                      
                          gsl_vector_complex *xJ = gsl_vector_complex_alloc (nmax);
                          gsl_vector_complex *l = gsl_vector_complex_alloc (nmax);
                      
                      
                          /* Matriz y vectores que se usan el metodo LU */
                      
                      
                          gsl_matrix_complex *A ;
                          gsl_vector_complex *b = gsl_vector_complex_alloc (imax);
                          gsl_vector_complex *new = gsl_vector_complex_alloc (imax);
                          
                      
                      
                          /* Vector para la funcion old in time */
                          
                          gsl_vector_complex *old = gsl_vector_complex_alloc (imax);
                      
                      
                      
                      
                      
                      
                          /* La funcion inicial Sen(kx) sera el primer vetor old */
                      
                      
                          double K;
                      
                      
                          K=PI/L;
                          
                          double deltax;
                          
                          deltax=L/(imax-1.0);
                      
                      
                          int i;
                          for (i=0;i<imax-1;i++)
                              {
                      
                      
                              double equis,seno;
                      
                      
                              equis=i*deltax;
                              seno=sin(K*equis );
                      
                      
                              gsl_complex seno_c;
                              GSL_SET_COMPLEX(&seno_c, seno,0.0);
                              
                              gsl_vector_complex_set(old, i, seno_c);
                      
                      
                              }        
                              
                          gsl_complex cero;
                          GSL_SET_COMPLEX(&cero, 0.0,0.0);
                          gsl_vector_complex_set(old, imax-1, cero);
                      
                      
                                              
                                                  
                      
                      
                      /*=============================== SE PONEN LOS CEFICEINTES l^n_J =============================== */
                          
                          double P[nmax];
                          
                          /* cosa para los polinomio de Legendere */
                      
                      
                          int n;
                          double p;
                      
                      
                      
                      
                          /* se definen constantes */
                      
                      
                          double r,r2,r4;
                          double ro,ro2;
                          double phi,miu;
                          
                          ro=(4.0*deltax*deltax)/deltat;
                          printf("rho=%f\n",ro);
                          ro2=pow(ro,2);
                      
                      
                          r=ro2*(ro2+16);
                          r2=sqrt(r);
                          r4=pow(r,cuarta);
                          
                          phi=atan(4.0/ro);
                          miu=ro2/r2;
                          
                          /* Se genera el vector P(n) */
                      
                      
                      
                      
                          /* los primeros 2 elementos (n=0,1) se calculan directamente */
                      
                      
                          double p0= gsl_sf_legendre_Pl(0,miu);
                          P[0]=-p0;
                      
                      
                          double p1= gsl_sf_legendre_Pl(1,miu);
                      
                      
                          P[1]=p1;
                      
                      
                          for (n=2;n<nmax;n++)
                              {
                      
                      
                              double pn = gsl_sf_legendre_Pl(n,miu);
                              double pn2= gsl_sf_legendre_Pl((n-2),miu);
                              P[n]=(pn-pn2)/((2*n)-1);
                      
                      
                              }
                          
                          /* los primeros elementos (n=0,1) se calculan diractamente */
                      
                      
                          double re0,re1;
                          double im0,im1;
                      
                      
                          re0=1-(r4/2.0)*sin((phi/2.0))*P[0];
                          im0=-1+(r4/2.0)*cos((phi/2.0))*P[0];
                      
                      
                          re1=1-(r4/2.0)*sin((phi/-2.0))*P[1];
                          im1=1+(r4/2.0)*cos((phi/-2.0))*P[1];
                      
                      
                          gsl_complex l_0;
                              GSL_SET_COMPLEX(&l_0, re0,im0);
                          
                          printf ("Coeficiente l_0\n");
                          printf (" %g + %gi\n",
                                                   GSL_REAL(l_0), GSL_IMAG(l_0));
                          
                      
                      
                          gsl_vector_complex_set(l, 0, l_0);
                      
                      
                          gsl_complex l_1;
                              GSL_SET_COMPLEX(&l_1, re1,im1);
                      
                      
                          gsl_vector_complex_set(l, 1, l_1);
                      
                      
                          double re,im;
                      
                      
                          for (n=2;n<nmax;n++)
                              {
                              
                              re=(-r4/2.0)*sin(phi*(0.5-n))*P[n];
                              im=(r4/2.0)*cos(phi*(0.5-n))*P[n];
                          
                              gsl_complex l_n;    
                                  GSL_SET_COMPLEX(&l_n, re,im);
                      
                      
                              gsl_vector_complex_set(l, n, l_n);
                      
                      
                              }
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      /* ====================================  ANILLO DEL TIEMPO  ==================================== */
                          
                          psi=fopen("psi.txt","w");
                      
                      
                          for (n=1;n<nmax;n++)
                              {
                          
                              
                                          
                              /* se guarda el ultimo elemento del el vector solucion */
                              
                              gsl_complex xJ_ele 
                                      = gsl_vector_complex_get (old, imax-1);
                              
                              gsl_vector_complex_set(xJ, n, xJ_ele);  
                      
                      
                              
                              /* se pone los elementos del vector b(i) */
                              
                              gsl_vector_complex_set( b, 0, cero);
                      
                      
                              /* los puntos interiores i=1,2,3,...,imax-1 (empieza de cero) */
                      
                      
                              gsl_complex punto;        
                      
                      
                              for (i=1;i<imax-1;i++)
                                  gsl_vector_complex_set( b, i, interior (i,ro,old,punto) );
                                  
                                  
                              
                              if (n == 1)
                                  gsl_vector_complex_set(b, imax-1, cero); 
                              else 
                                  {
                              
                                  gsl_complex sum;
                                       GSL_SET_COMPLEX(&sum, 0.0,0.0);
                      
                      
                                  gsl_complex pro;
                              
                                  int k;
                                  for (k=1;k<n;k++)
                                      {
                          
                                      gsl_complex l_ele 
                                                     = gsl_vector_complex_get (l,n-k);
                      
                      
                                      gsl_complex xJ_ele 
                                                     = gsl_vector_complex_get (xJ, k+1);
                                      
                      
                      
                                      pro = gsl_complex_mul (l_ele, xJ_ele);
                                      
                                      
                                      sum = gsl_complex_add (sum, pro);
                          
                                      }
                                      
                                      
                                  /* se hace la diferencia */
                      
                      
                                  gsl_complex old_ele 
                                          = gsl_vector_complex_get (old, imax-2);
                              
                                  gsl_complex b_J;
                                  b_J = gsl_complex_sub (old_ele, sum);
                      
                      
                                      
                                  /* se pone el ultimo elemento del vector b */
                      
                      
                                  gsl_vector_complex_set(b, imax-1, b_J);
                      
                      
                                  }
                      
                      
                              
                              /* Se llama a la subrutina que resuelve el sistema */
                              
                              LU (ro,cero,l_0,b,new);
                          
                              
                              
                      
                      
                              /* Se grafica cada 10 puntos */
                      
                      
                              if (n%1==0) 
                                  {
                                      
                                  double t;
                                  t=n*deltat;
                                  fprintf(psi,"t=%g\n",t);        
                                                      
                                  for (i=0;i<imax;i++)
                                      {
                      
                      
                                      gsl_complex im 
                                                  = gsl_vector_complex_get (new, i);
                              
                                      fprintf(psi,"%g\n",GSL_IMAG(im));
                                                  
                                      }
                      
                      
                                  }
                      
                      
                              gsl_blas_zswap (new,old);
                              
                              }
                      
                      
                          fclose(psi);
                              
                          return (0);
                      }
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      void 
                      LU (double ro,gsl_complex cero, gsl_complex l_0,gsl_vector_complex *b, gsl_vector_complex *new  )
                      {
                          
                          int s;
                          gsl_permutation *p=gsl_permutation_alloc (imax);
                      
                      
                          gsl_matrix_complex *A = gsl_matrix_complex_alloc(imax,imax);
                      
                      
                          /* Se genera la matrix A(i,j) */
                      
                      
                          
                          
                          int i,j;
                      
                      
                          
                          gsl_complex uno;
                          gsl_complex diag;
                          gsl_complex sdiag;
                          
                          
                          GSL_SET_COMPLEX(&uno, 1.0,0.0);
                          GSL_SET_COMPLEX(&diag, 2.0,-ro);
                          GSL_SET_COMPLEX(&sdiag, -1.0,0.0);
                      
                      
                          /* se genera la matriz A con ceros*/
                      
                      
                          for (i=0;i<imax;i++)
                              {
                              for (j=0;j<imax;j++)
                                  {
                                  gsl_matrix_complex_set(A, i, j, cero);
                                  }
                              }
                      
                      
                          /* se genera el A(0,0)=1.0+ 0.0i */
                      
                      
                          gsl_matrix_complex_set(A, 0, 0, uno);
                      
                      
                          /* se pone la diagonal principal */
                      
                      
                          for (i=1;i<imax-1;i++)
                              gsl_matrix_complex_set(A, i, i, diag);
                      
                      
                          /* se pone la super diagonal  */
                      
                      
                          for (i=1;i<imax-1;i++)
                              gsl_matrix_complex_set(A, i,i+1, sdiag);
                      
                      
                          /* se pone la sub diagonal  */
                      
                      
                          for (i=2;i<imax;i++)
                              gsl_matrix_complex_set(A, i,i-1, sdiag);
                      
                      
                          /* se pone el ultimo elemento */
                          
                          gsl_matrix_complex_set(A, imax-1, imax-1, l_0);
                      
                      
                      
                      
                      
                      
                          /* Se aplica el metodo */
                          
                          
                          /* function to crate L U Matrixes */
                      
                      
                              gsl_linalg_complex_LU_decomp (A,p,&s);
                      
                      
                          /* function to solve Ax=b */
                      
                      
                              gsl_linalg_complex_LU_solve(A,p,b,new);
                      
                      
                          
                      
                      
                      }
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      gsl_complex interior 
                      (int i, double ro, gsl_vector_complex *a ,gsl_complex punto)
                      {
                          gsl_complex sum;
                          gsl_complex mul;
                          gsl_complex c2;
                          
                      
                      
                          GSL_SET_COMPLEX(&c2, 2.0,ro);
                          
                          gsl_complex a_mas 
                                      = gsl_vector_complex_get (a, i+1);
                      
                      
                          gsl_complex a_menos 
                                      = gsl_vector_complex_get (a, i-1);
                      
                      
                          sum = gsl_complex_add (a_mas, a_menos);
                      
                      
                      
                      
                          gsl_complex a_ele 
                                      = gsl_vector_complex_get (a, i);
                          
                          mul = gsl_complex_mul (c2, a_ele);
                      
                      
                          punto = gsl_complex_sub (sum, mul);
                          
                      
                      
                      
                      
                      
                      
                          return (punto);
                      }
                      Gracias de antemano.

                      Comentario


                      • #12
                        Re: Problema al compilar

                        Escrito por [Beto] Ver mensaje
                        Hola denuevo, he seguido tu sugerencia pero no logro que se compile adecuadamente, colocaré todo el código a continuación, espero me puedan ayudar ya que es algo extenso como para revisarlo minuciosamente, yo lo he hecho pero no he encontrado nada raro.

                        Código:
                        #include<stdio.h>
                        #include<stdlib.h>
                        #include<math.h>
                        #include<gsl/gsl_sf_legendre.h>
                        #include<gsl/gsl_linalg.h>
                        #include<gsl/gsl_complex.h>
                        #include<gsl/gsl_complex_math.h>
                        #include<gsl/gsl_matrix_complex_double.h>
                        #include<gsl/gsl_cblas.h>
                        
                        
                        
                        
                        # define imax 101
                        
                        
                        # define nmax 150
                        # define deltat 0.01 /*    delatat = t/nmax      */
                        
                        
                        # define PI 3.1415926
                        # define cuarta .25
                        # define L 2
                        
                        
                        void LU (double ro, gsl_complex cero, gsl_complex l_0,gsl_vector_complex *b,gsl_vector_complex *new );
                        
                        
                        gsl_complex interior (int i,double ro,gsl_vector_complex *old ,gsl_complex punto);
                        
                        
                        
                        
                        int
                        main (void)
                        {
                            FILE *psi;    
                            
                        /* ===================  SE CREA EL ESPACIO PARA LAS MATRICES Y VECTORES  ==================== */
                        
                        
                        
                        
                            /* Vectores utilazados para crear los coeficientes l */
                        
                        
                            gsl_vector_complex *xJ = gsl_vector_complex_alloc (nmax);
                            gsl_vector_complex *l = gsl_vector_complex_alloc (nmax);
                        
                        
                            /* Matriz y vectores que se usan el metodo LU */
                        
                        
                            gsl_matrix_complex *A ;
                            gsl_vector_complex *b = gsl_vector_complex_alloc (imax);
                            gsl_vector_complex *new = gsl_vector_complex_alloc (imax);
                            
                        
                        
                            /* Vector para la funcion old in time */
                            
                            gsl_vector_complex *old = gsl_vector_complex_alloc (imax);
                        
                        
                        
                        
                        
                        
                            /* La funcion inicial Sen(kx) sera el primer vetor old */
                        
                        
                            double K;
                        
                        
                            K=PI/L;
                            
                            double deltax;
                            
                            deltax=L/(imax-1.0);
                        
                        
                            int i;
                            for (i=0;i<imax-1;i++)
                                {
                        
                        
                                double equis,seno;
                        
                        
                                equis=i*deltax;
                                seno=sin(K*equis );
                        
                        
                                gsl_complex seno_c;
                                GSL_SET_COMPLEX(&seno_c, seno,0.0);
                                
                                gsl_vector_complex_set(old, i, seno_c);
                        
                        
                                }        
                                
                            gsl_complex cero;
                            GSL_SET_COMPLEX(&cero, 0.0,0.0);
                            gsl_vector_complex_set(old, imax-1, cero);
                        
                        
                                                
                                                    
                        
                        
                        /*=============================== SE PONEN LOS CEFICEINTES l^n_J =============================== */
                            
                            double P[nmax];
                            
                            /* cosa para los polinomio de Legendere */
                        
                        
                            int n;
                            double p;
                        
                        
                        
                        
                            /* se definen constantes */
                        
                        
                            double r,r2,r4;
                            double ro,ro2;
                            double phi,miu;
                            
                            ro=(4.0*deltax*deltax)/deltat;
                            printf("rho=%f\n",ro);
                            ro2=pow(ro,2);
                        
                        
                            r=ro2*(ro2+16);
                            r2=sqrt(r);
                            r4=pow(r,cuarta);
                            
                            phi=atan(4.0/ro);
                            miu=ro2/r2;
                            
                            /* Se genera el vector P(n) */
                        
                        
                        
                        
                            /* los primeros 2 elementos (n=0,1) se calculan directamente */
                        
                        
                            double p0= gsl_sf_legendre_Pl(0,miu);
                            P[0]=-p0;
                        
                        
                            double p1= gsl_sf_legendre_Pl(1,miu);
                        
                        
                            P[1]=p1;
                        
                        
                            for (n=2;n<nmax;n++)
                                {
                        
                        
                                double pn = gsl_sf_legendre_Pl(n,miu);
                                double pn2= gsl_sf_legendre_Pl((n-2),miu);
                                P[n]=(pn-pn2)/((2*n)-1);
                        
                        
                                }
                            
                            /* los primeros elementos (n=0,1) se calculan diractamente */
                        
                        
                            double re0,re1;
                            double im0,im1;
                        
                        
                            re0=1-(r4/2.0)*sin((phi/2.0))*P[0];
                            im0=-1+(r4/2.0)*cos((phi/2.0))*P[0];
                        
                        
                            re1=1-(r4/2.0)*sin((phi/-2.0))*P[1];
                            im1=1+(r4/2.0)*cos((phi/-2.0))*P[1];
                        
                        
                            gsl_complex l_0;
                                GSL_SET_COMPLEX(&l_0, re0,im0);
                            
                            printf ("Coeficiente l_0\n");
                            printf (" %g + %gi\n",
                                                     GSL_REAL(l_0), GSL_IMAG(l_0));
                            
                        
                        
                            gsl_vector_complex_set(l, 0, l_0);
                        
                        
                            gsl_complex l_1;
                                GSL_SET_COMPLEX(&l_1, re1,im1);
                        
                        
                            gsl_vector_complex_set(l, 1, l_1);
                        
                        
                            double re,im;
                        
                        
                            for (n=2;n<nmax;n++)
                                {
                                
                                re=(-r4/2.0)*sin(phi*(0.5-n))*P[n];
                                im=(r4/2.0)*cos(phi*(0.5-n))*P[n];
                            
                                gsl_complex l_n;    
                                    GSL_SET_COMPLEX(&l_n, re,im);
                        
                        
                                gsl_vector_complex_set(l, n, l_n);
                        
                        
                                }
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        /* ====================================  ANILLO DEL TIEMPO  ==================================== */
                            
                            psi=fopen("psi.txt","w");
                        
                        
                            for (n=1;n<nmax;n++)
                                {
                            
                                
                                            
                                /* se guarda el ultimo elemento del el vector solucion */
                                
                                gsl_complex xJ_ele 
                                        = gsl_vector_complex_get (old, imax-1);
                                
                                gsl_vector_complex_set(xJ, n, xJ_ele);  
                        
                        
                                
                                /* se pone los elementos del vector b(i) */
                                
                                gsl_vector_complex_set( b, 0, cero);
                        
                        
                                /* los puntos interiores i=1,2,3,...,imax-1 (empieza de cero) */
                        
                        
                                gsl_complex punto;        
                        
                        
                                for (i=1;i<imax-1;i++)
                                    gsl_vector_complex_set( b, i, interior (i,ro,old,punto) );
                                    
                                    
                                
                                if (n == 1)
                                    gsl_vector_complex_set(b, imax-1, cero); 
                                else 
                                    {
                                
                                    gsl_complex sum;
                                         GSL_SET_COMPLEX(&sum, 0.0,0.0);
                        
                        
                                    gsl_complex pro;
                                
                                    int k;
                                    for (k=1;k<n;k++)
                                        {
                            
                                        gsl_complex l_ele 
                                                       = gsl_vector_complex_get (l,n-k);
                        
                        
                                        gsl_complex xJ_ele 
                                                       = gsl_vector_complex_get (xJ, k+1);
                                        
                        
                        
                                        pro = gsl_complex_mul (l_ele, xJ_ele);
                                        
                                        
                                        sum = gsl_complex_add (sum, pro);
                            
                                        }
                                        
                                        
                                    /* se hace la diferencia */
                        
                        
                                    gsl_complex old_ele 
                                            = gsl_vector_complex_get (old, imax-2);
                                
                                    gsl_complex b_J;
                                    b_J = gsl_complex_sub (old_ele, sum);
                        
                        
                                        
                                    /* se pone el ultimo elemento del vector b */
                        
                        
                                    gsl_vector_complex_set(b, imax-1, b_J);
                        
                        
                                    }
                        
                        
                                
                                /* Se llama a la subrutina que resuelve el sistema */
                                
                                LU (ro,cero,l_0,b,new);
                            
                                
                                
                        
                        
                                /* Se grafica cada 10 puntos */
                        
                        
                                if (n%1==0) 
                                    {
                                        
                                    double t;
                                    t=n*deltat;
                                    fprintf(psi,"t=%g\n",t);        
                                                        
                                    for (i=0;i<imax;i++)
                                        {
                        
                        
                                        gsl_complex im 
                                                    = gsl_vector_complex_get (new, i);
                                
                                        fprintf(psi,"%g\n",GSL_IMAG(im));
                                                    
                                        }
                        
                        
                                    }
                        
                        
                                gsl_blas_zswap (new,old);
                                
                                }
                        
                        
                            fclose(psi);
                                
                            return (0);
                        }
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        void 
                        LU (double ro,gsl_complex cero, gsl_complex l_0,gsl_vector_complex *b, gsl_vector_complex *new  )
                        {
                            
                            int s;
                            gsl_permutation *p=gsl_permutation_alloc (imax);
                        
                        
                            gsl_matrix_complex *A = gsl_matrix_complex_alloc(imax,imax);
                        
                        
                            /* Se genera la matrix A(i,j) */
                        
                        
                            
                            
                            int i,j;
                        
                        
                            
                            gsl_complex uno;
                            gsl_complex diag;
                            gsl_complex sdiag;
                            
                            
                            GSL_SET_COMPLEX(&uno, 1.0,0.0);
                            GSL_SET_COMPLEX(&diag, 2.0,-ro);
                            GSL_SET_COMPLEX(&sdiag, -1.0,0.0);
                        
                        
                            /* se genera la matriz A con ceros*/
                        
                        
                            for (i=0;i<imax;i++)
                                {
                                for (j=0;j<imax;j++)
                                    {
                                    gsl_matrix_complex_set(A, i, j, cero);
                                    }
                                }
                        
                        
                            /* se genera el A(0,0)=1.0+ 0.0i */
                        
                        
                            gsl_matrix_complex_set(A, 0, 0, uno);
                        
                        
                            /* se pone la diagonal principal */
                        
                        
                            for (i=1;i<imax-1;i++)
                                gsl_matrix_complex_set(A, i, i, diag);
                        
                        
                            /* se pone la super diagonal  */
                        
                        
                            for (i=1;i<imax-1;i++)
                                gsl_matrix_complex_set(A, i,i+1, sdiag);
                        
                        
                            /* se pone la sub diagonal  */
                        
                        
                            for (i=2;i<imax;i++)
                                gsl_matrix_complex_set(A, i,i-1, sdiag);
                        
                        
                            /* se pone el ultimo elemento */
                            
                            gsl_matrix_complex_set(A, imax-1, imax-1, l_0);
                        
                        
                        
                        
                        
                        
                            /* Se aplica el metodo */
                            
                            
                            /* function to crate L U Matrixes */
                        
                        
                                gsl_linalg_complex_LU_decomp (A,p,&s);
                        
                        
                            /* function to solve Ax=b */
                        
                        
                                gsl_linalg_complex_LU_solve(A,p,b,new);
                        
                        
                            
                        
                        
                        }
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        gsl_complex interior 
                        (int i, double ro, gsl_vector_complex *a ,gsl_complex punto)
                        {
                            gsl_complex sum;
                            gsl_complex mul;
                            gsl_complex c2;
                            
                        
                        
                            GSL_SET_COMPLEX(&c2, 2.0,ro);
                            
                            gsl_complex a_mas 
                                        = gsl_vector_complex_get (a, i+1);
                        
                        
                            gsl_complex a_menos 
                                        = gsl_vector_complex_get (a, i-1);
                        
                        
                            sum = gsl_complex_add (a_mas, a_menos);
                        
                        
                        
                        
                            gsl_complex a_ele 
                                        = gsl_vector_complex_get (a, i);
                            
                            mul = gsl_complex_mul (c2, a_ele);
                        
                        
                            punto = gsl_complex_sub (sum, mul);
                            
                        
                        
                        
                        
                        
                        
                            return (punto);
                        }
                        Gracias de antemano.
                        El código que has puesto a mi me compila perfectamente.

                        Código:
                        $ gcc -lgsl -lgslcblas beto.c
                        $ gcc -v
                        Using built-in specs.
                        Target: x86_64-linux-gnu
                        Configured with: ../src/configure -v --with-pkgversion='Debian 4.4.5-8' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.4 --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --with-arch-32=i586 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
                        Thread model: posix
                        gcc version 4.4.5 (Debian 4.4.5-8)
                        La única alternativo a ser Físico era ser etéreo.
                        @lwdFisica

                        Comentario


                        • #13
                          Re: Problema al compilar

                          Escrito por pod Ver mensaje
                          El código que has puesto a mi me compila perfectamente.

                          Código:
                          $ gcc -lgsl -lgslcblas beto.c
                          $ gcc -v
                          Using built-in specs.
                          Target: x86_64-linux-gnu
                          Configured with: ../src/configure -v --with-pkgversion='Debian 4.4.5-8' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.4 --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --with-arch-32=i586 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
                          Thread model: posix
                          gcc version 4.4.5 (Debian 4.4.5-8)

                          Efectivamente, el problema parece estar en que el gcc no encuentra la biblioteca que está usando. Si se especifica, no debería haber problema.

                          Saludos.

                          Comentario


                          • #14
                            Re: Problema al compilar

                            Escrito por ZYpp Ver mensaje
                            Efectivamente, el problema parece estar en que el gcc no encuentra la biblioteca que está usando. Si se especifica, no debería haber problema.

                            Saludos.
                            Bueno, entonces supongo que le daría un error de enlazado, no de sintaxis. Por eso ponía el gcc -v, para que beto pudiera comparar la versión de gcc.

                            Los mensajes de error del compilador a veces engañan un poco en cuanto a donde suceden. Puede que el error real esté un poco antes, pero el compilador no se dé cuenta hasta que procesa más líneas. Yo a veces he visto errores así debido a #includes que estaban mal formateados, o macros. Pero veo que todos los includes que hay son a librerías externas que no tienen porqué estar mal,...

                            Beto, prueba a quitar el espacio que hay delante de los #define. Yo jamás los había visto con espacio.
                            La única alternativo a ser Físico era ser etéreo.
                            @lwdFisica

                            Comentario


                            • #15
                              Re: Problema al compilar

                              Escrito por pod Ver mensaje
                              Bueno, entonces supongo que le daría un error de enlazado, no de sintaxis. Por eso ponía el gcc -v, para que beto pudiera comparar la versión de gcc.

                              Los mensajes de error del compilador a veces engañan un poco en cuanto a donde suceden. Puede que el error real esté un poco antes, pero el compilador no se dé cuenta hasta que procesa más líneas. Yo a veces he visto errores así debido a #includes que estaban mal formateados, o macros. Pero veo que todos los includes que hay son a librerías externas que no tienen porqué estar mal,...

                              Beto, prueba a quitar el espacio que hay delante de los #define. Yo jamás los había visto con espacio.
                              Hola, ya quité el espacio y he compilado tal y como me indicaste pero obtengo lo siguiente:

                              Código:
                              $ gcc -lgsl -lgslcblas beto.c
                              /tmp/cccjkJCs.o: En la función `main':
                              beto.c:(.text+0x11): referencia a `gsl_vector_complex_alloc' sin definir
                              beto.c:(.text+0x22): referencia a `gsl_vector_complex_alloc' sin definir
                              beto.c:(.text+0x33): referencia a `gsl_vector_complex_alloc' sin definir
                              beto.c:(.text+0x44): referencia a `gsl_vector_complex_alloc' sin definir
                              beto.c:(.text+0x55): referencia a `gsl_vector_complex_alloc' sin definir
                              beto.c:(.text+0xba): referencia a `sin' sin definir
                              beto.c:(.text+0x12e): referencia a `gsl_vector_complex_set' sin definir
                              beto.c:(.text+0x19a): referencia a `gsl_vector_complex_set' sin definir
                              beto.c:(.text+0x223): referencia a `pow' sin definir
                              beto.c:(.text+0x278): referencia a `sqrt' sin definir
                              beto.c:(.text+0x2c2): referencia a `pow' sin definir
                              beto.c:(.text+0x2ed): referencia a `atan' sin definir
                              beto.c:(.text+0x33b): referencia a `gsl_sf_legendre_Pl' sin definir
                              beto.c:(.text+0x38d): referencia a `gsl_sf_legendre_Pl' sin definir
                              beto.c:(.text+0x3e3): referencia a `gsl_sf_legendre_Pl' sin definir
                              beto.c:(.text+0x41f): referencia a `gsl_sf_legendre_Pl' sin definir
                              beto.c:(.text+0x4b9): referencia a `sin' sin definir
                              beto.c:(.text+0x522): referencia a `cos' sin definir
                              beto.c:(.text+0x583): referencia a `sin' sin definir
                              beto.c:(.text+0x5e4): referencia a `cos' sin definir
                              beto.c:(.text+0x6ad): referencia a `gsl_vector_complex_set' sin definir
                              beto.c:(.text+0x709): referencia a `gsl_vector_complex_set' sin definir
                              beto.c:(.text+0x76d): referencia a `sin' sin definir
                              beto.c:(.text+0x7db): referencia a `cos' sin definir
                              beto.c:(.text+0x860): referencia a `gsl_vector_complex_set' sin definir
                              beto.c:(.text+0x8b0): referencia a `gsl_vector_complex_get' sin definir
                              beto.c:(.text+0x93c): referencia a `gsl_vector_complex_set' sin definir
                              beto.c:(.text+0x97c): referencia a `gsl_vector_complex_set' sin definir
                              beto.c:(.text+0xa6b): referencia a `gsl_vector_complex_set' sin definir
                              beto.c:(.text+0xac8): referencia a `gsl_vector_complex_set' sin definir
                              beto.c:(.text+0xb1b): referencia a `gsl_vector_complex_get' sin definir
                              beto.c:(.text+0xb81): referencia a `gsl_vector_complex_get' sin definir
                              beto.c:(.text+0xc26): referencia a `gsl_complex_mul' sin definir
                              beto.c:(.text+0xccb): referencia a `gsl_complex_add' sin definir
                              beto.c:(.text+0xd40): referencia a `gsl_vector_complex_get' sin definir
                              beto.c:(.text+0xde5): referencia a `gsl_complex_sub' sin definir
                              beto.c:(.text+0xe6d): referencia a `gsl_vector_complex_set' sin definir
                              beto.c:(.text+0xf63): referencia a `gsl_vector_complex_get' sin definir
                              beto.c:(.text+0x100c): referencia a `gsl_blas_zswap' sin definir
                              /tmp/cccjkJCs.o: En la función `LU':
                              beto.c:(.text+0x10aa): referencia a `gsl_permutation_alloc' sin definir
                              beto.c:(.text+0x10bd): referencia a `gsl_matrix_complex_alloc' sin definir
                              beto.c:(.text+0x1166): referencia a `gsl_matrix_complex_set' sin definir
                              beto.c:(.text+0x11b6): referencia a `gsl_matrix_complex_set' sin definir
                              beto.c:(.text+0x1200): referencia a `gsl_matrix_complex_set' sin definir
                              beto.c:(.text+0x1257): referencia a `gsl_matrix_complex_set' sin definir
                              beto.c:(.text+0x12ae): referencia a `gsl_matrix_complex_set' sin definir
                              /tmp/cccjkJCs.o:beto.c:(.text+0x12f4): más referencias a `gsl_matrix_complex_set' sin definir a continuación
                              /tmp/cccjkJCs.o: En la función `LU':
                              beto.c:(.text+0x130b): referencia a `gsl_linalg_complex_LU_decomp' sin definir
                              beto.c:(.text+0x1326): referencia a `gsl_linalg_complex_LU_solve' sin definir
                              /tmp/cccjkJCs.o: En la función `interior':
                              beto.c:(.text+0x139f): referencia a `gsl_vector_complex_get' sin definir
                              beto.c:(.text+0x13fc): referencia a `gsl_vector_complex_get' sin definir
                              beto.c:(.text+0x148f): referencia a `gsl_complex_add' sin definir
                              beto.c:(.text+0x14e9): referencia a `gsl_vector_complex_get' sin definir
                              beto.c:(.text+0x157c): referencia a `gsl_complex_mul' sin definir
                              beto.c:(.text+0x160f): referencia a `gsl_complex_sub' sin definir
                              collect2: error: ld devolvió el estado de salida 1
                              Mi versión de gcc es la siguiente:

                              Código:
                              $ gcc -v
                              Usando especificaciones internas.
                              COLLECT_GCC=gcc
                              COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.7/lto-wrapper
                              Objetivo: x86_64-linux-gnu
                              Configurado con: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.7.3-1ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-4.7/README.Bugs --enable-languages=c,c++,go,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.7 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.7 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --with-system-zlib --enable-objc-gc --with-cloog --enable-cloog-backend=ppl --disable-cloog-version-check --disable-ppl-version-check --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
                              Modelo de hilos: posix
                              gcc versión 4.7.3 (Ubuntu/Linaro 4.7.3-1ubuntu1)
                              Gracias por la ayuda.

                              Comentario

                              Contenido relacionado

                              Colapsar

                              Trabajando...
                              X