0% ont trouvé ce document utile (0 vote)
135 vues12 pages

Ecg2 TP2

Tp mathématiques

Transféré par

katieneboire
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
135 vues12 pages

Ecg2 TP2

Tp mathématiques

Transféré par

katieneboire
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

TP 2

Les bibliothèques en Python

1 Le module numpy de calcul mathématique 2


1.1 Les fonctions usuelles . . . . . . . . . . . . . . . . . 2
1.2 Les vecteurs . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Les matrices . . . . . . . . . . . . . . . . . . . . . . 5

2 Le module numpy.linalg de calcul d’algèbre linéaire 7

3 Le module matplotlib de représentation graphique 8

4 Exercices 9

Compétences attendues.

3 Importer une bibliothèque.


3 Création et opérations sur les vecteurs et les matrices.
3 Tracer la courbe représentative d’une fonction.

Liste des commandes Python exigibles aux concours.


• Importation d’une bibliothèque : from ... import *, import ... as ...

• Dans la librairie numpy :


– Fonctions et constantes usuelles : np.exp, np.log, np.sin, np.cos, np.sqrt, np.abs, np.floor,
np.e, np.pi
– Création de vecteurs et matrices : np.array, np.zeros, np.ones, np.eye, np.linspace, np.arange
– Opérations sur les matrices : +, -, *, /, **, ==, >, <, >=, <=, !=, np.shape, np.dot, np.transpose,
np.sum, np.mean, np.min, np.max, np.cumsum
• Dans la librairie numpy.linalg : al.inv, al.rank, al.matrix_power, al.solve, al.eig
• Dans la librairie matplotlib.pyplot : plt.plot, plt.show

Mathieu Mansuy
Professeur en ECG deuxième année spécialité mathématiques approfondies au Lycée Louis Pergaud (Besançon)
Page personnelle : mathieu-mansuy.fr/
E-mail : mathieu.mansuy@ac-besancon.fr
ECG2 - Maths approfondies Lycée Louis Pergaud

En préambule
Nous avons présenté au TP1 les opérations sur les flottants et les entiers. Pour aller plus loin dans les calculs, on
peut espérer avoir accès aux fonctions mathématiques habituelles, telles que cosinus ou exponentielle. Essayons.

>>> cos(1.0)

Traceback (most recent call last):


File "<console>", line 1, in <module>
NameError: name ’cos’ is not defined

Cela ne fonctionne donc pas directement ! Et de fait, les fonctions intégrées au langage sont relativement peu
nombreuses : ce sont seulement celles qui sont susceptibles d’être utilisées très fréquemment. Les autres sont
regroupées dans des fichiers séparés que l’on appelle des modules.
Les modules sont des fichiers qui regroupent des ensembles de fonctions. Il en existe un grand nombre pré-
programmés qui sont fournis d’office avec Python. Souvent, on essaie de regrouper dans un même module des
fonctions apparentées. On parle alors de bibliothèques.
Pour bénéficier de ces bibliothèques, il faut les importer. On utilise pour cela les instructions ci-dessous.
Définition.
Pour importer une bibliothèque, on pourra utiliser la commande :

• from nom de la bibliothèque import *


Ceci signifie que l’on importe la totalité des fonctionnalités de la librairie.
• import nom de la bibliothèque as raccourci
Ceci signifie que les objets de la bibliothèque pourront être utilisés précédés de ce qui a été choisi pour
raccourci.

Voici la liste des bibliothèques au programme de l’ECG :


• numpy (raccourci np) : dédiée au calcul mathématique, elle donne accès aux principales fonctions mathé-
matiques, aux constantes e et π, et elle permet la création de vecteurs et de matrices.

• numpy.linalg (raccourci al) : dédiée aux calculs d’algèbre linéaire.


• numpy.random (raccourci rd) : dédiée à la génération de nombres aléatoires, elle permet de simuler des
variables aléatoires.
• matplotlib.pyplot (raccourci plt) : dédiée au tracé de courbes, de surfaces, de graphiques.

Pour importer la bibliothèque numpy, on peut ainsi utiliser au choix l’une des commandes suivantes :
from numpy import * ou import numpy as np
Dans la seconde instruction, np est un diminutif pour désigner la bibliothèque numpy (on aurait pu choisir autre
chose). Si on utilise cette instruction, toutes les commandes seront précédées du préfixe np.

