#----------------------------------------------------
# Semplice circuito risolto con metodo matriciale
# basato sulle leggi di Kirchhoff (Lezioni FisAI 16/5/2024)
#  (con 'stampe brutali')
#
# GdA, maggio 2024
#----------------------------------------------------

# circuito: https://www.roma1.infn.it/~dagos/FisAI/circ_fig_3_16.png
#           (con Rc rinominato R3)

f  = 12 # V
R1 = 10 # Ohm
R2 = 50 # Ohm
R3 = 15 # Ohm

# soluzione standard mediante riduzione serie e parallelo
R23 <- R2*R3/(R2+R3)  
Rt <- R1 + R23
I1 <- f/Rt
V23 <- I1 * R23
I2 <- V23/R2
I3 <- V23/R3
print(c(I1,I2,I3))

# soluzione basata sulle leggi di Kirchhoff
# facendo uso di metodi di algebra lineare (*)
v <- c(f, 0, 0)

A <- rbind(c(R1,R2,0), c(0, R2, -R3), c(1, -1, -1))
print(A)   

iA <- solve(A)               # matrice inversa
print(iA)
print(round(iA %*% A), 15)   # check (arrotondamento a 15 cifre decimali)

I <- as.vector(iA %*% v)
print(I)

#-------------------------------------------------
# (*) È importante inserire i valori di resistenza in Ohm
# e quelli di tensioni di Volt al fine di avere il risultato in Ampere.
# Si può provare a fare una tantum 'a mano' l'inversione della matrice
# e il successivo prodotto dell matrice inversa per il vettore 'v'
# per controllare che il risultato viene effettivamente in Ampere    
