Exposant de Lyapunov, chaos
Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
par debutantphys » 02 Déc 2024, 15:55
Bonjour,
Je suis actuellement en train de travailler sur un projet en physique du chaos, et je ne comprend pas un point lié à l'exposant de lyapunov.
J'étudie l'oscillateur de van der pol forcé : x''(t)-µ[1-x^2(t)]x'(t)+x(t)=Acos(t)
je cherche a obtenir l'exposant de lyapunov pour quantifier la chaocité du système, j'ai donc ceci:
L’écart entre deux trajectoires au bout du temps t s’expriment:
e(t)=e0*e^lambda*t
avec:
e0: l’écart initiale entre les deux trajectoires
lambda: l’exposant de Lyapunov
en appliquant un logarithme népérien (ln) à l’expression de e(t) on peut la linéariser et on se retrouve ainsi avec l’équation d’une fonction affine en t de pente lambda :
ln(e(t))=lambda*t + ln(e0)
Cependant je n'obtiens pas du tout une fonction affine lorsque je trace ln(e(t) en fonction de t avec programme python. Pourtant j'ai essayé plusieurs méthodes et code différents.
est ce que cela viens d'une mauvaise interprétation de ma part ou un problème dans mon code?
Merci d'avance.
Bonne journée.
par debutantphys » 02 Déc 2024, 20:31
Bonjour,
Je suis actuellement en train de travailler sur un projet en physique du chaos, et je ne comprend pas un point lié à l'exposant de lyapunov.
J'étudie l'oscillateur de van der pol forcé : x''(t)-µ[1-x^2(t)]x'(t)+x(t)=Acos(t)
je cherche a obtenir l'exposant de lyapunov pour quantifier la chaocité du système, j'ai donc ceci:
L’écart entre deux trajectoires au bout du temps t s’expriment:
e(t)=e0*e^lambda*t
avec:
e0: l’écart initiale entre les deux trajectoires
lambda: l’exposant de Lyapunov
en appliquant un logarithme népérien (ln) à l’expression de e(t) on peut la linéariser et on se retrouve ainsi avec l’équation d’une fonction affine en t de pente lambda :
ln(e(t))=lambda*t + ln(e0)
Cependant je n'obtiens pas du tout une fonction affine lorsque je trace ln(e(t) en fonction de t avec programme python. Pourtant j'ai essayé plusieurs méthodes et code différents.
est ce que cela viens d'une mauvaise interprétation de ma part ou un problème dans mon code?
Merci d'avance.
Bonne journée.
par debutantphys » 02 Déc 2024, 20:32
Bonjour,
Je suis actuellement en train de travailler sur un projet en physique du chaos, et je ne comprend pas un point lié à l'exposant de lyapunov.
J'étudie l'oscillateur de van der pol forcé : x''(t)-µ[1-x^2(t)]x'(t)+x(t)=Acos(t)
je cherche a obtenir l'exposant de lyapunov pour quantifier la chaocité du système, j'ai donc ceci:
L’écart entre deux trajectoires au bout du temps t s’expriment:
e(t)=e0*e^lambda*t
avec:
e0: l’écart initiale entre les deux trajectoires
lambda: l’exposant de Lyapunov
en appliquant un logarithme népérien (ln) à l’expression de e(t) on peut la linéariser et on se retrouve ainsi avec l’équation d’une fonction affine en t de pente lambda :
ln(e(t))=lambda*t + ln(e0)
Cependant je n'obtiens pas du tout une fonction affine lorsque je trace ln(e(t) en fonction de t avec programme python. Pourtant j'ai essayé plusieurs méthodes et code différents.
est ce que cela viens d'une mauvaise interprétation de ma part ou un problème dans mon code?
Merci d'avance.
Bonne journée.
-
vam
- Admin
- Messages: 660
- Enregistré le: 09 Aoû 2019, 09:50
-
par vam » 03 Déc 2024, 13:50
Bonjour
ce n'est pas en postant 3 fois le sujet que tu obtiendras davantage de réponse...merci de ne pas réitérer
Pour mettre une image, vous pouvez aller sur
https://postimages.org/fr/Vous choisirez ce qu'ils appellent le lien direct (lien de la seconde ligne), que vous placerez entre les balises Img.
-
catamat
- Habitué(e)
- Messages: 1312
- Enregistré le: 07 Mar 2021, 10:40
-
par catamat » 03 Déc 2024, 15:19
debutantphys a écrit:
L’écart entre deux trajectoires au bout du temps t s’expriment:
e(t)=e0*e^lambda*t
avec:
e0: l’écart initiale entre les deux trajectoires
lambda: l’exposant de Lyapunov
Bonjour, si on n'a pas répondu c'est que la question n'est pas très claire...
Voilà, si je comprends bien on a :
où le premier e est la nom de la fonction, donc e comme écart, alors que le dernier e est la base le la fonction ln.
Il est clair que si l'on représente e on ne va pas obtenir une droite puis c'est une exponentielle.
Par contre f telle que f(t)=ln(e(t))=
est bien une fonction affine donc représentée par une droite le pente
Je ne sais pas ce que vous avez tracé en Python donc je ne peux pas vous dire si ce que trace votre programme est correct ou pas.
par debutantphys » 03 Déc 2024, 19:47
Bonjour,
il s'agit bien effectivement de tracer de f(t)=ln(e(t))= ln(e0) + λt
Voici mon code (qui ne donne pas du tout une fonction affine) :
- Code: Tout sélectionner
import numpy as np
from scipy.integrate import solve_ivp
import matplotlib.pyplot as plt
# Définition des équations de Van der Pol forcé
def van_der_pol_forced(t, z, mu, A, omega):
x, x_dot = z
dxdt = x_dot
dx_dot_dt = mu * (1 - x**2) * x_dot - x + A * np.cos(omega * t)
return [dxdt, dx_dot_dt]
# Calcul de la distance entre deux trajectoires
def lyapunov_exponent(mu, A, omega, t_span, dt, delta0, x0_1, x0_2):
t_eval = np.arange(t_span[0], t_span[1], dt)
distances = []
z1 = x0_1
z2 = x0_2
for t in t_eval:
# Intégrer les deux trajectoires
sol1 = solve_ivp(van_der_pol_forced, [t, t + dt], z1, args=(mu, A, omega), method='RK45')
sol2 = solve_ivp(van_der_pol_forced, [t, t + dt], z2, args=(mu, A, omega), method='RK45')
# Mettre à jour les positions des deux trajectoires
z1 = sol1.y[:, -1]
z2 = sol2.y[:, -1]
# Calcul de la distance
delta = np.linalg.norm(np.array(z2) - np.array(z1))
distances.append(delta)
# Renormaliser
if delta > 0:
z2 = z1 + delta0 * (z2 - z1) / delta
return distances, t_eval
# Paramètres
mu = 5
A = 9
omega = 2.463
t_span = (0, 100)
dt = 0.1
delta0 = 1e-5
x0_1 = [-1.4, 1]
x0_2 = [-1.4 + delta0, 1]
# Calcul de la distance
distances, times = lyapunov_exponent(mu, A, omega, t_span, dt, delta0, x0_1, x0_2)
# Tracer ln(delta(t)) en fonction de t
ln_distances = np.log(distances)
plt.figure(figsize=(10, 6))
plt.plot(times, ln_distances, label="ln(Distance)", marker='o')
# Régression linéaire
coef = np.polyfit(times, ln_distances, 1)
plt.plot(times, coef[0] * times + coef[1], label=f"Régression linéaire ", color='red')
# Affichage
plt.xlabel("Temps")
plt.ylabel("ln(Distance)")
plt.title("Divergence des trajectoires proches (Exposant de Lyapunov)")
plt.legend()
plt.grid()
plt.show()
print(f"Exposant de Lyapunov estimé :", coef[0])
En espérant que vous pourrez m'aider.
Bonne journée.
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 23 invités