Remarque. On peut penser qu’il est donc plus simple d’utiliser la première instruction, mais il peut y avoir
conflit si certaines fonctions appartenant à des bibliothèques différentes portent le même nom. On privilégiera
donc dans la suite l’importation de bibliothèques à l’aide de diminutifs.

Nous présentons dans ce TP les bibliothèques numpy, numpy.linalg et matplotlib.

1 Le module numpy de calcul mathématique


1.1 Les fonctions usuelles
Commençons par importer la bibliothèque numpy à l’aide de la commande :

>>> import numpy as np

2
ECG2 - Maths approfondies Lycée Louis Pergaud

Une fois cette commande exécutée, nous avons maintenant accès aux fonctions usuelles mathématiques.
Définition.
Les fonctions usuelles mathématiques accessibles par la bibliothèque numpy sont (entre autres) :

np.abs (valeur absolue), np.cos (cosinus), np.sin (sinus), np.log (logarithme népérien)
np.exp (exponentielle), np.sqrt (racine carrée), np.floor (partie entière).

Mise en garde.
Noter la syntaxe np.log (et non np.ln) pour la fonction logarithme népérien.

Exemple. Éxécuter les instructions suivantes dans la console.


>>> np.pi ; np.e
>>> np.floor(np.sqrt(5))
>>> np.sin(1.0); np.tan(np.pi/4)

1.2 Les vecteurs


Définition.
Pour définir le vecteur-ligne (u1 , . . . , un ) (de type array, tableau en anglais), on utilise la commande :

np.array([u1,...,un])

Exemple. Éxécuter l’instruction suivante dans la console :


>>> u = np.array([1,5,-2]) ; u

Remarque. Un vecteur (et plus généralement un tableau) ne peut contenir que des éléments de même type.
Si on essaie de fabriquer un tableau à partir de types différents, Python essaie de convertir toutes les données
vers un type commun et retourne une erreur en cas d’échec.
>>> np.array([1 , 2, 3.5 , False ])
array([ 1. , 2. , 3.5 , 0. ])

Définition.

• L’instruction np.arange(a,b,r) renvoie un vecteur ligne dont les coefficients sont en progression
arithmétique de raison r, de premier terme le réel a et ne dépassant pas le réel b.
• L’instruction np.linspace(a,b,n) renvoie un vecteur ligne dont les n coefficients sont en progression
arithmétique, le premier étant le réel a et le dernier le réel b.
• np.ones(n) renvoie le vecteur ligne dont les n coefficients sont égaux à 1.
• np.zeros(n) renvoie le vecteur ligne dont les n coefficients sont égaux à 0.

Remarque. Les instructions np.arange et range sont a priori semblables. Noter cependant ce qui les dis-
tinguent :
• l’objet renvoyé : un vecteur pour l’instruction np.arange quand range ne fait qu’énumérer des entiers
sans provoquer d’affichage ;
• les paramètres de np.arange ne sont pas nécessairement des entiers.
Noter également que la commande np.arange(a,b,1) peut s’écrire plus simplement np.arange(a,b).

3
ECG2 - Maths approfondies Lycée Louis Pergaud

Exemples. Éxécuter les instructions suivantes dans la console.


>>> np.arange(3,12,2)
>>> np.arange(3,6) ; np.arange(5)
>>> np.linspace(-5,8,6)
>>> np.ones(3)

Propriété 1 (Extraction et modification d’éléments d’un vecteur)

Soit u un vecteur dont les coefficients sont u0 , . . . , un .


• Pour extraire le coefficient ui , on écrit : u[i].
• Pour modifier le coefficient ui par le réel a, on écrit : u[i] = a.

Mise en garde.
On notera que l’indexation des coefficients d’un vecteur commence à 0 (comme toujours pour Python).

Exemples. Éxécuter les instructions suivantes dans la console.


>>> u
>>> u[1]
>>> u[1] = 0 ; u

Propriété 2 (Opérations sur les vecteurs coefficient par coefficient)

Soient u et v deux vecteurs dont les coefficients sont respectivement u0 , . . . , un et v0 , . . . , vn .


• Pour obtenir le vecteur a × u (a réel), on écrit : a*u.
• Pour obtenir le vecteur u + v , on écrit : u+v.

• Pour obtenir le vecteur (u0 × v0 , . . . , un × vn ), on écrit : u*v.


 
• Pour obtenir le vecteur uv00 , . . . , uvnn , on écrit : u/v.

• Pour obtenir le vecteur (ua0 , . . . , uan ) (a réel), on écrit : u**a.


• Si f est une fonction prédéfinie, pour obtenir le vecteur (f (u0 ), . . . , f (un )), on écrit : f(u).

Exemples. Éxécuter les instructions suivantes dans la console.


>>> u = np.arange(3,0,-1); v = np.arange(4,9,2) ; w = 2*np.ones(4)
>>> np.cos(u)
>>> u+v
>>> v/u
>>> v/w
>>> u**(-1)
>>> t = np.arange(1.,8.,2.) ; t**(-1)

Remarques.
• Les opérations sur les vecteurs ne sont valides que si les calculs ont du sens. Par exemple, l’instruction
v/w n’a pas de sens car les vecteurs ne sont pas de même dimension. Elle n’aurait pas non plus de sens si
l’un des coefficients du vecteur w était nul.
• Le langage Python étant typé, si on entre un vecteur u à coefficients entiers (donc de type int) et que
l’on tape u**(-1), Python renvoie un message d’erreur car les résultats ne sont pas de même type. Pour
pallier cet inconvénient, on entrera les coefficients suivis d’un point pour que Python les interprète en type
float.

4
ECG2 - Maths approfondies Lycée Louis Pergaud

• On peut donc appliquer à un vecteur (et plus généralement à un tableau) la plupart des fonctions fournies
par le module numpy : la fonction s’applique alors à tous les éléments du tableau en une seule commande
(inutile de faire une boucle for). De plus, cette exécution est optimisée (elle est beaucoup plus rapide que
celle d’une boucle for réalisant la même opération).

1.3 Les matrices


Définition.
Pour déclarer la matrice A = (ai,j )(i,j)∈J1,nK×J1,pK (de type array), on écrit :
np.array([[a1,1 ,..., a1,p ],...,[an,1 ,..., an,p ]])

Exemple. Éxécuter les instructions suivantes dans la console :


>>> A = np.array([[1,4],[-3,0]]) ; A
>>> X = np.array([[6],[-4]]) ; X

Définition.

• np.ones((n,p)) renvoie la matrice de Mn,p (R) dont tous les éléments sont égaux à 1.
• np.zeros((n,p)) crée la matrice de Mn,p (R) dont tous les éléments sont égaux à 0.
• np.eye(n,p) crée la matrice de Mn,p (R) dont tous les éléments sont nuls sauf ceux dont le numéro
de ligne est égal au numéro de colonne (ce sont les éléments diagonaux si n = p ) qui valent 1.

 Syntaxe.
Avec np.eye, il faut des parenthèses simples alors qu’avec np.ones et np.zeros, il faut des parenthèses
doubles.

Propriété 3 (Extraction d’éléments d’une matrice)

On suppose que l’on a déclaré une matrice A.

• L’instruction a,b=np.shape(A) affecte à la variable a le nombre de lignes et à la variable b le


nombre de colonnes de la matrice A.
• Pour extraire le coefficient de la ligne d’indice i et de la colonne d’indice j, on écrit : A[i,j].
• Pour extraire la ligne d’indice i, on écrit : A[i,:].

• Pour extraire la colonne d’indice j, on écrit : A[:,j].

Remarque. L’indexation des lignes et des colonnes d’une matrice commence à 0.

Exemples. Éxécuter les instructions suivantes dans la console :


>>> np.shape(A) ; np.shape(X)[0] ; np.shape(X)[1]
>>> B = np.array([np.arange(1,4),np.arange(4,7),np.arange(7,10)]); B
>>> B[1,1] ; B[2,:] ; B[:,0] ; B[0:2,1:3]

Remarques.
• Le résultat quand on extrait une colonne est une ligne. On peut remédier à cela en remplaçant la commande
B[:,0] par B[:,0:1].
• Quand un tableau tab1 est affecté à une variable tab2, les tableaux tab1 et tab2 partagent les mêmes
données. Ils ne sont pas autonomes. Toute modification de l’un se répercute sur l’autre. Même chose
lorsqu’on extrait un sous-tableau d’un tableau. Pour éviter cela et disposer d’un tableau autonome, on
peut utiliser la commande tab2 = tab1[:,:].copy().

5
ECG2 - Maths approfondies Lycée Louis Pergaud

Propriété 4 (Modification d’éléments d’une matrice)

On suppose que l’on a déclaré une matrice A.


• Pour remplacer l’élément de A situé à la ligne d’indice i et à la colonne d’indice j par un réel
b, on écrit : A[i,j] = b.

• Pour remplacer la ligne d’indice i de A par L, on écrit : A[i,:] = L.


• Pour remplacer la colonne d’indice j de A par C, on écrit : A[:,j] = C.

Exemple. Éxécuter les instructions suivantes dans la console :


>>> B
>>> B[0,0] = 0 ; B
>>> B[:,1] = np.zeros((1,3)) ; B

Propriété 5 (Opérations sur les matrices coefficient par coefficient)

Soient A = (ai,j ) et B = (bi,j ) deux matrices de même format déclarées dans les variables A et B.
• Pour obtenir la matrice a × A (a réel), on écrit : a*A.
• Pour obtenir la matrice A + B, on écrit : A+B.

• Pour obtenir la matrice C = (ai,j × bi,j ), on écrit : A*B.


• Pour obtenir la matrice C = (ai,j /bi,j ), on écrit : A/B.
b
• Pour obtenir la matrice C = (ai,ji,j ), on écrit : A**B.
• Si f est une fonction prédéfinie, pour obtenir la matrice (f (ai,j )), on écrit : f(A).

Remarques.

• Ces opérations sur les matrices ne sont valides que si les calculs ont un sens (même format des matrices,
opérations bien définies).
• Pour l’opération A**B, il faut faire attention au typage si certains éléments de B sont négatifs, en entrant
tous les éléments de A et B sous forme de flottants.

Exemples. Taper les instructions suivantes :


>>> A = np.array([[1,4],[0,9]]) ; B = np.array([[2,-1],[3,1]])
>>> A/B
>>> A**(1/2); np.sqrt(A)
>>> C = A+1 ; C

Propriété 6 (Opérations matricielles)

Soient A et B deux matrices déclarées dans les variables A et B.


• Pour obtenir t A (la matrice transposée de A), on écrit : np.transpose(A).
• Pour obtenir la matrice A × B (produit matriciel), on écrit : np.dot(A,B) (sous réserve
que le produit ait un sens).

6
ECG2 - Maths approfondies Lycée Louis Pergaud

Propriété 7 (Autres opérations sur les matrices)

Soit A une matrice déclarée dans la variable A.


• Pour obtenir la somme de tous les coefficients de la matrice A, on écrit : np.sum(A).
On définit de même les commandes np.prod(A), np.max(A), np.min(A).
• Pour obtenir la moyenne de tous les coefficients de la matrice A, on écrit : np.mean(A).
• Pour obtenir les somme cumulée des coefficients de la matrice A, on écrit : np.cumsum(A).
Les sommes cumulées s’effectuent en parcourant la matrice de gauche à droite, de haut en bas,
et sont renvoyées sous forme d’un vecteur. On définit de même la commande np.cumprod(A).

Exemples. Taper les instructions suivantes :


>>> A ; X ; np.dot(A,X)
>>> C ; np.sum(C) ; np.mean(C) ; np.max(C[1,:])
>>> np.cumsum(C) ; np.cumprod(C)
>>> np.min(C,0) ; np.cumsum(C,0) ; np.cumprod(C,1)

Remarque. Les opérations np.sum, np.prod, np.max, np.min, np.mean, np.cumsum, np.cumprod peuvent
s’appliquer sur une matrice entière, ou bien pour chaque colonne (par exemple np.prod(C,0)) ou chaque ligne
(par exemple np.max(C,1)).

Propriété 8 (Comparaison de matrices)

• Si A et B sont deux matrices de même format, l’instruction A==B renvoie une matrice de
même format que A (ou B) dont les éléments sont True ou False selon que les coefficients
correspondants de A et B à cette même place sont égaux ou non.
• Si tous les éléments de B sont égaux à un même réel x, on peut écrire simplement A==x.

• On définit de même les matrices booléennes A>B, A>=B, A<B, A<=B et A!=B.

Propriété 9 (Opération sur les matrices de booléens)

Si A est une matrice dont les composantes sont des booléens, alors :

• la commande np.sum(A) renvoie le nombre de booléens qui ont pris la valeur True,
• la commande np.mean(A) renvoie la proportion de booléens qui ont pris la valeur True,

Exemple. Taper les instructions suivantes :


>>> A = np.array([[1,4],[0,9]]) ; B = np.array([[2,-1],[3,1]])
>>> A > B ; np.sum(A > B)
>>> A == 0 ; np.mean(A <= 5)

