DS 4 - IC Lycée Paul Constans
Transcription
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