Vous êtes sur la page 1sur 8

École Normale Supérieure L3

S1-2023-2024

Travaux Pratiques de Méthodes Numériques


Python

Exercice 1
π
1. Définir la variable x = 4
, et calculer y1 = sin(x) et y2 = cos(x), puis z = tan(x) à partir
de y1 et y2 .
2. Définir la variable x = [ π6 , π4 , π3 ], et calculer y1 = sin(x) et y2 = cos(x). Calculer alors tan(x)
en utilisant exclusivement les vecteurs y1 et y2 précédents.
3. Définir la variable x = [0 : 0.1 : 2π]. Combien y a-t-il de valeurs dans ce vecteur ? Afficher
la courbe du sinus.
4. Faire varier le pas. Qu’affiche exactement la commande plot ?

Exercice 2
Donnez un code Python qui permet de :
1. Créer un vecteur colonne vec de 5 éléments linéairement espacés entre 2 et 3.
2. Ajouter deux lignes à la fin de ce vecteur avec la valeur 0.
3. Ajouter 1 au deuxième et sixième éléments de ce vecteur.
4. Créer un second vecteur vec2 colonne de même dimension que vec contenant les entiers
pairs supérieurs ou égaux à 6.
5. Définir un vecteur sumvec comme la somme des deux vecteurs vec et vec2.
6. Définir un vecteur prodvec comme le produit termes à termes des deux vecteurs vec et
vec2.
7. Quel est la somme des éléments de prodvec ?
8. Quel est la moyenne des éléments de sumvec ? √
vec 2 + vec 2+1
9. Quel est le plus grand élément du vecteur v3 = vec. ( vec 2+1)
?

Exercice 3
1. Définir le vecteur V = 0 1 2 3 · · · 49 50. Quelle est la taille de ce vecteur ?
2. Définir le vecteur W contenant les cinq premiers éléments de V , et le vecteur X contenant
les cinq premiers et les cinq derniers éléments. Définir le vecteur W contenant les cinq
premiers éléments de V , et le vecteur X contenant les cinq premiers et les cinq derniers
éléments.
3. Définir ensuite le vecteur Z = 0 2 4 · · · 48 50 à partir de V .
4. Définir la matrice :
 
1 2 3 4 5 6 7 8 9 10
M =  11 12 13 14 15 16 17 18 19 20 
21 22 23 24 25 26 27 28 29 30
   
1 2 8 9 10
(a) Extraire de cette matrice la matrice N =  11 12  , la matrice P =  18 19 20 ,
  21 22 28 29 30
3 7
puis la matrice Q =
23 27
(b) Extraire de la matrice M la matrice R obtenue en prenant dans la matrice M une
colonne sur 2.
5. Définir les vecteurs M = [2 4 6 8 · · · 100] et N = [−1 −3 −5 · · · −99], puis le vecteur
P = [−1 2 −3 4 −5 8 · · · −99 100].
6. Définir une matrice M aléatoire à trois lignes et sept colonnes. Combien de nombres dans
cette matrice sont plus grand que 0.5? que 0.8? Ou sont-ils situés ?
7. Construire alors la matrice P obtenue à partir de la matrice M en remplaçant tous les
nombres de M inférieurs à 0.4 par 0, et ceux supérieurs à 0.4 par 1 Construire de même
la matrice Q obtenue à partir de la matrice M en remplaçant tous les nombres de M
inférieurs à 0.5 par −3 et tous les nombres supérieurs à 0.5 par 14.
8. Créer un vecteur contenant N valeurs binaires (0 ou 1) tel que 10% de ces valeurs soient
des 1.

Exercice 4
Représenter sur une figure à 4 cadrans, les fonctions sinus, exponentielle, logarithme et tangente.

Exercice 5
1. Créer le vecteur t=[0 : 0.1 : 100] ; quel est le nombre de points ?
2. Quelle est la place utilisée en mémoire ?
3. En choisissant A et f0 de façon à observer une dizaine de cycles et une atténuation d’environ
90%, tracer la fonction :

Sig = exp(−A.t + j.2πf0 .t)

4. Représenter sur une figure 4 cadrans, la partie réelle, la partie imaginaire, le module et la
phase de cette courbe.
5. Mettre les titres et les légendes de chaque graphique.
6. Représenter cette fonction complexe sous la forme d’une trajectoire 3d à l’aide de la fonction
plot3.
7. Utiliser la fonction graphique rotate3d, pour retrouver les courbes 2D de (3) à partir de la
représentation 3D.