2 Le module numpy.linalg de calcul d’algèbre linéaire


C’est une sous-bibliothèque du module numpy. Elle donne accès à de nouvelles commandes matricielles et permet
notamment de résoudre des systèmes linéaires.

7
ECG2 - Maths approfondies Lycée Louis Pergaud

Définition.
On importe la bibliothèque numpy.linalg en écrivant l’une ou l’autre des instructions suivantes (on priv-
ilégiera la deuxième) :

from numpy.linalg import * ou import numpy.linalg as al

Propriété 10 (Nouvelles commandes matricielles)

On suppose que l’on a déclaré une matrice A.


• La commande al.inv(A) renvoie l’inverse de A (si A est inversible, bien sûr).
• La commande al.matrix_rank(A) renvoie le rang de A.

• Si la matrice A est une matrice carrée et n un entier relatif, la commande


al.matrix_power(A,n) renvoie An (si n < 0, il faut bien sûr que A soit inversible).
• Si la matrice A est carrée, la commande al.eig(A) renvoie les valeurs propres et les vecteurs
propres (eigenvalues et eigenvectors en anglais) de la matrice A.

Propriété 11 (Résolution de systèmes linéaires)

Si A est une matrice carrée inversible et b est une matrice de même taille ou bien un vecteur colonne
ayant le même nombre de lignes que A, la commande al.solve(A,b) renvoie la solution du système
associé à l’équation Ax = b.

Remarque. Si la matrice A n’est pas carrée ou bien si elle n’est pas inversible, Python renvoie un message
d’erreur, même si l’équation possède une solution.

3 Le module matplotlib de représentation graphique


La bibliothèque matplotlib.pyplot (plus précisément le sous-module pyplot du module matplotlib) est
dédiée aux représentations graphiques.
Définition.
On importe la bibliothèque matplotlib.pyplot en écrivant l’une ou l’autre des instructions suivantes (on
privilégiera la deuxième) :
from matplotlib.pyplot import * ou import matplotlib.pyplot as plt

On suppose que x contient le vecteur (x1 , . . . , xn ) et que y contient le vecteur (y1 , . . . , yn ). Ces vecteurs définis-
sent des points M1 , . . . , Mn de coordonnées respectives (x1 , y1 ), . . . , (xn , yn ). Si on relie les points M1 , . . . , Mn ,
on parle de ligne brisée. Si les points ne sont pas reliés, on parle de nuage de points.
Définition.

• La commande plt.plot(x,y) permet de tracer la ligne brisée reliant les points M1 , . . . , Mn .

• La commande plt.plot(x,y,’x’) permet de tracer le nuage de points M1 , . . . , Mn , les points étant


matérialisés par des croix.

Exemple. Éxécuter les instructions suivantes dans la console.


>>> x = np.arange(-2,3); y = np.array([3,-1,1,0,1])
>>> plt.plot(x,y)
>>> plt.show()
>>> plt.plot(x,y,’x’)
>>> plt.show()

8
ECG2 - Maths approfondies Lycée Louis Pergaud

Remarque. Sur la plupart des versions de Python, l’affichage se fait automatiquement dans une fenêtre
graphique. Selon la distribution de Python utilisée, il est parfois nécessaire d’ajouter l’instruction plt.show().

Propriété 12

Soit f une fonction définie sur un intervalle [a, b] avec a < b.


On définit x = np.linspace(a,b,n) avec n grand. On note x0 , . . . , xn les composantes du vecteur
x et on déclare un vecteur y dont les composantes sont f (x0 ), . . . , f (xn ).
Pour représenter la courbe de f, on écrit : plt.plot(x,y).

Exemple. Éxécuter les instructions suivantes dans la console.


>>> x = np.linspace(-6,6,100) ; y = np.cos(x)
>>> plt.plot(x,y)
>>> plt.show()

