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
© Copyright 2024 ExpyDoc