Aller au contenu

Méthode de Heun


Chaka

Messages recommandés

Bonjour,
\(\left\{ \begin{array}{ll} y'(t)=y(t)\\ y(0)=1 \end{array} \right.\)
Cependant, ma méthode de Heun me fais du n'importe quoi (du moins son approximation devrait être bien plus proche de la solution théorique). Voyez-vous mon erreur dans le script 

def heun(fh,t0,tf,y0,N):
    y=[y0]
    t, pas=np.linspace(t0,tf,N+1), (tf-t0)/N
    
    #Initialisation
    k1=[fh(t[0],y[0])]
    k2=[fh(t[1],y[0]+pas*k1[0])]
    
    for i in range(N):
        k1.append(fh(t[i],y[i]))
        k2.append(fh(t[i+1],y[i]+pas*k1[i]))
        y.append(y[i]+pas*(k1[i]+k2[i])/2)

    return y

 (En pièce jointe le graphe comparatif des approximations de la solution: première capture pour 6 points, deuxième avec 21 points ). En effet Heun devrait être très proche de RK4 et être " plus précis " qu'Euler.
Merci pour vos retours

image.png

image.png

Lien vers le commentaire
Partager sur d’autres sites

  • E-Bahut

Bonjour,

J'ai essayé ton script, en rajoutant ce qu'il faut pour pouvoir l'exécuter et afficher la courbe. Dans le def heun, j'ai du mettre return t,y mais c'est annexe.

A priori, je ne vois donc pas d'erreur. Par contre, comme je n'ai pas étudié de près les différentes méthodes, je ne sais pas laquelle doit donner les meilleurs résultats. Je sais juste qu'en principe, on recommande RK4.

Bon, si on augmente suffisamment la valeur de N, on finit par rendre indiscernable les courbes obtenues avec heun et la courbe théorique, mais je ne pense pas que cela résolve ton problème. Essaie de voir sur la toile, il y a peut-être des forums qui traitent de cela.

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,
Merci pour ton retour.
On est censé trouvé que les méthodes d'ordre 1 (Euler) sont les moins précises, celle d'ordre 2 (Heun) un peu plus et celle d'ordre 4 le plus précis (RK4)

Je vais chercher sur le web.
Bonne soirée

Lien vers le commentaire
Partager sur d’autres sites

  • E-Bahut
il y a 8 minutes, Chaka a dit :

Je vais chercher sur le web.

Je pense que c'est la meilleure solution. Sur ce site, on est quelques-un à bidouiller avec Python (ou avec d'autres logiciels de programmation) mais je n'ai, jusqu'à présent, pas vu de réponses d'intervenants vraiment au top (mais je ne suis pas là depuis le début). Si je me trompe, qu'ils se manifestent !

La difficulté est aussi d'adapter la démarche de la programmation à celle du concept mathématique que l'on veut étudier.

Bon courage !

 

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois plus tard...

Bonjour,

Trop tard mais j'ai fait avec ! 
J'ai fait un compte rendu sur ces différentes méthodes et sur l'attracteur de newton si cela en intéresse certains (même si des équivalents sont trouvables facilement sur internet).

Bien cordialement. 

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

Chargement
×
×
  • Créer...
spam filtering
spam filtering