Models & Equations
Defining and evaluating the Chua models exposed by the library.
The public models API exposes a non-smooth Chua case and a smooth
arctangent Chua variant through ChuaParameters.
Selecting A Model
from hidden_attractors.models import chua_parameters
nonsmooth = chua_parameters(model="nonsmooth")
arctan = chua_parameters(model="arctan")
Historical aliases including "piecewise" and "pwl" resolve to
"nonsmooth"; "atan" resolves to "arctan". The parameter object is frozen; construct a new instance when
changing coefficients.
Non-Smooth Defaults
The defaults implement the non-smooth fractional Chua case used by Danca:
from hidden_attractors import chua_nonsmooth_parameters
params = chua_nonsmooth_parameters()
print(params.alpha, params.beta, params.gamma, params.m0, params.m1)
# 8.4562 12.0732 0.0052 -0.1768 -1.1468
Right-Hand Side And Equilibria
import numpy as np
from hidden_attractors.models import equilibria_nonsmooth, rhs_nonsmooth
state = np.array([0.1, 0.0, 0.0])
dx = rhs_nonsmooth(state, params)
equilibria = equilibria_nonsmooth(params)
for name, point in equilibria.items():
print(name, point, np.linalg.norm(rhs_nonsmooth(point, params)))
The default non-smooth model returns keys E0, E+, and E-. Its fractional
q=0.9998 algebra audit is documented in
Chua Non-Smooth.
Regional Jacobian
from hidden_attractors.models import jacobian_nonsmooth
J0 = jacobian_nonsmooth(equilibria["E0"], params)
Jplus = jacobian_nonsmooth(equilibria["E+"], params)
The non-smooth vector field has no unique classical Jacobian on
; jacobian_nonsmooth raises ValueError at either switching
surface.
Smooth Arctangent Variant
from hidden_attractors.models import chua_arctan_parameters, rhs_chua
smooth_params = chua_arctan_parameters()
dx_smooth = rhs_chua(state, smooth_params)
The smooth variant is named arctan in the API; it is not a cubic
rhs_smooth model.