simulacion pendulo simple

Páginas: 5 (1155 palabras) Publicado: 28 de octubre de 2015
UNIVERSIDAD TECNOLGICA DE PEREIRA
Facultad de ingeniería en sistemas y computación
SIMULACION DE SISTEMAS CONTINUOS
Simulación de un péndulo”aproximado” y “real”

TEORIA DE SISTEMAS
Grupo 2
Profesor: Sebastián Gómez Gonzales
Jhon Edinson Acevedo Rojas
Mauricio Marín Orozco
Sebastián Castaño Gonzales
Risaralda, Pereira agosto de 2014
Simulación de sistemas continuos
En elsiguiente informe se presenta la simulación de un péndulo simple, en donde por medio de ecuaciones diferenciales obtendremos el periodo de este.
En la primera de ellas será aproximado y solo funciona para pequeños ángulos además esta únicamente en Función del largo de la cuerda del péndulo, y la otra es exacta.
Simulación aproximada
//variables globales
#include <iostream>
#include<stdio.h>
#include <math.h>
using namespace std;
double deltaT=0.01;
const double gravedad =9.8;
int signo(double x)
{
if (x<0.0)
return -1;
else return 1;
}
//cuando theta <<1
class Integrador
{
double area;

public:Integrador(double CondicionInicial)
{
area=CondicionInicial;
}

double CalcularSalida(double entrada)
{
area+=entrada*deltaT;
return area;
}double getSalida()const{
return area;
}
};
class pendulo1
{
Integrador* Pos;
Integrador* Vel;
double tiempo;
double longitud;

public:
pendulo1(double longitud, double thetaIni,double VelIni)
{
this->longitud=longitud;
tiempo=0.0;
Pos=new Integrador(thetaIni);
Vel=new Integrador(VelIni);
}

~pendulo1(){
delete Pos;
delete Vel;
}

pair <double,double> simular(){
cout<<Pos->getSalida()<<endl;
double aceleracion=(-gravedad/longitud*Pos
->getSalida());
double thetaVel=Vel->CalcularSalida(aceleracion);
double theta=Pos->CalcularSalida(thetaVel);
tiempo+=deltaT;
return make_pair(theta,thetaVel);
}

pair <double,double> simular(double t)
{
double tiempoFin=tiempo +t;pair<double,double>respuesta;
while(tiempo<tiempoFin)
{
respuesta=simular();
}

return respuesta;
}

double getTiempo()const{
return tiempo;
}


};

double calcularPeriodo(pendulo1& p)
{
pair<double,double>anterior,actual;
int numeroVeces=0;
double Tinicial;
actual=p.simular();
while(true)
{
anterior=actual;
actual=p.simular();if(signo(actual.first)*signo(anterior.first)==-1)
{

if(numeroVeces==0)
{
Tinicial=p.getTiempo();
}

if(numeroVeces==2)
{
return p.getTiempo()-Tinicial;

}
numeroVeces++;
}



//printf("nuemero veces %d\n",numeroVeces);


}
}
int main()
{
pendulo1 a(5,1.570796327,0);
printf("calcula periodo %f",calcularPeriodo(a));
}
TABLAS DE VALORES OBTENIDOS EN LA SIMULACION APROXIMADA CON LONGITUDES DE 0.1,0.2488, 0.5, 1, 2 Y 5 (cm).
LONGITUD(0,1) TABLA 1
Angulo(Grados) Angulo(radianes) Periodo Formula(2∏√(L/g)
5 0,087266463 0,63 0,63
10 0,174532925 0,63 0,63
15 0,261799388 0,63 0,63
30 0,523598776 0,63 0,63
45 0,785398164 0,63 0,63
70 1,221730477 0,63 0,63
90 1,570796327 0,63 0,63
LONGITUD(0,248) TABLA 2
Angulo(Grados) Angulo(radianes) Periodo Formula(2∏√(L/g)
5 0,087266463 1 0,99
100,174532925 1 0,99
15 0,261799388 1 0,99
30 0,523598776 1 0,99
45 0,785398164 1 0,99
70 1,221730477 1 0,99
90 1,570796327 1 0,99
LONGITUD(0,5) TABLA 3
Angulo(Grados) Angulo(radianes) Periodo Formula(2∏√(L/g)
5 0,087266463 1,42 1,41
10 0,174532925 1,42 1,41
15 0,261799388 1,42 1,41
30 0,523598776 1,42 1,41
45 0,785398164 1,42 1,41
70 1,221730477 1,42 1,41
90 1,570796327 1,42 1,41LONGITUD(1,0) TABLA 4
Angulo(Grados) Angulo(radianes) Periodo Formula(2∏√(L/g)
5 0,087266463 2,01 2,00
10 0,174532925 2,01 2,00
15 0,261799388 2,01 2,00
30 0,523598776 2,01 2,00
45 0,785398164 2,01 2,00
70 1,221730477 2,01 2,00
90 1,570796327 2,01 2,00
LONGITUD(2,0) TABLA 5
Angulo(Grados) Angulo(radianes) Periodo Formula(2∏√(L/g)
5 0,087266463 2,84 2,83
10 0,174532925 2,84 2,83
15...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Pendulo simple
  • péndulo simple
  • pendulo simple
  • Pendulo Simple
  • Pendulo Simple
  • pendulo simple
  • Pendulo simple
  • Pendulo simple

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS