Stuart-Landau Oscillator 1 collaborator julien siebert (Author)

Tags

oscillation

Tagged by julien siebert over 6 years ago

physics

Tagged by julien siebert over 6 years ago

Visible to everyone | Changeable by everyone
Model was written in NetLogo 5.0.4 • Viewed 1402 times • Downloaded 30 times • Run 0 times Download this modelEmbed this model

WHAT IS IT?

The Stuart-Landau oscillator model

HOW IT WORKS

Each node (turtle) represents one oscillator: a single variable 'z' which is complex (i.e. z = a + i*b).

The nodes coordinates represent both real part and imaginary part of 'z' (i.e. xcor is the real part and ycor is the imaginary part).

Each node follows the following equation of motion:

dz/dt = (lambda + iomega - |z|^2)z

Where lambda and omega are control parameters. |z| represent the modulus of the complex number z.

HOW TO USE IT

Choose the number of nodes (note that in this model the nodes do not interact with each other, so you can simply put one node) with the 'nb-node slider'. Putting more than one node helps to explore the behaviour of the whole system (e.g. to see if there is an attractor).

Choose the values of lambda and omega.

Set dt (I usually use 0.001). This is the increment of time in the model. For more details about 'dt' see Euler algorithm for numerical simulation of derivative equations.

Choose if you want to see the trajectories of the nodes.

Push 'setup' and 'go' :)

THINGS TO NOTICE

Drawing the trajectories helps to see the the stable region (here a cycle).

THINGS TO TRY

Move lambda and omega to see their influence on the behaviour of the nodes.

EXTENDING THE MODEL

You could add links between nodes and make them interact...

CREDITS AND REFERENCES

I used the code for complex operations directly from the "Mandelbrot model". Thanks, it was really helpful.

See http://www.scholarpedia.org/article/Periodic_orbit if you want to know more about oscillators in general.

Find mode about the "Stuart-Landau" oscillator in Handbook of Chaos Control, edited by E. Schoell and H. G. Schuster (Wiley-VCH, Weinheim, 2008), second completely revised and enlarged edition.

Click to Run Model

breed [nodes node]

links-own [ weight ]

to setup
clear-all
;; creates all the nodes
set-default-shape nodes "circle"
create-nodes nb-nodes [ setxy random-xcor random-ycor set size 0.25 ]
;; set simulation time to 0
reset-ticks
end

to go
ifelse draw-trajectories [  ;; draw the trajectories?
][
]

move-nodes
tick
end

to move-nodes
[
let z-real xcor
let z-imag ycor

;; f(z) = (lambda + i*omega - |z|^2)*z
let mod-z-sq (modulus z-real z-imag) * (modulus z-real z-imag) ;; modulus(z) square
let fz-real (rmult (lambda - mod-z-sq) omega z-real z-imag)
let fz-imag (imult (lambda - mod-z-sq) omega z-real z-imag)

;; euler algorithm
setxy (xcor + (fz-real) * dt) (ycor + (fz-imag) * dt)
]
end

;;; Real and Imaginary Arithmetic Operators

;;; real part of the multiplication (a+ib)*(c+id) = (ac-bd) + i(ad+cb)
;;; returns the real part (ac-bd)

to-report rmult [real1 imaginary1 real2 imaginary2]
report real1 * real2 - imaginary1 * imaginary2
end

;;; imaginary part of the multiplication (a+ib)*(c+id) = (ac-bd) + i(ad+cb)
;;; returns the imaginary part (ad+cb)

to-report imult [real1 imaginary1 real2 imaginary2]
report real1 * imaginary2 + real2 * imaginary1
end

;;; returns the modulus of a complex number a+ib

to-report modulus [real imaginary]
report sqrt (real ^ 2 + imaginary ^ 2)
end

There are 3 versions of this model.