TD équations différentielles

Download Report

Transcript TD équations différentielles

TD Python
TD équations différentielles
Initialisation
MP*
On définit alors un vecteur VE à N dimensions :


On charge les modules de calculs, avec l’instruction de diagonalisation
de matrices, eigh. Cette instruction renvoie la liste des valeurs propres
et la matrice des vecteurs propres en colonne.
import numpy as np
import matplotlib.pyplot as plt
from scipy.linalg import eigh
VE =
















Ψ0 



... 



.
Ψi 



... 



ΨN −1
1. Discrétiser la dérivée première
dΨE
d2 ΨE
puis la dérivée seconde
.
dx
dx2
2. En déduire que l’équation de Schrödinger discrétisée s’écrit :
Équation de Schrödinger discrétisée
−αΨi−1 + βi Ψi − αΨi+1 = EΨi ,
où l’on donnera l’expression de α et des βi .
Soit l’équation de Schrödinger d’un état stationnaire d’énergie E :
−
~2 d2 ΨE
+ V (x)ΨE (x) = EΨE (x).
2m dx2
On se propose de résoudre numériquement cette équation grâce à une
discrétisation de la fonction d’onde sur un intervalle de la variable x.
Soit x ∈ [−L/2, L/2]. L’intervalle de longueur L est discrétisé en N − 1
L
intervalles de longueur ∆x =
. Les N valeurs discrètes de x sont
N −1
L
ainsi xi = − + i ∆x, i ∈ [0, N − 1].
2
La discrétisation de la fonction d’onde ainsi que du potentiel s’en déduit,
par Ψi = ΨE (xi ) et Vi = V (xi ).
3. En déduire qu’il existe une matrice A telle que A VE = E VE . On
exprimera les éléments aij de A en fonction de α et βi .
E apparaît comme une valeur propre de la matrice A, associée au
vecteur propre VE .
1
4. On considère le potentiel harmonique V (x) = mω02 x2 . Montrer
2
r
mω0
2E
qu’en posant
x = X et
= ε, l’équation de Schrödinger
~
~ω0
devient :
d2 ΨE
+ X 2 ΨE (X) = εΨE (X).
−
dX 2
Quelles sont les dimensions de X et de ε ?
5. En déduire les expressions de α et βi dans ce cas.
1
TD Python
TD équations différentielles
Résolution numérique
MP*
Méthode d’Euler
En Python :
1. Choisir (judicieusement) la longueur de l’intervalle L et le nombre
d’échantillons N .
2. Créer la matrice A(N, N ) vide.
3. Remplir la matrice avec les coefficients aij .
4. Calculer les N valeurs propres et tracer la densité de probabilité de
quelques fonctions d’ondes propres.
5. La résolution
montre que les valeurs propres de l’énergie sont
exacte
1
+ n , n ∈ N. Qu’en pensez-vous ?
En = ~ω0
2
Il existe une unique solution y, de classe C 1 sur [a, b], telle que
y 0 (t) = F (t, y(t)) et y(a) donné, pour t ∈ [a, b]. On cherche à
approcher la solution y à partir d’une discrétisation de l’intervalle [a, b].
b−a
On pose h =
, où N est un entier et h le pas, que l’on cherche le
N
plus petit possible afin d’obtenir une meilleure approximation de y. On
obtient ainsi une liste des tk = a + kh, k ∈ [0, ..., N ].
La méthode d’Euler consiste à calculer successivement les valeurs approchées yk de y selon le schéma suivant :
y0 = y(a),
yk+1 = yk + hF (tk , yk ).
1. Écrire une fonction calculant les N + 1 valeurs yk :
def euler(F, t0, y0, t1, n):
...
return la liste des yk
2. Tester la fonction précédente sur [0, 1] avec l’équation y 0 = y et la
condition initiale y(0) = 1 pour différentes valeurs de N .
3. Représenter sur un même graphe la solution approchée et la
solution exacte ( !) pour différentes valeurs de N .
2
TD Python
TD équations différentielles
MP*
On peut généraliser la méthode précédente à la résolution approchée
d’une équation différentielle du second ordre y 00 = f (t, y, y 0 ).
Pour cela, on forme le vecteur (tableau en Python) Y = [y, y 0 ]. Il en
résulte que Y 0 = [y 0 , y 00 = f (t, y, y 0 )].
On peut considérer la suite des Yk , k ∈ [0, ..., N ] de la façon suivante :
Y0 = [y(a), y 0 (a)],
Yk+1 = Yk + h [Yk [1], f (tk , Yk [0], Yk [1])] .
Il suffit donc, pour utiliser la fonction euler, définir la fonction F sous la
forme :
def F(t,y):
[y1,y2]=y
return np.array([y2,f(t,y1,y2)])
1. Utiliser l’algorithme précédent pour tracer la résolution approchée
de l’équation y 00 = −y entre [0, 4π] avec y(0) = 0 et y 0 (0) = 1.
Comparer à la solution exacte.
2. Même question pour l’équation y 00 = y 0 + 6y, avec y(0) = −1 et
y 0 (0) = 2. Résoudre sans machine puis sur machine, pour l’intervalle
[0, 10] puis [0, 20]. Commentaires ?
3