Remarques. Voici quelques commandes et options associées à la fonction plot (voir l’aide pour davantage de
précisions) :
• Superposition ou non de figures. Sans intervention de notre part, Python superposera les figures dans
une même fenêtre graphique. Pour l’éviter, on peut utiliser la commande plt.figure(n) où n désigne la
n-ème fenêtre graphique à ouvrir. Cette commande doit précéder plt.plot(x,y) pour préciser à Python
dans quelle fenêtre il doit tracer la figure.
• Effacer le contenu d’une figure. plt.clf()
• Axes. plt.axis("scaled") permet de représenter dans un repère orthonormé.
plt.axis([xmin, xmax, ymin, ymax]) permet de choisir les bornes de la fenêtre d’affichage.
plt.grid() permet de rajouter une grille de fond sur votre figure.
• Couleur. plt.plot(x,y,’r’) si l’on veut un tracé en rouge, ’b’ pour le bleu, ’g’ pour le vert, ’k’ pour
le noir.
• Légendes. plt.plot(x,y,label="Cf") pour associer une étiquette à un tracé.
plt.legend(loc="upper right") pour décider de la localisation de la légende sur la figure.
plt.xlabel("label pour les abscisses") et plt.ylabel("label pour les ordonnées") pour lé-
gender les axes.
plt.title("Titre de graphe") pour ajouter un titre au graphe.

4 Exercices
 
  1 0 0 0
Exercice 1 (F) 5 3 3 1 1 0 0
Sans rentrer les cœfficients un à un, déclarer les matrices A = 3 5 3 et B = 
1
.
0 1 0
3 3 5
1 0 0 1

 
Exercice 2 (F) a1
 ..  
Que vaut le produit d’un vecteur colonne  .  par le vecteur ligne 1 . . . 1 ?
an
 
1 1 ... 1
 2 2 ... 2 
En déduire une ligne de commande créant la matrice  . ..  ∈ M10 (R).
 
..
 .. . .
10 10 . . . 10

9
ECG2 - Maths approfondies Lycée Louis Pergaud

 
1 1 2 0
Exercice 3 (F) 1 −1 0 −2
1. On définit la matrice A = 
0
.
1 1 1
1 0 1 −1

(a) Déclarer la matrice A.


(b) Appliquer l’algorithme du pivot de Gauss à l’aide de Python (on effectuera chacune des opérations
élémentaires sur Python). En déduire le rang.
(c) Vérifier votre résultat à l’aide de la fonction al.matrix_rank.
 
1 1 0
2. On considère à présent la matrice B = 1 −1 1.
1 0 1

(a) Déclarer la matrice B. Vérifier que B est inversible et calculer son inverse à l’aide de Python.

x + y = 1

(b) Résoudre à l’aide de Python le système x − y + z = 3 .

x + z = −2

Exercice 4 (FF)  
1 1 1 1
1. (a) En une seule ligne de commande, créer le vecteur x = 1, , , , . . . , sans saisir un à un les
4 9 16 100
éléments.
10
X 1
(b) Compléter la commande précédente pour qu’elle renvoie .
k2
k=1

10
X 1
2. En une seule ligne de commande, calculer la somme n
.
n=0
2

3. Que calculent les commandes suivantes :

(a) x = np.ones(10) ; y = np.cumsum(x)


(b) x = np.ones(10) ; y = np.sum(np.cumsum(x))
(c) x = np.ones(10) ; y = np.sum(np.cumsum(np.cumsum(x)))

Exercice 5 (FF)
Le nombre de véhicules passant sur une petite route de campagne en une journée est une variable aléatoire X
qui suit une loi de Poisson P(5).
On va simuler une année de circulation sur cette route. Pour cela, importons la bibliothèque numpy.random
à l’aide de l’instruction import numpy.random as rd, et utilisons la commande A = rd.poisson(5,[52,7]).
La i-ème ligne de A correspond à la i-ème semaine de circulation. On obtient ainsi une matrice A qui contient
52 × 7 nombres tirés suivant la loi P(5).

1. Déterminer le nombre maximal de véhicules circulant sur la route en une journée durant l’année. Et le
nombre maximal de véhicules un mercredi durant l’année ?
2. Déterminer les numéros des semaines où la route a connu son maximum de fréquentation.
3. Calculer le nombre moyen de véhicules par jour durant ces 364 jours. Recommencez plusieurs fois en
recréant la matrice A. Que constatez-vous ? Était-ce prévisible ?

4. En une seule ligne de commande, évaluer la probabilité qu’une journée voit passer plus de 8 véhicules.
Sauriez-vous calculer la valeur exacte de cette probabilité ?
5. Toujours en une seule ligne de commande, déterminer le nombre de jours où la route a connu son minimum
de fréquentation.

10
ECG2 - Maths approfondies Lycée Louis Pergaud

Exercice 6 (FF)
Écrire une fonction d’en-tête def trace(A) prenant en entrée une matrice A, et renvoyant la trace de A si la
matrice entrée est carrée, et un message d’erreur sinon.

