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 x=±1x=\pm1; 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.