Gebruikersavatar
Xilvo
Moderator
Artikelen: 0
Berichten: 10.737
Lid geworden op: vr 30 mar 2018, 16:51

Re: tijdstippen

Ik heb de indruk dat het "stationaire" verloop redelijk klopt. Dan zou de fout misschien in de begincondities kunnen zitten.
Wat heb je voor IL en UC op t=0?
Gebruikersavatar
wnvl1
Artikelen: 0
Berichten: 2.954
Lid geworden op: di 20 jul 2021, 21:43

Re: tijdstippen

Xilvo schreef: ma 19 aug 2024, 21:29 Ik heb de indruk dat het "stationaire" verloop redelijk klopt.
Maar mijn stationaire oplossing komt niet overeen met die van ukster.

viewtopic.php?p=1185693#p1185693

Jullie hebben beiden onafhankelijk dezelfde uitkomst gevonden, dus ik ga ervan uit dat jullie juist zijn.

Op t=0 heb ik:

IL = 4.69A
UC = 31.49V
Gebruikersavatar
Xilvo
Moderator
Artikelen: 0
Berichten: 10.737
Lid geworden op: vr 30 mar 2018, 16:51

Re: tijdstippen

wnvl1 schreef: ma 19 aug 2024, 21:48 Op t=0 heb ik:

IL = 4.69A
UC = 31.49V
Hier klopt iets niet. I1=1 A (beginconditie t=0)
Dan is UA (A is het knooppunt midden boven) 15 V
Met UC=31,49 V wordt I2=(15-31.49)/R2=-3,298 A
Dan is UL=I1+I2=-2,298 A

Ik vind als begincondities:
UC=52,7 V
IL= -6,54 A
(UC en IL zijn afhankelijk van elkaar. Kies je de ene, dan ligt de andere vast)
I2= -7.54 A
Gebruikersavatar
wnvl1
Artikelen: 0
Berichten: 2.954
Lid geworden op: di 20 jul 2021, 21:43

Re: tijdstippen

Ik kijk er eerstdaags terug naar.
Gebruikersavatar
wnvl1
Artikelen: 0
Berichten: 2.954
Lid geworden op: di 20 jul 2021, 21:43

Re: tijdstippen

Ik heb eens de differentiaal vergelijkingen van ukster geïmplementeerd in sympy. Die overigens wat mij betreft correct zijn, net zoals die van mij. Ik kom dan in sympy exact dezelfde 'foutieve' oplossing uit als met mijn eigen differentiaalvergelijkingen.

Het loopt al mis met de algemene stationaire oplossing. Het lijkt erop dat sympy misschien een probleem heeft met het oplossen van een stelsel van differentiaalvergelijkingen. Nochtans niet zo moeilijk, dat is rechtoe rechtaan en zou ook lukken met pen en papier. Dat is gewoon een matrix reduceren en wat eigenwaarden en eigenvectoren berekenen. Ofwel is er iets wat ik niet goed begrijp aan sympy.

Code: Selecteer alles

import sympy as sp
import numpy as np
import matplotlib.pyplot as plt

i, u2, i1, i2 = sp.symbols('i u2 i1 i2', cls=Function)
L, R1, R2, C, t = sp.symbols('L R1 R2 C t')
R1=15
R2=5
L=1
C=0.1
eq1 = L*(i1(t).diff(t) + i2(t).diff(t)) + R1 *i1(t) - 10*cos(t/3)
eq2 = R1*(i1(t).diff(t)) - R2 * (i2(t).diff(t)) - i1(t) / C
sol = sp.dsolve([eq1, eq2], [i1(t), i2(t)])

i1=sol[0].rhs
i2=sol[1].rhs

C1, C2 = sp.symbols("C1, C2")
eq1 = i1.subs(t,0) - 1
eq2 = i2.subs(t,1) + 1
sol = sp.solve([eq1, eq2], [C1, C2])

i1=i1.subs('C1', sol[C1]).subs('C2', sol[C2])
i2=i2.subs('C1', sol[C1]).subs('C2', sol[C2])



# Step 2: Convert the symbolic expression to a numerical function
i1_num = sp.lambdify(t, i1, "numpy")
i2_num = sp.lambdify(t, i2, "numpy")

# Step 3: Define the range for x values using NumPy
t_vals = np.linspace(0, 20, 400)  # Avoid x = 0 due to log(x)

# Step 4: Evaluate the function over the range of x values
i1_vals = i1_num(t_vals)
i2_vals = i2_num(t_vals)