Exercice 7 (FFF)
1. (a) Établir que, lorsque k est inférieur ou égal à n :
  Y k  
n n+1
= −1 .
k i=1
i

(b) Écrire une fonction d’en-tête def coeffbin(k,n): permettant de calculer n



k à partir des vecteurs
np.arange(1,k+1) et np.ones(k).
(c) Retrouver ce résultat avec la commande suivante (qu’on justifiera) :
np.cumprod(np.arange(n,0,-1)/np.arange(1,n+1))

 une matrice de taille n × n (n ≥ 1) dont l’élément de la ligne i + 1 et de la colonne j + 1


2. On désire créer
est égal à ji , avec i et j dans J0, n − 1K.

(a) Donner une ligne de commande permettant de créer une matrice C de taille n × n dont les éléments
de la première colonne sont égaux à 1 (les autres éléments étant nuls).
(b) Écrire une fonction d’en-tête def triangle_Pascal(n) qui remplit la matrice C à l’aide de la formule
de Pascal et renvoie ainsi la matrice voulue (triangle de Pascal).

Exercice 8 (F)
x3 x3 x5
Représenter sur une même figure les courbes des fonctions sin, x 7→ x, x 7→ x − , x 7→ x − + sur
3! 3! 5!
l’intervalle [−π, π]. Que remarque-t-on ?

Exercice 9 (F)
Soient la fonction f : x ∈ R 7→ x + 1 + e−x , et D la droite d’équation y = x + 1.
Comme lim f (x) − (x + 1) = 0, on dit que D est asymptote à la courbe Cf de f au voisinage de +∞.
x→+∞
Illustrer graphiquement cette situation en écrivant des instructions qui permettent de tracer sur un même
graphique Cf et la droite D. On fera varier x dans [−2, 3].

Exercice 10 (FF - Fonction réciproque)


ex − e−x
1. On considère la fonction f : R → R définie par f (x) = (appelée sinus hyperbolique, et souvent
2
notée sh). Montrer que f réalise une bijection de R dans R.

2. Définir une subdivision de l’intervalle I = [−2, 2] en 100 sous-intervalles de même longueur, puis écrire
des instructions permettant de tracer la courbe de f définie sur I.
3. Ajouter des instructions pour tracer sur le même graphique la courbe de la bijection réciproque de f .

Exercice 11 (FF) X (−1)n


1. Montrer que la série est convergente.
n2
(−1)i
2. Créer un vecteur ligne u, tel que pour tout 1 ≤ i ≤ 30, u[i-1] soit égal à .
i2
i
X (−1)k
3. Créer un vecteur v tel que pour 1 ≤ i ≤ 30, v[i-1] soit égal à .
k2
k=1

11
ECG2 - Maths approfondies Lycée Louis Pergaud

i
!
X (−1)k
4. Illustrer la convergence de la série en représentant graphiquement les points Mi de coordonnées i,
k2
k=1
+∞
X (−1)n
pour i = 1, . . . , 30. Donner une valeur approchée à 10−1 près de .
n=1
n2

Exercice 12 (FF - Étude d’une suite implicite)


1
On note, pour tout n ∈ N∗ , (En ) l’équation x3 + x2 + x − 2 = 0.
n
1. Soit n ∈ N∗ . Étudier les variations sur R+ de la fonction fn : x 7→ x3 + n1 x2 + x − 2.
En déduire que l’équation (En ) admet une unique solution un sur R+ , et que un appartient à [0, 1].
2. On considère le script suivant :

1 def f(n,x):
2 return x**3+(1/n)*x**2+x-2
3

4 def suite(n):
5 v = np.linspace(0,1,1000)
6 i = 0
7 while f(n,v[i])<0 :
8 i = i+1
9 return v[i-1]

Que renvoie la commande suite(n) ?


3. Compléter le programme suivant afin qu’il permette de représenter les 20 premiers termes de la suite
(un )n∈N∗ :

1 U = np.zeros(20)
2 for ...
3 U[k-1] = ...
4 x = np.arange(1,21)
5 plt.plot(...,...,'x')

4. Le programme précédant complété permet d’obtenir la représentation graphique suivante :

Quelles conjectures peut-on émettre sur la monotonie et la limite de la suite (un )n∈N∗ ?
5. Démontrer les résultats annoncés à la question précédente.

12

Vous aimerez peut-être aussi