#--------------------------------------
#  Oscillazione della molla: valutazione numerica
#


k  = 50      # (N/m)   costante della molla
m  = 0.5     # kg      massa sospesa
xM = 0.05    # m       allungamento massimo (a t=0)

dt   = 0.01  # s       intervallo di discretizzazione
tMax = 1.5   # s       tempo massimo 

t = 0
x = xM
v = 0
a = - k * x / m

i = 2  # indice delle iterazioni

while( t[i-1] < tMax ) {
   t[i] <- t[i-1] + dt        
   v.m0 <- v[i-1] + a[i-1]*dt/2
   x.m0 <- x[i-1] + v.m0*dt/2
   a.m  <- - (k/m) * x.m0
   v[i] <- v[i-1] + a.m*dt
   x[i] <- x[i-1] + (v[i-1] + v[i])/2 * dt
   a[i] <- - (k/m) * x[i] 
   i <- i + 1
}

plot(t, x*100, pch=19, col='blue', cex=0.8, 
     xlab='t (s)', ylab='x (cm);  v (dm/s)')
abline(h=0, col='gray')
points(t, v*10,  pch=19, col='red', cex=0.8)
text(0.15, 3, "x", col='blue', cex=2)
text(0.02, -3.2, "v", col='red', cex=2)
