Skip to main content

A Python implementation of the Method of Multiple Scales using SymPy for symbolic computation

Project description

OSCILATE (Oscillators’ nonlinear analysis through Symbolic ImplementATion of the mEthod of multiple scales)

Nonlinear systems considered

The OSCILATE package allows the application of the Method of Multiple Scales (MMS) to a nonlinear equation or systems of \(N\) coupled nonlinear equations of the form

\begin{equation*} \begin{cases} \ddot{x}_0 + \omega_0^2 x_0 & = f_0(\boldsymbol{x}, \dot{\boldsymbol{x}}, \ddot{\boldsymbol{x}}, t), \\ & \vdots \\ \ddot{x}_{N-1} + \omega_{N-1}^2 x_{N-1} & = f_{N-1}(\boldsymbol{x}, \dot{\boldsymbol{x}}, \ddot{\boldsymbol{x}}, t). \end{cases} \end{equation*}

The \(x_i(t)\) (\(i=0,...,N-1\)) are the oscillators’ coordinates,

\begin{equation*} \boldsymbol{x}(t)^\intercal = [x_0(t), x_1(t), \cdots, x_{N-1}(t)] \end{equation*}

is the vector containing all the oscillators’ coordinates (the \(^\intercal\) denotes the transpose), \(\omega_i\) are their natural frequencies, \(t\) is the time and \(\dot{(\bullet)} = \textrm{d}(\bullet)/\textrm{d}t\) denotes a time-derivative. The \(f_i\) are functions which can contain:

  • Weak linear terms in \(x_i,\; \dot{x}_i\), or \(\ddot{x}_i\).

  • Weak linear coupling terms involving \(x_j,\; \dot{x}_j\), or \(\ddot{x}_j\) with \(j \neq i\).

  • Weak nonlinear terms. Taylor expansions are performed to approximate nonlinear terms as polynomial nonlinearities.

  • Forcing terms:

    • Can be hard (appearing at leading order) or weak (small).

    • Primarily harmonic, e.g., \(F \cos(\omega t)\), where \(F\) and \(\omega\) are the forcing amplitude and frequency, respectively.

    • Modulated by any function (constant, linear, or nonlinear) to model parametric forcing (e.g., \(x_i(t) F \cos(\omega t)\)).

Internal resonance relations among oscillators can be specified in a second step by expressing the \(\omega_i\) as a function of a reference frequency. Detuning can also be introduced during this step.

Overview

Solver

MMS.py is the MMS solver. It contains 3 main classes:

  • Dynamical_system : the dynamical system considered

  • Multiple_scales_system : the system obtained after applying the MMS to the dynamical system

  • Stead_state : the MMS results evaluated at steady state and (if computed) the system’s response and its stability.

These classes are described in details in the documentation.

Additional functions

sympy_functions.py contains additional functions that are not directly related to the MMS but which are used in MMS.py.

Examples

Application examples are proposed in the documentation. They include:

  • The Duffing oscillator

  • Coupled Duffing oscillators

  • Coupled nonlinear oscillators with quadratic nonlinearities

  • Parametrically excited oscillators

  • Hard forcing of a Duffing oscillator

  • Subharmonic response of 2 coupled centrifugal pendulum modes

Outputs

Results are returned as sympy expressions. They can be printed using LaTeX if the code is ran in an appropriate interactive Window. It is the case with VS Code’s interactive Window or Spyder’s IPython consol.

Methods of Steady_state also allow to evaluate sympy results for given numerical values of system parameters and to plot them.

Documentation

A full documentation is available.

Citation

Please cite this package when using it – see the CITATION file for details.

Installation guide

Install from the repository (latest version)

To install the latest version directly from the GitHub repository, run:

git clone https://github.com/vinceECN/OSCILATE.git
cd OSCILATE
pip install .

Dependencies

  • Python 3.8 or higher is required.

  • For development or building documentation, install additional dependencies:

    pip install -r requirements-dev.txt
    pip install -r docs/requirements.txt

Disclaimer

This code is provided as-is and has been tested on a limited number of nonlinear systems. Other test cases might trigger bugs or unexpected behavior that I am not yet aware of. If you encounter any issues, find a bug, or have suggestions for improvements, please feel free to: - Open an issue on the GitHub repository (if applicable). - Propose a solution. - Contact me directly at [vincent.mahe@ec-nantes.fr].

Your feedback is highly appreciated!

Vincent MAHE

License

This project is licensed under the Apache License 2.0 – see the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

oscilate-1.0.0.tar.gz (43.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

oscilate-1.0.0-py3-none-any.whl (41.6 kB view details)

Uploaded Python 3

File details

Details for the file oscilate-1.0.0.tar.gz.

File metadata

  • Download URL: oscilate-1.0.0.tar.gz
  • Upload date:
  • Size: 43.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for oscilate-1.0.0.tar.gz
Algorithm Hash digest
SHA256 7a2aacca4356a63a4102e4f38c08ca349d2ecc825086e312cbf2ddad7d5bfac0
MD5 2b640f2dc6a76a79333658af0ecfde42
BLAKE2b-256 555f0b0c4f3456946b0514005b5d41896a582effc770f7b3f270a3108e17cce8

See more details on using hashes here.

File details

Details for the file oscilate-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: oscilate-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 41.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for oscilate-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2ce6c16de88124873bde985d0692aede0a1cf280f7d7853752301ec1107d0601
MD5 969feeb5c7d86c0bb0248f2e7c353a5f
BLAKE2b-256 f79a26d830e7e8addafc80e5a20abb2fffc81ae88881a364c848a9378a907d53

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page