logo

Chua's Circuit 📂Dynamical Systems

Chua's Circuit

System 1 2

alt text

$$ \begin{align*} \dot{x} =& \alpha (y - h(x)) \\ \dot{y} =& x - y + z \\ \dot{z} =& -\beta y \\ h(x) =& m_{1} x + \frac{1}{2} (m_{0} - m_{1}) \left( \left| x + 1 \right| - \left| x - 1 \right| \right) \end{align*} $$

Explanation

The $N_{R}$ in Chua’s circuit is the so-called Chua diode, a component that realizes the nonlinear resistance in the circuit. Although $h$ is not fixed by any strict rule, when a nonsmooth system is assumed, a form like the one above is usually used. When $h$ is defined in this way, the Chua circuit becomes a piecewise linear system.

For reference, Leon Ong Chua, who devised and studied this circuit, is an electrical engineer of Filipino origin, and Chua is written with the Chinese character 蔡. In our terms, it could also be called something like the Chae circuit.

Attractor

The Chua circuit has a chaotic attractor as follows.

alt text

Bifurcation Diagram

The following is the bifurcation diagram of the Chua circuit obtained by setting $\beta = 15$, $m_{0} = -1/7$, $m_{1} = 2/7$ and taking $\alpha$ as the bifurcation parameter.

alt text

Code

The following is Julia code that reproduces the attractor and bifurcation diagram of the Chua circuit.

using DataFrames, DifferentialEquations, OrdinaryDiffEqLowOrderRK

function factory_chua(α::Number; ic = [0.4, -0.2, 0.2], saveat = 0:1e-2:100)
     β,   m0,  m1 = (
    15, -1/7, 2/7)
    h(x) = m1*x + (m0 - m1)*(abs(x + 1) - abs(x - 1))/2
    function sys(du, u, p, t)
        x, y, z = u
        α = p[1]

        du[1] = α*(y - h(x))
        du[2] = x - y + z
        du[3] = -β*y
        return du
    end
    sol = solve(ODEProblem(sys, ic, (0, last(saveat)), [α]), RK4(), dt = saveat.step.hi, adaptive=false, maxiters = 1e+7)
    matrix = Matrix([sol.t'; sol[:, :]; stack([sys(zeros(3), u, [α], 0) for u in sol.u])]')
    return matrix[sol.t .≥ first(saveat), :][1:end-1, :]
end
factory_chua(T::Type, args...; kargs...) =
DataFrame(factory_chua(args...; kargs...), ["t", "x", "y", "z", "dx", "dy", "dz"])

sol = factory_chua(DataFrame, 8.8)
plot(sol.x, sol.y, sol.z, alpha = .5, color = :black, xlabel = L"x", ylabel = L"y", zlabel = L"z", size = [400, 400])

pm, pM = 8.430, 8.8; p0, p1 = 8.79, 8.80;
p_ = range(pm, pM, length = 1001)
bfcn = callbfcn("G:/BF/chua/bfcnA.jld2")
@showprogress @threads for k in eachindex(p_)
    sol = factory_chua(DataFrame, p_[k], saveat = 0:1e-3:3000)
    z_ = sol.z[sol.t .≥ 2000]
    bfcn[p_[k]] = z_[arglmax(z_)]
end
scatter(dict2bifurcation(bfcn)..., xticks = [pm, p0, p1, pM], ms = .5, ma = .5, msw = 0, color = :black); png("temp")

  1. Broucke, M. (1987). One parameter bifurcation diagram for Chua’s circuit. IEEE transactions on circuits and systems, 34(2), 208-209. https://doi.org/10.1109/TCS.1987.1086109 https://people.eecs.berkeley.edu/~chua/papers/Broucke87.pdf ↩︎

  2. https://upload.wikimedia.org/wikipedia/commons/7/71/Chua%27s_circuit_with_Chua_diode.svg ↩︎