
# RCL_impulsato_Vc_vari_Q.R

tensioni <- function(t, gamma, omega0, Vc0) {
  v <- NULL
  hgamma=gamma/2 + 01
  discr = (hgamma)^2 - omega0^2 +0i
  alpha1 = -hgamma - sqrt(discr)
  alpha2 = -hgamma + sqrt(discr)
  k1 = alpha2/(alpha2-alpha1)*Vc0
  k2 = alpha1/(alpha1-alpha2)*Vc0
  v$vc1 = Re( k1*exp(alpha1*t))
  v$vc2 = Re( k2*exp(alpha2*t) )
  v$vc = Re( k1*exp(alpha1*t) + k2*exp(alpha2*t) )
  v$i = c * Re( alpha1*k1*exp(alpha1*t) + alpha2*k2*exp(alpha2*t) )
  v$vr = r*v$i
  return(v)
}

# parametri del circuito
r0 <- 0        # Ohm
r  <- 10      # Ohm
c  <- 4.7e-9   # Farad
c <- 10e-9
l  <- 0.010   # Henry 
rl <- 0       # Ohm
v0 <- 1       # tensione unitaria

r.c <- 2*sqrt(l/c)   # resistenza critica (discr=0)

dai.r <- function(r.in) {
  if (r.in >= 0) {
    r = r.in
    rt <- r0 + r + rl
  } else {
    rt  <- r.c * abs(r.in) 
    r   <-  max(rt - r0 - rl, 1) # vogliamo almeno 1 Ohm per avere Vr!=0
  }
  return(r)
}

#
cat( sprintf("[Resistenza critica: %f]\n",r.c) )

omega0 = 1/sqrt(l*c)


tsf = 1.

r.in = 100; r <- dai.r(r.in); rt <- r + r0 + rl
cat( sprintf("Resistenza: %f  (Res. tot. %f)\n",r,rt) )
gamma = rt/l; hgamma=gamma/2; discr = hgamma^2 - omega0^2
tau = 2/gamma

tmax = 6*(2/gamma) * tsf
t <- seq(0, tmax, len=500)  # valori di tempi
tu = 1e-3

v <- tensioni(t, gamma, omega0, 1)

plot(t/tu, v$vc, ty='l',  col='red',
     xlab='', ylab='')
points(c(0,max(t/tu)),c(0,0), ty='l')
points(t/tu, exp(-t/tau), ty='l', lty='dashed')
points(t/tu, -exp(-t/tau), ty='l', lty='dashed')

r.in = 200; r <- dai.r(r.in); rt <- r + r0 + rl
cat( sprintf("Resistenza: %f  (Res. tot. %f)\n",r,rt) )
gamma = rt/l; hgamma=gamma/2; discr = hgamma^2 - omega0^2
v <- tensioni(t, gamma, omega0, 1)

points(t/tu, v$vc, ty='l', col='blue')

r.in = 20; r <- dai.r(r.in); rt <- r + r0 + rl
cat( sprintf("Resistenza: %f  (Res. tot. %f)\n",r,rt) )
gamma = rt/l; hgamma=gamma/2; discr = hgamma^2 - omega0^2
tau=2/gamma
v <- tensioni(t, gamma, omega0, 1)

points(t/tu, v$vc, ty='l', col='gray')
points(t/tu, exp(-t/tau), ty='l', lty='dashed', col='gray')
points(t/tu, -exp(-t/tau), ty='l', lty='dashed', col='gray')
