[PYTHON] Effectuer des calculs numériques avec Phython tout en apprenant la dynamique non linéaire et le chaos [1]

Contenu de cette série

Cet article est de Steven H. Strogatz ["Strogats Non-linear Dynamics and Chaos"](https://www.amazon.co.jp/%E3%82%B9%E3%83%88%E3%83%AD% E3% 82% AC% E3% 83% 83% E3% 83% 84-% E9% 9D% 9E% E7% B7% 9A% E5% BD% A2% E3% 83% 80% E3% 82% A4% E3 % 83% 8A% E3% 83% 9F% E3% 82% AF% E3% 82% B9% E3% 81% A8% E3% 82% AB% E3% 82% AA% E3% 82% B9-Steven-H -Un résumé de la dynamique non linéaire et du chaos créé à partir de Strogatz / dp / 4621085808) et du code d'implémentation en utilisant Python. Pour donner une brève auto-introduction, l'auteur de cet article est un étudiant en mécanique dans une université nationale locale, et les mathématiques qui apparaissent dans cet article ont été essentiellement apprises par lui-même. (Donc je m'inquiète pour l'exactitude.) Je pense qu'il vaut mieux y penser comme un mémorandum qu'un amateur a implémenté les équations qui apparaissent dans ce livre en pensant seul. Nous prévoyons d'ajouter le contenu des autres chapitres un par un. Si vous constatez des erreurs, je vous serais très reconnaissant de bien vouloir les signaler!

0. Environnement d'exécution

Tout le code de l'article est celui exécuté par Python3.8.2.

1. Flux unidimensionnel

Dans cet article, conformément au livre de Strogats, Nous traiterons les équations unidimensionnelles → équations bidimensionnelles → équations tridimensionnelles (apparition du chaos) dans cet ordre. Considérons d'abord une équation unidimensionnelle, c'est-à-dire une fonction qui peut être exprimée sous la forme suivante.

\frac{dx}{dt} = f(x)

1.1 Points fixes et leur stabilité

Pour trouver la solution de *** $ x '= f (x) $ *** à partir de n'importe quelle condition initiale *** $ x_0 $ ***, utilisez une particule virtuelle *** $ x_0 Placez-le dans $ *** et observez comment il est porté par le flux. Au fil du temps, ce point se déplace le long de l'axe *** $ x $ *** selon une fonction *** $ x (t) $ ***. Cette fonction s'appelle la ** trajectoire de la solution ** à partir de *** $ x_0 $ *** et représente la solution de l'équation différentielle à partir de la condition initiale *** $ x_0 $ ***. Celui qui représente toutes les activations qualitativement différentes du système est appelé ** diagramme de phase **. Dans ce diagramme de phase, le point où *** $ x '= 0 $ *** est appelé ** point fixe **.

[Exemple 1.1] Trouvez tous les points fixes de
*** $ x '= x ^ 2-1 $ *** et classez-les.
[Exemple de code 1.1]

example1_1.py


import sympy as sym
from sympy.plotting import plot
x = sym.Symbol('x')
dx = x**2 - 1
plot(dx, (x, -10, 10), aspect_ratio='auto', title='example1.1', xlim = (-5, 5), ylim = (-3, 25),ylabel="x'")
[Résultat d'exécution 1.1] example1_1.png
[Réponse 1.1]
Comme le montre la figure, il y a deux points fixes *** $ x = -1, x = 1 $ ***. Le premier est stable car la force de rappel fonctionne même pour de petites perturbations près du point fixe. En revanche, ce dernier n'est pas stable (appelé ** sink **) car le point se déplace dans le sens d'amplification d'une petite perturbation. (Appelé ** source **)

1.2 Analyse de stabilité linéaire

Maintenant, considérons une méthode pour analyser la stabilité près d'un point fixe comme le montre l'exemple précédent. *** $ x ^ \ ast $ *** comme un point fixe, *** $ \ eta (t) = x (t) -x ^ \ ast $ *** comme *** $ x ^ \ ast $ Que ce soit une petite perturbation de ***.

\begin{eqnarray}
\dot{\eta} &=& \frac{d}{dt}(x-x^\ast)=\dot{x}\\
&=& f(x)\\
&=& f(x^\ast+\eta)\\
&=& f(x^\ast)+\eta \cdot f'(x^\ast) + o(\eta^2)\\
&\simeq& \eta \cdot f'(x^\ast)
\end{eqnarray}

Par conséquent, la linéarisation autour du point fixe est

\dot{\eta} \simeq \eta \cdot f'(x^\ast)

On peut voir qu'il peut être exprimé comme. (L'expansion de Taylor a été utilisée dans la transformation de la 3ème ligne à la 4ème ligne dans l'extension d'expression) Basé sur ce résultat

* $ f '(x ^ \ ast)> 0 $ * augmentera de façon exponentielle, Si
* $ f '(x ^ \ ast) <0 $ *, il sera atténué.
* Cependant, ceux-ci sont valides dans le cas de * $ f '(x ^ \ ast) \ neq0 $ * Tu peux voir ça.

1.3 Existence et unicité de la solution

De là, un théorème très important pour considérer un système mécanique non linéaire.

*** $ \ dot {x} = f (x) , x (0) = x_0 $ ***. Supposons que *** $ f (x) $ *** et *** $ f '(x) $ *** soient continus sur l'intervalle ouvert R sur l'axe *** $ x $ ***. On suppose que *** $ x_0 $ *** est un point dans R. Ensuite, ce problème de valeur initiale est résolu par *** $ (- \ gamma, \ gamma) $ *** en se promenant *** $ t = 0 $ ***. *** $ x (t) $ Avec ***, cette solution est unique. En d'autres termes, si *** $ f (x) $ *** est suffisamment fluide, la solution existe et est unique </ font>.