Informatique Pour Tous Interrogation n°4

publicité
Nom :
Prénom :
Informatique Pour Tous
Interrogation n°4
I-Extrait du sujet IPT Centrale-Supelec 2015 :
1) Donner la valeur des expressions Python suivantes :
a) [1, 2, 3] + [4, 5, 6]
[1, 2, 3, 4, 5, 6]
b) 2 * [1, 2, 3]
[1, 2, 3, 1, 2, 3]
2) Écrire une fonction python vsom qui prend en paramètre deux listes de nombres de même longueur et
qui renvoie une nouvelle liste constituée de la somme terme à terme de ces deux listes.
Exemple : vsom([1, 2, 3], [4, 5, 6]) renvoie [5, 7, 9].
def vsom(l1,l2) :
result = []
for i in range(len(l1)):
result.append(l1[i]+l2[i])
return result
ou bien (en intension)
def vsom(l1,l2) :
return [l1[i]+l2[i] for i in range(len(l1))]
3) Écrire une fonction python smul à deux paramètres, un nombre et une liste de nombres, qui multiplie
chaque élément de la liste par le nombre et renvoie une nouvelle liste.
Exemple : smul(2, [1, 2, 3]) renvoie [2, 4, 6].
def smul(n,l) :
result = []
for i in range(len(l)):
result.append(n*l[i])
Informatique Pour Tous
page 1/8
PCSI1 2014-2015
return result
ou bien (en intension)
def smul(n,l) :
return [n*l[i] for i in range(len(l))]
II-Extrait du sujet IPT Mines-Ponts 2015 :
Une liaison série asynchrone permet la communication entre la carte de commande/acquisition et un PC.
Les échantillons correspondant à une mesure sont envoyés par la carte électronique sous la forme d’une
trame (suite de caractères ASCII). Cette suite de caractères se présente sous la forme suivante :
• un entête qui permet d’identifier la mesure sur un caractère (‘U’ tension moteur, ‘I’ courant moteur, ‘P’
position absolue) ;
• le nombre de données envoyées (3 caractères) ;
• les données constituées des mesures brutes codées à l’aide du caractère ‘+’ ou ‘–‘ suivi de 3 caractères
pour la valeur absolue ;
• un checksum, somme des valeurs absolues des données précédentes modulo 10000 sur 4 caractères. Le
nombre de données transmises n’est pas inclus dans le checksum.
Exemple :mesure de la tension sur 5 échantillons.
Caractères reçus : « U005+012+004–023–002+0420083 »
1) Écrire en langage Python une fonction lect_mesures à un paramètre de type chaîne de caractères de
la forme définie ci-dessus, qui retourne une liste contenant : le type de la mesure codé sur un caractère
(‘U’, ‘I’ ou ‘P’), une liste contenant l’ensemble des valeurs des mesures reçues, enfin le checksum sous
forme numérique.
Exemple : lect_mesures(‘U005+012+004–023–002+0420083’) renvoie [‘U’,[12,4,–23,–
2,42],83]
def lect_mesures(c) :
result=[c[0]]
# le premier élément du résultat est le
premier élément de la chaine c
nb_mes = int(c[1:4])
# on récupère le nombre de mesures
mesures=[]
# on prépare la liste des mesures
for i in range(nb_mes) :
mesures.append(int(c[i*4+4:i*4+8]))
result.append(mesures)
# on ajoute la liste des mesures à la
liste résultat
result.append(int(c[4*(nb_mes+1):]))
# on rajoute le checksum
return result
Informatique Pour Tous
page 2/8
PCSI1 2014-2015
2) On suppose que toutes les mesures sont disponibles dans la liste mesures et le checksum reçu dans la
variable checkSum. Écrire en langage Python une fonction check(mesures,checkSum) qui retourne True si la transmission présente un checksum valide et False sinon.
def check(mesures,checksum) :
somme=0
for mes in mesures :
somme = somme + abs(mes)
result = False
if somme == checksum :
result = True
return result
ou bien, plus pythonesque
def check(mesures,checksum) :
return checksum = = sum([abs(mes) for mes in mesures])
III-Extrait du sujet IPT Mines-Ponts 2015 :
On définit la valeur moyenne Imoy du signal I(t) sur la durée d’acquisition par I moy =
1
∫
t final
I ( t ) dt .
t final 0
Écrire une fonction en langage Python qui retourne Imoy après l’avoir calculée par la méthode des trapèzes.
f
1) Le principe de la méthode des trapèzes est rappelé sur le schéma
f(b)
ci-contre :
f(xi+1)
L’intervalle [a, b] est partagé en n intervalles successifs [xi, xi+1].
a) Exprimer mathématiquement l’aire
(xi, f(xi), f(xi+1), xi+1). On notera h = (xi+1 – xi).
Ai
du
trapèze
f(xi)
f(a)
L’aire du trapèze est la somme de l’aire du rectangle de largeur h et de
x
hauteur f(xi) et du rectangle de largeur h et de hauteur f(xi), f(xi+1). On
a
xi xi+1
a donc soit
.
b) En déduire l’aire des n trapèzes situés entre les abscisses a et b.
Informatique Pour Tous
page 3/8
PCSI1 2014-2015
b
On a évidemment
. Dans cette somme chaque
apparaît 2 fois sauf x0 = a et xn = b donc il reste
c) Écrire en Python une fonction integraleTrapezes(f, a, b, n) de paramètres :
• f la fonction dont on calcule l’intégrale ;
• a et b les bornes du domaines d’intégration ;
• n le nombre de trapèzes ;
def integraleTrapezes(f, a, b, n) :
s = 0
h = (b-a)/n
for i in range(n) :
x = a + i * h
s = s + h*(f(x)+f(x+h))/2
return s
d) Écrire en langage Python une autre fonction integraleTrapezes_e(f, a, b, e) prenant en entrée les paramètres f, a et b comme ci-dessus et une variable numérique désignant l’incertitude e attendue
sur l’évaluation de l’intégrale. Cette fonction renvoie l’approximation Sn de l’intégrale I de la fonction et
le nombre de rectangles n nécessaires pour obtenir l'incertitude e I .
(On pourra partir d'un nombre n1 = 1 de trapèze, calculer une première évaluation de Sn1, puis multiplier
ce nombre n1 par 2, comparer la nouvelle évaluation de Sn2 ainsi obtenue à la première et continuer ainsi
jusqu'à ce que la différence entre deux évaluations successives soit inférieure à l'incertitude e imposée.)
def integraleTrapezes(f,a,b,e):
S1 = (b-a)*(f(a)+f(b))/2
S2 = (b-a)*(f(a)+2*f((a+b)/2)+f(b))/4
n = 2
h = (b-a)/n
while abs(s2-s1) > e :
n = 2*n
S1 = S2
h = h/2
S2 = S1/2
for i in range(n//2):
S2 = S2 + h * f(a + (2*i+1)*h)
return n , S2
Informatique Pour Tous
page 4/8
PCSI1 2014-2015
IV-Extrait du sujet IPT Centrale-Supelec 2015 :
Soient y une fonction de classe C2 sur ℝ et tmin et tmax deux réels tels que tmin < tmax. On note I l’intervalle
[tmin , tmax]. On s’intéresse à une équation différentielle du second ordre de la forme :
∀t ∈ I y " ( t ) = f ( y ( t ) ) (II.1)
où f est une fonction donnée, continue sur ℝ. De nombreux systèmes physiques peuvent être décrits par
une équation de ce type.
On suppose connues les valeurs y0 = y(tmin) et z0 = y′(tmin). On suppose également que le système physique
étudié est conservatif, ce qui entraîne l’existence d’une quantité indépendante du temps (énergie, quantité
de mouvement, …), notée E, qui vérifie l’équation (II.2) où g′ = −f .
1
2
∀t ∈ I
y ' ( t ) + g ( y ( t ) ) = E (II.2)
2
1) Pour résoudre numériquement l’équation différentielle (II.1), on introduit la fonction z : I → ℝ définie
par ∀t ∈ I , z ( t ) = y ' ( t )
a) Montrer que l’équation (II.1) peut se mettre sous la forme d’un système différentiel du premier ordre
en z(t) et y(t), noté (S).
b) Soit n un entier strictement supérieur à 1 et J n = 0, n − 1 . On pose h =
tmax − tmin
n −1
et
∀i ∈ J n , ti = tmin + ih . Montrer que, pour tout entier i ∈ 0, n − 2 ,
y ( ti +1 ) = y ( ti ) + ∫
ti +1
ti
z ( t ) dt et z ( ti +1 ) = z ( ti ) + ∫
ti+1
ti
f ( y ( t ) ) dt (II.3)
2) La suite du problème exploite les notations introduites dans cette partie et présente une méthode numérique dans laquelle les intégrales précédentes sont remplacées par une valeur approchée. Dans le schéma
d’Euler explicite, chaque terme sous le signe intégrale est remplacé par sa valeur prise en la borne inférieure.
a) Dans ce schéma, montrer que les équations (II.3) permettent de définir deux suites (yi)i ∈ Jn et (zi)i ∈ Jn,
où yi et zi sont des valeurs approchées de y(ti) et z(ti). Donner les relations de récurrence permettant de déterminer les valeurs de yi et zi connaissant y0 et z0.
Informatique Pour Tous
page 5/8
PCSI1 2014-2015
b) Écrire une fonction euler qui reçoit en argument les paramètres qui vous semblent pertinents et qui
renvoie deux listes de nombres correspondant aux valeurs associées aux suites (yi)i ∈ Jn et (zi)i ∈ Jn. Vous
justifierez le choix des paramètres transmis à la fonction.
Les grandeurs nécessaires au calcul sont : la fonction f, les conditions initiales, les bornes temporelles tmin et
tmax, le nombre n de valeurs temporelles et le pas. Ces dernières grandeurs sont liées et il est inutiles de les
donner toutes. En s’inspirant de la fonction odeint, on peut passer comme paramètres la fonction f, une liste
des conditions intiales et une liste de instants de calcul (qui contiendra de facto tmin, tmax et n). En utilisant les
relations de récurrence établies ci-dessus, on peut proposer :
def euler(f, ci_liste, t_liste) :
n = len(t_liste)
# nombre de valeurs de t
h=(t_liste[-1]-t_liste[0])/(n-1)
# pas du calcul
yi = ci_liste[0]
# première valeur de y tirée des conditions
# initiales
z = ci_liste[1]
# première valeur de z tirée des conditions
# initiales
liste_y = [yi]
# la liste des valeurs de y renvoyée
liste_z = [z]
# la liste des valeurs de z renvoyée
for i in range (n-1) :
y = yi + z*h
# calcul de la nouvelle valeur de y.
# Il faut garder l'ancienne
z = z + f(yi)*h
# qui sert à calculer z
yi = y
# une fois cela fait, on peut changer yi
liste_y.append(yi)
liste_z.append(z)
return liste_y, liste_z
3) Pour illustrer cette méthode, on considère l’équation différentielle ∀t ∈ I y " ( t ) = − ω2 y ( t ) dans laquelle
ω est un nombre réel.
a) Montrer qu’on peut définir une quantité E, indépendante du temps, vérifiant une équation de la
forme (II.2)
Informatique Pour Tous
page 6/8
PCSI1 2014-2015
b) On note Ei la valeur approchée de E à l’instant ti, i∈ Jn, calculée en utilisant les valeurs approchées
de y(ti) et z(ti) obtenues à la question IV.2.a. Montrer que Ei +1 − Ei = h 2 ω2 Ei .
c) Qu’aurait donné un schéma numérique qui satisfait à la conservation de E ?
La conservation de E se traduit par
d) En portant les valeurs de yi et zi sur l’axe des abscisses et l’axe des ordonnées respectivement, quelle
serait l’allure du graphe qui respecte la conservation de E ?
On reconnaît la définition d’un portrait de phase. Dans le cas d’un oscillateur harmonique, il a la forme
d’une ellipse (ou d’un cercle selon les échelles choisies).
e) La mise en œuvre de la méthode d’Euler explicite génère le résultat graphique donné ci-contre.
Dans un système d’unités adapté, les calculs ont été menés
en prenant y0 = 3, z0 = 0, tmin = 0 et tmax = 3, ω = 2π et n =
100.
En quoi ce graphe confirme-t-il que le schéma numérique
ne conserve pas E ? Pouvez-vous justifier son allure ?
On reconnaît le portrait de phase d’un oscillateur dont l’énergie ne se conserve pas. Mais l’état initial I est
placé au centre de la spirale qui est divergente. Cela ne correspond pas au cas habituel de l’oscillateur
amorti pour lequel l’énergie diminue. En effet, ici, : « l’énergie » augmente à chaque pas de calcul.
Informatique Pour Tous
page 7/8
PCSI1 2014-2015
Informatique Pour Tous
page 8/8
PCSI1 2014-2015
Téléchargement