Oscillatore

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#Accelerazione
F0=-g/l*sin(x0)

#Eulero
v1=v0+tau*F0
x1=x0+tau*v0

#Eulero-Cromer
v1=v0+tau*F0
x1=x0+tau*v1

#velocity-Verlet
x1=x0+v0*tau+0.5*F0*tau**2
F1=-g/l*sin(x1)
v1=v0+0.5*tau*(F0+F1)  

1
2
3
4
5
g=1
l=1
x0=deg2rad(5)
v0=0.0
tau=0.01

1
2
3
4
5
6
7
8
N=3000

for t_step in range(N):
	#Eulero-Cromer
	F0=-g/l*sin(x0)
	v1=v0+tau*F0
	x1=x0+tau*v1
	x0=x1
	v0=v1

1
2
time_arr=linspace(0,N*tau,N+1)
plot(time_arr,x_arr)

1
2
3
plot(time_arr,Ek_arr)
plot(time_arr,Ep_arr)
plot(time_arr,Ep_arr + Ek_arr)

1
x0 = input('Inserisci angolo di partenza in gradi')

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
method = input('0 - Eulero; 1 - Cromer; 2 - Verlet')

for t_step in range(N):
	if method == 1:
		#codice Eulero
	else if method == 2:
		#codice Eulero-Cromer
	else if method == 3:
		#codice Verlet
	
	x0=x1
	v0=v1
	...
	...