Exercice 6
1. Quel est votre répertoire courant ? Créer un nouveau répertoire Initiation_Python et se
placer dedans.
2. Reprendre le problème de l’exercice 3. Ecrire un script de commande qui fixe au départ les
valeurs de A et f0 , puis calcule la fonction et enfin représente en 3D la courbe voulue.
3. Taper ’clear all’ puis who. Il n’y a plus de variables locales. Taper le nom de votre fichier
de commande : quelles sont les variables reconnues dans l’espace de travail ?

Exercice 7
Créer, à partir de votre fichier de commande, une fonction qui trace la courbe 3D de l’exercice
5, en fonction des variables A et f0 passées en paramètres et qui retourne les valeurs prises par
la fonction Sig.

Exercice 8
Avec Python, on peut résoudre tout type de système linéaire en l’écrivant préalablement sous
forme matricielle.
1. Le système linéaire, d’inconnues x, y et z suivant

 6x + y − 5z = 10
2x + 2y + 3z = 11
4x − 9y + 7z = 12

s’écrit sous forme matricielle AX = b, où X = [xyz]T est le vecteur inconnu. Le vecteur
X se calcule alors suivant : AX = b ⇐⇒ X = A−1 b, ou encore, avec Python, X = A\b.
Résoudre le système linéaire précédent.
2. Résoudre numériquement le système :


 x + 2y + 3z + 4t = 1

 2x + 3y + 4z + t = −2

 −2x + 4y − 5z + 2t = 0

8x + y − z + 3t = 1

3. Résoudre numériquement le système suivant (moindres carrés) :




 x + 3y = 5

−2x + 6y = 7

 3x − 4y = 6

6x − 13y = −3

4. Écrire un code Python qui permet de résoudre le système d’équations suivant :



 3x + 5y + z =1
7x − 2y + 4z = −3
−6x + 3y + 2z = 3

Exercice 9
Écrire un script Python permettant de :
1. Créer une matrice M ayant 9 lignes et 9 colonnes dont les éléments sont des entiers, générés
de manière aléatoire entre −10 et 10.
2. Afficher les éléments pairs de cette matrice.
3. Chercher l’élément le plus petit et l’élément le plus grand ainsi que la moyenne des éléments
de cette matrice.
4. Ordonner puis afficher par ordre croissant les éléments de cette matrice.

Exercice 10
1. Écrire une fonction ”Factoriel” qui reçoit comme entrée un entier n et qui renvoie comme
sortie le produit factoriel de n.
2. Écrire un script Python permettant de calculer la somme suivante :

X 1
x2n+1
n=1
(2n + 1)!

On prendra x = 0.1 et on arrêtera le calcul lorsque le nième terme est inférieur à 10−18 .

Exercice 11
n
Le symbole de Pochhammer, noté (x) , est utilisé en théorie des fonctions spéciales pour représenter
la factorielle croissante :
(x)n = x(x + 1)(x + 2) . . . (x + n − 1)
Écrire une fonction Poch croissante qui reçoit x et n et qui calcul la factorielle croissante (x)n

Exercice 12
Une suite arithmétique est une suite dans laquelle chaque terme permet de déduire le suivant
en lui ajoutant une constante appelée raison. Cette définition peut s’écrire sous la forme d’une
relation de récurrence :
un+1 = un + r
où r est la raison de la suite. Exemple : les 7 premiers termes de la suite arithmétique de premier
terme 1 et de raison 3 sont :
1; 4; 7; 10; 13; 16; 19
Ecrire un code permettant de calculer puis afficher la somme des 100 premiers termes de la suite
arithmétique de premier terme 2 et de raison r = 5

S = 2 + 7 + 12 + 17 + 22 + 27 + 32 + · · ·

Exercice 13
Soit un tableau V , de dimension N , contenant les notes de N étudiants. Écrire un code permet-
tant de calculer puis afficher :
1. La moyenne ( V̄ ) des notes de 100 étudiants : V̄ = N1 N
P
i=1 Vi
2. La plus grande et la plus petite note.
1
PN
3. L ’écart absolu moyen définit par : EQM = N i=1 V̄ − Vi
Exercice 14
Écrire une fonction ”somme” qui reçoit n et qui calcul la somme suivante :
n
X
s= (−8 − 2 × i)
i=1

