Formation Ingénieurs (GC, GE, GM)
Informatique pour l'Ingénieur Python
Travail Pratique : Simulation Numérique avec
NumPy
Tableaux ND, Vectorisation et Algèbre Linéaire
Durée : 2 heures
Modalités de rendu : Un script Python (tp_numpy_NOM_Prenom.py) et un court compte-rendu
au format PDF contenant vos analyses et résultats.
Objectifs du TP
En accord avec le cours, ce TP vise à :
Manipuler des tableaux N-dimensionnels avec NumPy.
Comprendre et appliquer le concept de vectorisation pour optimiser les temps de calcul.
Modéliser un problème d'ingénierie sous la forme d'un système linéaire AX = B .
Résoudre ce système de manière stable et performante avec [Link].
1 Exercice 1 : La puissance de la Vectorisation (30 min)
En ingénierie, il est courant de devoir traiter des millions de données (n÷uds d'un maillage,
échantillons temporels).
Mise en situation : Nous allons générer deux vecteurs aléatoires de taille N = 106 .
Pour les GE : Il s'agit de 106 valeurs de Résistances R et de Courants I . On veut calculer
la puissance dissipée P = R · I 2 .
Pour les GC/GM : Il s'agit de 106 valeurs de Rigidités K et de Déplacements U . On veut
calculer l'énergie de déformation élastique E = 21 K · U 2 .
Travail demandé :
1. Importez la bibliothèque numpy et la bibliothèque time (pour mesurer le temps).
2. Créez deux tableaux 1D NumPy A et B contenant 106 valeurs aléatoires entre 1 et 10.
(Indice : utilisez [Link] ).
3. Méthode classique (Lente) : Créez un tableau vide C (avec [Link]) de même taille.
Utilisez une boucle for pour calculer la formule C[i] = A[i] × (B[i])2 pour chaque élément.
Mesurez et achez le temps d'exécution.
4. Méthode vectorisée (Rapide) : Calculez directement le tableau C en une seule ligne
grâce aux opérations vectorisées de NumPy (C = A × B 2 ). Mesurez et achez le temps
d'exécution.
1
5. Dans votre compte-rendu, calculez le rapport de vitesse (Temps boucle / Temps vectorisé)
et commentez l'importance de ce concept pour un ingénieur.
2 Exercice 2 : Résolution Multi-domaines AX = B (1h00)
Une grande majorité des problèmes physiques (MEF, circuits, structures) se ramènent à la
résolution d'un système linéaire. Considérons le système modélisé en cours par la matrice suivante
:
4 −1 0 15
A = −1 3 −1 , B =0 (1)
0 −1 2 10
Interprétation Physique selon votre spécialité
Génie Civil (GC) / Génie Mécanique (GM) : A est la matrice de rigidité d'une
poutre ou d'un treillis discrétisé à 3 n÷uds libres. B est le vecteur des forces appliquées
sur ces n÷uds. Le vecteur inconnu X représente les déplacements des n÷uds.
Génie Électrique (GE) : A est la matrice des conductances d'un réseau électrique à 3
n÷uds. B est le vecteur des courants injectés aux n÷uds. Le vecteur inconnu X représente
les potentiels (tensions) aux n÷uds.
Travail demandé :
1. Dénissez la matrice A (tableau 2D) et le vecteur B (tableau 1D) en utilisant [Link].
2. Achez la taille (shape) des matrices pour vérier vos dimensions.
3. Résolvez le système en utilisant la fonction recommandée dans le cours : [Link]().
Stockez le résultat dans une variable X_solve et achez-la en arrondissant à 2 décimales
([Link]).
4. Vérication : Calculez le produit matriciel A × X (utilisez l'opérateur @ ou [Link]())
et vériez que le résultat est bien égal au vecteur B .
5. Mauvaise pratique : Comme vu en cours, l'inversion de matrice est coûteuse. Calculez
l'inverse de A avec [Link](), puis calculez X en faisant A−1 · B . Stockez dans
X_inv. Vériez que X_solve et X_inv sont identiques. Notez dans le compte-rendu
pourquoi solve doit être privilégié.
3 Exercice 3 : Analyse paramétrique (30 min)
En tant qu'ingénieur, une fois le modèle numérique en place, on simule diérents scénarios de
"cas de charge".
Imaginez qu'une perturbation majeure survienne sur le n÷ud central (n÷ud 2) de notre système.
(GC/GM) : Une force soudaine de 50 N est appliquée sur le n÷ud 2.
(GE) : Une source de courant injecte 50 A au n÷ud 2.
2
Travail demandé :
1. Créez un nouveau vecteur Bnew = 15 50 10 .
T
2. Résolvez le nouveau système AX = Bnew .
3. Comparez le nouveau vecteur X avec celui de l'Exercice 2. Dans votre compte-rendu,
expliquez physiquement ce qui s'est passé (Où le déplacement/potentiel est-il maximum ?
Comment les autres n÷uds ont-ils réagi à cette perturbation au centre ?).
Bon courage. N'oubliez pas de commenter votre code Python !