0% ont trouvé ce document utile (0 vote)
80 vues4 pages

Exercices Python avec Numpy et Scipy

Ce document présente plusieurs exercices utilisant les modules NumPy et SciPy en Python. Les exercices portent sur des manipulations de matrices, de listes, et des calculs numériques. Des rappels sont également fournis sur certaines fonctionnalités utiles de NumPy et SciPy.

Transféré par

deogratias davo
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)
80 vues4 pages

Exercices Python avec Numpy et Scipy

Ce document présente plusieurs exercices utilisant les modules NumPy et SciPy en Python. Les exercices portent sur des manipulations de matrices, de listes, et des calculs numériques. Des rappels sont également fournis sur certaines fonctionnalités utiles de NumPy et SciPy.

Transféré par

deogratias davo
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

o

TP n 4 : Exercices d'oral avec numpy et scipy

MP Lycée Camille Jullian

2-9 décembre 2021

Ce nouveau TP de révisions est constitué d'exercices posés à divers oraux faisant intervenir de
la programmation sur Python. Ils nécessitent parfois d'utiliser certaines fonctionnalités des modules
numpy ou scipy, ce qui me donne l'occasion de faire quelques rappels les concernant. Commençons
donc par une liste de choses utiles concernant le module numpy :

• on importe traditionnellement le module numpy à l'aide de la commande import numpy as


np, ce qui le renomme donc np.
• le type de base quand on utilise numpy est le tableau (array) qui peut être multidimensionnel
et sert donc aussi bien à gérer des listes que des matrices. Pour créer un tel tableau, on utilise
tout simplement la commande [Link](L), l'argument L étant une liste (si on veut créer
un tableau à une seule dimension), ou une liste de listes (pour créer une matrice). Attention,
un tableau numpy ne doit contenir que des éléments du même type, contrairement aux listes
Python. Par ailleurs, la taille d'un tableau numpy n'est pas modiable
• les fonctions [Link]((n,p)) et [Link]((n,p)) permettent de créer une matrice n lignes
p colonnes dont tous les éléments sont égaux à 0 ou 1, respectivement.
• la fonction [Link](n) permet de créer une matrice identité de taille n.
• la fonction [Link](debut,n,pas) fonctionne comme le classique range de Python, avec
la possibilité supplémentaire d'indiquer des pas qui ne sont pas nécessairement entiers.
• la fonction [Link](debut,n,N) permet de créer une liste de N valeurs régulièrement
espacées entre début et n (particulièrement pratique pour créer des listes de valeurs dans le
but de tracer une courbe avec [Link] par exemple). La valeur n est incluse dans
la liste (contrairement aux range ou arange).
• les opérations du type M + x, M ∗ x, M/x, où M un tableau numpy et x un ottant, seront
interprétées par Python comme une opération à eectuer terme à terme sur tous les éléments
du tableau.
• le produit des matrices M et N s'eectue à l'aide de la commande [Link](N) (attention,
M ∗ N renverra le produit terme à terme des deux matrices, aussi connu sous le nom de
produit de Hadamard).
• les commandes [Link]() et [Link]() renvoient respectivement le nombre d'éléments et le
couple (n, p) (nombre de lignes et de colonnes) de la matrice M .
• le module numpy contient toutes les fonctions mathématiques usuelles, qu'on peut appliquer
directement à tous les éléments d'une matrice, par exemple [Link](M) remplacera tous les
éléments de M par leur exponentielle (mais ne calculera pas l'exponentielle matricielle de
M !).
• les commandes [Link] et [Link] permettent de tester facilement si au moins un élément
(respectivement tous les éléments) d'une matrice vérie une certaine condition. Par exemple
[Link](M>10) renverra True si et seulement si la matrice M contient au moins un élément
strictement supérieur à 10.
• les méthodes sum, prod, max, min font ce à quoi on s'attend sur un tableau numpy.
• on dispose également dans numpy d'une quantité de fonctions ou méthodes permettant de
faire de l'algèbre linéaire avec nos matrices, souvent disponibles dans le sous-module li-
nalg : [Link](), [Link].matrix_power(M,k), [Link](M), [Link](M),

1
[Link](M) (valeurs propres), [Link](M) (pareil, mais fournit les vecteurs
propres en supplément gratuit)

