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é...
-----