Document de cours sur python et équation différentielle
Camille Chambon
INRA – EcoSys
Kfé Sciences du 17 juin 2016
1. Introduction sur les équations différentielles
2. Résolution numérique d'équations différentielles avec Python : la bibliothèque logicielle « SciPy.Integrate »
3. Application à la modélisation biologique du blé : le modèle à compartiments « CNWheat »
4. Pour se détendre
C'est quoi une équation différentielle ?
Relation entre une ou plusieurs fonctions inconnues et leurs dérivées.
Exemple : f ' (x)=3?f (x)?5 f (x) : fonction inconnue, f ' (x): sa dérivée.
Ça sert à quoi ?
Traduire, sous forme de modèles mathématiques, les lois qui régissent la variation de telle ou telle grandeur.
Exemple : position d'une navette spatiale, charge d'un condensateur électrique, concentration d'un produit lors d'une réaction chimique, effectif d'une population, etc.
Charge d'un condensateur
Décollage de la navette Discovery
Réaction de combustion du méthane
Evolution des populations de méduses
Ça veut dire quoi « résoudre une équation différentielle » ?
Chercher toutes les fonctions vérifiant l'équation différentielle proposée
Exemple: résoudre l'équationf ' (x)=3?f (x)?5
sur l'intervalle , c’est chercher toutes les fonctions I
f (x) dérivables sur et vérifiant pour I tout de :x I f ' (x)=3?f (x)?5
Comment fait-on pour résoudre les équations différentielles « classiques » ?
Équations différentielles dont les solutions peuvent être exprimées au moyen de fonctions élémentaires.
Résolution explicite
Exemple : solutions de sur : f ' (x)=3?f (x)?5 ?
f , avec constante.C
Comment fait-on pour résoudre les autres équations différentielles ?
Résolution numérique
Utilisation de méthodes permettant d'approcher numériquement les solutions.
Exemples de méthodes : Euler, Runge-Kutta, Newmark, différences finies, éléments finis.
2. Résolution numérique d'équations différentielles avec Python : la bibliothèque logicielle « SciPy.Integrate »C'est quoi SciPy ?
Ensemble de bibliothèquesPython à usage scientifique.
Environnement de travail similaire à Scilab, GNU Octave, Matlab, R.
Optimisation, algèbre linéaire, statistiques, traitement du signal, traitement d'images, etc.
Visualisation graphique avec matplotlib
Codée en C et Fortran Licence libre
2. Résolution numérique d'équations différentielles avec Python : la bibliothèque logicielle « SciPy.Integrate »
SciPy couplée à Matplotlib (diagramme de diffraction)
2. Résolution numérique d'équations différentielles avec Python : la bibliothèque logicielle « SciPy.Integrate »
C'est quoi « SciPy.Integrate » ?
Ensemble de routines pour l'intégration numérique de fonctions et de systèmes d'équationsdifférentielles
2. Résolution numérique d'équations différentielles avec Python : la bibliothèque logicielle « SciPy.Integrate »
Quels types d'équations différentielles peuton résoudre avec cette bibliothèque ?
Équations différentielles ordinaires du premier ordre, ou pouvant se ramener à un système d'équations différentielles ordinaires du premier ordre.
Trajectoire d'un boulet de canon
2. Résolution numérique d'équations différentielles avec Python : la bibliothèque logicielle « SciPy.Integrate »
Quels types d'équations différentielles NE peut-on PAS résoudre avec cette bibliothèque ?
Équations aux dérivées partielles (EDP).
Conduction thermique
Pour les EDP : voir bibliothèque fipy ( )
2. Résolution numérique d'équations différentielles avec Python : la bibliothèque logicielle « SciPy.Integrate »
Comment utiliser la bibliothèque SciPy.Integrate ?
Routine scipy.integrate.odeint( )
Exemple : , avec et y t=0..10 y(t=0)=1
>>> from scipy.integrate import odeint
>>> def rhs(y, t): # second membre de l'equa diff
… return -2*y
>>> t = np.linspace(0, 10, 100)
>>> y = odeint(rhs, 1, t) # solution
2. Résolution numérique d'équations différentielles avec Python : la bibliothèque logicielle
« SciPy.Integrate »
2. Résolution numérique d'équations différentielles avec Python : la bibliothèque logicielle « SciPy.Integrate »
Routine scipy.integrate.odeint( )
Utilise le solveur lsoda de la bibliothèque Fortran odepack
Pour plus d'informations : voir doc en ligne Autre routine plus générique : ( )
Voir documentation en ligne :
Présentation du modèle (d'après R.Barillot, iCROPM2016)
Modèle de Plante Structure-Fonction (FSPM)
Métabolisme Carbone-Azote dans le blé
Plante <=> organes interconnectés : racines, entre-nœuds, gaines, limbes, pédoncules, épis et grains
Structure de la plante (R.Barillot, iCROPM2016)
Présentation du modèle (suite)
Organe <=> ensemble de compartiments
Compartiments <=> concentrations de métabolites : fructanes, amidon, protéines, saccharose, acides aminés, nitrates.
Concentrations des métabolites varient en fonction de processus physiologiques
Processus physiologiques régis par concentrations de métabolites Interactions avec rétroactions entre les compartiments
Interactions entre les compartiments (R.Barillot, iCROPM2016)
Mise en équations du modèle
Interactions décrites par un système d'équations différentielles Calculer les concentrations à chaque pas de tempsc1,c2,,cm t <=> résoudre le système d'équations différentielles : ( )
avec un vecteur tel que , et c c(t)=[c1(t),c2(t),,cm(t)]
p1, p2,, pm les fonctions représentant les processus physiologiques.
Utilisation de SciPy.Integrate pour calculer les concentrations à un pas de temps donné
Création de la liste de conditions initiales c(t0)=[c1(t0),c2(t0),,cm(t0)] à partir de la valeur courante des concentrations de chaque métabolite.
dc dc dc dc
Définition d'une fonction , calculant les dérivées P=dtdt dt dt à partir d'un temps et de conditions initiales , tc(t) t?[t0,ti]
Appelle de la fonction scipy.integrate.odeint( ), avec :
en 1er argument la fonction , P
en 2d argument les conditions initiales ,c(t0)
et en 3e argument le temps auquel on veut calculer les concentrationsti
Quand le calcul est terminé, scipy.integrate.odeint( ) renvoie les concentrations aux temps et t0ti
Concentration des métabolites (R.Barillot, iCROPM2016)
Des renards et des lapins
Modèle proie-prédateur : dynamique de systèmes biologiques dans lesquels un prédateur et sa proie interagissent ()
avec :
u et des variables fonction du tempsv u nombre de lapins,
v nombre de renards,
et , , et des paramètres (constants) définissant la dynamique de la population : A B C D
A taux de reproduction des lapins quand il n'y a pas de renard, B taux de mortalité des lapins dû aux renards,
C taux de mortalité des renards quand il n'y a pas de lapin,
D taux de reproduction des renards en fonction des lapins rencontrés et mangés.
Des renards et des lapins (suite)
Modèle proie-prédateur : dynamique des populations de renards et de lapins
Une invasion de zombies (d'après ) avec :
s , et des variables fonction du temps :z rs : nombre de victimes potentielles, z : nombre de zombies,
r : nombre de personnes « tuées » par un zombie,
et , , , et des paramètres (constantes) définissant la dynamique de la population : P D B G A
P : taux de natalité de la population,
D: taux de mortalité de la population,
B : la probabilité qu'une personne vivante devienne un zombie,
G: la probabilité qu'une personne décédée soit ressuscitée en zombie,
A: la probabilité qu'un zombie soit « tué »
Modèle d'invasion de Zombies : dynamique des populations de vivants et de zombies
Des loups et des moutons
Modèle proie-prédateur (moutons et loups) de la bibliothèque NetLogo