# ==============================================================================
# Docs
# ==============================================================================
"""Set of predefined dynamical systems that are of common analysis."""
# ==============================================================================
# Imports
# ==============================================================================
from .core import AutoSymbolic, MultiVarMixin, OneDimMixin
# ==============================================================================
# Class Lorenz
# ==============================================================================
[docs]class Lorenz(MultiVarMixin, AutoSymbolic):
"""
Implementation for Lorenz's system defined by the following equations.
dx / dt = sigma * (y - x)
dy / dt = x * (rho - z) - y
dz / dt = x * y - beta * z
The system has the same attributes as Symbolic and Functional types.
Example
-------
>>> sample_Lorenz = caospy.Lorenz()
>>> sample_Lorenz.variables
['x', 'y', 'z']
>>> sample_Lorenz.f
['sigma * (y - x)', 'x * (rho - z) - y', 'x * y - beta * z']
>>> sample_Lorenz.params
['sigma', 'rho', 'beta']
"""
_name = "Lorenz"
_variables = ["x", "y", "z"]
_parameters = ["sigma", "rho", "beta"]
_functions = ["sigma * (y - x)", "x * (rho - z) - y", "x * y - beta * z"]
# ==============================================================================
# Class Duffing
# ==============================================================================
[docs]class Duffing(AutoSymbolic):
"""Implementation for Duffing's system defined by the following equations.
dx / dt = y
dy / dt = -delta * y - alpha * x - beta x**3 + gamma * cos(omega * t)
dt / dt = 1
The system has the same attributes as Symbolic and Functional types.
"""
_name = "Duffing"
_variables = ["x", "y", "t"]
_parameters = ["alpha", "beta", "delta", "gamma", "omega"]
_functions = [
"y",
"-delta * y - alpha * x - beta * x**3 + gamma * cos(omega * t)",
]
# ==============================================================================
# Class Logistic
# ==============================================================================
[docs]class Logistic(OneDimMixin, AutoSymbolic):
"""Implementation for Logistic system defined by the following equation.
dx / dt = r * N * (1 - N / k)
The system has the same attributes as Symbolic and Functional types.
Example
-------
>>> sample_logistic = caospy.Logistic()
>>> sample_logistic.variables
['N']
>>> sample_logistic.f
['r * N * (1 - N / k)']
>>> sample_logistic.params
['r', 'k']
"""
_name = "Logistic"
_variables = ["N"]
_parameters = ["r", "k"]
_functions = ["r * N * (1 - N / k)"]
# ==============================================================================
# Class Rossler-Chaos
# ==============================================================================
[docs]class RosslerChaos(MultiVarMixin, AutoSymbolic):
"""
Implementation for Rossler's (Chaos) system.
dx / dt = - (y + z)
dy / dt = x + a * y
dz / dt = b + z * (x - c)
The system has the same attributes as Symbolic and Functional types.
Example
-------
>>> sample_RosslerChaos = caospy.RosslerChaos()
>>> sample_RosslerChaos.variables
['x', 'y', 'z']
>>> sample_RosslerChaos.f
['- (y + z)', 'x + a * y', 'b + z * (x - c)']
>>> sample_RosslerChaos.params
['a', 'b', 'c']
"""
_name = "Rossler-chaos"
_variables = ["x", "y", "z"]
_parameters = ["a", "b", "c"]
_functions = ["- (y + z)", "x + a * y", "b + z * (x - c)"]
# ==============================================================================
# Class Rossler - Hyper Chaos
# ==============================================================================
[docs]class RosslerHyperChaos(MultiVarMixin, AutoSymbolic):
"""
Implementation for Rossler's (Hyper Chaos) system.
dx / dt = - (y + z)
dy / dt = x + a * y + w
dz / dt = b + x * z
dw / dt = c * w - d * z
The system has the same attributes as Symbolic and Functional types.
Example
-------
>>> sample_RosslerHyperChaos = caospy.RosslerHyperChaos()
>>> sample_RosslerHyperChaos.variables
['x', 'y', 'z', 'w']
>>> sample_RosslerHyperChaos.f
['- (y + z)', 'x + a * y + w', 'b + x * z', 'c * w - d * z']
>>> sample_RosslerHyperChaos.params
['a', 'b', 'c', 'd']
"""
_name = "Rossler-hyperchaos"
_variables = ["x", "y", "z", "w"]
_parameters = ["a", "b", "c", "d"]
_functions = ["- (y + z)", "x + a * y + w", "b + x * z", "c * w - d * z"]