Académique Documents
Professionnel Documents
Culture Documents
premire anne
CPGE (MPSI, PCSI,
TSI)
khalid labhalla
Cours de la premire anne CPGE (MPSI, PCSI, TSI)
Calcul de complexit pour dterminer un temps d'excution afin de savoir si le calcul est envisageable.
Chapitre 1 : Gnralits
a) Mmoire vive
Appele aussi RAM (Random Access Memory, mmoire accs alatoire). Cest la mmoire de travail de lordinateur, elle
permet un stockage provisoire des donnes et des programmes en cours dexcution, elle sefface compltement aprs
une coupure de courant (mmoire volatile).
b) Mmoire morte
Appele aussi ROM (Read Only Memory, mmoire en lecture seule) Elle contient le BIOS (Basic Input Output System)un
programme important au dmarrage de lordinateur quil ne faut pas modifier, elle ne s'efface pas lors de la mise hors
tension du systme (mmoire non volatile)
D. Les priphriques :
Les priphriques servent comme interface de communication entre lutilisateur et lordinateur.
Exemple
1 0 0 0 1 0 = 0x20 + 1x21 + 0x22 + 0x23 + 0x24 + 1x25
=0 + 2 +0 + 0 + 0 + 32= 34
(1000010)2=(34)10
Exercice :Convertir les nombres suivants en dcimal : 1010, 1001, 101101, 111000, 1001100101
3. Conversion Dcimale Hexadcimal
La conversion dun nombre dcimal en hexadcimal ce fait par divisions successives de 16
Exercice :Convertir en hexadcimal les nombres dcimaux suivants : 728, 126, 1024, 543
4. Conversion Hexadcimal. Dcimale
Elle se fait par la multiplication successive de 16 au lieu de 2 dans le cas binaire
Exercice :Convertir en dcimal les nombres hexadcimaux suivants : 128, 3C5, 9AE0, B3F
5. Conversion Binaire Hexadcimal
Pour passer du binaire lhexadcimal en dcomposant le nombre binaire en bloc de 4 bits et en restituant sa valeur
hexadcimale chacun de ses blocs
Exemple :
6. Conversion HexadcimalBinaire
Ce passage se fait de la mani.re inverse c.--d. en convertissant les chiffres qui composent le nombre
Hexadcimal en leurs quivalents binaires sur 4 bits
Exemple :
Exercice :
Convertir les nombres suivants :
De binaire au hexadcimal : 101001101, 11001110100, 110000101100
De hexadcimal au binaire : 5CFE, 05ABD, 3D
B. Reprsentation d'un entier ngatif
1. Mthode 1
Cette mthode consiste utiliser le bit du poids fort (le premier gauche) pour reprsenter le signe.
Exemple :
o +82 cod sur un octet : 01010010
o -82 cod sur un octet avec la mthode du bit de signe : 11010010
Comparer les deux nombres (les deux nombres sont prsents sur un octet) : 00000000 et 10000000
Les deux reprsentations prsente 0 sur un octet!!!
Pour ce raison la mthode du bit de signe seul n'est (presque) plus utilise.
2. Mthode 2
Cette mthode un peu plus efficace consiste, pour coder -n, prendre le complment un du codage de n, c'est dire de
remplacer chaque 0 par un 1 et inversement, puis on ajoute un.
Exemple :
o +82 cod sur un octet : 01010010
Le premier codage largement rpandu est lASCII (American Standard Code for Information Interchange). Dans ce codage
chaque caractre est reprsent sur 7 bits.
Donc 27=128 combinaison possibles chaquecombinaison reprsente uncaractre.
Exemple
Le code (41)16 (01000001)2 correspond au caractre A
Le code (61)16 (01100001)2 correspond au caractre a
Le code 58 (01100001)2 correspond au caractre :
1. La table code ASCII
3. Le code UNICODE
Le code Unicode est un systme de codage des caractres sur 16 bits mis au point en 1991. Le systme Unicode permet
de reprsenter n'importe quel caractre par un code sur 16 bits (216=65 536 caractres), indpendammentde tout systme
d'exploitation ou langage de programmation.
4. UNICODE avantages et inconvnients :
UNICODE peut coder nimporte quel caractre pour toutes les langues qui existe
Pour Unicode, un caractre prend 2 octetsc.--d. un texte prend deux fois plus de place qu'en ASCII. C'est du
gaspillage.
5. Prolongement
Le codage UTF-8, UTF-16
Un algorithme n'est excutable directement par aucune machine. Mais il a peut tre traduit facilement dans
tous les langages de programmation pour produire un programme (La phase de programmation)
Pour rsoudre un problme, il est conseill de rflchir d'abord l'algorithme avant d'crire le programme
en langage de programmation.
B. Langage de programmation
Unlangagedeprogrammationdestine formuler des algorithmes et produire des programmesinformatiques
C. Compilation et interprtation
1. La compilation
La compilation est loprationcharg de traduireun programme crit dans un langage source (langage de haut niveau) dans un
langage machine (langage binaire)
2. Linterprtation
Dans linterprtation chaque ligne du programme source analys est traduite au fur et mesure en quelques instructions du langage
machine, qui sont ensuite directementexcutes. Aucun programme objet n'est gnr.
3. Compilation Vs interprtation
En gnral, un interprte est beaucoup plus facile raliser qu'un compilateur.
En terme de temps, la compilation est une opration beaucoup plus lente que le chargement d'un programme dans un
interprte, mais l'excution d'un programme compil est beaucoup plus rapide que celle d'un programme interprt.
Le compilateur ne peut dtecter des erreurs dans le programme qu' partir d'une analyse statique : en examinant le
programme sans le faire tourner. Un interprte pourra aussi dtecter des erreurs de faon dynamique, lors de l'excution
du programme.
4. Compilateur + interprtes
Certains langages modernes tentent de combiner les deux techniques afin de retirer le meilleurde chacune. C'est le cas
de Python et aussi de Java. Lorsque vous lui fournissez un programmesource, Python commence par le compiler pour
produire un code intermdiaire, similaire un langage machine, que l'on appelle bytecode, lequel sera ensuite transmis
un interprteur pour l'excution finale. Du point de vue de l'ordinateur, le bytecode est trs facile interprter en
langage machine. Cette interprtation sera donc beaucoup plus rapide que celle d'un code source.
Varn : typen
Dbut
Instruction 1
Instruction n
Fin
B. Variables et constantes
Les variables et les constantes sont desdonnes utilises par lalgorithme.Ces donnessecaractrisentpartroisattributs :
Identificateur :Lenom deladonne.
Lavaleur :Lecontenudeladonne
Letype:Lensembledesvaleursquepeutprendreladonne.
1. Lesvariables :
Unevariableestune zone mmoire dontlavaleurpeutchangeraucoursdelexcutionde lalgorithme.
2. Lesconstantes :
Une constante est aussi une zone mmoire (comme les variables) sauf quelles gardent toujourslammevaleur au cours de
lexcution de programme.
3. Typededonnes
Typeentier :ladonneprenddesvaleursentirescomme:-54,-2,0,60,100,
Typerel(flottant):ladonneprenddesvaleursrellescomme:-105, -0.0002,3,4.2103,
Typecaractre:ladonneprenddesvaleurscomme:A,b,&,+,3,?,
Typechanedecaractres:ladonneprendcommevaleursun ensembledecaractres
comme:bonjour,bob3,s@mir
Typeboolen:ladonnene peutprendrequeles valeurssuivantes :vraietfaux
Syntaxe:Lire(nom_variable)
Exemple: lire(a)
b) LinstructiondEcriture
Linstructiondcriturepermetdafficher un rsultatoulavaleurdunedonne.
Syntaxe:Ecrire(nom_variable)
Exemple: Ecrire(a)
Ecrire("bonjour")
Ecrire("a=",a)
3. Exercices
1. EcrireunalgorithmequidemandedeuxentiersAetBlutilisateuret qui afficheleur sommeS
2. EcrireunalgorithmequipermetdecalculerleprixTTC,sachantleprixHTetletaux deTVA (20%)
3. Ecrire un algorithme qui permet de rsoudre une quation de premier degr (ax+b=0)
4. Les oprateurs et les expressions
a) Les oprateurs arithmtiques
+ pour laddition
- pour la soustraction
* pour la multiplication
/ pour la division rel (3/2=1.5)
DIV pour la division entire (3 DIV 2=1)
MOD pour le reste de la division entire (6 MOD 4 =2)
Remarque : laddition + prend le rle de la concatnation si les deux oprants sont des caractres.
Exemple : "az"+"erty"="azerty"
b) Les oprations logiques
ET ET logique
OU OU logique (inclusif)
OUX OUX logique (OU exclusif)
NON Ngation
c) Les tables de vrit
ET 0 1 OU 0 1 OUX 0 1 NON
0 0 0 0 0 1 0 0 1 0 1
1 0 1 1 1 1 1 1 0 1 0
Si la condition vaut Vrai alors le bloc dinstructions sera excut, sinon il sera ignor.
2. Structure alternative (deux choix)
Syntaxe :
SiConditionAlors
Instructions1 ;
Sinon
Instructions2 ;
Finsi
Si la condition vaut Vrai alors le bloc dinstructions1sera excut, et le bloc dinstructions2sera ignor, sinon le bloc
dinstructions2sera excut et le bloc dinstructions1 sera ignor.
Exemple 1
Un algorithme qui demande un nombre entier lutilisateur, et linforme ensuite si ce nombreest positif ou ngatif.
Algorithme Nature_nombre ;
Variable n : Entier ;
Dbut
Ecrire ('Entrez un nombre : ') ;
Lire( n) ;
Si n > 0 Alors
Ecrire ('Ce nombre est positif' ) ;
Sinon
Ecrire ('Ce nombre est ngatif' ) ;
Fin si
Fin.
Exemple 2 : Ecrire un algorithme qui rsoudre lquation ax+b=0
3. Structure alternative imbrique
Syntaxe :
Si condition1Alors
Instructions1 ;
Sinon
Si condition 2 Alors
Instructions2 ;
Sinon
Instructions3 ;
Fin si
Fin si
Exemple 1 :
Un algorithme qui demande un nombre lutilisateur, et linforme ensuite si ce nombre estpositif ou nul ou ngatif.
Algorithme Nature_nombre ;
Variable n : Entier ;
Dbut
Ecrire ('Entrez un nombre : ') ;
Lire (n) ;
Si n > 0 Alors
Ecrire ('Ce nombre est positif ') ;
Sinon
Si n = 0 Alors
Ecrire ('Ce nombre est nul') ;
Sinon
Ecrire ('Ce nombre est ngatif ') ;
Fin si
Fin si
Fin.
Exemple 2 : Ecrire un algorithme qui calcule lIGR en fonction des revenus
Revenu Taux
0 12 000 0%
12 000 20 000 10%
20 001 30 000 20%
30 001 50 000 30%
>50 000 40%
4. Structure choix multiple
Lorsque limbrication des alternatives devient importante, lutilisation de la structure choix multiple devient ncessaire.
Syntaxe:
Cas Variable ou Expression Vaut
Val 1 : Instructions 1 ;
Val 2 : Instructions 2 ;
Val n : Instructions n ;
Sinon
Autres Instructions ;
Fin Cas
Exemple :
Les jours de la semaine sont cods de 0 6. Ecrire un algorithme qui affiche le jour correspondant un code.
B. Les structures rptitives (itratives)
Les structures itratives permettent dexcuter une portion de code plusieurs fois de suite.
1. La structure : Pour
Syntaxe :
Pour variable de Vi Vf [pas k] faire
Instructions
Finpour
Cette forme ditration est utilise lorsque le nombre ditrations est connu
La variable dont on donne le nom va prendre successivement toutes les valeurs entires entre valeur initiale (Vi) et valeur
finale (Vf).
Pour chaque valeur prise par la variable, la liste des instructions est excute. La valeur utilise pour numrer les
itrations est appele valeur d'itration, indice d'itration ou compteur. L'incrmentation par 1 de la variable est implicite.
Exemple : lalgorithme suivant permet dafficher les nombres de 1 10
Algorithme afficher_1_10
I : entier
Dbut
pour i de 1 10 faire
crire(i)
fin pour
Fin
Exemple : Somme de n nombre
2. La structure : Tant que
Syntaxe :
Tant que (condition)
Instructions
FinTantQue
Lensemble des instructions doit tre excuttant que la condition est vraie. Lorsque la condition est fausse, le
processus itratif sarrte.
Exemple : Algorithme qui permet de Saisir une liste des nombre dont le dernier est 0.
Algorithme saisie_0
i : entier
dbut
i1
tantque (i<>0)
lire(i)
finTantQue
fin
C. Lanalyse descendante :
Une approche descendante du problme consiste dcomposer le problme en sous-problmes plus simples rsoudre.
Si certains sous-problmes sont dcomposables en problmes plus petits, on les dcompose encore. Ensuite, chaque
sous-problme est rsolu sparment et enfin, ils sont rassembls pour composer la solution complte. Dure
1. Application de la dmarche descendante : La liste des nombres premiers
On veut crire un algorithme qui liste les nombres premiers inferieurs un nombre n.
Il sagit donc d'afficher les nombres premiers inferieurs n : on va donc utiliser une boucle Pour.
POUR i DE 2 jusqu' n FAIRE
Tester si i est premier
FinPour
1) Le langage Python
Cest un langage dvelopp par Guido van Rossum en 1991 aux Pays-Bas. Il est caractris par une syntaxe simple, claire
et cohrente.
2) Caractristiques de Python
Python :
est portable(Unix, MacOS, Windows, . . .)
est gratuit (sans restriction dans des projets commerciaux).
est simple(programmes trs compacts et trs lisibles).
Gre ses ressources(mmoire, descripteurs de fichiers...) sans interventiondu programmeur
est orient-objet.
est dynamiquement typ (pas besoin de dclarer les variables).
est extensible (on peut linterfacer avec des bibliothques C existantes).
donne accs une grande varit de services
3) Type de base
Python est un langage typ dynamiquement : le type dune variable est dtermin par linterprteur au moment de
lexcution et na pas besoin dtre dclar :
Exemple :
a=1 # a est de type integer
b = 2.0 # b est de type float
a = "le chat" # a est maintenant de type string
c = 3 + 2j # nombre complexes
print(c) # affiche (3+2j)
d = 1 == 2 # boolens
4) Les operateurs
a) Les operateurs logiques
== (galit), != , (diffrence), >,<, >=, <=
b) Les operateurs arithmtiques
+, - , * , / , **(puissance), // (division entire), % (Modulo)
c) Les operateurs boolens
not(a) (non a),and (et),or (ou)
5) Les variables
Une variable est un identificateur associ une valeur.
une identificateur est form par les caractres [a..z][A..Z][0..9]{_} et ne commence pas par un chiffre.
accents possibles mais viter
mots cls du langage interdits (if else and)
sensible la casse min/MAJ
a) Laffectation
a = 2 #au lieu de dire a gal 2, dites a reoit 2.
a = a + 1 # incrmentation
a = a - 1 # dcrmentation
a += 2 # idem : a = a + 2
c=d=8 # affectation de droite gauche
a,b=10,20 # idem a=10 et b=20
b) Linstruction de lecture
La fonction input permet de lire au clavier une valeur donne par lutilisateur, et la retourn sous forme dunechaine de
caractres. Il faut donc changer son type (transtyper) si ncessaire
S=input("entrez un mot :") #equivalent ecrire("entrer un mot") et lire(S) S est de type String
n = int(input("Entrez un entier : ")) #equivalent ecrire("entrer un entier") et lire(n)n est de type integer
c) Linstruction dcriture
La fonction printse charge dafficher la reprsentation textuelle des informationsqui lui sont donnes en paramtre, en
plaant un blanc sparateur entre deux informations, et en faisant un retour la ligne la fin de laffichage (le sparateur
et la fin de ligne peuvent tre modifis)
a,b=25,35
print(a,"+",b,"=",a+b) #affiche 25 + 35 = 60
print(a,b,sep="+", end="="); print(a+b) #affiche 25+35=60
if condition1:
Indentation
Bloc dinstruction1
elif condition2 :
Bloc dinstruction2
else:
Bloc dinstruction3
Les blocs elif et else sont optionnels
b) Les boucles
La boucle while
while condition1 :
Indentatio
Bloc dinstruction1
n
La boucle for
for i in range(vi,vf,pas) :
Indentatio
Bloc dinstruction1
n
D. Vrification du code
1. Terminaison et invariants de boucle
Une boucle ou une itration est une structure rptitive.
Il faut toujours s'assurer que 2 problmes soient rsolus :
Probleme1 : la terminaison : est-ce que la boucle se termine ?
Problme 2 : la preuve de programme : le programme est-il correct ? est-ce que le rsultat obtenu la fin de
l'itration est celui attendu ?
Pour le 2me type de problme, on utilise ce que l'on appelle un invariant de boucle qui est un prdicat qui ne change pas
au cours de la boucle. C'est donc une proposition qui est vraie
Avant l'excution de la boucle (pr-condition)
chaque tour de boucle
la sortie (post-condition)
2. Tests des segments itratifs
Exemple :calcule de 5!
Algorithme cinq_F
Variables p, k : entier
dbut
p 1
k 1
tant que (k<= 5)
p p * k TESTE
k k+1
fin Tant Que
crire (" 5! =", p)
FIN
3. Exemple 2
A := a; N := n; R := 1;
Tant que N > 0 faire
Si N pair alors
A := A A;
N := N/2;
Sinon
R := R A;
N := N 1;
Fin si ;
fin tant que
Preuve : La valeur de N 0 dcrot strictement chaque tour de boucle, donc lalgorithme se termine.
Au dbut on a AN R = an. Si en entre de boucle AN R = an alors il est facile de voir que dans les deux cas N pair ou N
impair on a la mme galit en sortie de boucle. Mais la fin on a N = 0 et par consquent R = an.
Algorithme factoriel
Variables i, resultat
dbut
resultat 1
pour i allant de 2 n faire
resultat resultat * i
fin pour
fin
On peut fixer le temps dexcution constants chaque type dinstruction :
Affectation dentier : ae
Comparaison dentier : ce
Opration lmentaire sur des entiers : oe
Lexcution de la fonction va prendre : ae+ (n-1)*(ae+oe)
Au total le temps de lexcution sera sous la forme de a*n+b
a et b dpendent du langage de programmation et de lordinateur utilis.
Exercice :
Ecrire un algorithme qui calcule le dveloppement limit lordre n de sin x, avec
I. Introduction
A. Prsentation
Les applications informatiques simples sont labores partir les trois constructeurs de la programmation structure
: la squence, l'alternative et la rptitive.
Lors du dveloppement d'applications plus complexes il est important de dcouper l'application en parties distinctes (sous
algorithme) correspondant des modules applicatifs ce quon appel : les fonctions et les procdures.
B. Approche du concept modulaire
Une application informatique correspond la gestion de donnes qui sont traites pour fournir des rsultats.
Traitement
Donnes Rsultats
Algorithme
La gestion modulaire dune application consiste dcomposer un problme en sous problme, chaque sous problme associ
un module (fonction ou procdure).
Traitement
Sous algorithme1 (Module1);
Donnes Rsultats
Sous algorithme2 (Module2);
Sous algorithme3 (Module3)
Chaque module accepte des donnes (entres) et au plus un rsultat.
Les traitements sont alors encapsuls, ils deviennent invisibles ses utilisateurs qui nen retiendront que les
fonctionnalits.
C. Exemple
fonction permutation1(x, y : entier)
Variables b, z: entier # dclaration des variables locales
Dbut
a=42 ; b=33
z=x ; x=y ; y=z
crire (a, b, x, y)
Fin
Algorithme permutation
Variables a, b, x, y : entier # dclaration des variables globales
Dbut
a=1 ; b=15 ;
x=3 ; y=40;
permutation1(17,4)
crire (a, b, x, y)
Fin
Comme rsultat de lalgorithme on aura :
42 33 4 17 # lexcution de linstruction crire(a, b, x, y) de la fonction teste1
42 15 3 40 # lexcution de linstruction crire(a, b, x, y) du corps de lalgorithme
La porte des variables locales b et z et les paramtres x et y sont juste dans la fonction permutation1, donc hors de la
fonction permutation1, les variables b, x et y (variables globales) prennent les valeurs affectes hors de la fonction.
Les fonctions n'obtiennent que les valeurs de leurs paramtres et n'ont pas d'accs aux variables elles-mmes(le passage
des paramtres par valeur) contrairement dun passage des paramtres par rfrence.
Puisque on na pas une redfinition de la variable a dans la fonction permutation1 donc cette fonction utilise la mme
variable globale a dfinit dans le corps de lalgorithme.
Une variable utilise lintrieure dune fonction est une variable locale
Une variable utilise lintrieure dune fonction et elle prcde par linstruction global est une variable global
Exemple1 :
a=0
def ajouter():
global c
Les variable a et c sont des variables globales
b=5 ; a = a+1 ; c=3 Explication La variable b est une variable local
print(a,b,c)
ajouter()
print(a, c)
Exemple2 :
a=0
def ajouter(): 6
Rsultat 0
a=5 ; a = a+1
print(a)
La variable a dans la fonction ajouter() est une
ajouter()
variable locale.
print(a)
Exemple2 :
a=0
def ajouter(): 6
Rsultat 6
global a
a=5 ; a = a+1
Avec linstruction global, la variable a dans la fonction
print(a)
ajouter est une variable global.
ajouter()
print(a)
B. Syntaxe
[Nom_de_la_fonction=] lambda paramtre1, ; parametren : instruction de retour
C. Exemple
>>> g=lambda x : x*x
>>> g(3)
9
>>>(lambda x : x*x)(3)
9
Notez la syntaxe condense : il ny a pas de parenthses autour de la liste darguments et le mot-cl return est
manquant (il est implicite, la fonction complte ne pouvant tre quune seule expression).
Remarquez aussi que la fonction na pas de nom, mais quelle peut tre appele travers la variable laquelle elle est
assigne.
IV. TP
1. Exercice 1
Refaire lexercice 5 de la srie N3 en python.
2. Exercice 2 n!
Pour calculer le nombre de combinaisons n parmi p sans tenir compte de lordre, on utilise : Cnp
p!(n p)!
Ecrire un programme Python qui contient :
- une fonction qui calcule le factoriel dun nombre pass en paramtre.
- un programme principal qui lit n et p, calcule n! en utilisant la fonction dfinie ci-dessus.
p! ( n p )!
3. Exercice 3 :Jeu du nombre secret
Ce jeu est trs simple. L'ordinateur tire un nombre au hasard entre x et y et vous avez n essais pour le trouver. Aprs
chaque tentative, l'ordinateur vous dira si le nombre que vous avez propos est trop grand, trop petit, ou si vous avez
trouv le bon nombre. En Python crire une procdure secret(x, y, n) qui ralise ce jeu.
Vous pouvez utiliser la randinit(a,b) du module random pour gnrer un entier entre a et b
Exemple de partie
J'ai choisi un nombre entre 1 et 30 pour 5 essais
A vous de le deviner en 5 tentatives au maximum !
Essai no 1
Votre proposition : 15
Trop petit
Essai no 2
Votre proposition : 22
Trop grand
Essai no 3
Votre proposition : 16
Bravo ! Vous avez trouv 16 en 4 essais
I. Introduction
Ecrire un algorithme qui stock les valeurs de 20 notes dun tudiant et de calculer leurs moyen.
La seule solution dont nous disposons lheure actuelle consiste dclarer vingt variables, appeles par exemple N1,
N2, N3, etc. et aprs une succession de vingt instructions Lire (lire(N1), lire(N2), lire(N3), etc.) et enfin calculer le
moyen :
Moy (N1+N2+N3+N4+N5+N6+N7+N8+N9+N10+N11+N12+N13+N14+N15+N16+N17+N18+N19+N20)/20
Cest bigrement laborieux. Et pour un peu que nous soyons dans un programme de gestion avec quelques centaines ou
quelques milliers de valeurs traiter donc la tche est trs difficile.
Si en plus on est dans une situation o on ne peut pas savoir davance combien il y aura de valeurs traiter, l cest
presque impossible.
Le nombre qui, au sein dun tableau, sert reprer chaque valeur sappelle indice. Chaque fois que lon doit dsigner un
lment du tableau, on fait figurer le nom du tableau, suivi de lindice de llment, entre crochs [].
1. Dfinition du tableau
Un tableau est une variable
3. Exercices:
a) Exrcice1
Ecrire un algorithme qui dclare et remplisse un tableau de 7 valeurs numriques en les mettant toutes
zro.
b) Exercice2
Ecrire un algorithme qui dclare un tableau de 20 notes, dont on fait ensuite saisir les valeurs par lutilisateur.
Le programme doit calculer la moyenne des ces notes
c) Exercice 3
Algorithme Exr3
Variables
N : Tableau[0 .. 6] en Entier
i, k : Entier
Dbut
N[0] 1
Pour k allant de 1 jusqu 6 faire
N[k] N[k-1] + 2
Fin pour
Pour k allant de 1 jusqu 6 faire
Ecrire N[i]
Fin pour
Fin
I. Introduction
Les lments dun tableau (vecteur) peuvent tre de type quelconque. On peut avoir par exemple un vecteur
dentier, un vecteur de caractres ou un vecteur dobjets composs. Les lments dun vecteur peuvent aussi
tre des vecteurs. On parlera alors de vecteur de vecteurs ou tout simplement de matrice ou encore tableau
deux dimensions.
A. Prsentation
1. Dclaration
Nom_Tab : Tableau[nbrelignes][nbrescolonne] de type des lments
Pour accder llment de la ime ligne ,jme colonne d'un tableau en utilisant la syntaxe suivante :
Nom_Tab[i][j]
2. Exemples
a) Exemple1
tab : Tableau[2][1] de Rel
tab[0][0] 2.0 met la valeur 2.0 dans la case 0,0 du tableau tab
tab[1][0] 1.2
tab[2][0] 3.4
tab[0][1] 2.6
tab[1][1] -2.9
tab[2][1] 0.5
Permet de reprsenter le tableau suivant :
Indices colonnes
0 1
Indices lignes
0 2.0 2.6
1 1.2 -2.9
2 3.4 0.5
b) Exemple2
Lecture dune matrice de taille (m,n)
3. Exercices
Ecrire un algorithme qui permet de:
Dclarer les matrices M1, M2, A, B, C de 5 lignes et 7 colonnes.
Saisir les deux matrices M1 et M2 par lutilisateur.
Crer une fonction somme(M1,M2) qui retourne la matrice A somme de deux matrices M1 et M2.
Crer une fonction produit(M1,M2) qui retourne la matrice B produit de deux matrices M1 et M2.
Crer une fonction puissance(n) qui retourne la matrice C =(M1)n : M1 la puissance n
Afficher A, B et C
1. Dfinition
Une liste est une structure de donnes qui permet de stocker plusieurs valeurs (comme un tableau) mais de type
htrogne simple ou composs
2. Cration
Pour construire une liste :
>>>L1=[1,2,3,4]
>>>L2=[a,b,c,d,e]
>>>L3=6*[0] # permet de crer une liste de 6 zros [0,0,0,0,0,0]
Comme dans un tableau les valeurs sont repres par des indices i commenant par 0
3. Accs un lment
>>>L1
>>>[1,2,3,4]
>>>L1[1] #affiche : 2
>>>L1[2]=6
4. Manipulation
a) L[i:j]
Comme pour nimporte quelle squence : L[i:j] renvoie une liste constitues des composantes i j(exclu).
>>>L2=[a,b,c,d,e]
>>>L2[1 :3] #affiche : [b,c]
b) La mthode append
Pour ajouter un lment une liste en utilise la mthode append
>>>L1=[1,2,3,4]
>>>L1.append(5)
>>>L1 #affiche : [1,2,3,4,5]
c) La fonction len
len(liste) renvoie la taille (le nombre dlments de la liste)
>>>L1=[1,2,3,4]
>>>len(L1) #affiche : 4
d) La fonction range
>>> list(range(13)) #affiche : [0,1,2,3,4,5, 6, 7, 8, 9, 10, 11, 12]
>>> list(range(3,16,3)) #affiche : [3, 6, 9, 12, 15]
e) La fonction remove
>>>L.remove(val) #supprime la premire valeur de val
5. Les matrices
Une matrice est un tableau de deux dimensions ou un tableau de tableau unidimensionnel, en plus gnrale une liste
des listes. Donc pour crer une matrice il suffit de crer une liste de liste.
La saisir dune matrice de 2 lignes et 3 colonnes Laffichage dune matrice de 2 lignes et 3 colonnes
L=[] for i in range(2):
print("La saisie sera effectue ligne par ligne") for j in range(3):
for i in range(2): print(L[i][j],end="\t")
print("Saisie de ligne ",i+1) print()
L1=[]
for j in range(3):
print("entrer la valeur ",j+1,end=":")
val=int(input())
L1.append(val)
L.append(L1)
\' permet dinsrer des apostrophes dans une chane dlimite par des apostrophes.
\\ permet dinsrer des contre-barres dans une chane.
Mme sils sont crits avec deux symboles, les caractres spciaux comptent pour un seul caractre. :
Exemple : len(\n) retourne 1
II. Oprations sur les chanes
1. La taille dune chaine :La fonction len(ch)
Renvoie la longueur de la chane ch
>>> ch = "cpge agadir"
>>>len(ch) retourne 11
2. La concatnation
La concatnation est lopration qui consiste construire une chane de caractres en mettant bout bout deux autres
chanes de caractres.
En Python cette opration est dsigne par le symbole +.
>>>ch1,ch2= "cpge", " agadir"
>>>ch1+ch2 retourne "cpge agadir"
3. Rptition
Loprateur de rptition dune chane est dsigne par le symbole *.
>>> 'Hello world!' * 3 retourne 'Hello world!Hello world!Hello world!'
4. Ordre
Il existe une relation dordre naturel pour les chanes de caractres : lordre lexicographique.
Par exemple bonjour est plac avant salut dans le dictionnaire, donc lexpression boolenne "bonjour" < "salut" est
vraie.
>>> "bonjour" < "salut" retourne True
Cependant les minuscules sont considres comme tant places aprs les majuscules :
>>> "bonjour" > "Salut" retourne True
5. Conversion numriques/chanes
Pour convertir une chane ne contenant que des caractres numriques en un nombre entier ou flottant, on utilise les
fonctions int et float.
>>> int ("34") retourne 34
>>> float ("34") retourne 34.0
La fonction str est la fonction rciproque des prcdentes. On utilise pour effectuer la conversion en sens inverse
>>> str (45.7) retourne '45.7'
Le premier caractre (le plus gauche) dune chane de longueur n a pour indice 0 et le dernier lindice n1.
Lindice est mis entre crochets.
>>> x = "hello world!"
>>> x[0] retourne 'h'
Lindice peut tre ngatif. Dans ce cas, il dsigne un caractre repr depuis la fin de la chane.
>>> x[-1] retourne '!'
6. Sous-chanes
>>> x = 'Hello World!'
>>> x[2:4] retourne 'll'
>>> x[2:7 :2] retourne 'loo'
Si lindex de dbut est manquant, Python considre que le dbut est 0,
>>> x[:5] retourne 'Hello'
I. La recherche dichotomique
1. Principe
Une autre technique de recherche en table (tri) est la recherche dichotomique. Au lieu de rechercher
squentiellement (recherche linire), on compare la valeur chercher la valeur qui se trouve au milieu de la table. Si
c'est le mme la valeur donc est trouve, sinon on recommence soit sur la premire moiti si la valeur recherche est
plus petite que la valeur rang au milieu de la table soit sur la deuxime moiti si la valeur recherche est plus grande
que la valeur rang au milieu de la table.
2. Programme en python
Cette fonction retourne lindice dune valeur cherche si la valeur est existe dans le tableau et -1 sinon.
def RechercheDichotomique(x) :
g = 1; d = len(T);
i = (g + d) // 2;
while (x != T[i]) and (g <= d) :
if x < T[i] : d = i-1
else : g = i+1
i = (g + d) // 2
if x == T[i] : retourn i
else : retourn -1;
B. Trie bull
1. Principe
Le principe du tri bulle est de comparer deux deux les lments e1 et e2 conscutifs d'un tableau et d'effecteur une
permutation si e1 > e2. On continue de trier jusqu' ce qu'il n'y ait plus de permutation.
2. Programme
def Tri_bulle (T) :
permut = True
n=len(T)
while permut==True :
permut = False
for i in range( n-1) :
if T[i] > T[i+1] :
T[i],T[i+1]= T[i+1],T[i]
permut = True
premires, ... De manire gnrale on suppose les i-1 premires cartes tries. On prend la ime carte, et on essaie de la
mettre sa place dans les i-1 cartes dj tries. Et on continue jusqu' i=N
2. Programme
def Tri_insertion(T):
for j in range(1, len(T)):
i=j-1
tmp = T[j]
while i > -1 and T[i] > tmp:
T[i+1] = T[i]
i -= 1
T[i+1] = tmp
III. TP
A. TP1
1. Les tris (comparaison)
Implmenter en Python les trois algorithme de tris et laide time.clock() du module time qui retourne le temps en
seconde de CPU on mesurer le temps dexcution dun programme ou fonction.
Pour cela il suffit juste de calculer le temps de CPU au dbut de programme et la fin du programme et calculer la
diffrence.(pour tester on utiles la liste L=[12,3,4,34,44,5,55,6,5,41,0,13,17,15,11,21,10,57,100,98,6,90,7])
En cherchant une valeur (21 par exemple pour la liste L), comparer les deux mthodes de recherche au niveau de
temps dexcution.
B. TP2
Ecrire un programme python qui permet de saisir et de stocker n lve avec leurs notes dans un tableau puis les afficher
en ordre dcroissant selon leurs notes (si deux lves ou plus ont la mme note il faut les afficher selon lordre
alphabtique) puis qui cherche la prsence ou non de nom dun lve saisi par lutilisateur.
def crer_pile() :
return []
def pilevider(P) :
if len(P)==0 :return True
else : return False
def empiler(P,e) :
P.append(e)
def depiler(P) :
if pilevide(P)==False : P.pop()
else : print("Pile vide")
def taille(P) :
return len(P)
def sommet(P) :
return P[-1]
3. Exercice paresthsie
Nous allons appliquer une structure de pile pour crer une fonction permettant de dterminer si une chane de
caractre passe en argument est ou non bien parenthse
A laide des piles crire une fonction parenthesage(mot) qui retourne True su le mot est bien parenths et False sino
B. Les files
1. Prsentation
Une file (queue) est une structure de donnes de type FIFO (first in first out) : le premier entr est le premier sorti. Elles
peuvent par exemple tre utilises afin de mmoriser des donnes en attente de traitement. Une file F est entirement
dfinie par deux oprations :
A cela il faut ajouter une manire de crer une file vide, et de tester si la file est vide. La premire valeur de la file F est
la tte de la file et le dernier est la queue de la file.
Le type liste intgre dj toutes les mthodes pour raliser une file :
List.append(x) qui ajoute un lment la fin de la liste (la pile)
List.pop(0) : qui enlve de la liste (la file) le premier lment de la liste.
list[0] :est llment de la tte de la liste(la file)
def crer_file() :
return []
def filevider(F) :
if len(F)==0 :return True
else : return False
def enfiler(F,x) :
F.append(x)
def defiler(F) :
if filevide(F)==False : F.pop(0)
else : print("File vide")
def tete(F) :
return F[0]
def taille(F) :
return len(F)
1. Exercice paresthsie
Soient F est une file. En utilisant seulement une pile P et les oprations des PILE et FILE dj vu, crire un programme
qui renverse lordre des lments de F (la file dattente sera renverse, llment de la tte sera situ la queue et ainsi
de suite).
Remplir F par les entiers de 1 jusqu 10.
Dictionnaires et tuples
I. Les dictionnaires
1. Prsentation
Les dictionnaires se rvlent trs pratiques lorsque vous devez manipuler des structures complexes dcrire et que les
listes prsentent leurs limites. Les dictionnaires sont des collections non ordonnes d'objets, c--d qu'il n'y a pas de
notion d'ordre (i. e. pas d'indice). On accde aux valeurs d'un dictionnaire par des cls.
>>> ani1 = {}
>>> ani1['nom'] = 'girafe'
>>> ani1['taille'] = 5.0
>>> ani1['poids'] = 1100
>>> ani1
{'nom': 'girafe', 'poids': 1100, 'taille': 5.0}
>>> ani1['taille']
5.0
En premier, on dfinit un dictionnaire vide avec les symboles {} (tout comme on peut le faire pour les listes avec []).
Ensuite, on remplit le dictionnaire avec diffrentes cls auxquelles on affecte des valeurs (une par cl). Vous pouvez
mettre autant de cls que vous voulez dans un dictionnaire (tout comme vous pouvez ajouter autant d'lments que
vous voulez dans une liste). Pour rcuprer la valeur d'une cl donne, il suffit d'utiliser une syntaxe du
style dictionnaire['cle'].
2. Mthodes keys() et values()
Les mthodes keys() et values() renvoient, comme vous vous en doutez, les cls et les valeurs d'un dictionnaire (sous
forme de liste) :
>>> ani1.keys()
['nom', 'poids', 'taille']
>>> ani1.values()
['girafe', 1100, 5.0]
On peut aussi initialiser toutes les cls d'un dictionnaire en une seule opration :
>>> ani2 = {'nom':'singe', 'taille':1.75, 'poids':70 }
3. Liste de dictionnaires
En crant une liste de dictionnaires possdant les mmes cls, on obtient une structure qui ressemble une base de
donnes :
>>> animaux = [ani1, ani2]
>>> animaux
[{'nom': 'girafe', 'poids': 1100, 'taille': 5.0}, {'nom': 'singe', 'poids': 70, 'taille': 1.75}]
>>>
>>> for ani in animaux:
... print ani['nom']
...
girafe
singe
II. Tuples
Les tuples correspondent aux listes la diffrence qu'ils sont non modifiables. On a vu la section prcdente que les
listes pouvaient tre modifies par des rfrences; les tuples vous permettent de vous affranchir de ce problme.
Pratiquement, ils utilisent les parenthses au lieu des crochets :
>>> x = (1,2,3)
>>> x
(1, 2, 3)
>>> x[2]
3
>>> x[0:2]
(1, 2)
>>> x[2] = 15
Traceback (innermost last):
File "<stdin>", line 1, in ?
TypeError: object doesn't support item assignment
L'affectation et l'indiage fonctionne comme avec les listes, mais si l'on essaie de modifier un des lments du tuple,
Python renvoie un message d'erreur. Si vous voulez ajouter un lment (ou le modifier), vous devez crer un autre tuple
:
>>> x = (1,2,3)
>>> x + (2,)
(1, 2, 3, 2)
Remarquez que pour utiliser un tuple d'un seul lment, vous devez utiliser une syntaxe avec une virgule (element,),
ceci pour viter une ambigut avec une simple expression. Autre particularit des tuples, il est possible d'en crer de
nouveaux sans les parenthses, ds lors que ceci ne pose pas d'ambigut avec une autre expression :
>>> x = (1,2,3)
>>> x
(1, 2, 3)
>>> x = 1,2,3
>>> x
(1, 2, 3)
Toutefois, nous vous conseillons d'utiliser systmatiquement les parenthses afin d'viter les confusions.
Enfin, on peut utiliser la fonction tuple(sequence) qui fonctionne exactement comme la fonction list, c--d qu'elle prend
en argument un objet squentiel et renvoie le tuple correspondant :
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> tuple(range(10))
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
>>> tuple("ATGCCGCGAT")
('A', 'T', 'G', 'C', 'C', 'G', 'C', 'G', 'A', 'T')
Remarque : les listes, dictionnaires, tuples sont des objets qui peuvent contenir des collections d'autres objets. On peut
donc construire des listes qui contiennent des dictionnaires, des tuples ou d'autres listes, mais aussi des dictionnaires
contenant des tuples, des listes, etc.
for k in range(n):
suivant=suite[k]+suite[k+1]
suite.append(suivant)
print(suite)
Ce programme gnre les premiers termes de la clbre suite de Fibonacci! Imaginons qu'un ami, qui n'y connat rien
en programmation, vous demande de lui envoyer par courriel la liste des 300 premiers termes.
La solution est au lieu dafficher les rsultats directement sur lcran, il faut les stocker sur un support physique do
limportance des fichiers
II. Manipulation
1. Ouverture du fichier
D'abord, il nous faut ouvrir le fichier avec Python. On utilise pour ce faire la fonction open. Elle prend en paramtre :
le chemin (absolu ou relatif) menant au fichier ouvrir ;
le mode d'ouverture.
Le mode est donn sous la forme d'une chane de caractres. Voici les principaux modes :
'r' : ouverture en lecture (Read).
'w' : ouverture en criture (Write). Le contenu du fichier est cras. Si le fichier n'existe pas, il est cr.
'a' : ouverture en criture en mode ajout (Append). On crit la fin du fichier sans craser l'ancien contenu du
fichier. Si le fichier n'existe pas, il est cr.
On peut ajouter tous ces modes le signe b pour ouvrir le fichier en mode binaire.
Exemple :
>>> mon_fichier = open("fichier.txt", "r")
2. Fermer le fichier
N'oubliez pas de fermer un fichier aprs l'avoir ouvert. Si d'autres applications, ou d'autres morceaux de votre propre
code, souhaitent accder ce fichier, ils ne pourront pas car le fichier sera dj ouvert.
>>> mon_fichier.close()
3. Lire l'intgralit du fichier
Pour ce faire, on utilise la mthode read. Elle renvoie l'intgralit du fichier :
# ouverture du fichier test.txt en mode read 'r' (lecture en mode texte)
Fichier = open('test.txt','r')
# lecture dans le fichier avec la mthode read()
chaine = Fichier.read()
# affichage du contenu du fichier
print('Contenu du fichier :\n' + chaine)
# fermeture du fichier avec la mthode close()
Fichier.close()
4. Ecriture dans un fichier
L'criture dans un fichier se fait avec la fonction open() en mode criture :
NomFichier = 'test.txt'
# cration et ouverture du fichier test.txt en mode write 'w' (criture)
# si le fichier test.txt existe dj, il est cras
Fichier = open(NomFichier,'w')
# criture dans le fichier avec la mthode write()
Fichier.write('Bonjour tous !')
# fermeture du fichier avec la mthode close()
Fichier.close()
Le fichier test.txt est cr dans le rpertoire courant (sous Windows c'est normalement le rpertoireC:/PythonXX, mais
on peut aussi choisir un emplacement quelconque en spcifiant le chemin absolu, par exemple
NomFichier = 'F:/Mon dossier/test.txt').
III. Enregistrer des objets dans des fichiers (le module Pickle)
1. Introduction
Le module Pickle est extrmement pratique pour sauvegarder dans un fichier des structures de donnes comme les
listes (type list) ou les dictionnaires (type dict).
2. Pickling :le sauvegarde des objets
Pour bien comprendre prenons un exemple de sauvegarde d'un dictionnaire :
import pickle
# cration d'un dictionnaire
departement = {36:'Indre',30:'Gard',75:'Paris'}
# enregistrement du dictionnaire dans un fichier
Fichier = open('data.txt','wb')
pickle.dump(departement,Fichier)
Fichier.close()
3. Unpickling : la rcupration des objets
L'opration inverse est tout aussi simple :
import pickle
# rcupration du dictionnaire
Fichier = open('data.txt','rb')
Dept = pickle.load(Fichier)
Fichier.close()
print(Dept)
print(Dept[36])
Comme rsultat on va avoir
{75: 'Paris', 36: 'Indre', 30: 'Gard'}
Indre
IV. Exercices
1. Exericice1
Ecrire un script Python qui va crer un fichier texte et y crire un texte sur plusieurs lignes (rappelons que le
retour la ligne est cod par \n en Python).
Lire le fichier que vous venez de crer et afficher le rsultat
Ecrire une fonction copier_fichier(fs,fd) qui copier le fichier fs dans le fichier fd
2. Exercice2
Ecrire un script qui demande lutilisateur de saisir 10 noms des lves avec leurs trois notes et qui calcule leurs
moyennes puis les tris selon leurs moyennes. Stocker tous les rsultats dans un fichier appel eleve.
Afficher le fichier eleve que vous avez cr
I. Introduction
NumPy (Numerique Python) et SciPy (Scientific Python) sont des modules open-source qui fournissent tout
un lot de routines mathmatiques et numriques de fonctions prcompiles ddie aux vecteurs et
matrices ;
SciPy tend les fonctionnalits de NumPy en une bibliothquecomplte de calcul numrique (rgression
linaire, transforme deFourier, ) ;
Matplotlib: bibliothque graphique scientifique ;
NumPy est essentiellement ddi aux traitements des tableaux ou des matrices.
Tous les lments d'un tableau NumPy sont de mme type
IL n'est pas possible de modifier la taille d'un tableau cr.
B. Importation du module numpy
Pour crer un tableau avec Python, on utilise le module numpy. Donc il faut importer ce module .
Comme pour tous les modules Python une premire mthode consiste taper
>>> import numpy
Comme il devient trs vite lassant de taper numpy.X il est courant dimporter Numpy sous une abrviation :
>>> import numpy as np
>>> t[-1]
1
Dcouper un tableau(Le slicing) comme les listes.
>>> t= np.array([3,7,1,6,10,4])
>>>t[2:4]
array([1, 6])
Accs un lment dun tableau bidimensionnel :
>>> m = np.array([[3, 8, 1], [2, 7, 3]])
>>> m[1] # ligne 1
array([2, 7, 3])
>>> m[1,2] = 50 # ligne 1 colonne 2
>>> m
array([ [ 3, 8, 1],
[ 2, 7, 50]])
>>> m[:2,:2]
array([[3, 8],
[2, 7]])
>>>m[(0,1),(1,2)]
array([8, 3])
IV. Les calculs
Somme de matrices
>>> M3 = M1 + M2 #Somme terme terme,
Produit des coefficients de matrices
>>>M3 = M1 * M2 #Produit terme terme,
Produit de matrices
>>>M3 = np.dot(M1,M2)
Les fonctions (log, abs, exp ) appliques sur les coefficients de la matrice
>>>M3 = np.log(M1)
Maintenant vous pouvez traiter le tableau en 2D comme une matrice ! Et NumPy propose plusieurs fonctions lies aux
matrices :
>>>A=np.array([[1,3,5],[2,5,1],[2,3,8]])
>>> A.shape # Les dimensions de la matrice (3, 3)
(3, 3)
>>> np.transpose(A) # La matrice transpose de A
array([[1, 2, 2],
[3, 5, 3],
[5, 1, 8]])
>>> np.trace(A) # La trace de la matrice A
14
>>> np.diag(A) # La diagonale principale de A
array([1, 5, 8])
>>> np.linalg.det(A) # La dterminante de A
-25.000000000000007
>>>np.linalg.norm(A,1) #Norme de la matrice A lordre 1
14
>>> B = np.linalg.inv(A) # La matrice invers de A
array([[-1.48, 0.36, 0.88],
[ 0.56, 0.08, -0.36],
[ 0.16, -0.12, 0.04]])
>>>C=np.array([[10,13,50],[22,15,111],[12,31,84]])
>>> np.dot(A, C) # Produit des matrices A et C.
V. Exercices TP/TD :
Programmer les fonctions suivantes :
shap(M) :retourne une liste contient nombre de lignes et colonnes de M
transpose(M) : retourne la matrice transpose de M
trace(M) : retourne la somme de la diagonale
diag(M) : retourne une liste contient les lments de la diagonale
import numpy as np
import pylab as pl
from math import pi
#on cre un tableau x des points
x=np.arange(50)*2*pi/50
b. Exemple2
Dans cette exemple on trace trois fonction sin(x) et cos(x) dans le mme repre (mme figure) et la fonction (1/(1+x2))
dans un autre repre (figure)
4. Exercice dapplication : Soit la fonction suivante : () =
Crer des tableaux x et fx qui contiennent respectivement 41 valeurs reparties uniformment pour
[4,4], et lvaluation de la fonction f sur ces valeurs.
Tracer la courbe de cette fonction en couleur bleu
Dans la mme figure, tracer en rouge la courbe de la tangent de f en a=2. on peut calculer la driv de f en x=x0 par la
formule f (x0)=(f(x0+h)-f(x0-h))/2h avec une valeur positive infiniment petite.
VIII. La bibliothque SciPy
1. Introduction
Le module scipy contient plusieurs sous modules ddis aux calculs scientifiques comme l'interpolation, l'intgration,
l'optimisation, le traitement d'images, les statistiques, les fonctions spciales, etc
2. Quelques fonctionnalits
scipy.integrate routines d'intgration
scipy.interpolate Interpolation
scipy.io L'entre de donnes et la sortie
scipy.linalg Routines d'algbre linaire
scipy.ndimage paquet de l'image n-dimensionnel
scipy.odr Rgression orthogonale distance
scipy.special Toutes les fonctions mathmatiques spciales
scipy.stats Statistiques
Dans ce chapitre nous allons appliquer toutes les notions prcdentes sur les suites et les fonctions, la recherche des
zros des fonctions. Plus prcisment, nous allons voir trois mthodes afin de trouver des approximations des solutions
dune quation du type (f (x) = 0).
I. La dichotomie 1.1.
1. Principe de la dichotomie
Le principe de dichotomie repose sur la version suivante du thorme des valeurs intermdiaires :
La condition f (a) f (b)<= 0 signifie que f (a) et f (b) sont de signes opposs (ou que lun des deux est nul). Lhypothse de
continuit est essentielle !
Ce thorme affirme quil existe au moins une solution de lquation (f (x) = 0) dans lintervalle [a,b]. Pour le rendre
effectif, et trouver une solution (approche) de lquation (f (x) = 0), il sagit maintenant de lappliquer sur un intervalle
suffisamment petit. On va voir que cela permet dobtenir un l solution de lquation (f (x) = 0) comme la limite dune suite.
Voici comment construire une suite dintervalles embots, dont la longueur tend vers 0, et contenant chacun une solution
de lquation (f (x) = 0). On part dune fonction f : [a,b] R continue, avec a < b, et f(a) f (b) <= 0.
Voici la premire tape de la construction :
+
on regarde le signe de la valeur de la fonction f applique au point milieu 2 .
+ +
Si f (a) f ( ) <= 0, alors il existe c [a, ] tel que f (c) = 0.
2 2
+ + +
Si f (a) f ( ) > 0, cela implique que f ( ) f (b) <= 0, et alors il existe c [ ,b] tel que f (c) = 0.
2 2 2
Nous avons obtenu un intervalle de longueur moiti dans lequel lquation (f (x) = 0) admet une solution. On itre alors
le procd pour diviser de nouveau lintervalle en deux.
Le processus complet :
Au rang 0 : On pose 0 = a, 0 = b. Il existe une solution 0 de lquation (f (x) = 0) dans lintervalle [0 , 0].
Au rang 1 :
+0 +0
o Si f (a0 ) f( 0 2 ) <= 0, alors on pose 1 = 0 et 1 = 0 2
+0
o sinon on pose 1 = 0 2 et 1 = 0 .
o Dans les deux cas, il existe une solution 1 de lquation (f (x) = 0) dans lintervalle [1 , 0 ].
......
Donc les suites ( ) et ( ) tendent toutes les deux vers l, qui est une solution de lquation (f (x) = 0).
2. Calcul derreur :
+
Soit n le nombre dtapes, pour obtenir une prcision , il faudra que lentier n vrifie lingalit 2
<= , cest--dire
()ln()
n>= ln(2)
3. Algorithme :
Donnes : f, a, b,
Traitement
Tant que b - a > 2 faire
m (a + b)/2
Si f(a) f(m) 0 alors
bm
Sinon
am
Fin Si
Fin Tant que
Rsultat : (a + b)/2
4. Mise en pratique de lalgorithme: Code Python
##Recherche approche dune solution dune quation par dichotomie
def dichotomie(f, a, b, epsilon):
assert f (a) * f (b) <= 0 and epsilon > 0
while b - a > 2 * epsilon :
m = (a + b) / 2.
if f(a) * f(m) <= 0 : b = m ,
else : a = m
return (a + b) / 2.
Exemple 1: Approximation de 2
Soit f une fonction dfinie par f x x 2 continue sur lintervalle [1, 2], valeurs relles
2
o f (1) = -1 < 0 et f (2) = 2 > 0 donc lquation f (x) = 0 possde une solution dans [1, 2]
La valeur mdiane de cet intervalle est 1.5.
o f (1.5) = 0.25 > 0 > f (1), donc lquation f (x) = 0 possde une solution dans [1, 1.5].
o f (1.25) = -0.4675 < 0 < f (1.5), donc lquation f (x) = 0 possde une solution dans [1.25, 1.5].
o ...
o f (1.41430664062) 0.000263273715973 > 0 > f (1.4140625), donc lquation f (x) = 0 possde une
solution dans [1.4140625, 1.41430664062].
La mthode de Newton peut ne pas converger si la valeur initiale est trop loin dun zro (do le choix
de valeur initiale). Cependant, si elle converge, elle est beaucoup plus rapide que la mthode de dichotomie
2. Conditions darrt :
Si | Xn - Xn-1| < EPSILON (la prcision) alors Xn est le rsultat de lestimation de la racine
Si n > MAX_ITER alors la mthode diverge ou na pas la convergence assez rapide pour fournir un rsultat.
Attention Si f(Xn-1)= 0, il y aura division par zro.!!!
Algorithme :
On part dune premire valeur et on suit la tangente ; on continue avec lintersection de cette tangente avec laxe des
abscisses jusqu ce que la diffrence entre deux termes conscutifs soit assez petite. Il est ncessaire de ne jamais
rencontrer de point en lequel la drive de f sannule.
Donnes :
f : la fonction
fp : la drive de f
x0 : le point de dpart
: la prcision
nb_iter : compteur ditration
max_iter : le nombre maximal ditrations
Traitement
x x0 # On suppose que x0 est convenablement choisi : fp (x0) 0
y x - f (x) / fp (x)
nb_iter 1
Tant que |y x | > et nb_iter max_iter faire
xy
y y - f (y) / fp (y)
nb_iter nb_iter + 1
Fin Tant que
Si (nb_iter > max_iter )
Afficher "On n'a pas encore la convergence vers la racine"
Sinon
Afficher y
3. Drivation numrique :
La mthode de Newton ncessite la connaissance de la drive de la fonction en jeu. Pour calculer une valeur approche
de la drive dune fonction numrique en un point ( approximation des valeurs de f au mieux), une premire approche
consiste calculer un taux daccroissement :
f x 0 h f x 0 h. f ' x 0 O h 2
f x 0 h f x 0
La drive peut tre approxime par la valeur :
h
En thorie, il suffit de prendre h trs petit pour obtenir une grande prcision dans le calcul de la drive. Il ne faut toutefois
pas perdre de vue la reprsentation des nombres rels en informatique.
Combiner f x 0 h et f x 0 h :
h2
f '' x 0 O h 3
f x 0 h f x 0 h. f ' x 0
2
h2
f x 0 h f x 0 h. f ' x 0 f '' x 0 O h 3
2
permet dobtenir une meilleure approximation de la drive par :
f x 0 h f x 0 h
2h
Voici une implmentation possible du calcul dune valeur approche dune drive qui utilise la deuxime formule
dapproximation est propose ci-aprs. En voici le code Python :
def derivee(f , x0, h) :
return ( f ( x0 + h ) f ( x0 h ) ) / ( 2 * h )
Exemple 2 : Approximation de 2
I. Introduction :
Le but de ce chapitre est dtudier la rsolution dun problme dynamique une dimension, linaire ou non, conduisant
la rsolution approche dune quation diffrentielle ordinaire par la mthode dEuler. En dautre terme, on veut
trouver une solution une quation diffrentielle de la forme :
y ' t F t , y (t )
(1)
y t 0 y0
Rappelons que la plupart de nombreux phnomnes physiques, de chimie, doptimisation conduisent des rsolutions
numriques dquations diffrentielles (pas ncessairement linaires) pour lesquelles on ne dispose pas de solutions
analytiques.
Exemple 1 :
.. .
Un pendule amorti nous amne tudier lquation : k1 sin k 2 On doit faire une hypothse dangle
.. .
relativement petit pour crire sin , puis k1 k 2 quation diffrentielle linaire coefficients constants
dont on sait dterminer les solutions exactes.
Remarque 1 :
Les hypothses de linarisation peuvent tre trop rductrices voire inexistantes, do la ncessit de pouvoir rsoudre
numriquement les quations diffrentielles.
Remarque 2 :
Une quation diffrentielle du premier ordre normalise peut toujours s'crire sous la forme (1).
Par exemple : y (t) = 2.t.sin(y(t)) + 1 s'crira : y = f ( t ; y ) avec f (u; v) = 2.u.sin(v) + 1.
Parfois la fonction f ne dpend que de y ; nempche, la fonction f devra toujours tre dclare avec les deux variables
t et y (dans cet ordre : variable puis fonction).
Par exemple : y (t) = 2.y(t)2 s'crira : y = f ( t ; y ) avec f (u ; v ) = 2v2.
1. Principe de la mthode d Euler :
Le thorme de Cauchy-Lipschitz assure que sous certaines conditions, lquation (1) admet une unique solution. Mais
la thorie mathmatique ne permet pas de trouver cette solution en gnral.
1.1 Principe :
On cherche calculer numriquement la valeur approche dune solution du problme (1) sur un segment [a, b] avec a =
t0.
On cre alors une subdivision : t 0 a t 1 t 2 ... t n b du segment [a, b] que lon peut supposer rgulire pour
b a b a
simplifier, cest--dire telle que le pas : t k 1 t k h soit indpendant de k. Alors : h , t k a k. et
n n
t k 1 h t k
On va calculer une valeur approche de proche en proche y k y t k partant de la condition initiale y 0 y a (valeur
y ' t k F t k , y t k F t k , y k
y k 1 y k y k 1 y k
y ' t k ,
t k 1 t k h
1.2 Algorithme :
Euler ( F, a , b , y0 , h )
y y0
lisY [ y0 ] # la liste des valeurs renvoyes yk
ta
lisT [ a ]
Tant que t+h b faire
y y + h * F(t , y)
tt+h
Ajout de y dans la liste lisY
Ajout de t dans la liste lisT
Fin Tant que
Retourner ( lisT , lisY )
Remarques :
Cette mthode trs simple un gros inconvnient : chaque tape, on rutilise la valeur prcdemment
calcule, qui est dj une approximation. Les carts vont donc se cumuler.
La principale source derreur de la mthode dEuler provient du pas h qui doit tre pris suffisamment petit.
En effet, les valeurs approches trouves avec cette mthode dpendent videmment du pas h.
Dans la pratique, on est confront au choix du pas h :
Un pas trop petit implique un temps de calcul lev
Un pas trop grand donne un rsultat trop imprcis.
Pour rsoudre des quations diffrentielles dordre n 2, lide est de se ramener une quation vectorielle dordre 1
y
y'
en posant Y . et en crivant Y ' F t,Y .
.
y ( n 1)
Exemples :
1. Lquation y = -y est dordre 2 (ici, lordre dsigne la plus grande drive intervenant dans lquation).
y y' y'
On pose : Y ,alors Y ' , il vrifie donc lquation Y ' F t,Y , avec F :
y ' y '' y
.
.
.. .
2. Lquation du pendule k1 sin k 2 en posant X . , on a X ' ..
il vrifie
.
k1 . k 2 .sin
u v
donc lquation X ' F t , X , avec F : F t ,
v k1v k1 sin(u )
On ramne par ce procd de vectorialisation les quations diffrentielles scalaires dordre p a des quations dordre 1,
n
mais a valeurs dans .
Remarque (Important)
La condition initiale dune quation diffrentielle dordre p consiste en la donne de la valeur de y en t0 mais aussi de celle
de ses p 1 premires drives.
y0
Par exemple, dans le cas p = 2 : Y 0 ,
y0
def euler2 ( F , a , b , y0_yp0 , h):
t=a
les_t = [a]
y = y0_yp0 # list [y0 , y'0]
les_y = [ y0_yp0 ]
while t + h <= b :
y = [ y [ 0 ] + h * F( t , y )[ 0 ] , y [ 1 ] + h * F( t , y )[ 1 ] ]
les_y.append( y )
t += h
les_t.append( t )
return les_t , [ y [ 0 ] for y in les_y]
Exemple : y = -y avec y ( 0 ) = 0 et y ( 0 ) = 1 => f (t , ( u ; v ) ) = ( v , - u)
y ' t F y t , t (ordre invers par rapport lusage commun : voir lquation (1)).