#######################################################
#
#  soluzione delle equazioni
#                               z^2 = i    Eq.1)
#                               z^4 = i    Eq.2)
#
#  NOTA: quest non è uno script(*), bensì una lista di comandi commentata
#        - eseguire un comando alla volta mediante copia/incolla
#          (o ancora meglio riscrivendo i comandi e ripescare quelli
#           vecchi con la freccia in alto)
#        - eventualmente trasformare in uno script che esegua
#          tutti i comandi, stampi i risultati mediante print()
#          o cat(sprintf()), ed eventualmente aggiungendoci anche
#          i comandi per salvare il grafico finale su un png (o anche pdf,
#          dipende dall'uso che si vuol fare del risultato).
#        - ogni tanto controllare le variabili in gioco con ls()
#          (e, ancora meglio, lavorare in una nuova directory in modo
#           da mettersi nella situazione co cominciare da capo)
#
#  (*) in realtà si può eseguire e si vede al volo il plot finale,
#      rischiando di non capire cosa facciano i diversi comandi,
#      e inoltre non si vedono i risultati numerici in quanto è
#      stato evitato l'uso di print() o cat(sprintf()), lasciati
#      come esercizio (vedi sopra)
# ----------------------------------------------------------------------- 
#
# definizione delle funzioni ---------------------------------------------
# plot nuovo
start.plot.im <- function(Z) {
   # Z rappresenta il max di |Re(z)| e |Im(z)| rappresentabile
   plot(NULL, xlim=c(-Z,Z), ylim=c(-Z,Z), xlab='Re( )', ylab='Im( )', asp=1)
   grid()
}

# mpstra un numero immaginario nel plot
show.im <- function(z, pch=19, col='blue', lwd=1.5, ...) {
   points(z, pch=pch, col=col, ...)
   lines( c(0, Re(z)), c(0, Im(z)), col=col, lwd=lwd, ...)
}

# funzione che disegna un cerchio  (sull'argomento "..." torneremo a lezione)
cerchio <- function(C=c(0,0), r=1, ...) {
  th=seq(0, 2*pi, by=0.02)
  points(C[1] + r*cos(th), C[2] + r*sin(th), ty='l', ...)
}

#-------------------------------------------------------------------------

# definiamo i   # notare i diversi significati dei due 'i'
i <- 0 + 1i

# lo visualizziamo in un plot
start.plot.im(1.2)
cerchio(col='grey')
show.im(i)


# soluzioni di Eq.1  [si noti l'ordine c(1,-1),
#                     per seguire la convenzione +- ]
sol.Eq1 <- c(1, -1) * sqrt(i) 
sol.Eq1
Mod(sol.Eq1)
Arg(sol.Eq1)

# rappresentazione grafica
show.im(sol.Eq1[1], col='green')
show.im(sol.Eq1[2], col='green', lty=2)

# soluzioni di Eq.2
# basta iterare quanto fatto precedentemente
sol.Eq2 <- c(1, -1) * sqrt(sol.Eq1[1])
sol.Eq2[3:4] <- c(1, -1) * sqrt(sol.Eq1[2])
sol.Eq2
Mod(sol.Eq2)
Arg(sol.Eq2)

# controlliamo che siano veramente soluzioni
sol.Eq2^4

# rappresentazione grafica
# (tratto e colore dovrebbere aiutare a identificare le soluzioni)
show.im(sol.Eq2[1], col='red')
show.im(sol.Eq2[2], col='red', lty=3)
show.im(sol.Eq2[3], col='red', lty=2)
show.im(sol.Eq2[4], col='red', lty=3)
