Università di Bologna - Facoltà di Ingegneria II - Sede di Forlì



Fisica Generale Interattiva

prof. Domenico Galli



Pendolo semplice

Punto materiale vincolato a una circonferenza giacente su di un piano verticale, soggetto alla forza peso

Soluzione mediante il metodo di Runge-Kutta del IV ordine

Parametri e condizioni iniziali suggeriti per iniziare: Per avviare l'Applet "cliccare" il bottone qui sotto.

Errore: manca il plug-in Java 2 per eseguire l'applet!
Algoritmo di Runge-Kutta del IV ordine per il pendolo semplice:
    for(i=0;t<tMax;)
{
// algoritmo di Runge-Kutta IV ordine
k1=v*deltaT;
j1=a*deltaT;
vm1=v+j1/2;
am1=-g*Math.sin(x+k1/2)/l;
k2=vm1*deltaT;
j2=am1*deltaT;
vm2=v+j2/2;
am2=-g*Math.sin(x+k2/2)/l;
k3=vm2*deltaT;
j3=am2*deltaT;
vf=v+j3;
af=-g*Math.sin(x+k3)/l;
k4=vf*deltaT;
j4=af*deltaT;
x=x+(k1+2*k2+2*k3+k4)/6;
v=v+(j1+2*j2+2*j3+j4)/6;
a=-g*Math.sin(x)/l;
// fine algoritmo di Runge-Kutta IV ordine
// xpg=angolo nel primo giro. -PI<xpg<PI
xpg=x-2*Math.PI*Math.floor((x+Math.PI)/(2*Math.PI));
r=m*l*v*v+m*g*Math.cos(xpg); // reazione vincolare
t=t+deltaT;
i++;
if(t>tMax)break;
// se ci sono > 10000 punti, memorizza 1 punto ogni storePeriod punti
if(i%storePeriod==0)
{
lxt.add(new Point2D.Float((float)t,(float)(180.0*xpg/Math.PI)));
lvt.add(new Point2D.Float((float)t,(float)(180.0*v/Math.PI)));
lat.add(new Point2D.Float((float)t,(float)(180.0*a/Math.PI)));
lrt.add(new Point2D.Float((float)t,(float)r));
lvx.add(new Point2D.Float((float)(180.0*x/Math.PI),
(float)(180.0*v/Math.PI)));
}
}

Indice Fisica Interattiva


February 21, 2004, Domenico Galli