Poly - Sites de PE LEROY

Initiation à la simulation numérique
Introduction aux bases de données
Cours d’informatique de PCSI
Lycée Brizeux, Quimper
P.E LEROY
3 décembre 2014
Lycée Brizeux (Quimper)
PCSI
Cours d’informatique
Table des matières
Avant-propos
4
Simulation numérique
5
Introduction
Carte des cartes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
5
6
Résolution d’une équation algébrique ou transcendante
Position du problème . . . . . . . . . . . . . . . . . . .
Méthode de la dichotomie (ou de la bissection) . . . .
Méthode de Newton (ou de Newton-Raphson) . . . . .
Autres méthodes (hors programme) . . . . . . . . . . .
Applicabilité de ces méthodes . . . . . . . . . . . . . .
Et en utilisant les bibliothèques de Python ? . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7
7
8
10
12
14
15
Résolution d’un système inversible
Position du problème . . . . . . . . . . . . . . . . . . . . . . . .
Méthode de Gauss (ou méthode d’élimination de Gauss-Jordan)
Autres méthodes (hors programme) : méthodes itératives . . . .
Et en utilisant les bibiothèques de Python ? . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
17
17
18
21
22
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Le tracé de courbes
24
Résolution d’équations différentielles ordinaires
Position du problème . . . . . . . . . . . . . .
Méthode d’Euler explicite . . . . . . . . . . .
Méthode d’Euler implicite . . . . . . . . . . .
Méthode d’Euler centrée . . . . . . . . . . . .
Stabilité des méthodes d’Euler . . . . . . . .
Autres méthodes (hors programme) . . . . . .
Et pour les ODE d’ordre 2 ? . . . . . . . . . .
Et en utilisant les bibiothèques de Python ? .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
26
26
27
30
32
33
34
36
37
Intégration
39
Dérivation (hors programme)
41
Interpolation (hors programme)
43
Ajustement ou « fit » (hors programme)
45
Bases de données
47
Introduction
Carte des cartes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
47
48
L’algèbre relationnelle : l’ADN de la gestion des BD
49
Premiers pas avec une BD
50
–2–
P.E LEROY
Lycée Brizeux (Quimper)
PCSI
Cours d’informatique
Interagir avec une BD
52
Recherches sélectives dans une BD
54
Bibliographie
55
–3–
P.E LEROY
Lycée Brizeux (Quimper)
PCSI
Cours d’informatique
Avant-propos
Ce fascicule comporte l’ensemble des cartes mentales présentées en cours d’informatique durant le
second semestre de première année PCSI au lycée Brizeux à Quimper.
Ce cours est une initiation aux méthodes de base de la simulation numérique, ainsi qu’une introduction
aux bases de données. L’analyse numérique et l’algèbre relationelle, qui sous-tendent ces deux domaines
de l’informatique, sont abordés ici très succintement dans un but uniquement opérationnel. Le langage
choisi pour illustrer ces notions est le Python, dans sa version 3.
Les cartes mentales, utilisées comme support de pésentation, ont pour originalité de présenter les
notions de manière éclatée, et non linéaire comme dans un cours classique. Elles permettent de relier
efficacement les notions entre elles, et d’avoir en permanence une vue globale de l’ensemble des notions
abordées.
Elles s’utilisent donc comme des aides à la prise de note, permettant ainsi aisément de les compléter
et de les agrémenter.
Ces cartes sont régulièrement mises à jour, complétées et corrigées, n’hésitez pas à me signaler toute
erreur. Vous pouvez télécharger la dernière version sur mon blog http://cpge-pel.blogspot.fr/.
Je vous souhaite bon apprentissage !
Pierre-Emmanuel LEROY
Professeur de Physique en PCSI
Lycée Brizeux, Quimper
[email protected]
http://cpge-pel.blogspot.fr/
–4–
P.E LEROY
–5–
–6–
–7–
–8–
Lycée Brizeux (Quimper)
PCSI
1
3
#
#
#
#
Cours d’informatique
Recherche par dichotomie du zero d ’ une fonction continue et monotone
f est la fonction
a et b definissent l ’ intervalle de recherche
p definit la precision attendue pour le resultat
5
7
9
11
13
def recherche_dicho (f ,a ,b , p ) :
if f ( a ) * f ( b ) >0:
return ( ’ La fonction ne presente pas de solution dans l \ ’ intervalle defini ’)
while b -a > p :
if f ( a ) * f (( a + b ) /2) <0:
b =( a + b ) /2
else :
a =( a + b ) /2
return ( a )
15
19
fx = lambda x : x **2 -4
a0 =1
b0 =4
pr =10**( -6)
21
print ( recherche_dicho ( fx , a0 , b0 , pr ) )
17
../cartes_mentales/equation_dichotomie.py
1
3
#
#
#
#
Recherche par dichotomie du zero d ’ une fonction continue et monotone
f est la fonction
a et b definissent l ’ intervalle de recherche
p definit la precision attendue pour le resultat
5
7
9
11
13
15
17
19
def recherche_dicho (f ,a ,b , p ) :
if f ( a ) * f ( b ) >0:
return ( ’ La fonction ne presente pas de solution dans l \ ’ intervalle defini ’)
if f ( a ) ==0:
return ( a )
if f ( b ) ==0:
return ( b )
while b -a > p :
if f (( a + b ) /2) ==0:
return (( a + b ) /2)
if f ( a ) * f (( a + b ) /2) <0:
b =( a + b ) /2
else :
a =( a + b ) /2
return ( a )
21
25
fx = lambda x : x **2 -4
a0 =1
b0 =3
pr =10**( -6)
27
print ( recherche_dicho ( fx , a0 , b0 , pr ) )
23
../cartes_mentales/equation_dichotomie3.py
–9–
P.E LEROY
– 10 –
Lycée Brizeux (Quimper)
PCSI
1
3
#
#
#
#
Cours d’informatique
Recherche par la methode de Newton du zero d ’ une fonction continue et monotone
f est la fonction , f ’ sa derivee
x0 est l ’ estimation de la solution
p definit la precision attendue pour le resultat
5
7
9
11
13
15
def recherche_newton (f , fp ,x , p ) :
while abs ( f ( x ) / fp ( x ) ) >p :
if fp ( x ) ==0:
return ( ’ La derivee de la fonction s \ ’ annule entre l \ ’ estimation et la solution ’
)
x =x - f ( x ) / fp ( x )
return x
fx = lambda x : x **2 -4
fpx = lambda x :2* x
x0 =1
pr =10**( -6)
17
print ( recherche_newton ( fx , fpx , x0 , pr ) )
../cartes_mentales/equation_newton.py
2
4
6
8
10
12
14
16
18
#
#
#
#
Recherche par la methode de Newton du zero d ’ une fonction continue et monotone
f est la fonction , f ’ sa derivee
x0 est l ’ estimation de la solution
p definit la precision attendue pour le resultat
def recherche_newton (f , fp ,x , p ) :
k =0
while abs ( f ( x ) / fp ( x ) ) >p :
if fp ( x ) ==0:
return ( ’ La derivee de la fonction s \ ’ annule entre l \ ’ estimation et la solution ’
)
x =x - f ( x ) / fp ( x )
k +=1
print ( ’ Effectue en ’ ,k , ’ etapes ’)
return x
fx = lambda x : x **2 -4
fpx = lambda x :2* x
x0 =1
pr =10**( -6)
20
print ( recherche_newton ( fx , fpx , x0 , pr ) )
../cartes_mentales/equation_newton2.py
– 11 –
P.E LEROY
– 12 –
Lycée Brizeux (Quimper)
PCSI
1
3
5
7
9
11
13
15
17
Cours d’informatique
def r ec he rch e_posfauss (f ,a ,b , p ) :
if f ( a ) * f ( b ) >0:
return ( ’ La fonction ne presente pas de solution dans l \ ’ intervalle defini ’)
xi_ancien = a
xi =( a * f ( b ) -b * f ( a ) ) /( f ( b ) -f ( a ) )
while abs ( xi - xi_ancien ) >p :
if f ( a ) * f ( xi ) <0:
b = xi
else :
a = xi
xi_ancien = xi
xi =( a * f ( b ) -b * f ( a ) ) /( f ( b ) -f ( a ) )
return ( xi )
fx = lambda x : x **2 -4
a0 =1
b0 =3
pr =10**( -6)
19
print ( re che rche_posfauss ( fx , a0 , b0 , pr ) )
../cartes_mentales/equation_position_fausse.py
– 13 –
P.E LEROY
– 14 –
– 15 –
Lycée Brizeux (Quimper)
PCSI
1
3
Cours d’informatique
# Zeros d ’ une fonction
import scipy . optimize as op
fx = lambda x : x **2 -4
print ( op . bisect ( fx ,1 ,4 , xtol =10**( -6) ) )
5
7
9
11
13
15
17
import scipy . optimize as op
fx = lambda x : x **2 -4
fpx = lambda x :2* x
print ( op . newton ( fx ,1 , fpx , tol =10**( -6) ) )
import scipy as sp
p = sp . poly1d ([1 ,0 , -4])
print ( sp . roots ( p ) )
# from sympy . solvers import solve
# from sympy import Symbol
# x = Symbol ( ’ x ’)
# solve ( x **2 -4 , x )
../cartes_mentales/equation_bibliotheques_python.py
– 16 –
P.E LEROY
– 17 –
– 18 –
Lycée Brizeux (Quimper)
PCSI
Cours d’informatique
2
# Programme permettant la resolution d ’ un systeme lineaire a . x = b par la
# methode de Gauss ( ou methode d ’ elimination de Gauss - Jordan )
4
import scipy as sp
6
a = sp . array ([[1 ,5 ,6] ,[2 ,5 ,6] ,[4 ,6 ,7]] , float )
b = sp . array ([[2] ,[5] ,[7]] , float )
x = sp . array ([[0] ,[0] ,[0]] , float )
8
10
n = len ( a )
12
for k in range ( n ) : # Parcours des lignes
akk = a [k , k ] # Valeur du pivot de la ligne k
for j in range ( n ) : # Mise a la valeur 1 du pivot de la ligne k ( incidence sur la
ligne entiere )
a [k , j ]= a [k , j ]/ akk
b [k ,0]= b [k ,0]/ akk # Repercussion sur la matrice b
14
16
18
20
22
24
26
28
30
for i in range ( k +1 , n ) : # Parcours des lignes
aik = a [i , k ] # Valeur du coefficient de la ligne i
for j in range ( n ) : # Elimination du coefficient sous - pivot de la ligne i
a [i , j ]= a [i , j ] - aik * a [k , j ]
b [i ,0]= b [i ,0] - aik * b [k ,0] # Repercussion sur la matrice b
x [n -1 ,0]= b [n -1 ,0] # Calcul des solutions , la premiere correspond a la derniere ligne
de la matrice b
for k in range (n -1) :
x [n -2 -k ,0]= b [n -2 -k ,0]
for i in range ( k +1) :
x [n -2 -k ,0]= x [n -2 -k ,0] - a [n -2 -k ,n -1 - i ]* x [n -1 -i ,0]
print ( " Solutions trouvees : " )
print ( x )
../cartes_mentales/pivot_gauss.py
– 19 –
P.E LEROY
Lycée Brizeux (Quimper)
PCSI
1
Cours d’informatique
# Programme permettant la resolution d ’ un systeme lineaire a . x = b par la
# methode de Gauss ( ou methode d ’ elimination de Gauss - Jordan )
3
import scipy as sp
5
7
a = sp . array ([[1 ,5 ,6] ,[2 ,5 ,6] ,[4 ,6 ,7]] , float )
b = sp . array ([[2] ,[5] ,[7]] , float )
x = sp . array ([[0] ,[0] ,[0]] , float )
9
n = len ( a ) # Dimension de la matrice ( nombre de lignes )
11
13
15
17
19
21
23
25
def p er mu tat ion_lignes (i , k ) : # Fonction permettant la permutation de deux lignes
for j in range ( n ) :
a [i , j ] , a [k , j ]= a [k , j ] , a [i , j ]
b [i ,0] , b [k ,0]= b [k ,0] , b [i ,0]
def zeros_sous_pivot ( k ) : # Fonction permettant de faire apparaitre des zeros sous le
pivot
akk = a [k , k ]
for j in range ( n ) :
a [k , j ]= a [k , j ]/ akk
b [k ,0]= b [k ,0]/ akk
for i in range ( k +1 , n ) :
aik = a [i , k ]
for j in range ( n ) :
a [i , j ]= a [i , j ] - aik * a [k , j ]
b [i ,0]= b [i ,0] - aik * b [k ,0]
27
29
31
33
35
37
39
41
43
45
47
49
def calcul_solutions () : # Fonction permettant le calcul des solutions
x [n -1 ,0]= b [n -1 ,0]
for k in range (n -1) :
x [n -2 -k ,0]= b [n -2 -k ,0]
for i in range ( k +1) :
x [n -2 -k ,0]= x [n -2 -k ,0] - a [n -2 -k ,n -1 - i ]* x [n -1 -i ,0]
def recherche_pivot ( k ) :
for i in range ( k +1 , n ) :
if a [i , k ]!=0:
return (i , True )
return (i , False ) # Retourner i ne sert ici a rien , puisqu ’ aucun pivot n ’a ete
trouve
def tria ngularisation () : # Fonction permettant de transformer la matrice en matrice
triangulaire superieure
for k in range ( n ) :
if a [k , k ]==0:
ligne_pivot , trouve_pivot = recherche_pivot ( k )
if trouve_pivot == True :
permutation_lignes ( ligne_pivot , k )
else :
return ( False )
zeros_sous_pivot ( k )
return ( True )
51
53
55
57
59
res_triang = triangularisation ()
if res_triang == True :
print ( " Solutions trouvees : " )
calcul_solutions ()
print ( x )
else :
print ( " Systeme sans solutions ! " )
../cartes_mentales/pivot_gauss5.py
– 20 –
P.E LEROY
– 21 –
– 22 –
Lycée Brizeux (Quimper)
PCSI
1
3
5
7
9
11
13
15
17
19
Cours d’informatique
# Resolution d ’ un systeme lineaire inversible
import scipy . linalg as spl
import scipy as sp
A = sp . array ([[1 ,5 ,6] ,[2 ,5 ,6] ,[4 ,6 ,7]])
b = sp . array ([[2] ,[5] ,[7]])
x = spl . solve (A , b )
print ( x )
print ( A . dot ( spl . solve (A , b ) ) -b ) # Pour voir la precision de la methode ...
x2 = spl . inv ( A ) . dot ( b )
print ( x2 )
print ( A . dot ( spl . inv ( A ) . dot ( b ) ) -b ) # Pour comparer la precision de la methode ...
# import sympy as sp
# A = sp . Matrix ([[1 ,5 ,6] ,[2 ,5 ,6] ,[4 ,6 ,7]])
# b = sp . Matrix ([[2] ,[5] ,[7]])
# print ( A . LUsolve ( b ) )
# print ( A * A . LUsolve ( b ) -b ) # Pour comparer la precision de la methode ...
../cartes_mentales/systeme_lineaire_bibliotheques_python.py
– 23 –
P.E LEROY
– 24 –
Lycée Brizeux (Quimper)
PCSI
1
Cours d’informatique
import scipy as sp
import matplotlib . pyplot as plt
3
5
7
x = sp . arange (1 ,4 ,0.1) # Va creer une liste de nombres entre 1 et 4 separes de 0.1
# x = sp . linspace (1 ,4 ,40) # Va creer une liste de 40 nombres entre 1 et 4
fx = x **2 -4
plt . plot (x , fx )
plt . show ()
9
11
13
plt . plot (x , fx , color = ’ red ’ , marker = ’+ ’)
plt . title ( ’ Representation de $f ( x ) = x ^2 -4 $ ’) # Matplotlib comprend le LaTeX !
plt . xlabel ( ’x ’)
plt . ylabel ( ’y = f ( x ) ’)
plt . show ()
15
17
19
gx = x **2+4
plt . plot (x , fx ,x , gx )
plt . title ( ’ Representation de $f ( x ) $ et de $g ( x ) $ ’)
plt . legend (( ’ $f ( x ) = x ^2 -4 $ ’ , ’ $g ( x ) = x ^2+4 $ ’) )
plt . show ()
../cartes_mentales/trace_courbes.py
– 25 –
P.E LEROY
– 26 –
– 27 –
Lycée Brizeux (Quimper)
PCSI
2
4
6
8
#
#
#
#
#
#
Cours d’informatique
Resolution d ’ une equation differentielle du premier ordre de la forme du / dt = f ( u )
u est la fonction solution de l ’ equation differentielle
f est la fonction qui designe le second membre
N designe le nombre d ’ iteration de la methode
p designe le pas de discretisation de la methode
DT = N * p designe la duree sur laquelle on modelise le phenomene
import scipy as sp
import matplotlib . pyplot as plt
10
12
14
16
18
20
22
24
def euler_explicite (f , u0 ,p , N ) :
s =[ u0 ] # La liste s va contenir les valeurs de la fonction solution u ( t )
k =0
while k < N :
s . append ( s [ k ]+ p * f ( s [ k ]) )
#
s +=[ s [ k ]+ p * f ( s [ k ]) ]
k +=1
return ( s )
f = lambda u : -1/ tau * u
tau =2
u0 =10
p =10**( -1)
DT =7* tau
N = int ( DT / p )
26
28
30
32
34
x = sp . linspace (0 , DT , N +1) # Il y a eu N iterations plus la valeur initiale , soit N +1
valeurs
y = euler_explicite (f , u0 ,p , N )
plt . plot (x , y )
plt . xlabel ( ’ $t$ ’)
plt . ylabel ( ’ $u ( t ) $ ’)
plt . title ( ’ Representation de $u ( t ) $ ’)
plt . show ()
../cartes_mentales/equadiff_euler_explicite.py
– 28 –
P.E LEROY
Lycée Brizeux (Quimper)
PCSI
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
#
#
#
#
#
#
Cours d’informatique
Resolution d ’ une equation differentielle du premier ordre de la forme du / dt = f ( u )
u est la fonction solution de l ’ equation differentielle
f est la fonction qui designe le second membre
N designe le nombre d ’ iteration de la methode
p designe le pas de discretisation de la methode
DT = N * p designe la duree sur laquelle on modelise le phenomene
import scipy as sp
import matplotlib . pyplot as plt
import time
def euler_explicite (f , u0 ,p , N ) :
debut = time . time ()
s =[ u0 ] # La liste s va contenir les valeurs de la fonction solution u ( t )
k =0
while k < N :
s . append ( s [ k ]+ p * f ( s [ k ]) )
#
s +=[ s [ k ]+ p * f ( s [ k ]) ]
k +=1
fin = time . time ()
print ( ’ Methode terminee en ’ ,fin - debut , ’s ’ , ’ , liste de dimension ’ , len ( s ) )
return ( s )
f = lambda u : -1/ tau * u
tau =2
u0 =10
p =10**( -1)
DT =7* tau
N = int ( DT / p )
x = sp . linspace (0 , DT , N +1) # Il y a eu N iterations plus la valeur initiale , soit N +1
valeurs
y = euler_explicite (f , u0 ,p , N )
34
36
38
40
42
xa = sp . linspace (0 , DT ,300)
ya = u0 * sp . exp ( - xa / tau )
plt . plot (x ,y , xa , ya )
plt . xlabel ( ’ $t$ ’)
plt . ylabel ( ’ $u ( t ) $ ’)
plt . title ( ’ Representation de $u ( t ) $ ’)
plt . legend (( ’ $u_ { Euler }( t ) $ ’ , ’ $u_ { Analytique }( t ) $ ’) )
plt . show ()
../cartes_mentales/equadiff_euler_explicite2.py
– 29 –
P.E LEROY
– 30 –
Lycée Brizeux (Quimper)
PCSI
1
3
5
#
#
#
#
#
#
Cours d’informatique
Resolution d ’ une equation differentielle du premier ordre de la forme du / dt = f ( u )
u est la fonction solution de l ’ equation differentielle
g est la fonction qui permet la resolution de l ’ equation implicite
N designe le nombre d ’ iteration de la methode
p designe le pas de discretisation de la methode
DT = N * p designe la duree sur laquelle on modelise le phenomene
7
9
import scipy as sp
import matplotlib . pyplot as plt
import time
11
13
15
17
19
21
def euler_implicite (g , u0 ,p , N ) :
debut = time . time ()
s =[ u0 ] # La liste s va contenir les valeurs de la fonction solution u ( t )
k =0
while k < N :
s . append ( g ( s [ k ]) )
#
s +=[ g ( s [ k ]) ]
k +=1
fin = time . time ()
print ( ’ Methode terminee en ’ ,fin - debut , ’s ’ , ’ , liste de dimension ’ , len ( s ) )
return ( s )
23
25
g = lambda u :1/(1+ p / tau ) * u
tau =2
u0 =10
27
29
p =10**( -1)
DT =7* tau
N = int ( DT / p )
31
33
35
x = sp . linspace (0 , DT , N +1) # Il y a eu N iterations plus la valeur initiale , soit N +1
valeurs
y = euler_implicite (g , u0 ,p , N )
xa = sp . linspace (0 , DT ,300)
ya = u0 * sp . exp ( - xa / tau )
37
39
41
43
plt . plot (x ,y , xa , ya )
plt . xlabel ( ’ $t$ ’)
plt . ylabel ( ’ $u ( t ) $ ’)
plt . title ( ’ Representation de $u ( t ) $ ’)
plt . legend (( ’ $u_ { Euler }( t ) $ ’ , ’ $u_ { Analytique }( t ) $ ’) )
plt . show ()
../cartes_mentales/equadiff_euler_implicite.py
– 31 –
P.E LEROY
– 32 –
– 33 –
– 34 –
Lycée Brizeux (Quimper)
PCSI
1
3
5
#
#
#
#
#
#
Cours d’informatique
Resolution d ’ une equation differentielle du premier ordre de la forme du / dt = f ( u )
u est la fonction solution de l ’ equation differentielle
f est la fonction qui designe le second membre
N designe le nombre d ’ iteration de la methode
p designe le pas de discretisation de la methode
DT = N * p designe la duree sur laquelle on modelise le phenomene
7
9
11
13
15
17
19
21
23
25
import scipy as sp
import matplotlib . pyplot as plt
def rk2 (f , u0 ,p , N ) :
s =[ u0 ] # La liste s va contenir les valeurs de la fonction solution u ( t )
k =0
while k < N :
alpha = p * f ( s [ k ])
beta = p * f ( s [ k ]+ alpha /2)
s . append ( s [ k ]+ beta )
k +=1
return ( s )
f = lambda u : -1/ tau * u
tau =2
u0 =10
p =10**( -1)
DT =7* tau
N = int ( DT / p )
27
29
31
x = sp . linspace (0 , DT , N +1) # Il y a eu N iterations plus la valeur initiale , soit N +1
valeurs
y = rk2 (f , u0 ,p , N )
xa = sp . linspace (0 , DT ,300)
ya = u0 * sp . exp ( - xa / tau )
33
35
37
39
plt . plot (x ,y , xa , ya )
plt . xlabel ( ’ $t$ ’)
plt . ylabel ( ’ $u ( t ) $ ’)
plt . title ( ’ Representation de $u ( t ) $ ’)
plt . legend (( ’ $u_ { RK2 }( t ) $ ’ , ’ $u_ { Analytique }( t ) $ ’) )
plt . show ()
../cartes_mentales/equadiff_rk2.py
– 35 –
P.E LEROY
– 36 –
– 37 –
Lycée Brizeux (Quimper)
PCSI
1
Cours d’informatique
# Resolution d ’ equations differentielles
3
5
7
9
11
13
15
17
19
# 1. Du premier ordre de la forme du / dt = f ( u )
import scipy as sp
from scipy . integrate import odeint
import matplotlib . pyplot as plt
def f (u ,t , tau ) : # On ajoute l ’ argument ’t ’ car f ( u ) peut contenir cette variable
""" Definit le membre de droite de l ’ equation du / dt = f ( u ) """
return ( -1/ tau * u )
tau =2
u0 =10
p =10**( -1)
DT =7* tau
N = int ( DT / p )
t = sp . linspace (0 , DT , N )
u = odeint (f , u0 ,t , args =( tau ,) ) # Les arguments a passer a la fonction ’ fun (u ,t ,...) ’
doivent etre regroupes dans un tuple
21
23
25
plt . plot (t , u [: ,0]) # Il faut extraire la premiere colonne de la matrice solution ( cf .
2.)
plt . xlabel ( ’ $t$ ’)
plt . ylabel ( ’ $u ( t ) $ ’)
plt . title ( ’ Representation de $u ( t ) $ ’)
plt . show ()
27
29
31
# 2. Du second ordre de la forme d ^2 u / dt + w0 / Q * du / dt + w0 ^2* u =0
import scipy as sp
from scipy . integrate import odeint
import matplotlib . pyplot as plt
33
35
def f (U ,t , w0 , Q ) :
""" Definit le membre de droite de l ’ equation dU / dt = f ( U ) """
return ([ - w0 / Q * U [0] - w0 **2* U [1] , U [0]])
37
39
41
43
45
w0 =1
Q =10
U0 =[0 ,10]
p =10**( -1)
DT =5*2* sp . pi / w0
N = int ( DT / p )
t = sp . linspace (0 , DT , N )
U = odeint (f , U0 ,t , args =( w0 , Q ) )
47
49
51
plt . plot (t , U [: ,1]) # Il faut extraire la seconde colonne de la matrice solution qui
contient les valeurs de u ( t )
plt . xlabel ( ’ $t$ ’)
plt . ylabel ( ’ $u ( t ) $ ’)
plt . title ( ’ Representation de $u ( t ) $ ’)
plt . show ()
53
55
57
# from sympy import dsolve , Derivative , Function
# from sympy . abc import t , tau
# u = Function ( ’ u ’)
# dsolve ( Derivative ( u ( t ) ,t ) +1/ tau * u ( t ) ,u ( t ) )
../cartes_mentales/equadiff_bibliotheques_python.py
– 38 –
P.E LEROY
– 39 –
Lycée Brizeux (Quimper)
PCSI
2
Cours d’informatique
# Integration d ’ une fonction
import scipy . integrate as spi
import scipy as sp
4
6
8
10
12
14
f = lambda x : x **2 -4
print ( spi . quad (f ,0 ,4) ) # Retourne un tuple forme de l ’ estimation de l ’ integrale et de
son erreur
xx = sp . linspace (0 ,4 ,50)
fx = xx **2 -4
print ( spi . trapz ( fx , xx ) )
# import sympy as sp
# x = sp . Symbol ( ’ x ’)
# sp . integrate ( x **2 -4 ,( x ,0 ,4) )
../cartes_mentales/integration_bibliotheques_python.py
– 40 –
P.E LEROY
– 41 –
Lycée Brizeux (Quimper)
PCSI
4
# Derivation d ’ une fonction
import scipy . misc as spm
import scipy as sp
import matplotlib . pyplot as plt
6
f = lambda x : x **2 -4
8
xx = sp . linspace (0 ,4 ,50)
fpx = spm . derivative (f , xx )
2
Cours d’informatique
10
12
fx = f ( xx )
fpxx = sp . gradient ( fx ,(4 -0) /50)
print ( fpxx )
14
16
18
plt . plot ( xx , fpx , xx , fpxx )
plt . title ( ’ Representation de $f \ ’( x ) $ ’)
plt . xlabel ( ’ $x$ ’)
plt . ylabel ( ’ $f \ ’( x ) $ ’)
plt . show ()
20
22
# import sympy as sp
# x = sp . Symbol ( ’ x ’)
# sp . diff ( x **2 -4 , x )
../cartes_mentales/derivation_bibliotheques_python.py
– 42 –
P.E LEROY
– 43 –
Lycée Brizeux (Quimper)
PCSI
1
3
Cours d’informatique
# Interpolation d ’ une fonction
from scipy . interpolate import interp1d
import scipy as sp
import matplotlib . pyplot as plt
5
7
9
11
13
15
xx = sp . linspace (0 ,4 ,5)
fx = xx **2 -4
fi = interp1d ( xx , fx )
fix = fi ( xx )
plt . plot ( xx , fx , xx , fix )
plt . title ( ’ Representation de $f ( x ) $ ’)
plt . xlabel ( ’ $x$ ’)
plt . ylabel ( ’ $f ( x ) $ ’)
plt . legend (( ’ $f ( x ) $ ’ , ’ $f_ { interp }( x ) ’) )
plt . show ()
17
19
21
23
# from sympy . polys . polyfuncs import interpolate
# from sympy . abc import x
# import scipy as sp
# xx = sp . linspace (0 ,4 ,5)
# fx = xx **2 -4
# interpolate ( fx , x )
../cartes_mentales/interpolation_bibliotheques_python.py
– 44 –
P.E LEROY
– 45 –
Lycée Brizeux (Quimper)
PCSI
Cours d’informatique
4
# Ajustement d ’ une fonction a un ensemble de points
import scipy as sp
from scipy . optimize import curve_fit
import matplotlib . pyplot as plt
6
xx = sp . linspace (0 ,4 ,50)
8
def f_ajust (x ,a , b ) :
return a * x **2+ b
f_vraie = f_ajust ( xx ,1 , -4)
f_mes = f_vraie +0.5* sp . random . randn ( len ( xx ) ) # Creation artificielle de point
experimentaux ( distribution gaussienne )
2
10
12
p , cov = curve_fit ( f_ajust , xx , f_mes )
14
16
18
20
plt . plot ( xx , f_ajust ( xx , p [0] , p [1]) ,xx , f_mes , ’+ ’ ,xx , f_vraie )
plt . title ( ’ Ajustement de $f ( x ) $ ’)
plt . xlabel ( ’ $x$ ’)
plt . ylabel ( ’ $f ( x ) $ ’)
plt . legend (( ’ $f_ { ajust }( x ) $ ’ , ’ $f_ { mes }( x ) $ ’ , ’ $f_ { vraie }( x ) $ ’) )
plt . show ()
../cartes_mentales/ajustement_bibliotheques_python.py
2
4
6
8
10
12
# Ajustement d ’ une fonction a un ensemble de points
import scipy as sp
from scipy . optimize import leastsq
import matplotlib . pyplot as plt
xx = sp . linspace (0 ,4 ,50)
f_vraie = xx **2 -4
f_mes = f_vraie +0.5* sp . random . randn ( len ( xx ) ) # Creation artificielle de point
experimentaux ( distribution gaussienne )
def erreurs (p ,f , x ) : # Fonction des erreurs que la methode Python va minimiser
quadratiquement
a,b=p
err =f -( a * x **2+ b )
return err
14
16
18
def f_ajust (x , p ) : # Fonction permettant le calcul des valeurs de la fonction d ’
ajustement ( pour representation graphique )
return p [0]* x **2+ p [1]
p0 =[0.5 , -2] # Estimation initiale des parametres
p_lsq = leastsq ( erreurs , p0 , args =( f_mes , xx ) ) # Les parametres sont dans p_lsq [0]
20
22
24
26
plt . plot ( xx , f_ajust ( xx , p_lsq [0]) ,xx , f_mes , ’+ ’ ,xx , f_vraie )
plt . title ( ’ Ajustement de $f ( x ) $ ’)
plt . xlabel ( ’ $x$ ’)
plt . ylabel ( ’ $f ( x ) $ ’)
plt . legend (( ’ $f_ { ajust }( x ) $ ’ , ’ $f_ { mes }( x ) $ ’ , ’ $f_ { vraie }( x ) $ ’) )
plt . show ()
../cartes_mentales/ajustement_bibliotheques_python2.py
– 46 –
P.E LEROY
– 47 –
– 48 –
– 49 –
– 50 –
Lycée Brizeux (Quimper)
PCSI
2
4
6
8
Cours d’informatique
# Creation d ’ un BD
import sqlite3
bd = " / home / pe / pe / pcsi_new / info / cours /
c a r t e s _ m e n t a l e s _ s i m u l a t i o n _ n u m e r i q u e _ b d _ 2 e _ p e r i o d e / bd_creation . sq3 " # Indication
du chemin du fichier correspondant a la BD
connexion = sqlite3 . connect ( bd ) # Connexion a la BD
curseur = connexion . cursor () # Creation d ’ un curseur ( tampon memoire )
curseur . execute ( " CREATE TABLE membres ( age INTEGER , nom TEXT , taille REAL ) " ) # Le choix
des majuscules est arbitraire
12
curseur . execute ( " INSERT INTO membres ( age , nom , taille ) VALUES (21 , ’ Dupont ’ ,1.83) " )
curseur . execute ( " INSERT INTO membres ( age , nom , taille ) VALUES (21 , ’ Martin ’ ,1.73) " )
curseur . execute ( " INSERT INTO membres ( age , nom , taille ) VALUES (21 , ’ Richard ’ ,1.69) " )
14
connexion . commit () # Transfert des enregistrements vers la BD
16
curseur . close () # Fermeture du curseur
connexion . close () # Fermeture de la connexion
10
../cartes_mentales/bd_creation.py
– 51 –
P.E LEROY
– 52 –
Lycée Brizeux (Quimper)
PCSI
1
Cours d’informatique
# Interactions avec une BD
import sqlite3
3
5
bd = " / home / pe / pe / pcsi_new / info / cours /
c a r t e s _ m e n t a l e s _ s i m u l a t i o n _ n u m e r i q u e _ b d _ 2 e _ p e r i o d e / bd_creation . sq3 " # Indication
du chemin du fichier correspondant a la BD
connexion = sqlite3 . connect ( bd ) # Connexion a la BD
curseur = connexion . cursor () # Creation d ’ un curseur ( tampon memoire )
7
9
curseur . execute ( " SELECT * FROM membres " ) # SÃ c lection de toute la table ’ membres ’
for t in curseur : # Pour afficher le contenu du curseur
print ( t )
11
13
15
curseur . execute ( " SELECT * FROM membres " )
print ( list ( curseur ) ) # Autre facon ...
curseur . execute ( " SELECT * FROM membres " )
print ( tuple ( curseur ) ) # Autre facon ...
17
19
21
23
25
27
29
31
33
35
37
39
curseur . execute ( " SELECT * FROM membres " )
print ( curseur . fetchall () ) # Autre facon ...
data =[(17 , " Durand " ,1.74) ,(22 , " Berger " ,1.71) ,(20 , " Guyonvarch " ,1.65) ] # Insertion de
donnees a l ’ aide d ’ une boucle
for t in data :
curseur . execute ( " INSERT INTO membres ( age , nom , taille ) VALUES (? ,? ,?) " ,t )
connexion . commit () # Transfert des enregistrements vers la BD
curseur . execute ( " SELECT * FROM membres " ) # Pour voir le resultat ...
for t in curseur :
print ( t )
curseur . execute ( " SELECT * FROM membres " )
curseur . execute ( " UPDATE membres SET nom = ’ Bergere ’ WHERE nom = ’ Berger ’" ) # Mise a jour
d ’ un enregistrement
curseur . execute ( " DELETE from membres WHERE nom = ’ Durand ’" ) # Suppression d ’ un
enregistrement
curseur . execute ( " DELETE from membres WHERE nom = ’ Bergere ’" ) # Suppression d ’ un
enregistrement
curseur . execute ( " DELETE from membres WHERE nom = ’ Guyonvarch ’" ) # Suppression d ’ un
enregistrement
connexion . commit () # Transfert des enregistrements vers la BD
curseur . execute ( " SELECT * FROM membres " ) # Pour voir le resultat ...
for t in curseur :
print ( t )
curseur . close () # Fermeture du curseur
connexion . close () # Fermeture de la connexion
../cartes_mentales/bd_interactions.py
– 53 –
P.E LEROY
– 54 –
Lycée Brizeux (Quimper)
PCSI
Cours d’informatique
Références
[1] Faccanoni, Gloria, Analyse numérique, http://faccanoni.univ-tln.fr/user/enseignements/
2012_2013_M33_L2.pdf
[2] Dudok de Wit, Thierry, Analyse numérique, http://lpc2e.cnrs-orleans.fr/~ddwit/
enseignement/cours_analnum.pdf
[3] Viot, Pascal, Méthodes d’analyse numérique, http://www.lptmc.jussieu.fr/user/viot/COURS/
numeri.pdf
[4] Swinnen, Gérard, Apprendre à programmer avec Python 3, Eyrolles, 2012.
[5] Numpy and Scipy documentation, http://docs.scipy.org/doc/
[6] Matplotlib, http://matplotlib.org/
[7] Sympy documentation, http://docs.sympy.org/0.7.2/index.html
– 55 –
P.E LEROY