Anuncio

Colapsar
No hay ningún anuncio todavía.

Péndulo

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

  • C/C++ Péndulo

    Hola, tengo este programa de un péndulo que no da el resultado que debería dar, para Longitud = 10m y ángulo = 0.01 rad Debería dar un periodo de 6,34s. Pero da 0,05segundos. Creo que sale del bucle antes de tiempo (hace 253 iteraciones y debería dar [creo] muchas más). Dejo el programar a ver si podéis encontrar el fallo:
    Código:
    #include <iostream>#include <math.h>
    #define g 9.8
    
    
    using namespace std;
    
    
    int main()
    {
          double periodo, longitud, angulo1, tiempo, vangular1, aangular1, vangular2, intervalo, cociente;
    
    
          //aangular y vangular se corresponden con la aceleración y la velocidad angular respectivamente.
          cout << "Introduzca la longitud del pendulo (en metros): ";
          cin >> longitud;
          cout << "Introduzca el angulo inicial (en radianes): ";
          cin >> angulo1;
    
    
          vangular1 = 0;
          cociente = -(g/longitud);
          aangular1 = cociente*sin(angulo1);
          intervalo = 1.0e-4*(sqrt(longitud/g));
          tiempo = 0;
          vangular2 = 0;
          //g está definida arriba
    
    
          do{
                vangular1 = vangular2;
                vangular2 = vangular1 + aangular1*tiempo;
    
    
                angulo1 = angulo1 + vangular1*tiempo;
                aangular1 = cociente*sin(angulo1);
                tiempo = tiempo + intervalo;
          }while((vangular1 >= 0 && vangular2 > 0) || (vangular1 <= 0 && vangular2 < 0) || vangular2 == 0);
          
          periodo = 2*tiempo - intervalo;
    
    
          cout << "El periodo es: " << periodo << " +- " << intervalo <<endl;
    
    
    }
    Un saludo y gracias de antemano.

  • #2
    Re: Péndulo

    Escrito por javirk Ver mensaje
    Hola, tengo este programa de un péndulo que no da el resultado que debería dar, para Longitud = 10m y ángulo = 0.01 rad Debería dar un periodo de 6,34s. Pero da 0,05segundos. Creo que sale del bucle antes de tiempo (hace 253 iteraciones y debería dar [creo] muchas más). Dejo el programar a ver si podéis encontrar el fallo:
    Asi de forma rapida parece que has usado en dos calculos la variable "tiempo" que es el tiempo total cuando deberias usar la variable "intervalo".

    Código:
          do{
                vangular1 = vangular2;
                vangular2 = vangular1 + aangular1*intervalo; // <- aqui en lugar de tiempo usar intervalo
    
    
    
    
                angulo1 = angulo1 + vangular1*intervalo; // <- aqui en lugar de tiempo usar intervalo
                aangular1 = cociente*sin(angulo1);
                tiempo = tiempo + intervalo;
            
          }while((vangular1 >= 0 && vangular2 > 0) || (vangular1 <= 0 && vangular2 < 0) || vangular2 == 0);
    Aunque solo le he echado un vistazo por encima, no tengo seguridad de que todo este bien, solo puedo decir que con la correcion para 10 metros y 0,01 radianes el resultado es casi los 6.34s que decias, concretamente:

    El periodo es: 6.34709 +- 0.000101015 interacciones: 31417
    Última edición por abuelillo; 04/11/2013, 20:24:58.
     \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: Péndulo

      Hola, es verdad, no lo había visto, ¡muchas gracias!

      Comentario

      Contenido relacionado

      Colapsar

      Trabajando...
      X