Exercice 15
Écrire une fonction (transformation), permettant de transformer les coordonnées cartésiennes
(x, y, z) d’un objet en coordonnées sphériques (r, θ, ϕ)

Exercice 16
On considère la matrice A suivante.
 
1 2 −1 0
 0 5 3 0 
A=
 −2

0 0 4 
0 6 −4 −3

1. Écrire un script Python permettant de calculer la somme des éléments diagonaux de la


matrice A.
2. Écrire un script Python permettant de calculer le nombre d’éléments nuls dans cette ma-
trice.

Exercice 17
1. Écrire une fonction, n’utilisant aucune boucle (for, while, ...) qui prend comme paramètre
un entier n et qui construit la matrice suivante (fonctions eye, diag) :
 
1 1 0 ··· 0 0 0
 1 2 n−1 0 0 0 
 n n 
 0 2 3 ··· 0 0 0 
 3 
 .. .. .. ... .. .. .. 
 . . . . . . 
2
 
 0 0 0 ··· n − 1 n 0 
0 0 0 · · · n−1 n
1 n+1

Exercice 18
Soit un vecteur V, contenant les notes ( 110 ) d’une classe de 25 étudiants ainsi que le nombre
d’étudiants ayant cette note entre [1 : 0[0] : 1[1]; 2[1]; 3[1]; 4[2]; 5[4]; 6[6]; 7[5]; 8[2]; 9[2]; 10[1]
Écrire un code permettant de calculer puis afficher :
1
PN
1. La moyenne ( V des notes des 25 étudiants : V = N i=1 Vi
2. La moyenne pondérée définie par :
N=10
X Note × Nombre d’étudiants ayant cette note
n=0
Nombre d’étudiants total

Exercice 19
Écrire une fonction Trouve qui prend en argument un vecteur v et un nombre x, et qui retourne
1 si x est un élément du vecteur v, et 0 sinon.
Deux versions de cette fonction peuvent-être implémentées, une à l’aide d’une boucle for, et
d’un test if approprié, l’autre directement avec une comparaison globale == .

Exercice 20

La méthode de dichotomie ou méthode de la bissection est un


algorithme de recherche d’un zéro d’une fonction qui consiste
à répéter des partages d’un intervalle en deux parties puis à
sélectionner le sous-intervalle dans lequel existe un zéro de la
fonction.
On considère deux nombres a et b et une fonction f continue
et monotone sur l’intervalle [a, b] telle que f(a) et f(b) soient
de signes opposés. Supposons que nous voulions résoudre
l’équation f(x) = 0. D’après le théorème des valeurs in-
termédiaires, f doit avoir au moins un zéro dans l’intervalle
[a, b]. La méthode de dichotomie consiste à diviser l’intervalle
en deux en calculant c = (a + b)/2. Il y a maintenant deux
possibilités :

1. f (a) et f (c) sont de signes contraires.


2. f(c) et f(b) sont de signes contraires.

L’algorithme de dichotomie est alors appliqué à nouveau au sous-intervalle dans lequel le chan-
gement de signe se produit.
On considère l’équation : f (x) = x3 + 2x − 7 = 0 possédant une racine réelle dans l’intervalle
[1; 2]. Écrire un programme Python permettant de :
1. Tracer la fonction dans l’intervalle [1; 2].
2. Calculer la fonction f (x).
3. Calculer la racine de cette équation à 10−1 prés par la méthode de dichotomie.
4. Afficher le résultat final ainsi que le nombre d’itérations.

Exercice 21
On chercher à construire une bonne approximation d’un zéro
de la fonction d’une variable réelle f(x) en se basant sur
son développement de Taylor au premier ordre. Pour cela,
partant d’un point x0 que l’on choisit de préférence proche
du zéro à trouver (en faisant des estimations grossières par
exemple), on approche la fonction au premier ordre, autre-
ment dit, on la considère à peu près égale à sa tangente en
ce point :
f (x) ' f (x0 ) + f 0 (x0 ) (x − x0 )

Pour trouver un zéro de cette fonction d’approximation, il suffit de calculer l’intersection de la


droite tangente avec l’axe des abscisses, c’est-à-dire résoudre l’équation affine :

0 = f (x0 ) + f (x0 ) (x − x0 )

On obtient alors un point x1 qui en général a de bonnes chances d’être plus proche du vrai zéro de
f que le point x0 précédent. Par cette opération, on peut donc espérer améliorer l’approximation
par itérations successives : on approche à nouveau la fonction par sa tangente en x1 pour obtenir
un nouveau point x2 , etc.
Cette méthode requiert que la fonction possède une tangente en chacun des points de la suite
que l’on construit par itération, par exemple il suffit que f soit dérivable.
Formellement, on part d’un point x0 appartenant à l’ensemble de définition de la fonction et on
construit par récurrence la suite :

f (xk )
xk+1 = xk −
f 0 (xk )
où f désigne la dérivée de la fonction f.
Il se peut que la récurrence doive se terminer, si à l’étape k, xk n’appartient pas au domaine de
définition ou si la dérivée f 0 (xk ) est nulle, dans ces cas, la méthode échoue.
Si le zéro inconnu α est isolé, alors il existe un voisinage de α tel que pour toutes les valeurs de
départ x0 dans ce voisinage, la suite (xk ) va converger vers α. De plus, , si f(α) est non nul, alors
la convergence est quadratique, ce qui signifie intuitivement que le nombre de chiffres corrects
est approximativement doublé à chaque étape.
On considère l’équation : f (x) = cos(x) − x3 = 0
1. Écrire deux fonction f x(x) et df (x) permettant de calculer respectivement la fonction et
sa dérivée en un point x donné.
2. Écrire un programme Python permettant de calculer la racine de cette équation par la
méthode de Newton et d’afficher les résultats intermédiaires ainsi que le nombre d’itérations
en partant de la valeur initiale x0 = 0.5 et en effectuant 7 itérations.

Exercice 22
La méthode de Monte Carlo est une méthode probabiliste de calcul qui sera utilisée dans cet
exercice pour approximer le nombre π (aire d’un cercle de rayon = 1). On considère un disque de
rayon 1 centré à l’origine, inscrit dans un carré de côté 2. La méthode Monte Carlo consiste à tirer
N points du plan, aléatoirement, situés dans le carré. En probabilité, le rapport du nombre de
points situés dans le disque sur le nombre total de points tend, lorsque N devient grand vers
le rapport aire du disque sur aire du carré, soit π/4.
1. A quelle condition un point de coordonnées (x; y) est-il situé dans le carré ? dans le disque ?
2. Écrire une fonction Python MonteCarlo qui prend un seul paramètre N en argument, et
qui, après avoir générer N points aléatoirement dans le carré, retourne le rapport souhaité
(i.e. nombre de points dans le disque divisé par le nombre de points total dans la carré).
3. Vérifier que l’on obtient bien une approximation de π.
4. Écrire un script Python qui trace en fonction du nombre total de points N , la valeur
approchée de π trouvée.
5. Tracer l’erreur, en fonction de N , entre l’approximation calculée par la méthode de Monté
Carlo et la valeur exacte de π (donnée par Python).
6. Commenter.
Exercice 23
Plus généralement, la méthode de Monte Carlo est une méthode stochastique de calcul d’intégrale.
On cherche à déterminer la valeur de l’intégrale :
Z 1
I= f (x) dx
0

où f est une fonction connue mais dont l’intégrale peut-être difficilement calculable.
On pourra prendre pour commencer la fonction simple f (x) = x2 , pour laquelle on calcule
facilement I = 13 .

1. Écrire une fonction Python Montecarlo Int qui fournit, en fonction du nombre de points
N souhaités, le rapport N/n où n est le nombre de points, parmi les N , qui sont sous la
courbe représentative de f .
2. Que vaut la limite de ce rapport lorsque N devient grand ?
N
lim = ...
N →∞ n
3. Calculer alors une valeur approchée de I.

Exercice 24
En mathématiques, la fonction d’erreur (aussi appelée fonction d’erreur de Gauss) est une fonc-
tion entière utilisée en analyse. Cette fonction se note erf et fait partie des fonctions spéciales.
Cette fonction intervient régulièrement dans le domaine des probabilités et statistiques, ainsi
que dans les problèmes de diffusion (de la chaleur ou de la matière). Utiliser la méthode Monte
Carlo pour déterminer numériquement, puis représenter graphiquement, la fonction d’erreur :
Z x
2
erf(x) = e−t dt
0

Vous aimerez peut-être aussi