Académique Documents
Professionnel Documents
Culture Documents
jlo@univ-jfc.fr
INU ChampollionL2 PC-EEA
v2023.1.v1
Première partie I
Généralités de la démarche en
programmation scientique
Outline
Outline
Déroulement et planning
En présentielle :
10 h de cours magistraux
22 h de travaux pratiques (dont évaluations)
En autonomie :
1h présence ≈ 1 2 h en autonomie (condition nécessaire de
résussite)
Quizs à domicile (Moodle) de préparation et de révision (aide à la
résussite)
Devoirs maisons (aide à la résussite)
Relecture et reproduction autonome de solutions types fournies
Déroulement et planning
Evaluation pour l'obtention de 3 ECTS :
20 % quizs
40 % projet
40 % évaluation TP
TP :
TP 1 : introduction spyder + numpy + matplotlib
TP 2 : Révision structure while dichotomie
TP 3 : Révision structure for calcul récurrence à indice
TP 4 : Intégrale numérique
TP 5 : Dérivée numérique
TP 6 & 7 : Projets
TP 8 : Méthode de Newton-Raphson
TP 9 &10 : interpolation et approximations
TP évaluation
jlo@univ-jfc.fr Programmation et techniques scientiques 15 / 205
Leitmotiv et objectifs de la programmation scientique Besoins
Généralités sur le langage Python Préoccupations
Stratégies et démarche de résolutions de problème Connaissances et compétences
Méthodologie du ux de développement en V Déroulement de l'UE
Bilan & Take home message
Population
Country Change (%)
2016 2017
China 1,403,500,365 1,409,517,397 +0.4%
India 1,324,171,354 1,339,180,127 +1.1%
United States 322,179,605 324,459,463 +0.7%
Indonesia 261,115,456 263,991,379 +1.1%
Brazil 207,652,865 209,288,278 +0.8%
Outline
Outline
Sommaire
Python shell
Exemple Python shell sous invité de commande Windows cmd
1 C: \ Users \ username>python
2 Python 3 . 1 0 . 7 ( t a g s /v3 . 1 0 . 7 : 6 cc6b13 , xxxxx , xx : xx : xx ) [
xxx v .1933 64 b i t (AMD64) ]
3 >>> 8+5
4 13
5 >>> a , b , c =7+13, 2 * * 3 , 2 * * 0.5
6 >>> a
7 20
iPython shell
Exemple iPython shell sous invité de commande Windows
1 C: \ Users \ username>i p y t h o n
2 Python 3 . 1 0 . 7 ( t a g s /v3 . 1 0 . 7 : 6 cc6b13 , xxxxx , xx : xx : xx ) [
MSC v .1933 64 b i t (AMD64) ]
3 IPython 7 . 3 4 . 0 == An enhanced I n t e r a c t i v e Python . Type
' ? ' for help .
4 I n [ 1 ] : a , b , c = 7 , 9 , 10
5 I n [ 1 ] : %whos
6 Variable Type Data/ I n f o
7 =============================
8 a int 7
9 b int 9
10 c int 10
Instructions magiques natives
%whos ou !whos=⇒ liste des variables
%reset ou !reset =⇒ libérer toutes les variables
jlo@univ-jfc.fr Programmation et techniques scientiques 22 / 205
Leitmotiv et objectifs de la programmation scientique Shell & interpréteur
Généralités sur le langage Python Scripts & IDE
Stratégies et démarche de résolutions de problème Processus de compilation & interprétation
Méthodologie du ux de développement en V Structuration d'un script
Bilan & Take home message Bilan & Take home message
1 auto-complétion de l'instruction
2 gestion des erreurs
3 envoie un message d'erreur.
Sommaire
1 Leitmotiv et objectifs de la programmation scientique
2 Généralités sur le langage Python
Shell & interpréteur
Scripts & IDE
Présentation d'un script
Script vs commande en ligne
Environnement de développement intégré - IDE
Présentation visuelle
Options d'exécution
Console iPython
Processus de compilation & interprétation
Structuration d'un script
Bilan & Take home message
3 Stratégies et démarche de résolutions de problème
jlo@univ-jfc.fr Programmation et techniques scientiques 25 / 205
Leitmotiv et objectifs de la programmation scientique Shell & interpréteur
Généralités sur le langage Python Scripts & IDE
Stratégies et démarche de résolutions de problème Processus de compilation & interprétation
Méthodologie du ux de développement en V Structuration d'un script
Bilan & Take home message Bilan & Take home message
IDE Spyder
Environnement à multi-fenêtres :
zone d'édition de texte fenêtre console (iPython)
Options d'exécution
Exécution du script actif (F5) :
Options à cocher :
purge des variables =⇒
évite l'eet mémoire
(risque de faux bon
fonctionnement)
choix du console =⇒
une console
active/nouvelle
Console iPython
Sommaire
1 Leitmotiv et objectifs de la programmation scientique
2 Généralités sur le langage Python
Shell & interpréteur
Scripts & IDE
Processus de compilation & interprétation
Illustration du langage machine
Ordre de grandeurs
Limitation du langage machine
Phases de compilation
Compilateur vs interpréteur
Particularité Python
Structuration d'un script
Bilan & Take home message
3 Stratégies et démarche de résolutions de problème
jlo@univ-jfc.fr Programmation et techniques scientiques 32 / 205
Leitmotiv et objectifs de la programmation scientique Shell & interpréteur
Généralités sur le langage Python Scripts & IDE
Stratégies et démarche de résolutions de problème Processus de compilation & interprétation
Méthodologie du ux de développement en V Structuration d'un script
Bilan & Take home message Bilan & Take home message
Ordre de grandeurs
Processeur moderne :
composé de millions transistors d'instructions machine par seconde
exécute milliards d'instructions machine par seconde
exécute une instruction machine à la fois
Une instruction machine :
typiquement 1 octet (8 bits) à 8 octets (64 bits).
processeur Intel-x86 : → 120 bits =⇒ 2120 instructions machines
microcontrolleur : < 1 octet.
=⇒ INTERPRETEUR ou COMPILATEUR
Rôle : traduire un langage plus évolué ↔ au langage machine.
jlo@univ-jfc.fr Programmation et techniques scientiques 39 / 205
Leitmotiv et objectifs de la programmation scientique Shell & interpréteur
Généralités sur le langage Python Scripts & IDE
Stratégies et démarche de résolutions de problème Processus de compilation & interprétation
Méthodologie du ux de développement en V Structuration d'un script
Bilan & Take home message Bilan & Take home message
Compilateur vs interpréteur
Compilateur Interpréteur
traduit toute la code source traduit et exécute ligne par
(script ) au code native de la ligne
machine cible (architectures : aucun chier exécutable
x86, ARM, etc.) autonome & séparé
produit un chier de sortie interprétation et exécution à
autonome (stand-alone ) ne temps réel
nécessite pas logiciels tiers pour temps d'exécution plus long
son exécution dans la machine processus de développement
cible rapide étape compilation omis
temps d'exécution réduit (code E.g. Matlab, Scilab, Pyhon,
optimisé) PhP, Ruby, Javascript
Chaque ligne modiée nécessite
une recompilation totale !
E.g. C, Fortran, Pascal, ADA,
Swift (Apple)... jlo@univ-jfc.fr Programmation et techniques scientiques 41 / 205
Leitmotiv et objectifs de la programmation scientique Shell & interpréteur
Généralités sur le langage Python Scripts & IDE
Stratégies et démarche de résolutions de problème Processus de compilation & interprétation
Méthodologie du ux de développement en V Structuration d'un script
Bilan & Take home message Bilan & Take home message
Sommaire
1 Leitmotiv et objectifs de la programmation scientique
2 Généralités sur le langage Python
Shell & interpréteur
Scripts & IDE
Processus de compilation & interprétation
Structuration d'un script
Contraintes de la programmation impérative
Structuration de base
Convention PEP
Explicite vs implicite
Une expression par ligne
Initialiser un tableau
Factorisation/regroupement des instructions
Un return par fonction
Convention des noms de variables
Typage dynamique
Pour aller plus loin
Bilan & Take home message
jlo@univ-jfc.fr Programmation et techniques scientiques 43 / 205
Leitmotiv et objectifs de la programmation scientique Shell & interpréteur
Généralités sur le langage Python Scripts & IDE
Stratégies et démarche de résolutions de problème Processus de compilation & interprétation
Méthodologie du ux de développement en V Structuration d'un script
Bilan & Take home message Bilan & Take home message
import NomModule
from NomModule import NomFonction
PI = 3.14159
name = "John"
def calculate_area(radius):
return PI * radius ** 2
if __name__ == "__main__":
radius = float(input("Inserer le rayon: "))
area = calculate_area(radius)
print(f"L'aire du cercle est: {area}")
Mauvaise OK
print('one'); print('two') print('one')
print('two')
if x == 1: print('one')
if x == 1:
if <boolean complexe> and < print('one')
boolean complexe>:
# instruction a eectuer cond1 = <boolean complexe>
cond2 = <autre boolean complexe>
if cond1 and cond2:
# instruction a eectuer
a : [6 , 7 , 8] a : [6 , 7 , 8]
b : [6 , 7 , 8] b : [3 , 4 , 5]
Lorque deux variables pointent sur le même objet (mémoire), la
modication de l'une impliquer aussi celle de l'autre.
jlo@univ-jfc.fr Programmation et techniques scientiques 51 / 205
Leitmotiv et objectifs de la programmation scientique Shell & interpréteur
Généralités sur le langage Python Scripts & IDE
Stratégies et démarche de résolutions de problème Processus de compilation & interprétation
Méthodologie du ux de développement en V Structuration d'un script
Bilan & Take home message Bilan & Take home message
Factorisation et regroupement
OK Mieux
resultat = a * - (b + c) t1 = (b + c)
t2 = -t1
resultat = a * t2
x1 = (-b + delta**0.5)/2/a
x2 = (-b - delta**0.5)/2/a
x1 = (-b + delta**0.5)/2/a
x2 = (-b - delta**0.5)/2/a
Les identiants Python sont sensibles aux cases ; les variables nommées
age and Age sont dierentes.
Les classes doivent être nommées selon la convention TitleCase.
commençant parla case Majuscule e.g. MyClass, Employee, Person.
Les fonctions doivent être en case minuscule. Des mots mutiples sont
séparées par des underscores , e.g. add(num),
calculate_tax(amount).
Les variables locales dans une fonction doivent être en case minuscule ;
e.g., x, num, salary.
Les module et packages doivent être en case minuscule e.g., mymodule,
tax_calculation.
MAUVAIS OK
a = 1 count = 1
a = 'a string' msg = 'a string'
def a(): def func():
pass # Do something pass # Do something
https ://docs.python-guide.org/writing/style/
The Zen of Python, by Tim Peters
...
Outline
Outline
Approche modulaire
Découpage de problème en problèmes élémentaires
input output
GROS PROBLEME
output 1
Analogie simple
input output
Préparer une pizza
Processus de développement
Préparer
la pâte
Préparer
la sauce
jlo@univ-jfc.fr Programmation et techniques scientiques 65 / 205
Leitmotiv et objectifs de la programmation scientique Principe de base
Généralités sur le langage Python Caractéristiques des problèmes élémentaires
Stratégies et démarche de résolutions de problème Analogie simple
Méthodologie du ux de développement en V Exemple simple
Bilan & Take home message
Exemple simple
calcul du volume d'eau dans une citerne cylindrique
input output
Déterminer le volume eau
Processus de développement
rciterne
calcul aire d'un
cercle de rayon r
Aciterne
Exemple simple
calcul du volume d'eau dans une citerne cylindrique
PI = 3.14159
def calculate_area(radius):
return PI * radius ** 2
if __name__ == "__main__":
rCiterne = float(input("Inserer le rayon: "))
hCiterne = float(input("Inserer la hauteur de l'eau: "))
areaCiterne = calculate_area(rCiterne)
volumeEau = calculate_volume_invariant(areaCiterne, rCiterne)
Outline
Outline
valeurs attendues
2 Découpage en problème modulaire (qu'on sait
résoudre/calculer) :
Identication des entrées et des sorties attendues de chaque
sous-problème types et valeurs attendues
Les sorties d'un sous-problème peut être exigibles en entrées d'autres
sous-problèmes.
Conception de l'architecture du code composé de sous-systèmes
permettant de résoudre le problème.
Élaboration du plan de tests
3 Implémentation de résolution de sous-problèmes
4 Vérication (par tests unitaires) du bloc de sous-problème.
Une entrée imposée ↔ sa sortie correcte obtenue
5 Intégration de blocs de résolution =⇒ système complète de
résolution
6 Validation du système complet.
jlo@univ-jfc.fr Programmation et techniques scientiques 70 / 205
Leitmotiv et objectifs de la programmation scientique Démarche de résolution et de validation
Généralités sur le langage Python Graphe du développement en V
Stratégies et démarche de résolutions de problème Démarche en cas d'échec
Méthodologie du ux de développement en V Exemple simple implémentation
Bilan & Take home message
Méthodologie du développement en V
1. Spécication
des exigences 9. Livraison et
exploitation
2. Conception système 8. Validation sys-
& de la validation tème usagers
3. Codage et im- 7. Vérication
plémentation des exigences
6. Tests de validation
4. Tests unitaires système complet
5. Intégration
jlo@univ-jfc.fr Programmation et techniques scientiques 71 / 205
Leitmotiv et objectifs de la programmation scientique Démarche de résolution et de validation
Généralités sur le langage Python Graphe du développement en V
Stratégies et démarche de résolutions de problème Démarche en cas d'échec
Méthodologie du ux de développement en V Exemple simple implémentation
Bilan & Take home message
Exemple simple
calcul du volume d'eau dans une citerne cylindrique
PI = 3.14159
def calculate_area(radius):
return PI * radius ** 2
if __name__ == "__main__":
#test fonction volume
vol_A2_h2 = calculate_volume_invariant(2, 2)
print('volume', vol_A2_h2 == 2*2)
Exemple simple
calcul du volume d'eau dans une citerne cylindrique
Volume : F a l s e
A i r e : True
5. Intégration
jlo@univ-jfc.fr Programmation et techniques scientiques 75 / 205
Leitmotiv et objectifs de la programmation scientique Démarche de résolution et de validation
Généralités sur le langage Python Graphe du développement en V
Stratégies et démarche de résolutions de problème Démarche en cas d'échec
Méthodologie du ux de développement en V Exemple simple implémentation
Bilan & Take home message
Exemple simple
calcul du volume d'eau dans une citerne cylindrique
PI = 3.14159
def calculate_area(radius):
return PI * radius ** 2
if __name__ == "__main__":
#test fonction volume
vol_A2_h2 = calculate_volume_invariant(2, 2)
print('volume', vol_A2_h2 == 2*2)
Exemple simple
calcul du volume d'eau dans une citerne cylindrique
Console :
Volume : True
A i r e : True
Plusieurs tests unitaires peuvent être nécessaire pour vérier un
sous-module/programme
La détection des erreurs facilitée par :
La structuration du code
L'expérience ...
Message d'erreur sur la console
5. Intégration
jlo@univ-jfc.fr Programmation et techniques scientiques 78 / 205
Leitmotiv et objectifs de la programmation scientique Démarche de résolution et de validation
Généralités sur le langage Python Graphe du développement en V
Stratégies et démarche de résolutions de problème Démarche en cas d'échec
Méthodologie du ux de développement en V Exemple simple implémentation
Bilan & Take home message
5. Intégration
jlo@univ-jfc.fr Programmation et techniques scientiques 79 / 205
Leitmotiv et objectifs de la programmation scientique Démarche de résolution et de validation
Généralités sur le langage Python Graphe du développement en V
Stratégies et démarche de résolutions de problème Démarche en cas d'échec
Méthodologie du ux de développement en V Exemple simple implémentation
Bilan & Take home message
5. Intégration
jlo@univ-jfc.fr Programmation et techniques scientiques 80 / 205
Leitmotiv et objectifs de la programmation scientique
Généralités sur le langage Python
Stratégies et démarche de résolutions de problème
Méthodologie du ux de développement en V
Bilan & Take home message
Outline
Outline
Deuxième partie II
Outline
Outline
Flux de données
Flux de données : une séquence de données (octets) ordonnées qui peut
être lue jusqu'à la condition EOF remplie
Accès direct par des canaux
Aucun besoin de connaître les détails matériels des périphériques
(provenance et destination)
Création et gestion conée à des bibliothèques (native ou externe).
Schéma d'interactions avec les
périphériques par des ux
output
input
ABSTRACTION
input Processeur output
du concept du
device central device
ux de données
stdout
stdin
fonctions natives
keyboard Processeur monitor et/ou issues d'une
central bibliothèque
pythonGo
^Z
v o i c i l e s t r : pythonGo
jlo@univ-jfc.fr Programmation et techniques scientiques 90 / 205
Gestion du ux d'information Présentation simplié d'un processeur
Bibliothèque os Principe du ux de données
Bibliothèque numpy Flux de données standard
Bibliothèque matplotlib Gestion d'autres types de périphériques et de données
Bilan
stdout
stdin
serial port
sensors : metadata ... ...
keyboard Processeur monitor
metadata ... ...
central
bluetooth control system
ASCII les actuator
Ici est un text
...
hard drive :
...
text file
# my data
7.83E-02 1.52E-01 6.00E-02 3.78E-02 1.97E-01
2.35E-02 4.55E-02 1.80E-02 1.13E-02 5.90E-02
6.04E-01 1.17E+00 4.63E-01 2.92E-01 1.52E+00
2.24E-01 4.35E-01 1.72E-01 1.08E-01 5.64E-01
5.72E-01 1.11E+00 4.38E-01 2.76E-01 1.44E+00
2.86E-02 5.54E-02 2.19E-02 1.38E-02 7.18E-02
7.20E-01 1.40E+00 5.52E-01 3.48E-01 1.81E+00
5.23E-01 1.02E+00 4.01E-01 2.53E-01 1.32E+00
2.23E-01 4.32E-01 1.71E-01 1.07E-01 5.60E-01
fName = 'myZData.dat'
Syntaxes
f = open(fName, 'r') #ouvrir un Ouverture du ux :
ux open(<nomFichier>, <mode>)
a = f.read(20) 'r' (mode lecture),
print(type(a)) 'w' (mode écriture avec
print(a) suppression),
f.close() #fermer le ux f 'a' (mode écriture en n du ux)
'x' (mode création du ux)
Seulement les 20 caractères (précisé Lecture du ux read() :
en paramètre) sont lus. ( \t <nomFlux>.read() tout jusqu'à
correspond à l'espace tabulation) EOF. .Attention à la taille de
la mémoire
<c l a s s ' s t r '> <nomFlux>.readline() jusqu'à
# my data \ t7 . 8 3 E=02\ t1 la n de la ligne ('\n' ou '\r')
Fermeture obligatoire du ux
<nomFlux>.close()
jlo@univ-jfc.fr Programmation et techniques scientiques 94 / 205
Gestion du ux d'information Présentation simplié d'un processeur
Bibliothèque os Principe du ux de données
Bibliothèque numpy Flux de données standard
Bibliothèque matplotlib Gestion d'autres types de périphériques et de données
Bilan
Tentative d'opération a2 :
print(a**2)
Outline
Outline
Database libraries
output stream
graphics
input stream
col1 col2 col3...
network : 24.5 28.2 10.6 ...
Python shell
...
serial port
sensors : metadata ... ... Processeur
metadata ... ...
central
bluetooth control system
ASCII les actuator
Ici est un text
...
hard drive :
...
FACILITE
la réception et le traitement des informations contenues dans un
ux de données
l'envoi des données aux périphériques
en suivant le protocole de jlo@univ-jfc.fr
transfert et leProgrammation
format deet techniques
donnéesscientiques
imposées.101 / 205
Gestion du ux d'information
Bibliothèque os Généralités sur les bibliothèques
Bibliothèque numpy Cadre d'utilisation
Bibliothèque matplotlib
Bilan
Database
matplotlib
libraries
output stream
col1 col2 col3...
graphics
input stream
24.5 28.2 10.6 ...
...
Python shell
network
serial port
metadata ... ... Processeur
bluetooth
metadata ... ...
central
ethernet control system
metadata ... ... actuator
sensors
hard drive :
numpy Ici est un text
...
scipy
...
os
ASCII les
jlo@univ-jfc.fr Programmation et techniques scientiques 106 / 205
Gestion du ux d'information
Bibliothèque os Généralités sur les bibliothèques
Bibliothèque numpy Cadre d'utilisation
Bibliothèque matplotlib
Bilan
Présentation de la bibliothèque os
=⇒ Bibliothèque os permet d'utiliser les fonctionnalités dépendantes du
système d'exploitation :
os.getcwd() → renvoie le chemin complet du répertoire actif (de
travail) avec la convention de nom du système d'exploitation. get
current working directory
os.path.basename(<chemin>) → renvoie le nom du répertoire de
base. (e.g. 'monProjetPython')
os.path.join(<chemin1>, <chemin2>) → renvoie joindre deux
chemin en utilisant la convention du système d'exploitation utilisé.
Cela permet d'aller dans des sous dossiers.
os.path.dirname(<chemin>) → renvoie le nom du répertoire parent.
(e.g. 'Documents' de './'Documents/monProjetPython')
os.chdir(<chemin>) → changer le repertoire de travail actif.
myPath_init = os.getcwd() /
myFilesubPath = 'sousDossier/text.txt'
myFilePath = os.path.join(myPath_init,
myFilesubPath) etc home
f = open(myFilePath, 'r')
msg = f.readline()
pDossier
print(myFilePath) monProjetPython
print(msg) text.txt
f.close()
script.py sousDossier
C\ Users \ Jonathan \home\ monProjetPython \
sousDossier / text . txt
j e s u i s un f i c h i e r dans l e sous d o s s i e r text.txt
sousDossier
myPath_actuel = os.getcwd() /
print('Actuel : ', myPath_actuel )
f = open('../pDossier/text.txt', 'r') etc home
msg = f.readline()
print(myFilePath) pDossier
print(msg) monProjetPython
f.close()
text.txt
Actuel : C:\\ Users \ Jonathan \home\ script.py sousDossier
monProjetPython
j e s u i s un f i c h i e r dans l e d o s s i e r p ar e n t
pDossier text.txt
AUCUN CHANGEMENT DU REPERTOIRE ACTIF
jlo@univ-jfc.fr Programmation et techniques scientiques 113 / 205
Gestion du ux d'information
Bibliothèque os Généralités sur les bibliothèques
Bibliothèque numpy Cadre d'utilisation
Bibliothèque matplotlib
Bilan
myPath_actuel = os.getcwd() /
print('Actuel : ', myPath_actuel )
f = open('sousDossier/text.txt', 'r')
msg = f.readline() etc home
print(myFilePath)
print(msg) pDossier
f.close() monProjetPython
Actuel : C:\\ Users \ Jonathan \home\ text.txt
monProjetPython script.py sousDossier
j e s u i s un f i c h i e r dans l e sous d o s s i e r
sousDossier
text.txt
Outline
Outline
6 Gestion du ux d'information
7 Bibliothèque os
8 Bibliothèque numpy
Cadre d'utilisation
Contraintes des structures natives de tableaux numériques
Utilisation arithmétique de la bibliothèque NumPy
Syntaxes de base
Importation & exportation simpliée chier ↔ tableau numérique
Take home message
9 Bibliothèque matplotlib
10 Bilan
jlo@univ-jfc.fr Programmation et techniques scientiques 116 / 205
Gestion du ux d'information Cadre d'utilisation
Bibliothèque os Contraintes des structures natives de tableaux numériques
Bibliothèque numpy Utilisation arithmétique de la bibliothèque NumPy
Bibliothèque matplotlib Syntaxes de base
Bilan Importation & exportation simpliée chier ↔ tableau numérique
Take home message
Database
matplotlib
libraries
output stream
col1 col2 col3...
graphics
input stream
24.5 28.2 10.6 ...
...
Python shell
network
serial port
metadata ... ... Processeur
bluetooth
metadata ... ...
central
ethernet control system
metadata ... ... actuator
sensors
hard drive :
numpy 7.8 9.5 6.5 9.6
9 ..
scipy → tabulated numerics
...
os
ASCII les
jlo@univ-jfc.fr Programmation et techniques scientiques 117 / 205
Gestion du ux d'information Cadre d'utilisation
Bibliothèque os Contraintes des structures natives de tableaux numériques
Bibliothèque numpy Utilisation arithmétique de la bibliothèque NumPy
Bibliothèque matplotlib Syntaxes de base
Bilan Importation & exportation simpliée chier ↔ tableau numérique
Take home message
vecteurs : e.g. A =
5
e.g. A = [ [2], [5], [1] ]
1 liste de 3 éléments : e.g.
B = [ 6, 3, 1 ]
vecteurs : e.g. B = 6 3 1 ,
liste de 3 listes à 3 éléments :
dim (1 × 3) e.g. : e.g.
matrices
: e.g. P = [
2 4 7 [2 , 4 , 7] ,
P = 5 8 1 dim. (3 × 3) [5 , 8 , 1] ,
1 0 0 [1 , 0 , 0]
]
addition
de deux vecteurs : Addition de deux listes
B1 = 6 3 1 , et B2 =
B_1 = [6, 3, 1]
1 4 6
B_2 = [1, 4, 6]
=⇒ print(B_1 + B_2)
C =B
1 + B2 =
7 7 7 [6 , 3 , 1 , 1 , 4 , 6]
⌢ Les opérateurs arithmétiques usuels ne fonctionnent pas sur des
listes comme sur les vecteurs/matrices.
jlo@univ-jfc.fr Programmation et techniques scientiques 119 / 205
Gestion du ux d'information Cadre d'utilisation
Bibliothèque os Contraintes des structures natives de tableaux numériques
Bibliothèque numpy Utilisation arithmétique de la bibliothèque NumPy
Bibliothèque matplotlib Syntaxes de base
Bilan Importation & exportation simpliée chier ↔ tableau numérique
Take home message
[12 , 6 , 1] [7 , 7 , 7]
Rappel accès en lecture et écriture d'un élément d'une liste par
indice :
A[O] accéder à l'élément indice 0 de la liste A
jlo@univ-jfc.fr Programmation et techniques scientiques 120 / 205
Gestion du ux d'information Cadre d'utilisation
Bibliothèque os Contraintes des structures natives de tableaux numériques
Bibliothèque numpy Utilisation arithmétique de la bibliothèque NumPy
Bibliothèque matplotlib Syntaxes de base
Bilan Importation & exportation simpliée chier ↔ tableau numérique
Take home message
SIMPLIFICATION
B = np.array([6, 3, 1])
lmd = 2 import numpy as np
n = np.size(B) B = np.array([6, 3, 1])
# initialisation C par des zeros C = B*2
C = np.zeros(n) print(C)
[12 , 6 , 1]
. . .Ó
import numpy as np
#creation de variable type
ndarray . . .û
SIMPLIFICATION
B_1 = np.array([6, 3, 1])
B_2 = np.array([1, 4, 6]) B_1 = np.array([6, 3, 1] )
n = np.size(B_1) B_2 = np.array([1, 4, 6])
# initialisation C par des zeros C = B_1 + B_2
C = np.zeros(n)
for i in range(0,n): [7 , 7 , 7]
C[i] = B_1[i]+B_2[i]
print(C)
[7 , 7 , 7]
. . .Ó
import numpy as np
#creation de variable type
ndarray . . .û
SIMPLIFICATION
B_1 = np.array([6, 3, 1])
B_2 = np.array([1, 4, 6]) B_1 = np.array([6, 3, 1] )
n = np.size(B_1) B_2 = np.array([1, 4, 6])
# initialisation C par des zeros C = B_1 * B_2
C = np.zeros(n)
for i in range(0,n): [ 6 , 12 , 6 ]
C[i] = B_1[i]*B_2[i]
print(C)
[ 6 , 12 , 6 ]
. . .Ó
import numpy as np
#creation de variable type
ndarray . . .û
SIMPLIFICATION
B_1 = np.array([6, 3, 1])
B_2 = np.array([1, 4, 6]) B_1 = np.array([6, 3, 1] )
n = np.size(B_1) B_2 = np.array([1, 4, 6])
# initialisation C par des zeros C = np.dot(B_1 , B_2)
C = np.zeros(n)
for k in range(0,n): 24
C[k] = B_1[k]*B_2[k]
print(C)
24
SIMPLIFICATION
n1 = np.size(B_1, 0) [1, 2, 3]])
m1 = np.size(B_1, 1) B_2 = np.array([[1, 1],
n2 = np.size(B_2, 0) [4, 2],
m2 = np.size(B_2, 1) [6, 6]])
C = np.zeros((n1,m2)) #init C = np.dot(B_1 , B_2)
for i in range(0,n1):
for j in range(0,m2): [ [ 2 4 18]
for k in range(m1): [27 2 3 ] ]
C[i,j]=(B_1[i, k]*
B_2[k, j]+C[i,j])
print(C)
jlo@univ-jfc.fr Programmation et techniques scientiques 126 / 205
Gestion du ux d'information Cadre d'utilisation
Bibliothèque os Contraintes des structures natives de tableaux numériques
Bibliothèque numpy Utilisation arithmétique de la bibliothèque NumPy
Bibliothèque matplotlib Syntaxes de base
Bilan Importation & exportation simpliée chier ↔ tableau numérique
Take home message
res=1 . . .û
for i in range(1,n+1):
import numpy as np
SIMPLIFICATION
res = res*i
c = np.exp(-3)
return res
print(c)
def myExp(x):
res = 0 0.049787068367863944
for i in range(30):
res = res+x**i/factor(i) ∃ d'autres fonctions usuelles :
return res np.sin(), np.cos(), np.tan()
, np.log10(), np.log(), np.
c = myExp(-3) power()
print(c)
opération sur des tableaux
0.049787068367863986 ndarray possible
jlo@univ-jfc.fr Programmation et techniques scientiques 127 / 205
Gestion du ux d'information Cadre d'utilisation
Bibliothèque os Contraintes des structures natives de tableaux numériques
Bibliothèque numpy Utilisation arithmétique de la bibliothèque NumPy
Bibliothèque matplotlib Syntaxes de base
Bilan Importation & exportation simpliée chier ↔ tableau numérique
Take home message
Syntaxes de base
Importation et génération basique
importation avec alias : import numpy as np
génération en précisant tous éléments par une liste et la fonction
array() : tabA = np.array(<liste>)
e.g. np.array([7,6,4,9]) →
array ([7. , 6. , 4. , 9.])
ou tabA = np.array(<liste de listes>)
e.g. np.array([[1, 0],[0, 1]]) →
array ([[1 , 0] ,
[0 , 1]])
Génération par création d'une copie par la fonction copy() :
A = np.array([7., 6., 4., 9.])
B = np.copy(A)
print(B)
Autres
Database
matplotlib
libraries
output stream
col1 col2 col3...
graphics
input stream
24.5 28.2 10.6 ...
...
Python shell
network
serial port
metadata ... ... Processeur
bluetooth
metadata ... ...
central
ethernet control system
metadata ... ... actuator
sensors
hard drive :
numpy 7.8 9.5 6.5 9.6
9 ..
scipy → tabulated numerics
...
os
ASCII les
jlo@univ-jfc.fr Programmation et techniques scientiques 135 / 205
Gestion du ux d'information Cadre d'utilisation
Bibliothèque os Contraintes des structures natives de tableaux numériques
Bibliothèque numpy Utilisation arithmétique de la bibliothèque NumPy
Bibliothèque matplotlib Syntaxes de base
Bilan Importation & exportation simpliée chier ↔ tableau numérique
Take home message
text file
# my data
7.83E-02 1.52E-01 6.00E-02 3.78E-02 1.97E-01
2.35E-02 4.55E-02 1.80E-02 1.13E-02 5.90E-02
6.04E-01 1.17E+00 4.63E-01 2.92E-01 1.52E+00
2.24E-01 4.35E-01 1.72E-01 1.08E-01 5.64E-01
5.72E-01 1.11E+00 4.38E-01 2.76E-01 1.44E+00
2.86E-02 5.54E-02 2.19E-02 1.38E-02 7.18E-02
7.20E-01 1.40E+00 5.52E-01 3.48E-01 1.81E+00
5.23E-01 1.02E+00 4.01E-01 2.53E-01 1.32E+00
2.23E-01 4.32E-01 1.71E-01 1.07E-01 5.60E-01
Outline
Outline
6 Gestion du ux d'information
7 Bibliothèque os
8 Bibliothèque numpy
9 Bibliothèque matplotlib
Cadre d'utilisation
Bases en représentation graphique des données ordonnées
Représentation graphique des données réparties par catégories
Représentation graphique des données 2D
Pour aller plus loin
Take home message
10 Bilan
jlo@univ-jfc.fr Programmation et techniques scientiques 145 / 205
Gestion du ux d'information Cadre d'utilisation
Bibliothèque os Bases en représentation graphique des données ordonnées
Bibliothèque numpy Représentation graphique des données réparties par catégories
Bibliothèque matplotlib Représentation graphique des données 2D
Bilan Pour aller plus loin
Take home message
Database matplotlib
libraries
output stream
col1 col2 col3...
graphics
input stream
24.5 28.2 10.6 ...
...
Python shell
network
serial port
metadata ... ... Processeur seaborn
bluetooth
metadata ... ...
central
ethernet control system
metadata ... ... actuator
sensors
hard drive :
numpy 7.8 9.5 6.5 9.6
9 ..
scipy → tabulated numerics
...
os
ASCII les
jlo@univ-jfc.fr Programmation et techniques scientiques 146 / 205
Gestion du ux d'information Cadre d'utilisation
Bibliothèque os Bases en représentation graphique des données ordonnées
Bibliothèque numpy Représentation graphique des données réparties par catégories
Bibliothèque matplotlib Représentation graphique des données 2D
Bilan Pour aller plus loin
Take home message
import matplotlib.pyplot as pl
yVect = y1 , y2 , y3 , y4
Chaque k -ème donnée est associée à une
coordonnée (xk , yk )
Tracer ≡ relier ces points de données.
y4
y3 Séparation de données :
(x2 , y2 ) vecteur d'abscisses/antécédents xVect
y2 vecteur d'ordonnées/images yVect
xVect & yVect :
y1 sont ordonnées selon xVect strictement
x1 x2 x3 x4 croissant/décroissant
=⇒ permet l'utilisation plot() de la
bibliothèque matplotlib.pyplot
xVect = x1 , x2 , x3 , x4
import matplotlib.pyplot as pl
import numpy as np
PI = np.pi
step = PI/100
xVect = np.arange(0, 4*PI, step)
yVect = np.sin(xVect)*np.exp(-0.1*xVect)
h1=pl.figure()
pl.plot(xVect, yVect, ls = '--', marker='s', ms = 5, markevery=10
, label = 'donnee')
pl.xlabel('x abscisse (unite)')
pl.ylabel('y ordonnee (unite)')
pl.title('Mon premier tracer')
pl.legend() #activation des labels des tracer
pl.grid()
pl.savefig('monpremierFIg.png', dpi = 150) #sauvegarde la gure
active
pl.show()
jlo@univ-jfc.fr Programmation et techniques scientiques 151 / 205
Gestion du ux d'information Cadre d'utilisation
Bibliothèque os Bases en représentation graphique des données ordonnées
Bibliothèque numpy Représentation graphique des données réparties par catégories
Bibliothèque matplotlib Représentation graphique des données 2D
Bilan Pour aller plus loin
Take home message
yVectTendance1 = np.exp(-xVect/10)
yVectTendance2 = -np.exp(-xVect/10)
2 Activer le canvas à superposer
pl.figure(h1)
3 Tracer les données :
pl.plot(xVect,yVectTendance1, ls = '--', color = 'k', label
= 'tendance')
pl.plot(xVect,yVectTendance2, ls = '-.', color = 'k', label
= 'tendance')
4 Mise à jour des légendes :
pl.legend()
Exemple avec 3 × 1 :
pl.figure()
pl.subplot(3,1, 1)
pl.plot(tVect, yVect)
pl.subplot(3,1, 2)
pl.plot(tVect, xVect)
pl.subplot(3,1, 3)
pl.plot(xVect, yVect)
pl.tight_layout()
jlo@univ-jfc.fr Programmation et techniques scientiques 157 / 205
Gestion du ux d'information Cadre d'utilisation
Bibliothèque os Bases en représentation graphique des données ordonnées
Bibliothèque numpy Représentation graphique des données réparties par catégories
Bibliothèque matplotlib Représentation graphique des données 2D
Bilan Pour aller plus loin
Take home message
x0 t0 y0
x1 t1 y1 m Interdépendance entre
.. chaque élément au même indice
.
xn−1 tn−1 yn−1
m ordonnancement identique
xytTab
tVectBis yVect
xVect tVect ∗
t0 y0
x0 t0 t1∗ y1
.. .. x = x(t) & y = y (t)
x1 t1 . .
.. .. . génération sans
. .
∗
tn−1 yn−1
.. .. respect de l'interdé-
xn−1 tn−1 . . pendance
∗
tm−1 tm−1
x0 t0 t0∗ y0
t1∗
x1
..
t1 y1
l Interdépendance entre
. les éléments rompue (partiel-
xytTab
xn−1 tn−1 ∗
tn−1 yn−1 lement) !!!
.. l Ordonnancement partielle-
. ment identique
∗
tm−1 ym−1
jlo@univ-jfc.fr Programmation et techniques scientiques 160 / 205
Gestion du ux d'information Cadre d'utilisation
Bibliothèque os Bases en représentation graphique des données ordonnées
Bibliothèque numpy Représentation graphique des données réparties par catégories
Bibliothèque matplotlib Représentation graphique des données 2D
Bilan Pour aller plus loin
Take home message
Outline
Outline
Bilan
graphics
Autres info
ANALYSE : pour la com- DESCRIPTIVE
préhension ?
Outline
Outline
0.49999999999999994
On sait que mais :
0.1 + 0.1 + 0.1 = 0.3 testCompare = 0.1 + 0.1 + 0.1 == 0.3
print(testCompare)
False
Erreurs d'arrondi & de troncature de nombres
Erreurs d'approximation
Erreurs de propagation (approximation & arrondi)
jlo@univ-jfc.fr Programmation et techniques scientiques 172 / 205
Sources des erreurs numériques
Notions des erreurs numériques Erreurs d'arrondi & troncature des nombres
Dérivées & intégrales numériques Propagation des erreurs d'arrondi et de troncature des nombres
Résolution numérique des équations algébriques non linéaires Erreurs d'approximation
Approximation et interpolation par une fonction Démarche de contrôle des erreurs numériques
Bilan mTake home message
Dénitions
TRONCATURE à m chires ARRONDI à m chires
X = ±.d1 d2 d3 . . . dm dm+1 × b e
X = ±.d1 d2 d3 . . . dm dm+1 × b e X∗ = ±.d1 d2 d3 . . . dm × b e
tronc(X ) = ±.d1 d2 d3 . . . dm × be ±.00 . . . 00vm+1 × b e
.
∃ un intervalle où le nombre ottant n'est pas représentable.
valeur trop grande =⇒ overow
valeur trop petite =⇒ underow
Epsilon machine
EPSILON le plus petit nombre tel que :
MACHINE :
(EPS) 1 + EPS ̸= 1
C'est la plus petite valeur dont l'opération addition n'est pas neutre, sa
valeur dépend de bits d'exposant.
import sys import numpy as np
sys.float_info.epsilon np.finfo(np.float32).eps
a+b = 1e+308
a = 1e+308
Test e g a l i t e : True
.
Les opérations des nombres dont l'ordre de grandeurs dièrent
grandement induit des erreurs.
L'opération entre deux nombres est limitée par la précision de la
machine (bits d'exposant), et donnée par l'epsilon machine.
jlo@univ-jfc.fr Programmation et techniques scientiques 179 / 205
Sources des erreurs numériques
Notions des erreurs numériques Erreurs d'arrondi & troncature des nombres
Dérivées & intégrales numériques Propagation des erreurs d'arrondi et de troncature des nombres
Résolution numérique des équations algébriques non linéaires Erreurs d'approximation
Approximation et interpolation par une fonction Démarche de contrôle des erreurs numériques
Bilan mTake home message
® Que se passe-t-il ? ®
jlo@univ-jfc.fr Programmation et techniques scientiques 180 / 205
Sources des erreurs numériques
Notions des erreurs numériques Erreurs d'arrondi & troncature des nombres
Dérivées & intégrales numériques Propagation des erreurs d'arrondi et de troncature des nombres
Résolution numérique des équations algébriques non linéaires Erreurs d'approximation
Approximation et interpolation par une fonction Démarche de contrôle des erreurs numériques
Bilan mTake home message
a = (1 + 1e-16) -1 a = 0.1+0.2+0.3
b = 1 + (1e-16 -1) b = 0.2+0.3+0.1
print('a =', a, '\n b =', b) print('a =', a, '\n b =', b)
a = 0.0 a = 0.6000000000000001
b = 1.1102230246251565 e =16 b = 0.6
m
Due à la limite de précision du codage IEEE 754 des nombres ottants,
l'associativité des opérations n'est plus garantie. Les opérations font
gurer des arrondis et des troncatures intermédiaires qui peuvent avoir
des conséquences négatives sur les calculs.
jlo@univ-jfc.fr Programmation et techniques scientiques 183 / 205
Sources des erreurs numériques
Notions des erreurs numériques Erreurs d'arrondi & troncature des nombres
Dérivées & intégrales numériques Propagation des erreurs d'arrondi et de troncature des nombres
Résolution numérique des équations algébriques non linéaires Erreurs d'approximation
Approximation et interpolation par une fonction Démarche de contrôle des erreurs numériques
Bilan mTake home message
dX dx
multiplications X = xn =n· ≈ n · εm
successives X x
1 dX dx
divisions succes- X = = −n · − ≈ n · εm
xn
sives X x
dX dx
additions succes- X =n·x = ≈ εm
sives X x
d 2θ dθ
+mg sin θ = 0
mL + fv L
dt 2 dt m
| {z }
fv : frottement≈0
Solution si frottement visqueux est négligé :
θ(t) ≈ α sin (ω (t − t0 ))
dθ
g
où α = α ω, et ω = g sin θ
dt t=0 L
.
Estimation d'une dérivée par taux d'accroissement est pourvue d'une
erreur d'approximation due à la troncature du développement :
df (x) f (x + h) − f (x)
≈ avec une erreur de surestimation de o (h)
dx h
jlo@univ-jfc.fr Programmation et techniques scientiques 190 / 205
Sources des erreurs numériques
Notions des erreurs numériques Erreurs d'arrondi & troncature des nombres
Dérivées & intégrales numériques Propagation des erreurs d'arrondi et de troncature des nombres
Résolution numérique des équations algébriques non linéaires Erreurs d'approximation
Approximation et interpolation par une fonction Démarche de contrôle des erreurs numériques
Bilan mTake home message
. Méthodes itératives .
p=1 linéaire
|errk+1 |
∃α ∈ R∗+ ∖ {+∞} lim
k→+∞ |errk |
p =α avec p=2 quadratique
p=3 cubique
l'itération k + 1 l'itération k + 1
dik+1 = Xk+1 − Xk Xk+1 − Xk
di(rk+) 1 =
Xk
jlo@univ-jfc.fr Programmation et techniques scientiques 195 / 205
Sources des erreurs numériques
Notions des erreurs numériques Erreurs d'arrondi & troncature des nombres
Dérivées & intégrales numériques Propagation des erreurs d'arrondi et de troncature des nombres
Résolution numérique des équations algébriques non linéaires Erreurs d'approximation
Approximation et interpolation par une fonction Démarche de contrôle des erreurs numériques
Bilan mTake home message
Si les solutions sont proches, on peut penser que la méthode est able ;
l'écart entre les deux solutions donne alors un ordre de grandeur de
l'erreur produite. À l'inverse, si une diminution du pas donne une solution
radicalement diérente de la précédente il est hautement probable que
l'on se trouve dans une région d'instabilité .
jlo@univ-jfc.fr Programmation et techniques scientiques 198 / 205
Sources des erreurs numériques
Notions des erreurs numériques Erreurs d'arrondi & troncature des nombres
Dérivées & intégrales numériques Propagation des erreurs d'arrondi et de troncature des nombres
Résolution numérique des équations algébriques non linéaires Erreurs d'approximation
Approximation et interpolation par une fonction Démarche de contrôle des erreurs numériques
Bilan mTake home message
convergence
calcul d'une grandeur conservative
évaluation de la sensibilité à la discrétisation (ou autres paramètres
de calculs).
Les erreurs
sont liés à la convention de codage des nombres arrondi
sont liés à la méthode de calculs approximation
se propage et peuvent s'amplier
Il existe des démarches pour éviter les erreurs :
regroupement de calcul des nombres du même ordre de grandeur
Éviter les opérations dont les opérandes sont des ordres de grandeurs
diérentes pour les opérations multiplication, addition et division.
Eviter les opérations dont les opérandes sont de même ordre de
grandeur pour la soustraction.
jlo@univ-jfc.fr Programmation et techniques scientiques 199 / 205
Notions des erreurs numériques
Dérivées & intégrales numériques
Résolution numérique des équations algébriques non linéaires
Approximation et interpolation par une fonction
Outline
Outline
Outline
Outline
Outline
Outline