DS 4 - IC Lycée Paul Constans

Devoir IC no 4
9 avril 2015
L’indentation doit clairement apparaître (on pourra par exemple tirer un trait vertical sur lequel viendra s’appuyer le bloc indenté).
En annexe (page 4) figure des extraits de la documentation de quelques fonctions Python pouvant être utiles.
6 points
Exercice 1
1. Quel(s) module(s) doit-on importer pour pouvoir manipuler des tableaux et tracer des graphiques ? Quelle(s)
instruction(s) permettent de réaliser cet(ces) import(s) ?
2. Écrire une fonction euler(a, b, n, F, y0) qui renvoie un tableau d’abscisses et un tableau d’ordonnées de taille n + 1 de la solution sur [a, b] de l’équation différentielle y 0 = F(y, t ) avec y(a) = y0.
On considère un circuit série constitué d’un générateur de fém e(t ) et de résistance de sortie r g , d’une bobine
d’inductance L et de résistance interne r L et d’un condensateur idéal de capacité C. On note R = r g +r L la résis½
0 si t < 0
tance totale du circuit. On étudie la réponse du circuit série RLC à un échelon de tension : e(t ) =
.
E si t Ê 0
On rappelle que la tension u c aux bornes du condensateur est solution de l’équation
s différentielle :
1
1 L
ω0 0
y + ω20 y = ω20 E
avec ω0 = p
et Q =
Q
R C
LC
du c
De plus, à l’instant t = 0, on a u c (0) = 0 V et
(0) = 1 V.s−1
dt
Données : r g = 50 Ω ; r L = 15 Ω ; L = 10 mH ; C = 1µF et E = 5 V. Pour la suite, on pourra considérer qu’on
dispose de variables globales E, R, L, C, Q et w (pour ω0 ).
y 00 +
3. Écrire la fonction F(Y,t) correspondant à l’équation différentielle étudiée.
4. Préciser les valeurs des paramètres de la fonction euler permettant d’obtenir une solution numérique
pertinente de l’équation différentielle.
5. Donner les lignes de code permettant de tracer la courbe représentative de la solution numérique.
6. Donner les lignes de code permettant d’obtenir la trajectoire de phase ci-dessous :
7. Quel type de régime transitoire est observé ? Quel paramètre peut-on diminuer pour observer l’autre type
de régime transitoire ?
1
PTSI
D EVOIR IC N O 4
4 points
Exercice 2
On considère une fonction f continue sur l’intervalle I = [0; 1] dont on donne le tableau de variation :
x
f (x)
α
0
1
f (α)
f (0)
f (1)
L’objectif est de déterminer un encadrement de α d’amplitude ε par une méthode de « trichotomie ». Pour cela,
on pose a = 0, d = 1 et on coupe l’intervalle [a; d ] en trois intervalles [a; b], [b; c] et [c; d ] de même amplitude.
1. Justifier que si f (b) É f (c), alors α Ê b (on pourra utiliser un raisonnement par contraposée).
De manière analogue, on admet que si f (b) Ê f (c) alors α É c.
2. En déduire une fonction en Python permettant d’obtenir un encadrement de α d’amplitude ε.
3. Donner un majorant du nombre d’itérations pour obtenir un encadrement d’amplitude ε.
5 points
Exercice 3
Rappel : Pour tout x ∈ R, dxe est le plus petit entier supérieur ou égal à x, c’est à dire dxe − 1 < x É dxe. En
python, ce nombre s’obtient par la fonction ceil du module math. Dans la suite, on considérera que cette
fonction a été importée.
On considère la fonction suivante, où a et b sont deux entiers strictement positifs :
def mystere(a, b):
L = []
x = a
y = b
while x != 0:
n = ceil(y/x)
L.append(n)
x = n * x - y
y = n * y
return L
1. À l’aide d’un tableau, détailler le fonctionnement de cette fonction sur l’appel mystere(4, 5) et donner
le résultat renvoyé.
2. Montrer que cet algorithme se termine (on pourra utiliser la définition de la partie entière supérieure).
a x X1
est un invariant de boucle.
3. Montrer que la propriété = +
b y `∈L `
4. En déduire ce que fait la fonction mystère. Illustrer ce résultat en utilisant la question 1.
2/4
DELAY – Paul Constans – 2014-2015
PTSI
D EVOIR IC N O 4
5 points
Exercice 4
Dans cet exercice, on pose la chaîne de caractères Alph = 'abcdefghijklmnopqrstuvwxyz ' et on appelle
texte toute chaîne de caractères ne comportant que des caractères parmi les 27 qui apparaissent dans Alph
(les 26 lettres de l’alphabet et la dernière est l’espace). Par exemple, la chaîne de caractères 'lycee paul
constans' est un texte (de longueur 19).
1. La fonction suivante a été codée en langage Python. Que fait-elle ?
def recherche(txt, lettre):
n = len(txt)
L = []
for k in range(n):
if txt[k] == lettre:
L.append(k)
return L
On s’intéresse à un système
de codage des textes,
£
¤ défini de la façon suivante. Un texte txt est codé par une
liste de 27 listes : Tab = L a , Lb , Lc , . . . , L z , Lespace où L a est la liste des indices d’apparition de la lettre a dans
txt, Lb la liste des indices d’apparition de la lettre b, etc.
Bien évidemment la notation L a employée ci-dessus est symbolique, en Python ce serait Tab[0].
Par exemple, le texte 'abba' est codé par Tab = [[0, 3], [1, 2], [],..., []].
2. Rédiger une fonction code(txt) qui renvoie la liste (de listes) Tab associée au texte txt. Cette fonction
pourra faire appel à la fonction recherche de la question précédente et utiliser la variable globale Alph.
3. Combien de fois le texte est-il parcouru pour être codé ?
4. Lorsque l’on dispose d’une liste (de listes) Tab obtenue par codage d’un texte par ce processus, que doit-on
faire pour retrouver le texte d’origine ? Écrire une fonction decode(Tab) qui réalise ce travail.
3/4
DELAY – Paul Constans – 2014-2015
PTSI
Annexe : quelques extraits de la documentation Python
plt.plot(*args, **kwargs):
Plot lines and/or markers. For example, each of the following is legal::
plot(x, y)
# plot x and y using default line style and color
plot(x, y, 'bo') # plot x and y using blue circle markers
plot(y)
# plot y using x as index array 0..N-1
The following format string characters are accepted to control the line marker:
================
===============================
character
description
================
===============================
``'o'``
circle marker
``'*'``
star marker
``'+'``
plus marker
``'x'``
x marker
================
===============================
plt.legend(*args, **kwargs):
Place a legend on the current axes.
To make a legend with existing lines::
legend()
:meth:`legend` by itself will try and build a legend using the label property of the
lines/patches/collections. You can set the label of a line by doing::
plot(x, y, label='my data')
plt.xlabel(label), plt.ylabel(label):
Set the *x* or *y* axis label.
plt.title(label):
Set a title of the current axes.
plt.show():
Display a figure.
4/4
DELAY – Paul Constans – 2014-2015