Also, here is the code - apologies for not including it before:

This notebook was prompted by the thread at:<br>
https://groups.google.com/g/sympy/c/VW2eFNBw1Cg/m/AxTlTwGUHQAJ


import sympy as sp

sp.init_printing(use_latex=True)

'''
Without the real=True part, there are some solutions with imaginary 
components
'''

w, t, tau, vo, vc0, K, theta = sp.var(r'\omega, t, \tau, v_o, v_{C}(0), K, 
\theta', real=True)

vc = sp.Function('v_c')

diffeq = sp.Derivative(vc(t), t) + vc(t) / tau  - vo * sp.cos(w * t) / tau
diffeq

res = sp.dsolve([diffeq], [vc(t)], ics={vc(0):vc0})
res

'''
Quick note - the solution at<br>
https://it.wikipedia.org/wiki/Circuito_RC#Risposta_in_frequenza_del_circuito_RC
<br>is not quite right in that<br>
$$ {\displaystyle v_{C}(t)=v_{C}(0)e^{-{\frac {t}{\tau }}}+K\cos(\omega 
t+\theta )}$$
gets the initial condition wrong; I think it should be something like:
$${\displaystyle v_{C}(t)=(v_{C}(0)-K\cos(\theta))e^{-{\frac {t}{\tau 
}}}+K\cos(\omega t+\theta )}$$
'''

# Collecting vo terms
res[0].rhs.expand().collect(vo).trigsimp()

# Collecting exponential terms
res[0].rhs.expand().collect(sp.exp(-t/tau)).trigsimp()

'''
The $K$ and $\theta$ here match 
https://it.wikipedia.org/wiki/Circuito_RC#Metodo_simbolico_per_la_risposta_in_frequenza
 
(using trig identities to get single magnitude and phase)
'''

K = vo * sp.sqrt((w*tau)**2 + 1**2) / ((w*tau)**2 + 1)
K

theta = sp.atan2(-w*tau, 1)
theta

vcneat = (vc0-K*sp.cos(theta))*sp.exp(-t/tau)+K*sp.cos(w*t+theta)
vcneat

# Are they the same?
(vcneat - res[0].rhs).trigsimp()


On Saturday, March 4, 2023 at 2:01:38 AM UTC-5 Michael Gustafson wrote:

> I know this is almost a year old, but is this notebook helpful to you:
>
> https://colab.research.google.com/drive/1p5WP-twoxD5HKq9gziNWKqSi8Xo_cotg?usp=sharing
> -Michael
>
> On Tuesday, June 28, 2022 at 4:52:12 PM UTC-4 federic...@gmail.com wrote:
>
>> Thank you Oscar,
>> onestly I don't get the same resoult of yours, because I get 3 result  , 
>> not just one like you:
>> one solution for for τ/R ​=−i/(100πRi) , one solution for τ/R ​=i/(100πRi) 
>> and another is otherwise
>> Anyway, the otherwise seems to be possible to be simplified and become 
>> like your solution, so thank you very much for the help.
>> It should be nice to avoid the 3 solution and keep just the otherwise one 
>> and get it simplified, but I just want to thank you for your help.
>>
>>
>> Il giorno martedì 28 giugno 2022 alle 12:05:54 UTC+2 Oscar ha scritto:
>>
>>> On Tuesday, 28 June 2022 at 08:03:05 UTC+1 federic...@gmail.com wrote:
>>>
>>>>
>>>> Hi Aaron, thank you for the reply.
>>>>
>>>> The code I have in my notebook (I'm using google colab) is this now (at 
>>>> the end of the post), but using w is not working anymore.
>>>> Anyway, if I move back to use the line w = 2 * sp.pi * 50 I still get 
>>>> a unreadble result.
>>>> The result should be something like  the nice wikipedia result I found 
>>>> there:
>>>>
>>>> https://it.wikipedia.org/wiki/Circuito_RC#Risposta_in_frequenza_del_circuito_RC
>>>> Is there a way to get the a readble result? (something like the 
>>>> following latex)
>>>> {\displaystyle v_{C}(t)=v_{C}(0)e^{-{\frac {t}{\tau }}}+K\cos(\omega 
>>>> t+\theta )}
>>>> The wikipedia result has tau=R*C, theta is an angle displacement,  and 
>>>> K don't know what is.
>>>>
>>>
>>> The result that I see is similar:
>>>
>>> In [13]: diffeq
>>> Out[13]: 
>>> d           vo⋅cos(100⋅π⋅t)   vc(t)
>>> ──(vc(t)) - ─────────────── + ─────
>>> dt                C⋅R          C⋅R
>>>
>>> In [12]: res
>>> Out[12]: 
>>>                                                                   -t     
>>>   
>>>                                                                   ───   
>>>    
>>>                                                                   C⋅R   
>>>    
>>>         100⋅π⋅C⋅R⋅vo⋅sin(100⋅π⋅t)    vo⋅cos(100⋅π⋅t)          vo⋅ℯ       
>>>   
>>> vc(t) = ───────────────────────── + ────────────────── - 
>>> ──────────────────
>>>                    2  2  2                 2  2  2              2  2  2 
>>>    
>>>             10000⋅π ⋅C ⋅R  + 1      10000⋅π ⋅C ⋅R  + 1   10000⋅π ⋅C ⋅R 
>>>  + 1
>>>
>>> The main difference is that the constant K is given explicitly here in 
>>> terms of C, R and v0. If you want to substitute for tau and K you can do 
>>> something like:
>>>
>>> In [19]: tau, K = symbols('tau, K')
>>>
>>> In [20]: res.subs(C, tau/R).subs(vo, K*(1 + 10000*pi**2*tau**2))
>>> Out[20]: 
>>>                                                      -t 
>>>                                                      ───
>>>                                                       τ 
>>> vc(t) = 100⋅π⋅K⋅τ⋅sin(100⋅π⋅t) + K⋅cos(100⋅π⋅t) - K⋅ℯ  
>>>
>>> You can see now something more similar. The difference is that you have 
>>> sin and cos rather than cos with a phase shift theta but those are 
>>> equivalent under trigonometric identities. Another difference is the 
>>> constant K on the exponential term but the wikipedia solution is incorrect 
>>> there:
>>>  
>>>
>>>> In the italian wikipedia there's this piece (I try to translate) that I 
>>>> would like to reproduce in a notebook:
>>>>
>>>> Let's see how does the RC circuit works with a sine wave. We can use 
>>>> voltage Kirchhoff law:
>>>> {\displaystyle V_{0}\cos(\omega t)=R\cdot i(t)+v_{C}(t)} 
>>>>
>>>> we can rewrite the equation like:
>>>> {\displaystyle V_{0}\cos(\omega t)=RC{\frac {dv_{C}(t)}{dt}}+v_{C}(t)} 
>>>>
>>>> and then solve the differential equation with constant coefficients 
>>>> with a known therm:
>>>> {\displaystyle {\frac {dv_{C}(t)}{dt}}+{\frac {1}{\tau 
>>>> }}v_{C}(t)={\frac {V_{0}\cos(\omega t)}{\tau }}} 
>>>>
>>>> where \tau =RC is still the time constant of the circuit. 
>>>> The general solution come from the sum of the associated homogeneous 
>>>> solution:
>>>>
>>>>
>>>> v_{C}(t)=v_{C}(0)e^{-{\frac {t}{\tau }}}
>>>>
>>> It is incorrect to use v_C(0) here. There should be a constant there but 
>>> it is not generally equal to the initial condition.
>>>
>>>> and a particolar solution:
>>>> {\displaystyle K\cos(\omega t+\theta )\ } 
>>>>
>>>> where K is a constant. So:
>>>>
>>>>
>>>> {\displaystyle v_{C}(t)=v_{C}(0)e^{-{\frac {t}{\tau }}}+K\cos(\omega 
>>>> t+\theta )}
>>>>
>>> You can see that this is incorrect if you just substitute t=0.
>>>  
>>> --
>>> Oscar
>>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sympy+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/234792d4-579b-4b9e-be44-71268585570an%40googlegroups.com.

Reply via email to