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)