Chua’s Circuit
Chua’s Circuit is a simple circuit that exhibits chaotic behavior, i.e. a strong dependence on initial conditions. Here, OpenModelica and NDSolve are used to find the solution.
Chua Circuit
Chua Circuit
Import["https://upload.wikimedia.org/wikipedia/commons/thumb/7/71/Chua%27s_circuit_with_Chua_diode.svg/400px–Chua%27s_circuit_with_Chua_diode.svg.png"]
Out[]=
model=Import[FileNameJoin[{NotebookDirectory[],"ChuaCircuitTotal.sma"}],"SMA"]
Out[]=
model["Properties"]
Out[]=
{AlgebraicVariables,Balanced,Children,Components,Connections,Connectors,Description,Diagram,DiscreteVariables,Documentation,DocumentationURL,Domain,DomainChart,ExtendsModels,GroupedInitialValues,InheritedComponents,InheritedConnections,InheritedConnectors,InheritedPlotNames,InheritedPlots,InitialEquations,InitialSeedings,InitialValues,InputVariables,LocalComponents,LocalConnections,LocalConnectors,LocalPlotNames,LocalPlots,ModelicaDisplay,ModelicaIcon,ModelicaString,ModelName,ModelsContaining,ModelsExtending,OutputVariables,ParameterNames,ParameterValues,Parent,PlotNames,Plots,PropertyAssociation,PropertyDataset,Siblings,SimulationModel,SimulationSettings,SourceFile,Specialization,StateVariables,Summary,SystemEquations,SystemVariables,Thumbnail,TopParameterNames,TopSystemVariables,Version}
sim=SystemModelSimulate[model,{0,50000},Method–>"DASSL"]
Out[]=
SystemModelSimulationData
|
sim["Properties"]
Out[]=
{BooleanVariables,Descriptions,Diagram,DisplayTimeUnit,DisplayUnits,Events,ExitCode,GroupedInitialValues,InitialValues,InputVariables,InterpolationOrder,Model,ModelName,NumberOfEvents,OutputVariables,ParameterNames,ParameterValues,PlotNames,Plots,Samples,SensitivityNames,SensitivityValues,SimulationInterval,SimulationLength,StateVariables,Summary,Units,VariableNames,VariableValues}
sim["VariableValues"][[All,1]]
Out[]=
{C1.i,C1.n.i,C1.n.v,C1.p.i,C1.p.v,C1.v,C2.i,C2.n.i,C2.n.v,C2.p.i,C2.p.v,C2.v,,,,G.G_actual,G.i,G.LossPower,Gnd.p.i,Gnd.p.v,G.n.i,G.n.v,G.p.i,G.p.v,G.T_heatPort,G.v,L.i,L.n.i,L.n.v,L.p.i,L.p.v,L.v,Nr.i,Nr.n.i,Nr.n.v,Nr.p.i,Nr.p.v,Nr.v,Ro.i,Ro.LossPower,Ro.n.i,Ro.n.v,Ro.p.i,Ro.p.v,Ro.R_actual,Ro.T_heatPort,Ro.v}
′
C1.v
′
C2.v
′
L.i
SystemModelPlot[sim,"C1.v",PlotRange–>All]
Out[]=
In[]:=
C1=sim["C1.v"'];C2=sim["C2.v"'];
ParametricPlot[{C1[t.],C2[t.]},{t.,0,50000},AspectRatio–>1]
Out[]=
SystemModelPlot[sim,{"C1.v","C2.v"},PlotRange–>All]
Out[]=
|
(*GetSystemEquations*)eqs=model["SystemEquations"]
Out[]=
[t.][t.],[t.][t.],[t.],[t.][t.],[t.],[t.][t.],[t.][t.],[t.][t.],[t.]+[t.]0,[t.][t.],[t.][t.],[t.][t.],[t.][t.],[t.][t.],[t.][t.],[t.][t.],[t.][t.],[t.][t.],[t.]–[t.]+[t.],0[t.]+[t.],[t.]–[t.]+[t.],0[t.]+[t.],[t.](1+(–+[t.])),[t.][t.][t.],[t.][t.][t.],[t.]–[t.]+[t.],0[t.]+[t.],[t.],[t.][t.][t.],[t.][t.][t.],[t.]–[t.]+[t.],0[t.]+[t.],[t.]–[t.]+[t.],0[t.]+[t.],[t.]–[t.]+[t.],0[t.]+[t.],[t.]If[[t.]<–,–+([t.]+),If[[t.]>,([t.]–)+,[t.]]],[t.]0,[t.]+[t.]+[t.]0,[t.]+[t.]+[t.]+[t.]+[t.]0,[t.]+[t.]+[t.]0,[t.][t.],[t.][t.],[t.][t.]
L.i
L.p.i
Ro.i
Ro.p.i
Ro.T_heatPort
Ro.T
G.i
G.p.i
G.T_heatPort
G.T
C1.i
C1.p.i
C2.i
C2.p.i
Nr.i
Nr.p.i
L.n.i
Ro.p.i
L.n.v
Ro.p.v
C2.p.v
G.p.v
C2.p.v
L.p.v
C1.p.v
G.n.v
C1.p.v
Nr.p.v
C1.n.v
C2.n.v
C1.n.v
Gnd.p.v
C1.n.v
Nr.n.v
C1.n.v
Ro.n.v
L.v
L.n.v
L.p.v
L.n.i
L.p.i
Ro.v
Ro.n.v
Ro.p.v
Ro.n.i
Ro.p.i
Ro.R_actual
Ro.R
Ro.alpha
Ro.T_ref
Ro.T_heatPort
Ro.v
Ro.i
Ro.R_actual
Ro.LossPower
Ro.i
Ro.v
G.v
G.n.v
G.p.v
G.n.i
G.p.i
G.G_actual
G.G
1+(–+[t.])
G.alpha
G.T_ref
G.T_heatPort
G.i
G.G_actual
G.v
G.LossPower
G.i
G.v
C1.v
C1.n.v
C1.p.v
C1.n.i
C1.p.i
C2.v
C2.n.v
C2.p.v
C2.n.i
C2.p.i
Nr.v
Nr.n.v
Nr.p.v
Nr.n.i
Nr.p.i
Nr.i
Nr.v
Nr.Ve
Nr.Ga
Nr.Ve
Nr.Gb
Nr.v
Nr.Ve
Nr.v
Nr.Ve
Nr.Gb
Nr.v
Nr.Ve
Nr.Ga
Nr.Ve
Nr.Ga
Nr.v
Gnd.p.v
C2.p.i
G.p.i
L.p.i
C1.n.i
C2.n.i
Gnd.p.i
Nr.n.i
Ro.n.i
C1.p.i
G.n.i
Nr.p.i
L.L
′
L.i
L.v
C1.i
C1.C
′
C1.v
C2.i
C2.C
′
C2.v
(*GetInitialValues*)initEqs=Map[#[[1]][0]==#[[2]]&,model["InitialValues"]]
Out[]=
{[0]4.,[0]0.,[0]0.,[0]0.275151,[0]0.,[0]–0.275151,[0]4.,[0]–0.275151,[0]–2.26,[0]0.,[0]2.26,[0]0.,[0]2.26,[0]2.26,[0]4.,[0]–2.26,[0]0.,[0]0.565,[0]9.04,[0]300.15,[0]–2.26,[0]–4.,[0]0.,[0]0.,[0]0.,[0]0.,[0]0.,[0]0.,[0]0.,[0]1.98485,[0]0.,[0]–1.98485,[0]4.,[0]–1.98485,[0]4.,[0]0.,[0]0.,[0]0.,[0]0.,[0]0.,[0]0.0125,[0]300.15,[0]0.,[0]0.,[0]10.,[0]100.,[0]0.565,[0]300.15,[0]300.15,[0]0.,[0]False,[0]18.,[0]–0.757576,[0]–0.409091,[0]1.,[0]0.0125,[0]300.15,[0]300.15,[0]0.,[0]False}
C1.v
C2.v
L.i
C1.n.i
C1.n.v
C1.p.i
C1.p.v
C1.i
C2.n.i
C2.n.v
C2.p.i
C2.p.v
C2.i
G.n.i
G.n.v
G.p.i
G.p.v
G.G_actual
G.LossPower
G.T_heatPort
G.i
G.v
Gnd.p.i
Gnd.p.v
L.n.i
L.n.v
L.p.i
L.p.v
L.v
Nr.n.i
Nr.n.v
Nr.p.i
Nr.p.v
Nr.i
Nr.v
Ro.n.i
Ro.n.v
Ro.p.i
Ro.p.v
Ro.LossPower
Ro.R_actual
Ro.T_heatPort
Ro.i
Ro.v
C1.C
C2.C
G.G
G.T
G.T_ref
G.alpha
G.useHeatPort
L.L
Nr.Ga
Nr.Gb
Nr.Ve
Ro.R
Ro.T
Ro.T_ref
Ro.alpha
Ro.useHeatPort
(*GetInitialSeedings*)initSeeds=model["InitialSeedings"]
Out[]=
{[0]288.15,[0]288.15}
G.T_heatPort
Ro.T_heatPort
(*GetParameters*)params=model["ParameterValues"]
Out[]=
{18,0.0125,300.15,0,,0.565,300.15,0,,10,100,–0.757576,–0.409091,1}
L.L
Ro.R
Ro.T_ref
Ro.alpha
Ro.T
Ro.T_ref
G.G
G.T_ref
G.alpha
G.T
G.T_ref
C1.C
C2.C
Nr.Ga
Nr.Gb
Nr.Ve
(*Extractnameofwantedvariable*)var=model["SystemVariables"][[11]]
Out[]=
L.v
var=model["SystemVariables"]
Out[]=
{,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,}
C1.i
C1.v
C2.i
C2.v
G.G_actual
G.i
G.LossPower
G.T_heatPort
G.v
L.i
L.v
Nr.i
Nr.v
Ro.i
Ro.LossPower
Ro.R_actual
Ro.T_heatPort
Ro.v
C1.n.i
C1.n.v
C1.p.i
C1.p.v
C2.n.i
C2.n.v
C2.p.i
C2.p.v
G.n.i
G.n.v
G.p.i
G.p.v
Gnd.p.i
Gnd.p.v
L.n.i
L.n.v
L.p.i
L.p.v
Nr.n.i
Nr.n.v
Nr.p.i
Nr.p.v
Ro.n.i
Ro.n.v
Ro.p.i
Ro.p.v
(*Insertparametersinequations*)neqs=eqs//.params
Out[]=
{[t.][t.],[t.][t.],[t.]300.15,[t.][t.],[t.]300.15,[t.][t.],[t.][t.],[t.][t.],[t.]+[t.]0,[t.][t.],[t.][t.],[t.][t.],[t.][t.],[t.][t.],[t.][t.],[t.][t.],[t.][t.],[t.][t.],[t.]–[t.]+[t.],0[t.]+[t.],[t.]–[t.]+[t.],0[t.]+[t.],[t.]0.0125,[t.][t.][t.],[t.][t.][t.],[t.]–[t.]+[t.],0[t.]+[t.],[t.]0.565,[t.][t.][t.],[t.][t.][t.],[t.]–[t.]+[t.],0[t.]+[t.],[t.]–[t.]+[t.],0[t.]+[t.],[t.]–[t.]+[t.],0[t.]+[t.],[t.]If[[t.]<–1,–(–0.757576)–0.409091([t.]+1),If[[t.]>1,–0.409091([t.]–1)–0.7575761,–0.757576[t.]]],[t.]0,[t.]+[t.]+[t.]0,[t.]+[t.]+[t.]+[t.]+[t.]0,[t.]+[t.]+[t.]0,18[t.][t.],[t.]10[t.],[t.]100[t.]}
L.i
L.p.i
Ro.i
Ro.p.i
Ro.T_heatPort
G.i
G.p.i
G.T_heatPort
C1.i
C1.p.i
C2.i
C2.p.i
Nr.i
Nr.p.i
L.n.i
Ro.p.i
L.n.v
Ro.p.v
C2.p.v
G.p.v
C2.p.v
L.p.v
C1.p.v
G.n.v
C1.p.v
Nr.p.v
C1.n.v
C2.n.v
C1.n.v
Gnd.p.v
C1.n.v
Nr.n.v
C1.n.v
Ro.n.v
L.v
L.n.v
L.p.v
L.n.i
L.p.i
Ro.v
Ro.n.v
Ro.p.v
Ro.n.i
Ro.p.i
Ro.R_actual
Ro.v
Ro.i
Ro.R_actual
Ro.LossPower
Ro.i
Ro.v
G.v
G.n.v
G.p.v
G.n.i
G.p.i
G.G_actual
G.i
G.G_actual
G.v
G.LossPower
G.i
G.v
C1.v
C1.n.v
C1.p.v
C1.n.i
C1.p.i
C2.v
C2.n.v
C2.p.v
C2.n.i
C2.p.i
Nr.v
Nr.n.v
Nr.p.v
Nr.n.i
Nr.p.i
Nr.i
Nr.v
Nr.v
Nr.v
Nr.v
Nr.v
Gnd.p.v
C2.p.i
G.p.i
L.p.i
C1.n.i
C2.n.i
Gnd.p.i
Nr.n.i
Ro.n.i
C1.p.i
G.n.i
Nr.p.i
′
L.i
L.v
C1.i
′
C1.v
C2.i
′
C2.v
(*SimplifySystem*)neqs=FullSimplify[Join[neqs,initEqs],t.>=0]
Out[]=
{[t.][t.],[t.][t.],[t.]300.15,[t.][t.],[t.]300.15,[t.][t.],[t.][t.],[t.][t.],[t.]+[t.]0,[t.][t.],[t.][t.],[t.][t.],[t.][t.],[t.][t.],[t.][t.],[t.][t.],[t.][t.],[t.][t.],[t.]+[t.][t.],[t.]+[t.]0,[t.]+[t.][t.],[t.]+[t.]0,[t.]0.0125,[t.][t.][t.],[t.][t.][t.],[t.]+[t.][t.],[t.]+[t.]0,[t.]0.565,[t.][t.][t.],[t.][t.][t.],[t.]+[t.][t.],[t.]+[t.]0,[t.]+[t.][t.],[t.]+[t.]0,[t.]+[t.][t.],[t.]+[t.]0,If[[t.]<–1,–(–0.757576)–0.409091([t.]+1),If[[t.]>1,–0.409091([t.]–1)–0.7575761,–0.757576[t.]]][t.],[t.]0,[t.]+[t.]+[t.]0,[t.]+[t.]+[t.]+[t.]+[t.]0,[t.]+[t.]+[t.]0,[t.]18[t.],[t.]10[t.],[t.]100[t.],[0]4.,[0]0,[0]0,[0]0.275151,[0]0,[0]–0.275151,[0]4.,[0]–0.275151,[0]–2.26,[0]0,[0]2.26,[0]0,[0]2.26,[0]2.26,[0]4.,[0]–2.26,[0]0,[0]0.565,[0]9.04,[0]300.15,[0]–2.26,[0]–4.,[0]0,[0]0,[0]0,[0]0,[0]0,[0]0,[0]0,[0]1.98485,[0]0,[0]–1.98485,[0]4.,[0]–1.98485,[0]4.,[0]0,[0]0,[0]0,[0]0,[0]0,[0]0.0125,[0]300.15,[0]0,[0]0,[0]10.,[0]100.,[0]0.565,[0]300.15,[0]300.15,[0]0,False[0],[0]18.,[0]–0.757576,[0]–0.409091,[0]1.,[0]0.0125,[0]300.15,[0]300.15,[0]0,False[0]}
L.i
L.p.i
Ro.i
Ro.p.i
Ro.T_heatPort
G.i
G.p.i
G.T_heatPort
C1.i
C1.p.i
C2.i
C2.p.i
Nr.i
Nr.p.i
L.n.i
Ro.p.i
L.n.v
Ro.p.v
C2.p.v
G.p.v
C2.p.v
L.p.v
C1.p.v
G.n.v
C1.p.v
Nr.p.v
C1.n.v
C2.n.v
C1.n.v
Gnd.p.v
C1.n.v
Nr.n.v
C1.n.v
Ro.n.v
L.n.v
L.v
L.p.v
L.n.i
L.p.i
Ro.n.v
Ro.v
Ro.p.v
Ro.n.i
Ro.p.i
Ro.R_actual
Ro.i
Ro.R_actual
Ro.v
Ro.LossPower
Ro.i
Ro.v
G.n.v
G.v
G.p.v
G.n.i
G.p.i
G.G_actual
G.i
G.G_actual
G.v
G.LossPower
G.i
G.v
C1.n.v
C1.v
C1.p.v
C1.n.i
C1.p.i
C2.n.v
C2.v
C2.p.v
C2.n.i
C2.p.i
Nr.n.v
Nr.v
Nr.p.v
Nr.n.i
Nr.p.i
Nr.v
Nr.v
Nr.v
Nr.v
Nr.v
Nr.i
Gnd.p.v
C2.p.i
G.p.i
L.p.i
C1.n.i
C2.n.i
Gnd.p.i
Nr.n.i
Ro.n.i
C1.p.i
G.n.i
Nr.p.i
L.v
′
L.i
C1.i
′
C1.v
C2.i
′
C2.v
C1.v
C2.v
L.i
C1.n.i
C1.n.v
C1.p.i
C1.p.v
C1.i
C2.n.i
C2.n.v
C2.p.i
C2.p.v
C2.i
G.n.i
G.n.v
G.p.i
G.p.v
G.G_actual
G.LossPower
G.T_heatPort
G.i
G.v
Gnd.p.i
Gnd.p.v
L.n.i
L.n.v
L.p.i
L.p.v
L.v
Nr.n.i
Nr.n.v
Nr.p.i
Nr.p.v
Nr.i
Nr.v
Ro.n.i
Ro.n.v
Ro.p.i
Ro.p.v
Ro.LossPower
Ro.R_actual
Ro.T_heatPort
Ro.i
Ro.v
C1.C
C2.C
G.G
G.T
G.T_ref
G.alpha
G.useHeatPort
L.L
Nr.Ga
Nr.Gb
Nr.Ve
Ro.R
Ro.T
Ro.T_ref
Ro.alpha
Ro.useHeatPort
neqs//TableForm
Out[]//TableForm=
L.i L.p.i |
Ro.i Ro.p.i |
Ro.T_heatPort |
G.i G.p.i |
G.T_heatPort |
C1.i C1.p.i |
C2.i C2.p.i |
Nr.i Nr.p.i |
L.n.i Ro.p.i |
L.n.v Ro.p.v |
C2.p.v G.p.v |
C2.p.v L.p.v |
C1.p.v G.n.v |
C1.p.v Nr.p.v |
C1.n.v C2.n.v |
C1.n.v Gnd.p.v |
C1.n.v Nr.n.v |
C1.n.v Ro.n.v |
L.n.v L.v L.p.v |
L.n.i L.p.i |
Ro.n.v Ro.v Ro.p.v |
Ro.n.i Ro.p.i |
Ro.R_actual |
Ro.i Ro.R_actual Ro.v |
Ro.LossPower Ro.i Ro.v |
G.n.v G.v G.p.v |
G.n.i G.p.i |
G.G_actual |
G.i G.G_actual G.v |
G.LossPower G.i G.v |
C1.n.v C1.v C1.p.v |
C1.n.i C1.p.i |
C2.n.v C2.v C2.p.v |
C2.n.i C2.p.i |
Nr.n.v Nr.v Nr.p.v |
Nr.n.i Nr.p.i |
If[ Nr.v Nr.v Nr.v Nr.v Nr.v Nr.i |
Gnd.p.v |
C2.p.i G.p.i L.p.i |
C1.n.i C2.n.i Gnd.p.i Nr.n.i Ro.n.i |
C1.p.i G.n.i Nr.p.i |
L.v ′ L.i |
C1.i ′ C1.v |
C2.i ′ C2.v |
C1.v |
C2.v |
L.i |
C1.n.i |
C1.n.v |
C1.p.i |
C1.p.v |
C1.i |
C2.n.i |
C2.n.v |
C2.p.i |
C2.p.v |
C2.i |
G.n.i |
G.n.v |
G.p.i |
G.p.v |
G.G_actual |
G.LossPower |
G.T_heatPort |
G.i |
G.v |
Gnd.p.i |
Gnd.p.v |
L.n.i |
L.n.v |
L.p.i |
L.p.v |
L.v |
Nr.n.i |
Nr.n.v |
Nr.p.i |
Nr.p.v |
Nr.i |
Nr.v |
Ro.n.i |
Ro.n.v |
Ro.p.i |
Ro.p.v |
Ro.LossPower |
Ro.R_actual |
Ro.T_heatPort |
Ro.i |
Ro.v |
C1.C |
C2.C |
G.G |
G.T |
G.T_ref |
G.alpha |
False G.useHeatPort |
L.L |
Nr.Ga |
Nr.Gb |
Nr.Ve |
Ro.R |
Ro.T |
Ro.T_ref |
Ro.alpha |
False Ro.useHeatPort |
5*^4
Out[]=
50000
In[]:=
(*SolveSystem*)s=NDSolve[neqs,var,{t.,0,50000},Method{"IndexReduction"{Automatic,"ConstraintMethod"(*None*)"DummyDerivative"(*"Projection"*)}},InitialSeeding–>initSeeds];
var[[2]]
Out[]=
C1.v
var[[4]]
Out[]=
C2.v
First[var[[2]][t]/.s]
Out[]=
InterpolatingFunction
[t]
|
ParametricPlot[{First[var[[2]][t]/.s],First[var[[4]][t]/.s]},{t,0,50000},AspectRatio–>1]
Out[]=
(*Showresults*)Map[Plot[Evaluate[#[t]/.s],{t,0,50000},PlotLabel–>#,PlotRange–>All]&,var]//TableForm
Out[]//TableForm=
Out[]//TableForm=
Leave a Reply