print("Exemplo 8.5")

from sympy import *

m = 10**(-3) #definicao de mili
L = 1
C = 10*m
v0 = 5
i0 = 0

A1 = symbols('A1')
A2 = symbols('A2')
t = symbols('t')

def sqrt(x, root = 2): #definir funcao para raiz
    y = x**(1/root)
    return y

print("\n--------------\n")

## PARA R = 1.923
R = 1.923

print("Para R = ", R)

def resolve_rlc(R,L,C):

    alpha = 1/(2*R*C)
    omega = 1/sqrt(L*C)
    print("Alpha:",alpha)
    print("Omega:",omega)
    
    s1 = -alpha + sqrt(alpha**2 - omega**2)
    s2 = -alpha - sqrt(alpha**2 - omega**2)

    def rlc(alpha,omega): #funcao para verificar tipo de amortecimento
        resposta = ""
        if alpha > omega:
            resposta = "superamortecimento"
            v = A1*exp(s1*t) + A2*exp(s2*t)
        elif alpha == omega:
            resposta = "amortecimento critico"
            v = (A1 + A2*t)*exp(-alpha*t)
        else:
            resposta = "subamortecimento"
            v = exp(-alpha*t)*(A1*cos(omega_d*t) + A2*sin(omega_d*t))
        return resposta,v

    resposta,v = rlc(alpha,omega)
    print("Tipo de resposta:",resposta)
    print("Resposta v(t):",v)
    print("v(0):",v.subs(t,0))
    print("dv(0)/dt:",v.diff(t).subs(t,0))
    
    return alpha,omega,s1,s2,resposta,v

alpha,omega,s1,s2,resposta,v = resolve_rlc(R,L,C)

#v(0) = 5 = A1 + A2 -> A2 = 5 - A1
#dv(0)/dt = -2A1 - 50A2
#C*dv(0)/dt + i(0) + v(0)/R = 0
    #0.01*(-2A1 - 50A2) + 0 + 5/1.923 = 0
    #(-2A1 -50(5 - A1)) = -5/(1.923*0.01)
    #48A1 = 250 - 5/(1.923*0.01)
A1 = (250 - 5/(1.923*0.01))/48
print("Constante A1:",A1)
A2 = 5 - A1
print("Constante A2:",A2)
v = A1*exp(s1*t) + A2*exp(s2*t)
print("Resposta v(t):",v,"V")

print("\n--------------\n")

## PARA R = 5
R = 5

A1 = symbols('A1')
A2 = symbols('A2')

print("Para R = ", R)

alpha,omega,s1,s2,resposta,v = resolve_rlc(R,L,C)

#v(t) = (A1 + A2t)e^(-alpha*t)

#v(0) = A1 = 5
A1 = 5
#C*dv(0)/dt + i(0) + v(0)/R = 0
    #0.01(-10A1 + A2) + 0 + 5/5 = 0
    #0.01A2 = -1 + 0.5
A2 = (-1 + 0.5)/0.01

print("Constante A1:",A1)
print("Constante A2:",A2)
v = (A1 + A2*t)*exp(-alpha*t)
print("Resposta v(t):",v,"V")

print("\n--------------\n")


## PARA R = 6.25
R = 6.25

A1 = symbols('A1')
A2 = symbols('A2')

print("Para R = ", R)

omega_d = sqrt(omega**2 - alpha**2)
alpha,omega,s1,s2,resposta,v = resolve_rlc(R,L,C)

#v(t) = e^-(alpha*t)*(A1cos(wd*t) + A2sen(wd*t))

#v(0) = A1 = 5
A1 = 5
#C*dv(0)/dt + i(0) + v(0)/R = 0
    #0.01*(-8A1 + 6A2) + 0 + 5/6.25 = 0
    #-0.4 + 0.06A2 = -5/6.25
A2 = (-5/6.25 + 0.4)/0.06

print("Constante A1:",A1)
print("Constante A2:",A2)
v = exp(-alpha*t)*(A1*cos(omega_d*t) + A2*sin(omega_d*t))
print("Resposta v(t):",v,"V")

