Programmation 2
Programmation 2
Bonjour,
C'est de nouveau Emilie, avec des questions de programmation en Python.
J'ai un autre travail ici : https://www.cjoint.com/data/JLFoEuZoAZO_équationbis.png
Pourriez-vous m'aider à programmer la méthode d'Euler ?
Surtout, comment peut-on faire calculer les coefficients à Python ? Faut-il créer une liste ?
Merci vraiment de l'aide et belle Saint Sylvestre !
C'est de nouveau Emilie, avec des questions de programmation en Python.
J'ai un autre travail ici : https://www.cjoint.com/data/JLFoEuZoAZO_équationbis.png
Pourriez-vous m'aider à programmer la méthode d'Euler ?
Surtout, comment peut-on faire calculer les coefficients à Python ? Faut-il créer une liste ?
Merci vraiment de l'aide et belle Saint Sylvestre !
-
- Messages : 10354
- Enregistré le : lun. 30 août 2010 11:15
Re: Programmation 2
Bonjour,
tu trouveras sur le web de très bonnes explications pour la méthode d'Euler comme : https://www.normalesup.org/~glafon/eiff ... erique.pdf
Si tu dois seulement utiliser le principe de la méthode d'Euler, il existe une fonction toute faite du module scipy : odeint.
Voir : https://apmonitor.com/pdc/index.php/Mai ... lEquations
Bonne continuation
tu trouveras sur le web de très bonnes explications pour la méthode d'Euler comme : https://www.normalesup.org/~glafon/eiff ... erique.pdf
Si tu dois seulement utiliser le principe de la méthode d'Euler, il existe une fonction toute faite du module scipy : odeint.
Voir : https://apmonitor.com/pdc/index.php/Mai ... lEquations
Bonne continuation
Re: Programmation 2
merci grâce aux PDF j'ai compris.
Aujourd'hui notre prof nous a donner en cours une correction pour la méthode d'Euler et pour la méthode de Runge Ketta 4. Il paraît qu'il a pris ça d'un livre.
Il a donné ça pour la méthode d'Euler :
Et pour la méthode de Runge Ketta 4 :
Ensuite il y a deux exercices que je bloque dessus.
Je les ai mis ici : https://www.cjoint.com/data/KAfcIVZuecf ... python.png
Dans l'exercice 1, comment appeler les fonctions que j'ai données juste au-dessus ? Comment je peux les utiliser avec la question 1 de cet exo 1 ?
par exemple t appartient à [0;1,5], mais du coup on prend t égal à combien dans la question 1 ? Et x0 c'est combien ?
Pourreiz-vous m'expliquer tout cela svp ? Que mettre dans les arguments des deux fonctions ?
merci énormément de l'aide apportée !
Aujourd'hui notre prof nous a donner en cours une correction pour la méthode d'Euler et pour la méthode de Runge Ketta 4. Il paraît qu'il a pris ça d'un livre.
Il a donné ça pour la méthode d'Euler :
Code : Tout sélectionner
import numpy as np
import matplotlib.pyplot as np
def eulerExpl (f,t0,y0,tf,N):
h =(tf-t0)/N
# definition du pas fixe
# sinon h=t[i+1]-t[i]
Ly,Lt=[y0],[t0]
stockage du point initial
for k in range (N):
# A la limite Lt peut etre donne ailleurs
# prevoir que y0 peut etre vectoriel
y0 = y0 + h*np.array(f(t0,y0))
t0 += h
Ly.append(y)
Lt.append(t0)
return np.array(Lt),np.array(Ly)
Code : Tout sélectionner
import numpy as np
def rungeKutta4(dXdt,X0,t):
"""
Entrees :
t : contient les points de la subdivision
X0 : les conditions initiales
dXdt : la fonction connue
Sorties :
X : Solutions approchees aux points de t
"""
n = len(t)
X = np.zeros((len(t),)+ np.shape(X0)) # on construit une matrice de 0
X[0]=X0 # stocker les valeurs initiales
for i in range (n-1):
k1=dXdt(X[i],t[i]) # k1=f(y,t)
h=(t[i+1]-t[i])/2
k2=dX_dt(X[i]+h*k1,t[i]+h)
k3=dX_dt(X[i]+h*k2,t[i]+h)
k4=dX_dt(X[i]+2*h*k3,t[i]+2*h)
X[i+1]=X[i]+h/3*(k1+2*k2+2*k3+k4)# on a deja divise h par 2
return(X)
Je les ai mis ici : https://www.cjoint.com/data/KAfcIVZuecf ... python.png
Dans l'exercice 1, comment appeler les fonctions que j'ai données juste au-dessus ? Comment je peux les utiliser avec la question 1 de cet exo 1 ?
par exemple t appartient à [0;1,5], mais du coup on prend t égal à combien dans la question 1 ? Et x0 c'est combien ?
Pourreiz-vous m'expliquer tout cela svp ? Que mettre dans les arguments des deux fonctions ?
merci énormément de l'aide apportée !
-
- Messages : 10354
- Enregistré le : lun. 30 août 2010 11:15
Re: Programmation 2
Bonjour,
tes fonctions renvoient des valeurs approchées des solutions aux points de la subdivision.
Il s'agit donc de calculer l'erreur relative commise entre les différentes solutions, en calculant par exemple la somme des valeurs absolues des différences \(X[j]-Y[j]\) au point de la subdivision.
Je te laisse chercher car j'ai tout de même l'impression de tout faire et ce n'est pas l'esprit du forum.
Bonne continuation
tes fonctions renvoient des valeurs approchées des solutions aux points de la subdivision.
Il s'agit donc de calculer l'erreur relative commise entre les différentes solutions, en calculant par exemple la somme des valeurs absolues des différences \(X[j]-Y[j]\) au point de la subdivision.
Je te laisse chercher car j'ai tout de même l'impression de tout faire et ce n'est pas l'esprit du forum.
Bonne continuation
Re: Programmation 2
d'accord
l'erreur relative c'est la fonction erf ou c'est quelque chose déjà construit par Python qu'on appelle avec from ?
merci beaucoup
l'erreur relative c'est la fonction erf ou c'est quelque chose déjà construit par Python qu'on appelle avec from ?
merci beaucoup
-
- Messages : 10354
- Enregistré le : lun. 30 août 2010 11:15
Re: Programmation 2
Bonjour,
non erf c'est une fonction bien spéciale en mathématiques, qui n'a pas grand chose à voir avec ta situation : https://fr.wikipedia.org/wiki/Fonction_d%27erreur
L'erreur relative serait plutôt cela : https://lexique.netmath.ca/erreur-relative/
et il faut que tu fasses la somme des erreurs aux points de comparaison (points de la subdivision).
Bonne continuation
non erf c'est une fonction bien spéciale en mathématiques, qui n'a pas grand chose à voir avec ta situation : https://fr.wikipedia.org/wiki/Fonction_d%27erreur
L'erreur relative serait plutôt cela : https://lexique.netmath.ca/erreur-relative/
et il faut que tu fasses la somme des erreurs aux points de comparaison (points de la subdivision).
Bonne continuation
Re: Programmation 2
Donc si j'ai bien compris l'erreur relative c'est la valeur absolue des différences X[j]−Y[j] au point de la subdivision ?
Mais ensuite on doit sommer quoi ?
Je crois que je m'embrouille là....
Mais ensuite on doit sommer quoi ?
Je crois que je m'embrouille là....
-
- Messages : 10354
- Enregistré le : lun. 30 août 2010 11:15
Re: Programmation 2
Tu dois faire la somme des valeurs absolues à des écarts de chaque différence : |X[0]-Y[0]|+|X[1]-Y[1]|+|X[2]-Y[2]|+.....
Bonne continuation
Bonne continuation
Re: Programmation 2
OK merci je comprends mieux !
Normalement le code que j'ai écrit en dessous permet de faire ça ? Est-ce juste ?
Normalement le code que j'ai écrit en dessous permet de faire ça ? Est-ce juste ?
Code : Tout sélectionner
liste=[abs(X[i]-Y[i]) for i in range (n)]
def somme(liste):
somme = 0
for i in liste:
somme = somme + i
return somme
-
- Messages : 10354
- Enregistré le : lun. 30 août 2010 11:15
Re: Programmation 2
Tu sommes les indices pas les valeurs des termes de la liste : il faut ajouter l'élément de la liste d'indice j (liste[j]).
Par ailleurs si tu veux mesurer l'erreur relative de Y par rapport à X, il faut plutôt calculer abs(((X[j]-Y[j])/X[j]) : le quotient par X[j] permet de mesurer l'importance relative de l'écart par rapport à la valeur attendue
Bonne continuation
Par ailleurs si tu veux mesurer l'erreur relative de Y par rapport à X, il faut plutôt calculer abs(((X[j]-Y[j])/X[j]) : le quotient par X[j] permet de mesurer l'importance relative de l'écart par rapport à la valeur attendue
Code : Tout sélectionner
def somme(liste):
somme = 0
for i in liste:
somme = somme + liste[i] # on ajoute liste[i] pas i
return somme
Re: Programmation 2
liste=[abs(((X[j]-Y[j])/X[j]) for i in range (n)]
def somme(liste):
somme = 0
for i in liste:
somme = somme + liste
return somme
Ca ça fonctionnerait ou pas ?
Je comprends pas trop pourquoi c'est liste et pas juste i, car j'ai mis for i in liste ?
Vous pourriez m'expliquer svp ?
-
- Messages : 10354
- Enregistré le : lun. 30 août 2010 11:15
Re: Programmation 2
Pardon, j'avais mal lu. Tu as raison.
Cela fonctionne, mais évite d'utiliser la lettre i qui est réservée habituellement aux indices.
Prends plutôt un nom de variable var ou elt afin que ce soit plus clair :
Avec mes excuses.
Cela fonctionne, mais évite d'utiliser la lettre i qui est réservée habituellement aux indices.
Prends plutôt un nom de variable var ou elt afin que ce soit plus clair :
Code : Tout sélectionner
def somme(liste):
somme = 0
for elt in liste:
somme = somme + elt
return somme
Re: Programmation 2
Pas de problème, vous m'aidez beaucoup, une erreur peut arriver !
Donc je récapitule :
Est-ce que tout est correct maintenant ?
Donc je récapitule :
Code : Tout sélectionner
liste=[abs(((X[j]-Y[j])/X[j]) for i in range (n)]
def somme(liste):
somme = 0
for elt in liste:
somme = somme + elt
return somme
-
- Messages : 10354
- Enregistré le : lun. 30 août 2010 11:15
Re: Programmation 2
Bonjour,
Dans ta liste, il faut écrire : for j in range(len(X) car la variable n n’est pas connue et tu utilises j comme indice de tes listes.
Sinon, cela me semble correct : il n’y a qu’un moyen de le vérifier c’est d’exécuter le programme.
Bonne application
Dans ta liste, il faut écrire : for j in range(len(X) car la variable n n’est pas connue et tu utilises j comme indice de tes listes.
Sinon, cela me semble correct : il n’y a qu’un moyen de le vérifier c’est d’exécuter le programme.
Bonne application
Re: Programmation 2
Merci beaucoup !
Mais du coup quand j'exécute ça :
Python tourne sans s'arrêter, je n'obtiens jamais de résultat...
Est-ce pareil avec vous ?
Mais du coup quand j'exécute ça :
Code : Tout sélectionner
liste=[abs(((X[j]-Y[j])/X[j]) for j in range (len(X))]
def somme(liste):
somme = 0
for elt in liste:
somme = somme + elt
return somme
Est-ce pareil avec vous ?