Pour ceux qui souhaiteraient une référence un peu plus détaillée et complète sur ce sujet, un très
bon poly en français disponible sur le web :
https ://[Link]/langlois/images/pdf/mp/[Link]

Tant qu'on y est, rappelons l'existence du module scipy et de quelques fonctionnalités intéres-
santes pour tout ce qui touche à l'analyse numérique :
• le sous-module [Link] permet à la fois de faire du calcul numérique d'intégrales, et
de la résolution d'équations diérentielles. Parmi les fonctions classiques de ce sous-module,
quad (calcul d'intégrales), trapz (calcul d'intégrales par la méthode des trapèzes), simps
(calcul d'intégrales par la méthode de Simpson), et surtout odeint (résolution d'équas dis).
Je vous laisse consulter la documentation facilement trouvable en ligne pour retrouver la
syntaxe précise de ces fonctions si besoin.
• le sous-module [Link] contient des outils de résolution d'équation : newton cherche
une solution d'équation du type f (x) = 0 par la méthode de Newton, brentq fait la même
chose avec une méthode plus obscure mais encore plus ecace. Sinon, root fonctionne égale-
ment.

Il est temps de passer aux exercices. Attention, dans certains exercices, il y a de vraies questions
de maths (puisque ces exercices ont été pour certains posés à des oraux de type maths/info), si vous
ne voulez vraiment faire que du Python, sautez les questions correspondantes.

Exercice 1 : Pour s'échauer avec Numpy.


 
4 5 6 −1
 5 10 15 2 
On s'intéresse à la matrice M = 
 6 15 1
.
4 
−1 2 4 −2
1. Pourquoi M est-elle diagonalisable ? Donner les valeurs propres et vecteurs propres de M .
2. Calculer l'inverse de A en exploitant les résultats précédents, puis en utilisant directement la
fonction Python idoine. Comparer les résultats obtenus.
 
2 −1 0 ... ... 0
... ... ..
.
 
 −1 2 −1 
... ... ... ... ..
 
.
 
0
3. Eectuer le même travail sur la matrice M =  . On testera
 
.. ... ... ... ...
.
 
 0 
.. ... ...
 
.
 
 −1 2 −1 
0 ... . . . 0 −1 2
pour une matrice de taille 5, puis 10, puis 50.
 

4. Comparer les valeurs propres de la matrice précédente avec les valeurs de 4 sin 2
.
2(n + 1)

Exercice 2 : Manipulations faciles de nombres entiers.


1. Soit l'entier n = 1 234. Quel est le quotient, noté q , dans la division euclidienne de n par 10 ?
Quel est le reste ? Que se passe-t-il si on recommence la division par 10 à partir de q ?
2. Écrire une suite d'instructions calculant la somme des cubes des chires de 1 234.

2
3. Écrire une fonction somcube renvoyant la somme des cubes des chires d'un entier quel-
conque.
4. Trouver tous les entiers inférieurs à 1 000 égaux à la somme des cubes de leurs chires.
5. Écrire une nouvelle version de la fonction somcube utilisant une conversion en chaîne de
caractères.

Exercice 3 : Manipulations de listes.


