Bonsoir,
Je suis nouveau sur Python et je rencontre beaucoup de difficultés à coder la méthode d’Euler explicite et implicite. Pourriez-vous me guider, je bloque totalement.
Merci d’avance,
Cordialement,
Théo.
Pièce jointe 580942
Bonsoir,
Je suis nouveau sur Python et je rencontre beaucoup de difficultés à coder la méthode d’Euler explicite et implicite. Pourriez-vous me guider, je bloque totalement.
Merci d’avance,
Cordialement,
Théo.
Pièce jointe 580942
Salut,
Navré, mais vous n'êtes pas sur le bon forum. Ici des gens aident à comprendre, guider et éventuellement corriger un bout de code de quelqu'un. Mais personne ne programme pour les autres. Enfin, sans doute que si, mais contre rémunération dans le cadre de leur travail.
Ne vous attendez pas à ce que quelqu'un fasse l'éxo pour vous. Urgent ou pas.
Par contre, si vous essayez vraiment, que vous galérez sur un point en particulier, un erreur ou un comportement de votre code que vous ne comprenez pas, vous obtiendrez certainement de l'aide.
J
Bonjour,
Serait-il possible de prendre attache avec un développeur pour bénéficier d’une aide plus accompagnée ?
Sinon je procèderai comme suggéré. Merci et désolé.
Demander une aide personnalisée avec un développeur ? Je ne crois pas que ça se fait.
Honnêtement, vous devriez vous lancez dans la réalisation de l'exercice. C'est vraiment basique. Je suis sûr que vous n'avez même pas essayé, sinon vous vous en rendriez compte. Il y a 4 fonctions à réaliser, et c'est deux fois les même avec une mini variante. Je ne sais pas quelle formation vous suivez, mais si vous séchez à ce niveau ça n'augure rien de bon.
Lancez vous.
En fait je suis un peu perdu avec le Euler_step et Mp_step. Je n’arrive pas à faire le lien avec mon Euler et Mp.
euler() appelle euler_step(). C'est une suite. Vous commencez avec y0, puis calculez y1, puis y2, etc... chaque y est le résultat de euler_step(). Montrez nous ce que vous avez déjà.
Du coup il suffit d’écrire pour Euler_step :
Merci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 def euler_step (y_old,dt) : y=y_old*(1+dt) return y
C'est bien ça. La version "midpoint" est quasi-identique. Il ne vous reste qu'à écrire la fonction euler(). Si vous avez du mal à voir dans quel ordre écrire tout ça, écrivez l'algorithme à la main :
- faire ceci
- faire cela
- si machin vaut truc faire cela
- ...
Une fois que cela vous semble bon, vous pouvez le traduire en code. Le tour est joué.
J
Pour Euler j’ai envie d’écrire :
Ensuite, pour illustrer la solution exacte et approchée via un graphe, je fais pour un dt=0.25 de la question 5 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 def Euler (t_max,dt) : Lt=[0] Ly=[1] while (Lt[-1] < t_max) : t=t[-1]+dt y=euler_step(Ly[-1],dt) Lt.append(t) Ly.append.(y) return Lt, Ly
L’ensemble est juste pour euler ? Je vais tenter mp maintenant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Lt, LY = euler(10, 0.25) plt.plot(Lt,LY, r, Lt, np.exp(Lt), b) plt.show()
Merci.
Utilisez la balise code (icône #) pour présenter votre code, ce sera plus lisible.
Vous avez tout: la boucle et la structure de stockage (la liste). Mais vous n'avez sans doute pas testé, car vous vous seriez aperçu d'un problème avec la variable t qui n'est pas définie. Vous faites t = t[-1] + dt. Vous vouliez sans doute dire t = Lt[-1] + dt et il y a un . de trop après un append.
Sinon ça fonctionne. Faire la même avec midpoint c'est du gâteau. Vous pouvez après comparer avec l'exponentiel :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 import math t = liste(range(0, t_max, 1)) y_exp = [math.exp(_t) for _t in t]
Voici mes résultats.
Cela me semble correct non ?
Savez-vous comment réduire la taille de la légende, en terme de cadre ou de police ?
Merci.
Concernant mon dernier message que j’ai modifié entre temps, j’ai apparemment bien modifié au vu de votre dernière réponse.
Pièce jointe 580992
J’obtiens une très bonne précision pour dt=0.001.
De plus, pour la question 6, il demande d’illustrer l’erreur pour Euler et mp en fonction des temps en log-log. Pour dt=0.001 quand je l’élève à la puissance 2 (question 7), j’obtiens une erreur de mp qui fait n’importe quoi, en plus de la compilation qui est longue. Est-ce logique ? Ou juste en rapport avec la puissance de compilation de mon iPad ?
Merci.
Pièce jointe 581010Pièce jointe 581011Pièce jointe 581012
Concernant l’erreur j’ai effectué cette différence, entre la valeur absolue de la différence entre ma liste de Y avec Euler ou Mp et exp(Lt) avec Lt ma liste des temps. Est-ce correct ? Mon échelle est en log en x et en y. Je reste septique concernant l’allure de mes courbes.
Merci.
Pièce jointe 581041
Bonjour, je n'arrive pas a acceder aux pieces jointes.
Mais peu importe, le but de votre code c'est de resoudre une equa-diff. Cette equa diff, elle vient surement pas de nul part, elle doit bien modeliser un vrai systeme physique? Une facon de verifier vos resultats c'est de vous poser la question: Est-ce que ces resultats ont un sens physique?
Par exemple, si vous modelisez un condo qui se decharge, vous pouvez regarder que pour 't' grand, le resultat tend vers 0.
Si vous modelisez un systeme qui oscille, assurer vous que quand vous tracez la courbe des vos resultats, elle oscille...
Idem ... Je n'ai pas accès aux pièces jointes ...?
Bonjour, chers tous excusez !
En effet , je viens de commencer a programmer Python.
Ainsi donc , j' éprouve des difficultés pour écrire le code python pour la méthode d'Euler implicite .
Pouvez-vous m'aider?
Bonjour ice.ik
Ce n'est pas un manque de volonté des membres de ce forum mais si vous nous donnez pas des informations plus précises, et que vous ne nous montrez pas le bout de code ou d'algorithme que vous avez tenté de mettre en œuvre. On ne pourra pas vous aider!![]()
Bonsoir, en effet , J'ai déjà trouvé une méthode pour écrire le code .
Merci pour l'attention.
Partager