Devoir Surveillé 6 : Correction - Informatique Pour Tous
Transcription
Devoir Surveillé 6 : Correction - Informatique Pour Tous
PCSI/PTSI Devoir Surveillé 6 - Informatique : Correction Devoir Surveillé 6 : Correction 1 Équation diérentielle du premier ordre On souhaite résoudre l'équation diérentielle suivante : y 0 (t) = 2t + 1 y 2 (t) + 1 avec y(0)=1 qui a une unique solution sur [0,1] (ce résultat est admis). On cherchera une solution approchée sur [0,1] à l'aide de la méthode d'Euler, avec un pas d'intégration de h. On donnera ainsi une valeur approchée Question 1. yn de la solution y au temps tn = h ∗ n Quelle est la dernière valeur de n pour laquelle on calculera yn et avec n entier. tn ? 1 . h Il est important de bien prendre garde au fait que n est entier : 1 la dernière valeur pour laquelle on calcule yn est donc n = . h On eectue le calcul tant que Question 2. 1>h∗n donc tant que n< Montrer que dans le cas de l'approximation d'Euler, on a la relation de récurrence suivante : yn+1 = yn + h ∗ f (tn , yn ) avec f une fonction à préciser. Nous avons par dénition de l'intégrale : Z tn+1 y(tn+1 ) = y(tn ) + y 0 (u)du tn Dans le cadre de l'approximation de la méthode d'Euler, on considère que y' est constante sur [tn ; tn+1 ] et donc que : Z tn+1 yn+1 = yn + tn 2tn + 1 2tn + 1 du = yn + (tn+1 − tn ) 2 = yn + h ∗ f (tn , yn ) y 2 (tn ) + 1 yn + 1 avec : f (tn , yn ) = Question 3. Implémenter en Python une fonction 2tn + 1 yn2 + 1 def resoudE(h): qui prend en argument le pas tn ainsi qu'une liste de valeurs gration h, et qui renvoie une liste de temps T constituée des temps contient la liste des d'intéY, qui yn , solutions approchées de l'équation diérentielle obtenue par la méthode d'Euler pour l'équation diérentielle proposée. def resoudE(h): t,y=0,1 T,Y=[0],[1] while t*h<1: y=y+h*(2*t+1)/(y**2+1) t=t+h Y.append(y) T.append(t) return T,Y Informatique 1/ 5 Lyc. J. Perrin (13) PCSI/PTSI Devoir Surveillé 6 - Informatique : Correction 2 Oscillateur de Van der Pol L'oscillateur de Van der Pol est un circuit électrique qui a été imaginé par le physicien néerlandais Balthasar van der Pol alors qu'il était employé par les laboratoires Philips. Van der Pol découvrit que ce circuit, contenant un tube à vide, développait des oscillations stables, qu'il appela oscillation de relaxation et que l'on désigne aujourd'hui plutôt comme des cycles limites des circuits électriques. Lorsque ces circuits sont excités à une fréquence proche de celle du cycle limite il se crée un couplage, c'est-à-dire que le signal de commande impose sa fréquence au courant. Van der Pol et son collègue van der Mark publièrent en 1927 qu'à certaines fréquences de commande, il apparaissait un bruit irrégulier. Ce bruit se déclenchait toujours au voisinage des fréquences naturelles de couplage. Ce fut l'une des premières mises en évidence de l'existence d'un chaos déterministe. Un oscillateur de Van der Pol est régi en régime libre par l'équation diérentielle suivante : x00 (t) − ω0 (1 − x2 (t))x0 (t) + ω02 x(t) où : ω0 est la pulsation propre de l'oscillateur, est le coecient de non linéarité de l'oscillateur. On souhaite trouver des solutions à cette équation diérentielle avec les conditions initiales x(0)=1 et x'(0)=0. Question 4. Transformer cette équation en un système d'équations diérentielles d'ordre 1 . On pose a(t)=x'(t). On a alors a'(t)=x(t) et en réinjectant l'équation diérentielle on aboutit à : Question 5. x0 (t) a0 (t) = a(t) = ω0 (1 − x2 (t))a(t) − ω02 x(t) Mettre ce système sous la forme d'une fonction à valeurs vectorielles : Y'(t)=F(t,Y(t)). Préciser les composantes de Y(t) et F(a,b). On pose Y(t)= x(t) . x0 (t) x0 (t) x0 (t) = x00 (t) ω0 (1 − x2 (t))x0 (t) − ω02 x(t) On a Y'(t)= On a ainsi Y'(t)=F(t,Y(t)) avec : F Question 6. b a = b ω0 (1 − a2 )b − ω02 a On souhaite résoudre l'équation diérentielle précédente sur [0,1] à l'aide de la méthode d'Euler avec N pas d'intégration. Quel est le pas de temps h que l'on choisira ? On a simplement Question 7. h= 1 N Écrire un ou plusieurs lignes de code, qui construit la base de temps (on prendra N=1000) dans une liste T Informatique 2/ 5 Lyc. J. Perrin (13) PCSI/PTSI Devoir Surveillé 6 - Informatique : Correction Attention : N pas d'intégration signient que l'on évalue les temps et les valeurs des fonctions en N+1 points. Une solution utilisant une construction par compréhension est : T=[i*h for i in range(1001)] Il est également possible de se servir de la fonction linspace de la bibliothèque numpy : import numpy as np T=np.linspace(0,1,1001) Question 8. Proposer une relation de récurrence sur des variables xn et xpn qui permette de résoudre l'équation diérentielle précédente à l'aide de la méthode d'Euler (pas de temps h) En reprenant l'écriture de l'équation sous forme de système diérentiel on a : xn+1 xpn+1 = xn = xpn + + h ∗ h ∗ xpn ω0 (1 − x2n )xpn − ω02 xn On souhaite désormais utiliser la méthode odeint de la libraire scipy.integrate pour résoudre l'équation diérentielle précédente. Voici un extrait de l'aide proposée par Python : > help(scipy.integrate.odeint) Help on function odeint in module scipy.integrate.odepack : odeint(func, y0, t) Integrate a system of ordinary dierential equations. Solves the initial value problem for sti or non-sti systems of rst order ode-s : dy/dt = func(y,t0,...) where y can b e a vector. Parameters : func : callable(y, t0, ...) Computes the derivative of y at t0 y0 : array Initial condition on y (can be a vector). t : array A sequence of time points for which to solve for y. The initial value point should be the rst element of this sequence. Returns : y : array, shape (len(t), len(y0)) Array containing the value of y for each desired time in t, with the initial value `y0` in the rst row. Question 9. Compléter l'extrait de programme suivant qui donne la solution de l'équation précédente en 1000 pas. La fonction F est supposée programmée ailleurs et les paramètres epsilon et omega0 connus du programme . import numpy as np from scipy.integrate import odeint T=np.linspace(0.,1.,1001)# Création du tableau vide y0=[1,0]# Création de la condition initiale y=odeint(lambda Y,t:[Y[1],epsilon*omega0*(1-Y[0]**2)*Y[1]-omega0**2*Y[0]],y0,T) # La solution de l'équation intégrée... X=y[:,0]# ...est stockée dans X Question 10. Informatique Donner une séquence de commandes pour eectuer le tracé x en fonction de t. 3/ 5 Lyc. J. Perrin (13) PCSI/PTSI Devoir Surveillé 6 - Informatique : Correction On suppose les lignes de commande de la fonction précédente déjà dans le programme. import matplotlib.pyplot as plt plt.plot(T,X) plt.title("Solution de l'équation de Van Der Pol") plt.show() 3 Schéma relationnel On souhaite modéliser par une base de données les avis de visiteurs enregistrés sur un site internet à propos de lms. Voici les données que l'on aimerait stocker : Pour chaque visiteur, son pseudonyme et sa date d'inscription Pour chaque lm, son titre, son année et son réalisateur Pour chaque avis, le visiteur qui l'a émis, la date à laquelle le commentaire a été émis, le lm sur lequel il a été émis, et bien sûr le commentaire. Question 11. Proposer des schémas relationnels qui correspondent à cette modélisation. Vous écrirez les clés primaires en rouge, les clés étrangères en bleu. L'ensemble des dates sera noté de caractères D et l'ensemble des chaînes S Nous avons trois entités à modéliser : les visiteurs du site ; les lms et les avis. Les visiteurs et les lms apparaissent dans la relation avis : nous allons les relier à l'aide d'une clé primaire, que nous prendrons sous la forme d'un identiant auto-incrémenté. Elles apparaîtront dans la relation avis comme clés étrangères. Dans notre correction, les clés primaires sont en gras, les clés étrangères en italique. id_visiteur,N∗ ),(pseudonyme,S ),(date_inscription,D)) ∗ ∗ FILM : ((id_lm,N ),(titre,S ),(annee,N ),(realisateur,S )) VISITEUR : (( AVIS : (( id_visiteur,N∗ ),(date_avis,D),(id_lm,N∗ ),(commentaire,S )) 4 Modélisation d'une base de données Un professeur d'informatique enseignant dans plusieurs classes de diérents niveaux souhaite mettre en place une base de données simple pour suivre les résultats de ces étudiants. Il souhaite d'une part conserver les noms, prénoms et date de naissance de ces étudiants, l'option qu'ils ont suivi au bac et la moyenne qu'ils y ont obtenu. Il souhaite également que la classe (par ex PT* ou PCSI) gure dans sa base de données, ainsi que l'année où l'étudiant a été dans cette classe. Il souhaite enn que soient enregistrés dans sa base de données l'ensemble des notes obtenues par ses étudiants à l'ensemble des devoirs qu'il a donnés. Ces devoirs ont un intitulé (par ex : "Devoir Euler 2015"), et peuvent éventuellement être proposés à plusieurs classes en même temps. Question 12. 1) Proposer un ensemble de tables, avec une liste d'attributs pour chaque table, qui permette de modéliser correctement ce problème. On rappelle qu'un bon attribut doit être en nombre constant pour chaque entrée dans une table. Les clés primaires éventuelles de chaque table seront soulignées en rouge. 2) L'étudiant Gaston Lagae, né le 01/04/1995 est actuellement en classe de PSI*. Il a suivi l'option "Sieste" en Terminale et a eu 10.0 de moyenne au bac. Au devoir "Projet TP 2015", il a obtenu la note de 13,5. Détailler les tables précédemment proposées à l'aide de ces informations. 1) La modélisation est plus complexe dans cet exercice : nous avons toujours trois entités à modéliser : les étudiants, les classes et les devoirs. Mais désormais, les relations entre ces entités ne peuvent plus être représentées à l'aide d'une simple clé primaire. La solution proposée en cours est de créer des relations représentant les liens entre ces relations : une relation EtudiantClasse va nous permettre de garder la trace des diérentes classes par lesquelles un étudiant est passé. Un enregistrement dans cette table correspondra à une année eectuée par un étudiant. Nous allons également lier les étudiants et les devoirs à l'aide d'une relation EtudiantDevoir, qui servira à stocker les notes obtenues par les étudiants à chaque devoir. Enn, une relation ClasseDevoir permettrait de garder en mémoire l'ensemble des classes où a été donné un devoir. Elle est optionnelle ici compte tenu du cahier des charges qui manque de précision. Informatique 4/ 5 Lyc. J. Perrin (13) PCSI/PTSI Devoir Surveillé 6 - Informatique : Correction Dans le détail, avec les clés primaires en gras (qui sont des identiants auto-incrémentés) et les clés étrangères en italique : ETUDIANT : (( id_etudiant,N∗ ),(nom,S )),(prenom,S ),(date_de_naissance,D), (option_bac,S ),(moyenne_bac,R)) id_classe,N∗ ),(nom,S ),(annee,N)) ∗ DEVOIR : ((id_devoir,N ),(titre,S )) CLASSE : (( ETUDIANTCLASSE : (( id_etudiant,N∗ ),(id_classe,N∗ )) id_etudiant,N∗ ),(id_devoir,N∗ ),(note,R)) ETUDIANTDEVOIR : (( 2) Chacune des tables précédentes va contenir un enregistrement. Avec les informations de l'énoncé : ETUDIANT : 1,"Lagae","Gaston",01/04/1995,10.0 CLASSE : 1,"PSI*",2014 DEVOIR : 1,"Projet TP 2015" ETUDIANTCLASSE : 1,1 ETUDIANTDEVOIR : 1,1,13.5 Informatique 5/ 5 Lyc. J. Perrin (13)