# Step 5: Plot the function using Matplotlib
plt.plot(t_vals, i1_vals, label=r'i1')
plt.plot(t_vals, i2_vals, label=r'i2')

plt.xlabel('t')
plt.ylabel('i(t)')
plt.title('Plot of the currents')
plt.legend()
plt.grid(True)
plt.show()
Gebruikersavatar
wnvl1
Artikelen: 0
Berichten: 2.954
Lid geworden op: di 20 jul 2021, 21:43

Re: tijdstippen

Pas ik dezelfde manier van programmeren toe op een simpel stelsel. Ook met beginvoorwaarden op 2 verschillende tijdstippen, dan lost hij dat perfect op.

Code: Selecteer alles

from sympy import *
i, u2, i1, i2 = symbols('i u2 i1 i2', cls=Function)
L, R1, R2, C, t = symbols('L R1 R2 C t')
R1=15
R2=5
L=1
C=0.1
eq1 = 10*cos(t/3)-i1(t).diff(t)
eq2 = i2(t).diff(t)-10
sol = dsolve([eq1, eq2], [i1(t), i2(t)])

i1=sol[0].rhs
i2=sol[1].rhs

C1, C2 = sp.symbols("C1, C2")
eq1 = i1.subs(t,0) - 1
eq2 = i2.subs(t,1) + 1
sol = sp.solve([eq1, eq2], [C1, C2])

i1=i1.subs('C1', sol[C1]).subs('C2', sol[C2])
i2=i2.subs('C1', sol[C1]).subs('C2', sol[C2])
Hier komt mooi

i1=30sin(t/3)+1
i2 =10 t - 11

uit, waarvan je op het zicht kan zien dat het correct is.
Gebruikersavatar
wnvl1
Artikelen: 0
Berichten: 2.954
Lid geworden op: di 20 jul 2021, 21:43

Re: tijdstippen

In sympy heb je een methode odesol om de oplossing van een stelsel van differentiaal vergelijkingen te testen.
Dat werkt op een eenvoudig stelsel.

Code: Selecteer alles

from sympy import *
i, u2, i1, i2 = symbols('i u2 i1 i2', cls=Function)
L, R1, R2, C, t = symbols('L R1 R2 C t')
R1=15
R2=5
L=1
C=0.1
ode1 = 10*cos(t/3)-i1(t).diff(t)
ode2 = i2(t).diff(t)-10
sol1 = dsolve([eq1, eq2], [i1(t), i2(t)])

checkodesol([ode1, ode2], sol1)
(True, [0, 0])

Perfect dus.

Voor het geval van het stelsel van dit raadsel krijg ik

Code: Selecteer alles

import sympy as sp
import numpy as np
import matplotlib.pyplot as plt

i, u2, i1, i2 = sp.symbols('i u2 i1 i2', cls=Function)
L, R1, R2, C, t = sp.symbols('L R1 R2 C t')
R1=15
R2=5
L=1
C=0.1
ode1 = L*(i1(t).diff(t) + i2(t).diff(t)) + R1 *i1(t) - 10*cos(t/3)
ode2 = R1*(i1(t).diff(t)) - R2 * (i2(t).diff(t)) - i1(t) / C
sol1 = sp.dsolve([ode1, ode2], [i1(t), i2(t)])

checkodesol([ode1, ode2], sol1)

(False,
[4.44089209850063e-16*C1*exp(-3.25*t) + 1.11022302462516e-16*sin(0.333333333333333*t) + 10.0*cos(0.333333333333333*t) - 10.0*cos(t/3),
-3.5527136788005e-15*cos(0.333333333333333*t)])

Dus hij heeft zelf door dat de oplossing niet klopt. Hij rekent dus niet helemaal symbolisch. Misschien zorgt dat voor fouten.
Gebruikersavatar
wnvl1
Artikelen: 0
Berichten: 2.954
Lid geworden op: di 20 jul 2021, 21:43

Re: tijdstippen

Nog wat geëxperimenteerd, maar sympy lost het systeem van differentiaalvergelijkingen echt foutief op.
Hij komt op zuiver imaginaire en zuiver reële eigenwaarden, terwijl het een combinatie moet zijn zoals in de oplossing van ukster in maple. Dus opletten met systemen van differentiaalvergelijkingen. Mogelijk lukt het wel beter als je het stelsel zelf in canonieke vorm brengt, maar dat ga ik niet meer proberen.

Terug naar “Sciencetalk café”