"""
Explanation: Circuito RLC paralelo sem fonte
Jupyter Notebook desenvolvido por Gustavo S.S.
Circuitos RLC em paralelo têm diversas aplicações, como em projetos de filtros
e redes de comunicação. Suponha que a corrente inicial I0 no indutor e a tensão inicial V0 no capacitor sejam:
\begin{align}
{\Large i(0) = I_0 = \frac{1}{L} \int_{-\infty}^{0} v(t) dt}
\end{align}
\begin{align}
{\Large v(0) = V_0}
\end{align}

Portanto, aplicando a LKC ao nó superior fornece:
\begin{align}
{\Large \frac{v}{R} + \frac{1}{L} \int_{-\infty}^{t} v(\tau) d\tau + C \frac{dv}{dt} = 0}
\end{align}
Extraindo a derivada em relação a t e dividindo por C resulta em:
\begin{align}
{\Large \frac{d^2v}{dt^2} + \frac{1}{RC} \frac{dv}{dt} + \frac{1}{LC} v = 0}
\end{align}
Obtemos a equação característica substituindo a primeira derivada por s e a segunda
por s^2:
\begin{align}
{\Large s^2 + \frac{1}{RC} s + \frac{1}{LC} = 0}
\end{align}
Assim, as raízes da equação característica são:
\begin{align}
{\Large s_{1,2} = -\alpha \pm \sqrt{\alpha^2 - \omega_0^2}}
\end{align}
onde:
\begin{align}
{\Large \alpha = \frac{1}{2RC}, \space \space \space \omega_0 = \frac{1}{\sqrt{LC}} }
\end{align}
Amortecimento Supercrítico / Superamortecimento (α > ω0)
Quando α > ω0, as raízes da equação característica são reais e negativas. A resposta é:
\begin{align}
{\Large v(t) = A_1 e^{s_1 t} + A_2 e^{s_2 t} }
\end{align}
Amortecimento Crítico (α = ω0)
Quando α = ω0 as raízes da equação característica são reais e iguais de modo que a resposta seja:
\begin{align}
{\Large v(t) = (A_1 + A_2t)e^{-\alpha t}}
\end{align}
Subamortecimento (α < ω0)
Quando α < ω0, nesse caso, as raízes são complexas e podem ser expressas como segue:
\begin{align}
{\Large s_{1,2} = -\alpha \pm j\omega_d}
\
\{\Large \omega_d = \sqrt{\omega_0^2 - \alpha^2}}
\end{align}
\begin{align}
{\Large v(t) = e^{-\alpha t}(A_1 cos(\omega_d t) + A_2 sen(\omega_d t))}
\end{align}

As constantes A1 e A2 em cada caso podem ser determinadas a partir das
condições iniciais. Precisamos de v(0) e dv(0)/dt.
Exemplo 8.5
No circuito paralelo da Figura 8.13, determine v(t) para t > 0, supondo que v(0) = 5 V,
i(0) = 0, L = 1 H e C = 10 mF. Considere os seguintes casos: 
R = 1,923 Ω, 
R = 5 Ω e
R = 6,25 Ω .
End of explanation
"""


print("Problema Prático 8.5")

R = 2
L = 0.4
C = 25*m
v0 = 0
i0 = 50*m

A1 = symbols('A1')
A2 = symbols('A2')

alpha,omega,s1,s2,resposta,v = resolve_rlc(R,L,C)

#C*dv(0)/dt + i(0) + v(0)/R = 0
    #C*(-10A1 + A2) + i0 + v(0)/2 = 0
    #v(0) = 0 = A1
    #C*A2 = -i0
A2 = -i0/C
A1 = 0

print("Constante A1:",A1)
print("Constante A2:",A2)
v = (A1 + A2*t)*exp(-10.0*t)
print("Resposta v(t):",v,"V")

"""
Explanation: Problema Prático 8.5
Na Figura 8.13, seja R = 2 Ω, L = 0,4 H, C = 25 mF, v(0) = 0, e i(0) = 50 mA. Determine v(t) para t > 0.
End of explanation
"""


print("Exemplo 8.6")

u = 10**(-6) #definicao de micro
Vs = 40
L = 0.4
C = 20*u

A1 = symbols('A1')
A2 = symbols('A2')

#Para t < 0
v0 = Vs*50/(50 + 30)
i0 = -Vs/(50 + 30)

print("V0:",v0,"V")
print("i0:",i0,"A")

#Para t > 0
#C*dv(0)/dt + i(0) + v(0)/50 = 0
    #20u*dv(0)/dt - 0.5 + 0.5 = 0
    #dv(0)/dt = 0

R = 50
alpha,omega,s1,s2,resposta,v = resolve_rlc(R,L,C)

#v(0) = 25 = A1 + A2
    #A1 = 25 - A2
#dv(0)/dt = -146A1 - 854A2 = 0
    #-146(25 - A2) - 854A2 = 0
    #146A2 - 854A2 = 3650
    #-708A2 = 3650
A2 = -3650/708
A1 = 25 - A2

print("Constante A1:",A1)
print("Constante A2:",A2)

v = A1*exp(s1*t) + A2*exp(s2*t)
print("Resposta v(t):",v,"V")

"""
Explanation: Exemplo 8.6
Determine v(t) para t > 0 no circuito RLC da Figura 8.15.
End of explanation
"""