Soit n un entier naturel et l une liste de longueurs n constituée uniquement de 0 et de 1. On veut
écrire un programme déterminant le nombre maximal de 0 consécutifs dans la liste l.
1. Écrire une fonction nombreszeros(l,i) prenant en paramètres une liste l et un entier i, et
renvoyant 0 si l[i] = 1, le nombre de zéros consécutifs de la liste l à partir de l[i] sinon.
2. En déduire une fonction nombrezerosmax(l) renvoyant le nombre maximal de 0 consécutifs
dans une liste l (on utlisera la fonction programmée à la question précédente).
3. Quelle est la complexité de la fonction précédente ?
4. Trouver un moyen simple, toujours en utilisant la fonction nombrezeros (Ndprof : ou sans
l'utiliser, ce qui me semble à vrai dire plus simple), d'obtenir un algorithme plus performant.

Exercice 4 : Matrices et polynômes.


 1

0 a 0 ... 0
... .. 
1
. 

 a 0 a
... ...
 
Soit n un entier supérieur ou égal à 1 et a ∈ R∗ . On note Mn,a =

0 a

0  .
.. ... ...
 
. 0 a1 
 

0 ... 0 a 0
1. Écrire une fonction Python achant la matrice Mn,a .
2. Donner des valeurs approchées des valeurs propres de Mn,a pour 3 6 n 6 8 et a ∈ {−2, −1, 1, 2, 3}.
3. On note (Pn ) les polynômes dénis par P1 = X , P2 = X 2 − 1 et ∀n ∈ N, Pn+2 = XPn+1 − Pn .
(a) Calculer les coecients des polynômes P3 , . . . , P8 .
(b) Donner des valeurs approchées des racines de ces polynômes.
(c) Conjecturer un lien avec les matrices Mn,a et le démontrer.
4. Les matrices Mn,a sont-elles inversibles ? Diagoonalisables ?
5. Trouver un segment de R contenant toutes les valeurs propres de toutes les matrices Mn,a .

Exercice 5 : Avec un peu de probabilités.


 
3a − 2b −6a + 6b + 3
Pour tous réels (a, b), on dénit une matrice Ma,b = . On notera par
a − b −2a + 3b + 1
ailleurs e(a, b) l'écart (en module) entre les deux valeurs propres complexes de Ma,b .
1. Écrire une fonction Python ecart qui renvoie la valeur de e(a, b).
2. Soient A et B deux variables aléatoires indépendantes de même loi G(p), avec p ∈]0, 1[. Écrire
une fonction hasard qui simule une occurrence du couple (A, B).
3. Écrire une fonction ecartalea qui réalise la simulation de 500 couples de valeurs (a, b) du
couple de variables (A, B) et renvoie le nombre de fois où ecart(a, b) > 0.1.

3
 
1 2 99 ecartalea(p)
4. Pour p = , ,..., , relier les points de coordonnées p, .
100 100 100 500
2 − 2p + p2
5. Sur le même graphe, tracer la courbe de la fonction p 7→ , commenter.
2−p

Exercice 6 : Suite de fonctions.


Soit N un nombre entier (par défaut égal à 101), qui correspondra à un échantillonage de l'in-
tervalle [0, 1] en N points. Pour tout entier n, on dénit sur [0, 1] une fonction fn par fn (x) =
n sin2 (nπx)(1 − x)n .
1. Écrire une fonction maxiliste qui renvoie à la fois le maximum de la liste donnée en argument,
et le premier indice où ce maximum est atteint.
2. Écrire une fonction fonctionsup(f,N) prenant comme un arguments une fonction f dénie
sur [0, 1] et un entier N et retournant le maximum de f sur les points d'échantillonage de
[0, 1] correspondant à l'entier N , ainsi que l'abscisse correspondante.
3. Écrire une fonction F(n,x) calculant simplement fn (x).
4. Écrire une fonction Graph qui ache simultanément le graphe sur [0, 1] de toutes les fonc-
tions fn , où n appartient à une liste d'entiers donnée en argument. On testera avec l =
[0, 1, 2, 3, 4, 5, 6].
5. Écrire une fonction PlusGrand(M,N) qui renvoie l'indice n de la première fonction fn
dont le maximum sur [0, 1] est supérieur à M , ainsi que l'abscisse et l'ordonnée du point
correspondant. Tester cette fonction avec M = 2 puis avec M = 10.
6. Écrire une suite d'instructions Python permettant de trouver la plus petite valeur de n pour
laquelle maxx∈[0,1] fn (x) > 20 et ∀x ∈ [0.1, 1], fn (x) 6 10−8 . Essayer avec plusieurs valeurs
de N et commenter.

Exercice 7 : Matrices et polynômes (bis).


 1

0 0 ... 0 n
... ... ..
..
..
 
 1 
... ... .
0 ..
 
On note χn le polynôme caractéristique de la matrice An = 
 0 .

.. ... ... .
0 ..
 
.
 
 
1
0 ... 0 1 n

1. Écrire une fonction Python prenant pour paramètre n et renvoyant les coecients de χn sous
forme de tableau numpy (on pourra consulter la documentation du sous-module [Link]
pour y trouver des choses intéressantes).
2. Acher les coecients de χn pour 2 6 n 6 8 et conjecturer la valeur de χn . Démontrer ce
résultat.
3. Acher les modules des racines de χn (pour les mêmes valeurs de n que précédemment). Que
peut-on conjecturer ? Démontrer ce résultat.

Vous aimerez peut-être aussi