Dear all,
I am new to Julia, and came to notice this package for the continuation of autonomous dynamical systems. I tried to apply it to the computation of normal modes of second-order dynamical systems. Briefly, I am interested in the free vibrations of nonlinear mechanical systems, which are modeled as second-order autonomous ODES. However, these vibrations can be quite complex due to their nonlinearity. Specifically, there are solutions with Auto that I wish to mimic:
COMPUTATION OF NONLINEAR NORMAL MODES, PART II: NUMERICAL CONTINUATION IN AUTO
I have already tried following the examples in the package, with the trapezoidal method and simple shooting, but with no success.
Edit:
As an example, consider the Duffing oscillator, which is a second-order autonomous conservative ODE:
where the H function is the Hamiltonian (total energy). The relation Amplitude vs frequency of vibration is called the backbone curve. If b = 0, a > 0, then the system is a linear oscillator and the backbone is a vertical line at omega = sqrt(a). For any other real parameters, this line bends towards higher or lower omegas. This is the curve I am interested in.
The problem is, for constant a, b, the continuation problem does not depend on any parameter, but on the initial energy itself, i.e., the initial condition. If I encode this system, this would result in:
> using BifurcationKit, Setfield, Parameters
> function F!(f, x, p, t=0)
@unpack a, b = p
f[1] = x[2]
f[2] = -a*x[1] -b*(x[1]^3))
return f
end
F(x,p,t = 0) = F!(similar(x),x,p,t)
Here, F is the vector field of the first-order equivalent system, with phase-space variables x[1] = x, x[2] = dx/dt. If i follow the provided reference, then this vector field would be rewritten as
> function F2!(f, x, p, t=0)
@unpack a, b, T, λ = p
f[1] = T*(x[2]) + λ*(a*x[1] + b*(x[1]^3))
f[2] = T*(-a*x[1] -b*(x[1]^3)) + λ*(x[2])
return f
end
F2(x,p,t = 0) = F2!(similar(x),x,p,t)
and now the system has two additional parameters, the period T and the unfolding parameter lambda. F2 should be continued against lambda by a collocation method, similar to how Auto proceeds. There are at least 2 branches for F2, one for trivial solutions, x[1,2] = 0, and another bifurcated from lambda = 0. This bifurcated branch is the backbone of the original system.
I tried following the tutorials of BifurcationKit.jl for F2, applying the trapezoidal continuation method and shooting, with no success. The original F has no explicitly continuation parameters, so I do not know if the package can deal with it directly. Kerschen also defines an algorithm for the computation of backbones directly, based on shooting and a Moore-Penrose inverse:
Peeters M, Viguié R, Sérandour G, Kerschen G, Golinval JC: Nonlinear normal modes, Part II: Toward a practical computation using numerical continuation techniques. Mech. Syst. Signal Process. 2009, 23 (1) :195–216. Redirecting
Any help would be deeply appreciated!
Kaio Benedetti