Python : système d'équations différentielles liées
Répondre à la discussion
Affichage des résultats 1 à 18 sur 18

Python : système d'équations différentielles liées



  1. #1
    cmole

    Python : système d'équations différentielles liées


    ------

    Bonjour à tous,

    Je suis (une nouvelle fois) en train d’essayer de résoudre un système d’équations différentielles à l’aide de Python, et je dois avouer que je sèche un peu… J’ai utilisé ChatGPT, et même si mes compétences en la matière sont très limitées, je ne suis pas convaincu de la piste qui m’a été donnée (piste qui diffère si je repose la question dans différentes conversations, qui plus est).

    Je vais essayer de vous décrire mon problème du mieux que je peux, et vous donner le code que j’ai utilisé jusque-là. Voici le système d’équations que j’ai à résoudre :
    N1 = A.x’’cos(x) + B.x’²sin(x) + C
    N2 = N1.D.sin(x) + E.x’²
    x’’ = F.N2 + G.N1.cos(x) + H.x’² + I

    Avec x(t) la fonction inconnue (on pourra dire que x est une position, x’ une vitesse et x’’ une accélération) ; A, B, … , I sont des constantes, et N1 et N2 sont des paramètres variables, dépendants de x(t) et ses dérivées.
    Je m’y prends surement mal, mais je n’arrive pas à résoudre ce problème, et je n’arrive pas à trouver de « documentation » me satisfaisant pour me guider. Pour me simplifier la tâche j’ai essayé de décomposer mon problème : j’ai donc supposé que F = 0, comme ça je peux ignorer N2, puis « à la main » j’ai injecté N1 dans l’expression de x’’, puis j’ai résolu l’équation à l’aide de Python, aucun problème jusque-là. Ensuite j’ai voulu résoudre ce système de deux équations (N1 et x’’) pour voir si je trouvais le même résultat que lors de ma première résolution, et là ça cloche. Avec la résolution de ChatGPT j’ai une erreur supérieure à 5%, alors certes ce n’est pas énorme, mais je n’ai pas encore intégré N2 ! Voici le code :

    # Définition du système d'équation différentielle
    def systeme(t, X):
    x1, x2 = X

    def compute_N1 (x1, x2, dx2_dt):
    return(A*dx2_dt*cos(x1) + B*x2²*sin(x) + C

    dx2_dt_guess = 0.0

    for _ in range(10):
    N1 = compute_N1(x1, x2, dx2_dt_guess)
    dx2_dt_guess = G*N1*cos(x1) + H*x2² + I

    dx1_dt = x2
    dx2_dt = dx2_dt_guess
    return [dx1_dt, dx2_dt]

    Ensuite résolution avec solve_ivp, mais ce n’est pas très important.
    Ma question est donc : la méthode employée vous semble-t-elle cohérente ? si non, que feriez-vous ?

    Merci d’avance !

    NB: Visiblement la tabulation ne se fait pas, j'espère que le code reste clair, désolé...

    -----
    Dernière modification par cmole ; 15/01/2025 à 22h49.

  2. #2
    gts2

    Re : Python : système d'équations différentielles liées

    Bonjour,

    Vous avez un problème un peu tordu...

    Deux solutions
    - vous résolvez à la main par une méthode d'Euler ou plus évolué et comme vous contrôlez le détail des calculs, vous n'aurez aucun mal à introduire N1 et N2
    - vous utilisez scipy ou numpy, dans ce cas une possibilité est de considérer
    N1 = A x2' \cos(x1) + B x2^2\sin(x1) + C
    N2 = N_1 D \sin(x1) + E x2^2
    x2'= F N2 + G N1 \cos(x) + H x2^2 + I
    comme un système linéaire en (N1,N2,x2'), résoudre ce système et renvoyer x2,x2'

  3. #3
    polo974

    Re : Python : système d'équations différentielles liées

    Pour la lisibilité il faut passer en mode édition avancée et utiliser la balise cd code (bouton #)
    ce qui donne:
    Citation Envoyé par cmole Voir le message
    Bonjour à tous,
    snip snip snip ...
    Voici le code :
    Code:
    # Définition du système d'équation différentielle
    def systeme(t, X):
                x1, x2 = X
    
            def compute_N1 (x1, x2, dx2_dt):
                    return(A*dx2_dt*cos(x1) + B*x2²*sin(x) + C
    
          dx2_dt_guess = 0.0
    
           for _ in range(10):
                  N1 = compute_N1(x1, x2, dx2_dt_guess)
                    dx2_dt_guess = G*N1*cos(x1) + H*x2² + I
        
        dx1_dt = x2
        dx2_dt = dx2_dt_guess
        return [dx1_dt, dx2_dt]
    Ensuite résolution avec solve_ivp, mais ce n’est pas très important.
    Ma question est donc : la méthode employée vous semble-t-elle cohérente ? si non, que feriez-vous ?

    Merci d’avance !

    NB: Visiblement la tabulation ne se fait pas, j'espère que le code reste clair, désolé...
    Edit: Mais là, l'indentation est un peu pourrie...
    Jusqu'ici tout va bien...

  4. #4
    cmole

    Re : Python : système d'équations différentielles liées

    Pour la lisibilité il faut passer en mode édition avancée et utiliser la balise cd code (bouton #)
    ce qui donne:
    Je le saurai pour la prochaine fois, merci !

    - vous utilisez scipy ou numpy, dans ce cas une possibilité est de considérer
    N1 = A x2' \cos(x1) + B x2^2\sin(x1) + C
    N2 = N_1 D \sin(x1) + E x2^2
    x2'= F N2 + G N1 \cos(x) + H x2^2 + I
    comme un système linéaire en (N1,N2,x2'), résoudre ce système et renvoyer x2,x2'
    C'est exactement cette méthode que je souhaiterais suivre, auriez-vous un exemple ou une piste pour m'aider à implémenter ça ?

  5. A voir en vidéo sur Futura
  6. #5
    MissJenny

    Re : Python : système d'équations différentielles liées

    quand j'ai eu à faire un travail similaire j'ai utilisé la bibliiothèque "Numerical Recipes". C'est écrit en c, je ne sais pas comment on fait pour appeler ces fonctions depuis Python mais ça doit être possible.

  7. #6
    gts2

    Re : Python : système d'équations différentielles liées

    Bonjour,

    Etape 1 (mathématique) écrire les équations sous la forme AX=B qqch du genre :

    ; ;

    Calcul bien sûr à vérifier ...

    Etape 2 (Python) utilisez numpy.linalg.solve
    Code:
    \begin{lstlisting}
    a = np.array([[ , , ], [ , , ],[ , , ]])
    b = np.array([ , , ])
    x = np.linalg.solve(a, b)
    dx2_dt = x[2]
    \end{lstlisting}

  8. #7
    Biname

    Re : Python : système d'équations différentielles liées

    Salut,
    L'IA(deepseek ici) donne une solution numérique sous python, plot et régression en 30 secondes avec un copier-coller de l'énoncé.
     Cliquez pour afficher

    Code solution exacte (trop long ou ne trouve pas) :
     Cliquez pour afficher

  9. #8
    gts2

    Re : Python : système d'équations différentielles liées

    Le problème de la solution proposée est qu'elle ne correspond pas à la question posée :

    question : N1 = A.x’’.cos(x) + B.x’²sin(x) + C
    solution : N1 = A.x’.cos(x) + B.x’²sin(x) + C

  10. #9
    Biname

    Re : Python : système d'équations différentielles liées

    Oui, il a triché . Amusant : Mistral et 4o font la même erreur.

  11. #10
    pm42

    Re : Python : système d'équations différentielles liées

    Citation Envoyé par gts2 Voir le message
    Le problème de la solution proposée est qu'elle ne correspond pas à la question posée :
    Normal : poser ce genre de question à un LLM qui n'est pas fait pour ça au lieu d'un LRM qui a de meilleures chances de faire quelque chose de correct.
    Ce qui est curieux, c'est que cela a été expliqué de nombreuses fois mais on récupère quand même ces copier-coller sans valeur ajoutée.

  12. #11
    gts2

    Re : Python : système d'équations différentielles liées

    Bonjour,
    Citation Envoyé par MissJenny Voir le message
    quand j'ai eu à faire un travail similaire j'ai utilisé la bibliiothèque "Numerical Recipes". C'est écrit en c, je ne sais pas comment on fait pour appeler ces fonctions depuis Python mais ça doit être possible.
    En fait le titre est trompeur : il ne s'agit pas de "système d'équations différentielles" mais d'UNE équation différentielle donnée par un système.

    Sinon pour Python, c'est la même procédure pour les systèmes d'équation ou une équation : dans un cas on passe comme argument des scalaires, dans l'autre des vecteurs : Python n'est pas un langage typé.
    Dernière modification par gts2 ; 17/01/2025 à 06h41.

  13. #12
    Biname

    Re : Python : système d'équations différentielles liées

    Salut,
    L'IA a raison, on a juste pas compris le changement de variables
    Images attachées Images attachées  

  14. #13
    gts2

    Re : Python : système d'équations différentielles liées

    l'IA a peut-être changé d'avis entre temps mais la solution initialement proposée est :

    def system(t, y):
    y1, y2 = y # y1 = x, y2 = x'
    # Calculer N1
    N1 = A * y2 * np.cos(yl) + B * y2**2 * np.sin(yl) + C

    Donc clairement différent de ce qui est proposé ci-dessus.

  15. #14
    cmole

    Re : Python : système d'équations différentielles liées

    Bonjour à tous,

    Un grand merci pour tous pour vos retours et votre aide. Je vais me repencher un peu sur mon problème ce weekend, et ne manquerai pas de vous partager mon avancée !

  16. #15
    Biname

    Re : Python : système d'équations différentielles liées

    Citation Envoyé par gts2 Voir le message
    l'IA a peut-être changé d'avis entre temps mais la solution initialement proposée est :

    def system(t, y):
    y1, y2 = y # y1 = x, y2 = x'
    # Calculer N1
    N1 = A * y2 * np.cos(yl) + B * y2**2 * np.sin(yl) + C

    Donc clairement différent de ce qui est proposé ci-dessus.
    Oui. S'il me reste un chapeau, je vais le manger !

  17. #16
    Biname

    Re : Python : système d'équations différentielles liées

    Salut,
    Cette fois-ci, je lui ai demandé de réfléchir .
    Il a sorti x'' = y2' = F(A,..,I, y1) qui est une fraction dont D peut valoir 0. Je lui a demandé de faire l'étude pour D != 0
    On voit immédiatement que pour A = 0, D > 0, ce qui annule x'' dans N1=

    Soyons prudent : sauf erreursssss :
     Cliquez pour afficher

  18. #17
    JPL
    Responsable des forums

    Re : Python : système d'équations différentielles liées

    Il serait peut-être temps de laisser des neurone humains réfléchir ! Stop à l’IA maintenant
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  19. #18
    cmole

    Re : Python : système d'équations différentielles liées

    Bonsoir,

    Je voulais tous vous remercier pour votre aide sur ce sujet, j'ai réussi à résoudre mon problème ! J'ai suivi la méthode indiquée par gts2, et je dois dire que sa remarque
    il ne s'agit pas de "système d'équations différentielles" mais d'UNE équation différentielle donnée par un système.
    est plus que pertinente. Je m'en veux un peu de ne pas y avoir pensé tant ça me semble "logique" maintenant, j'y ferais attention la prochaine fois.

    Encore merci !

Discussions similaires

  1. Système d'équations différentielles
    Par livre dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 10/12/2020, 06h20
  2. équations différentielles couplées non linéaires (en Python)
    Par invite1acc3fb1 dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 31/05/2018, 17h25
  3. Système d'équations différentielles
    Par invite8c93f715 dans le forum Mathématiques du supérieur
    Réponses: 5
    Dernier message: 25/04/2012, 16h13
  4. système d'équations différentielles
    Par invite31253240 dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 24/05/2008, 10h13