Exposant de Lyapunov, chaos

Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
debutantphys
Messages: 4
Enregistré le: 02 Déc 2024, 13:36

exposant de Lyapunov, chaos

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.



debutantphys
Messages: 4
Enregistré le: 02 Déc 2024, 13:36

exposant de Lyapunov, physique du chaos

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.

debutantphys
Messages: 4
Enregistré le: 02 Déc 2024, 13:36

exposant de Lyapunov, physique du chaos

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.

Avatar de l’utilisateur
vam
Admin
Messages: 660
Enregistré le: 09 Aoû 2019, 09:50

Re: exposant de Lyapunov, chaos

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

Re: exposant de Lyapunov, physique du chaos

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.

debutantphys
Messages: 4
Enregistré le: 02 Déc 2024, 13:36

Re: exposant de Lyapunov, chaos

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.

 

Retourner vers ✯✎ Supérieur

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite