Anuncio

Colapsar
No hay ningún anuncio todavía.

Resolución numérica de ecuaciones diferenciales con RK.

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

  • Resolución numérica de ecuaciones diferenciales con RK.

    Hola a todos, escribo esto por que ando intentando resolver una ecuación de segundo orden de forma numérica pero no consigo entender el método de Runge-Kutta. La ecuación es:

    [Error LaTeX: Compliación LaTeX fallida]

    donde todo es constante menos y . Ésta se puede reducir a un sistema de ecuaciones diferenciales de primer orden con el cambio y , siendo el chorizo de ahí arriba.

    Si uso un Runge-Kutta de cuarto orden, se supone que tengo que hacer:



    y luego calcular usando un esquema parecido y así reiteradamente. Mi problema es que no sé que función tengo que usar para resolver la ecuación ; quizás es que me he liado, pero no sé por donde meterle mano a la segunda ecuación del sistema y en google no he encontrado nada(o nada suficientemente simple como para que yo lo entendiera).
    Última edición por Dj_jara; 12/07/2007, 16:35:41.

  • #2
    Si tienes:



    y defines , entonces te quedaan dos ecuaciones



    Pues esa es la función que tienes que utilizar.

    Yo debo tener un programa en fortran que resuelve ese tipo de ecuaciones de segundo orden, de cuando hacía la carrera. Si quieres podria enviártelos, aunque no es que sean un ejemplo de elegancia. Estan programados para detectar secciones de Poincaré, o sea que no dan toda la trayectoria. Pero eso sería una modificación trivial Además en mi caso tenia dos funciones, lo que en tu caso vendría a ser y .
    Última edición por Dj_jara; 12/07/2007, 16:36:57.
    La única alternativo a ser Físico era ser etéreo.
    @lwdFisica

    Comentario


    • #3
      Escrito por pod
      Si tienes:

      y defines v = \dot x, entonces te quedaan dos ecuaciones


      Pues esa es la función que tienes que utilizar.
      Ahí está mi problema, que no sé cuál es la forma particular(para la ecuación dada) que tengo que tomar para ni tampoco como calcular las 's para hacerle Runge-Kutta a esa expresión.

      Escrito por pod
      Yo debo tener un programa en fortran que resuelve ese tipo de ecuaciones de segundo orden, de cuando hacía la carrera. Si quieres podria enviártelos, aunque no es que sean un ejemplo de elegancia. Estan programados para detectar secciones de Poincaré, o sea que no dan toda la trayectoria. Pero eso sería una modificación trivial Wink Además en mi caso tenia dos funciones, lo que en tu caso vendría a ser y
      Te lo agradecería mucho, a ver si así me aclaro como funciona el método. Tienes mi dirección de correo por ahí, ¿verdad?
      Última edición por Dj_jara; 12/07/2007, 16:38:58.

      Comentario


      • #4
        Escrito por Ghiret
        Escrito por pod
        Si tienes:

        y defines v = \dot x, entonces te quedaan dos ecuaciones


        Pues esa es la función que tienes que utilizar.
        Ahí está mi problema, que no sé cuál es la forma particular(para la ecuación dada) que tengo que tomar para ni tampoco como calcular las 's para hacerle Runge-Kutta a esa expresión.
        Pero si te lo he puesto clarisimo:



        Escrito por Ghiret
        Escrito por pod
        Yo debo tener un programa en fortran que resuelve ese tipo de ecuaciones de segundo orden, de cuando hacía la carrera. Si quieres podria enviártelos, aunque no es que sean un ejemplo de elegancia. Estan programados para detectar secciones de Poincaré, o sea que no dan toda la trayectoria. Pero eso sería una modificación trivial Wink Además en mi caso tenia dos funciones, lo que en tu caso vendría a ser y
        Te lo agradecería mucho, a ver si así me aclaro como funciona el método. Tienes mi dirección de correo por ahí, ¿verdad?
        Pues no lo tengo.

        La parte importante es:

        Código:
        c              * Mètode RK4 d'evolució dinàmica
        c                * 1r càlcul a t
                         q01  = q1(i)
                         q02  = q2(i)
                         dq01 = p1(i)
                         dq02 = p2(i)
                         dp01 = dp1(i, q01, q02)
                         dp02 = dp2(i, q01, q02)
        
        c                * 2n càlcul a t+dt/2
                         q11  = q01 + dq01*dt/dfloat(2)
                         q12  = q02 + dq02*dt/dfloat(2)
                         dq11 = dq01+ dp01*dt/dfloat(2)
                         dq12 = dq02+ dp02*dt/dfloat(2)
                         dp11 = dp1(i, q11, q12)
                         dp12 = dp2(i, q11, q12)
        
        c                * 3r càlcul a t+dt/2
                         q21  = q01 + dq11*dt/dfloat(2)
                         q22  = q02 + dq12*dt/dfloat(2)
                         dq21 = dq01+ dp11*dt/dfloat(2)
                         dq22 = dq02+ dp12*dt/dfloat(2)
                         dp21 = dp1(i, q21, q22)
                         dp22 = dp2(i, q21, q22)
        
        c                * 4t càlcul a t+dt
                         q31  = q01 + dq21*dt
                         q32  = q02 + dq22*dt
                         dq31 = dq01+ dp21*dt
                         dq32 = dq02+ dp22*dt
                         dp31 = dp1(i, q31, q32)
                         dp32 = dp2(i, q31, q32)
        
        c                * Sumació final 
                         q1n(i) = q1(i) + dt*( ( dq01 + dq31 )/dfloat(6) 
             +                + ( dq11 + dq21 )/dfloat(3) )
        
                         q2n(i) = q2(i) + dt*( ( dq02 + dq32 )/dfloat(6) 
             +                + ( dq12 + dq22 )/dfloat(3) )
        
                         p1n(i) = p1(i) + dt*( ( dp01 + dp31 )/dfloat(6)
             +                + ( dp11 + dp21 )/dfloat(3) )
        
                         p2n(i) = p2(i) + dt*( ( dp02 + dp32 )/dfloat(6)
             +                + ( dp12 + dp22 )/dfloat(3) )
        Ignora el índice i que aparece varias veces, se utilizaba para simular dos sistemas distnitos. La notación es algo distinta, es la que se utiliza en mecanica de Hamilton. Las ecuaciones son:



        ya que, por suerte, ninguna ecuación depende del tiempo (variable independiente).
        En tu caso, como sólo tienes una función incógnita, tendrás la mitad de lineas, deberas eliminar una sí, una no. En el programa, la función "g" está implementada a parte, como puedes ver en llamadas a sendas funciones "dp1" y "dp2".
        Última edición por pod; 11/11/2007, 10:37:01.
        La única alternativo a ser Físico era ser etéreo.
        @lwdFisica

        Comentario


        • #5
          Escrito por pod
          Pero si te lo he puesto clarisimo:
          A eso me refiero, a que no lo conozco de forma analítica como para calcular las 's ni nada, sólo conozco los puntos que me da Runge-Kutta aplicado a . Mi duda es como usar esos valores de para calcular las 's y usar Runge-Kutta para calcular losvalores de .

          Gracias por el programa, a ver si puedo aclararme mirándolo.
          Última edición por Dj_jara; 12/07/2007, 16:43:39.

          Comentario


          • #6
            Escrito por Ghiret
            Escrito por pod
            Pero si te lo he puesto clarisimo:
            A eso me refiero, a que no lo conozco de forma analítica como para calcular las 's ni nada, sólo conozco los puntos que me da Runge-Kutta aplicado a . Mi duda es como usar esos valores de para calcular las 's y usar Runge-Kutta para calcular losvalores de .

            Gracias por el programa, a ver si puedo aclararme mirándolo.
            es la forma analítica de . En primer lugar, no es , sino . Para evalularlo, que utilizas? Los puntos que te da runge-kutta, no? Pues lo mismo. Las k's para son similares a lo que tienes tu escrito, pero cambiando (el primer arguento siempre es el tiempo) y (te importa variar los valores de la variable que integras en ese momento). Las k's para x:



            y etcétera...

            Pareces tener un poco de lío... [url=http://en.wikipedia.org/wiki/Runge_kutta]repasa la teoría[/tex].
            Última edición por Dj_jara; 12/07/2007, 16:47:11.
            La única alternativo a ser Físico era ser etéreo.
            @lwdFisica

            Comentario


            • #7
              Escrito por pod
              Escrito por Ghiret
              Escrito por pod
              Si tienes:

              y defines v = \dot x, entonces te quedaan dos ecuaciones


              Pues esa es la función que tienes que utilizar.
              Ahí está mi problema, que no sé cuál es la forma particular(para la ecuación dada) que tengo que tomar para ni tampoco como calcular las 's para hacerle Runge-Kutta a esa expresión.
              Pero si te lo he puesto clarisimo:



              Escrito por Ghiret
              Escrito por pod
              Yo debo tener un programa en fortran que resuelve ese tipo de ecuaciones de segundo orden, de cuando hacía la carrera. Si quieres podria enviártelos, aunque no es que sean un ejemplo de elegancia. Estan programados para detectar secciones de Poincaré, o sea que no dan toda la trayectoria. Pero eso sería una modificación trivial Wink Además en mi caso tenia dos funciones, lo que en tu caso vendría a ser y
              Te lo agradecería mucho, a ver si así me aclaro como funciona el método. Tienes mi dirección de correo por ahí, ¿verdad?
              Pues no lo tengo.

              La parte importante es:

              Código:
              c              * Mètode RK4 d'evolució dinàmica
              c                * 1r càlcul a t
                               q01  = q1(i)
                               q02  = q2(i)
                               dq01 = p1(i)
                               dq02 = p2(i)
                               dp01 = dp1(i, q01, q02)
                               dp02 = dp2(i, q01, q02)
              
              c                * 2n càlcul a t+dt/2
                               q11  = q01 + dq01*dt/dfloat(2)
                               q12  = q02 + dq02*dt/dfloat(2)
                               dq11 = dq01+ dp01*dt/dfloat(2)
                               dq12 = dq02+ dp02*dt/dfloat(2)
                               dp11 = dp1(i, q11, q12)
                               dp12 = dp2(i, q11, q12)
              
              c                * 3r càlcul a t+dt/2
                               q21  = q01 + dq11*dt/dfloat(2)
                               q22  = q02 + dq12*dt/dfloat(2)
                               dq21 = dq01+ dp11*dt/dfloat(2)
                               dq22 = dq02+ dp12*dt/dfloat(2)
                               dp21 = dp1(i, q21, q22)
                               dp22 = dp2(i, q21, q22)
              
              c                * 4t càlcul a t+dt
                               q31  = q01 + dq21*dt
                               q32  = q02 + dq22*dt
                               dq31 = dq01+ dp21*dt
                               dq32 = dq02+ dp22*dt
                               dp31 = dp1(i, q31, q32)
                               dp32 = dp2(i, q31, q32)
              
              c                * Sumació final
                               q1n(i) = q1(i) + dt*( ( dq01 + dq31 )/dfloat(6)
                   +                + ( dq11 + dq21 )/dfloat(3) )
              
                               q2n(i) = q2(i) + dt*( ( dq02 + dq32 )/dfloat(6)
                   +                + ( dq12 + dq22 )/dfloat(3) )
              
                               p1n(i) = p1(i) + dt*( ( dp01 + dp31 )/dfloat(6)
                   +                + ( dp11 + dp21 )/dfloat(3) )
              
                               p2n(i) = p2(i) + dt*( ( dp02 + dp32 )/dfloat(6)
                   +                + ( dp12 + dp22 )/dfloat(3) )
              Ignora el índice i que aparece varias veces, se utilizaba para simular dos sistemas distnitos. La notación es algo distinta, es la que se utiliza en mecanica de Hamilton. Las ecuaciones son:



              ya que, por suerte, ninguna ecuación depende del tiempo (variable independiente).
              En tu caso, como sólo tienes una función incógnita, tendrás la mitad de lineas, deberas eliminar una sí, una no. En el programa, la función "g" está implementada a parte, como puedes ver en llamadas a sendas funciones "dp1" y "dp2".
              diez caracteres sin quote
              Última edición por Dj_jara; 12/07/2007, 16:48:44.
              La única alternativo a ser Físico era ser etéreo.
              @lwdFisica

              Comentario


              • #8
                Escrito por pod
                Si tienes:



                y defines , entonces te quedaan dos ecuaciones



                Pues esa es la función que tienes que utilizar.

                Yo debo tener un programa en fortran que resuelve ese tipo de ecuaciones de segundo orden, de cuando hacía la carrera. Si quieres podria enviártelos, aunque no es que sean un ejemplo de elegancia. Estan programados para detectar secciones de Poincaré, o sea que no dan toda la trayectoria. Pero eso sería una modificación trivial Además en mi caso tenia dos funciones, lo que en tu caso vendría a ser y .
                diez caracteres sin quote
                Última edición por Dj_jara; 12/07/2007, 16:49:57.
                La única alternativo a ser Físico era ser etéreo.
                @lwdFisica

                Comentario

                Contenido relacionado

                Colapsar

                Trabajando...
                X