Vous êtes sur la page 1sur 10

Ecole Nationale de Techniques Avancées

Simulation Numérique
Chapitre 2
Eléments d’Analyse Numérique
Eric Lunéville

Plan
Représentation des nombres

Addition et soustraction de réels

Multiplication et division de réels

Propagation des erreurs

Techniques de stabilisation

Méthodologie

Sim. Numérique – chapitre2 1


Représentation des entiers
Représentation sur n bits
entiers positifs = (n-1) bits et bit de signe à 0

entiers négatifs = complément à 1 et on ajoute 1 (bit de signe à 1)


plus grand entier : 2 n−1 − 1 (0 1... 1 1)

plus petit entier : −2 n−1 (1 0 … 01)

int 32 bits −231 → 231 − 1 ∼


= 2.109
unsigned int 32 bits 0 → 232 − 1 ∼
= 4.109
short int 16 bits −215 → 215 − 1 = 32767
long int 64 bits −263 → 263 − 1 ∼
= 9.1018

En C++, constante machine MAXINT, MININT

Sim. Numérique – chapitre2 2

Représentation des réels


Normalisation IEEE-754 (1985) http://grouper.ieee.org/groups/754/
http://http.cs.berkeley.edu/~wkahan/ieee754status/IEEE754.PDF

Représentation flottante d'un réel S igne × M antisse × 10 E xposant


 M −1


(−1)S × 1+ m i 2 −i × 2 e−E
i=1

type nb bits nb bits E nb bits M min en |.| max


float 32 8 24 1.2 10 −38 3.4 10 38
double 64 11 53 2.2 10 −308 1.8 10 308

Réels non définis


+inf +∞ >max (OVERFLOW)
-inf −∞ <-max (OVERFLOW)
underflow ≈0 |.| < min arrondi à 0
NaN not a number non représentable (div. par zéro)
Sim. Numérique – chapitre2- 3
Opérations : arrondi
Par défaut : au réel le plus près

si ambiguité : le réel le plus près avec le dernier bit à 0 (biais)

0.XXXXXXXX15 0.XXXXXXXX2
0.XXXXXXXX25 0.XXXXXXXX2

l'erreur d'arrondi est en (M nb de bits de la mantisse) :

2 −M

Possibilité avec certains compilateurs et langages de changer


la méthode d’arrondi

Sim. Numérique – chapitre2- 4

Opérations : addition
Addition en double accumulateur

Addition Alignement Addition


r 1 10 e 1 r 1 10 e 1 (double précision) Arrondi
r 2 10 e 2 r2 10 e 1 (r 1 + r2 ) 10 e 1 r 10 e

exemple (avec 4 chiffres) :

Addition Alignement Addition Arrondi


x = .1002 10 1 x = .1002000 10 1 x+y = x⊕y =
y = .7899 10 −2 y = .0007899 101 .1009899 10 1 .1010 10 1

opération stable

Sim. Numérique – chapitre2- 5


Opérations : addition
0 n’est pas le seul élément neutre !
Addition Alignement Addition Arrondi
x=1 x = .10000000 10 1 x+y = (a < 5)
y < 5 10 −5 y = .0000abcd 10 1 .1000abcd 10 1 x⊕y =1

Danger : cv numérique de série non convergente par exemple


1
= division par 0
(x ⊕ y) ⊖ x

l'addition est commutative mais n’est pas associative


exemple (avec 4 chiffres) :

x = 0.1000 x ⊕ y = .1000 y⊕z = .00007


y = .00004 ar(.10004) = .1000 ar(0.10007) = .1001
z = .00003 (x ⊕ y) ⊕ z = .1000 x ⊕ (y ⊕ z) = .1001
Sim. Numérique – chapitre2- 6

Opérations : soustraction
Soustraction : même procédé, exemple (avec 4 chiffres) :
soustraction Alignement Addition Arrondi
x = .1000 10 0 x = .1000000 10 0 x−y = x⊖y =
y = .4000 10 −4 y = .0000400 100 .9999600 10 0 .1000 10 0

Erreur de cancellation
x = 0.1000 x + y = .10006 (x + y) − z = y
y = .00006 arrondi (x ⊕ y) ⊖ z = 0.0001
z=x x ⊕ y = .1001 erreur = 4 10 −5

erreur relative : 4 10 −5 /6 10 −5 = 66% Instable !!!

y = x + a 10 −q z = x + b 10−q (a, b normalisés)


précision relative de x, y, z : 10 −p ⇒ précision relative de y − z : 10 −p+q
Si q = p perte de précision totale !
Sim. Numérique – chapitre2- 7
Opérations : Produit, Division et Test
Produit et division :
en double accumulateur
opérations stables (erreurs relatives conservées)
Dangers
overflow et underflow (dépassement de capacité)
NaN (division par zéro)

Test sur les rééls :


Ne jamais tester la positivité ou nullité d'un réel avec x > 0 ou x = 0
Utiliser le test approché x > ε ou |x| < ε
Comment choisir ? ε
en fonction d’une tolérance donnée
en fonction d’une estimation de l’erreur liée à la méthode employée

attention au test |x − y| < :εperte de précision si x≈y


Sim. Numérique – chapitre2- 8

Opérations : Stabilité
Processus numérique : Q : X ∈ R n −→ Q(X ) ∈ R p

Stabilité : Q(X + ∆X ) − Q(X ) ≤ C ∆X

Si C est très grand alors l'erreur sur Q(X


est) grande!

Exemple : résolution d'un système linéaire AX = b


 −1  |λ|max
Conditionnement de A : cond(A) = A  A  ≥ (= si A symétrique)
|λ|min
X solution de AX = B , Y solution de AY = B + δB

Y − X δB
≤ cond(A)
X B

Sur l’ordinateur : arrondis (p chiffres significatifs)


Y − X ≈ cond(A) 10 −p
Sim. Numérique – chapitre2- 9
Instabilité numérique
Dérivation numérique
f : x ∈ R −→ f (x) ∈ R 2 fois dérivable
f (x + h) − f (x) h
D h f (x) = = f ′ (x) + f ′′ (x + θh)
h 2

f(x) : implémentation du calcul de f avec :


 
 
 f (x) − f (x) 
≤ C 10 −q
|f (x)|
avec h ≈ 10 −s et f (x), f ′ (x), f ′′ (x) ≈ 1 on a :
  
  ′ 
 D h f (x) − f (x)   C 10 s−q si s ≥ q (h petit)
≤ 2q
|f ′ (x)|  C 10 −s si s ≤ (h grand)
2
Calcul instable !!! Exemple : q = 4 et s = 3 ⇒ précision de 10%
Sim. Numérique – chapitre2- 10

Instabilité numérique
Dérivation numérique : illustration numérique
const float e p s = 1 .E− 8 ;

f l o a t dh ( f l o a t h , f l o a t x )
{ f l o a t r =( e p s ∗ r a n d ( ) ) /RAND MAX ;
r e t u r n ( e p s+ s i n ( x+h)− s i n ( x ) ) / h ; } D é riva tion num é rique de s in( x) e n x=0
0
biais aléatoire
i n t m ain ( ) biais constant amplitude du biais : 10-8

{ o fstream out ( ” e r r ” ) ; -1

srand ( 1 ) ;
f l o a t x = 0; f l o a t h ; -2
c o n s t f l o a t l o g 1 0= l o g ( 1 0 ) ;
f o r ( i n t i = 1 ; i < 1 0 0 ; i ++) -3
log10(erreur)

{ h=e x p (− i ∗ l o g 1 0 / 2 0 ) ;
f l o a t d=dh ( h , x ) ;
-4
f l o a t e r r =a b s ( d − 1 . ) ;
o u t <<h<<” ”<< e r r <<e n d l ;
} -5

out . c l o s e ( ) ;
return 0 ; } -6

-7
-5 -4.5 -4 -3.5 -3 -2.5 -2 -1.5 -1 -0.5 0
log10(h)

Sim. Numérique – chapitre2- 11


Instabilité numérique
Intégration numérique
f : x∈R− → f (x) ∈ R 2 fois dérivable et non oscillante
1
Calcul de 0 f (x)dx par la formule des rectangles (x i = i h) :

I h (f ) = h f (x i ) = h(f (x 0 ) + f (x 1 ) + ... + f (x n−1 ))
i=1

1
On suppose que f (x) ≈ 1 ⇒ I (f ) = 0 f (x)dx ≈ 1 et
 
 
f (x) − f (x)  ≤ C 10 −q

   
     
I h (f ) − I (f ) ≤ I h (f ) − I h (f )  + |I h (f ) − I (f )|
nh
≤ C 10−q +C h
2
≤ C max(10−q , h 2 ) pas d’interférence des erreurs

Calcul stable (pb pour les fonctions très oscillantes)


Sim. Numérique – chapitre2- 12

Instabilité numérique
Intégration numérique, illustration numérique

flo a t r e c t a n g le b ( int n , f lo a t a , f lo a t b )
{ f l o a t h=(b−a ) / n ;
i n t k =0;
float r =0.;
w h i l e ( k<n ) Intégration numérique par la méthode des rectangles
0
{ f l o a t rp = 0.;
i n t k 2=m in ( n , k + 1 0 0 0 0 0 ) ;
f o r ( i n t i =k ; i <k 2 ; i ++) -1

r p+=f ( i ∗ h ) ;
k=k 2 ; -2

r+=r p ;
log10(erreur)

} -3
return r ∗h ; pente h
}
-4

erreurs d'arrondi

Attention : sommation partielle -5

-6

-7
-7 -6 -5 -4 -3 -2 -1 0

log10(h)

Sim. Numérique – chapitre2- 13


Stabilisation : erreur de cancelation
Eviter de transiter par l'opération "instable"
x ⊖ y avec y = x + ε et ε ≪ x

Exemple : calcul des racines de a x2 + b x + c



Danger : ac ≪ b 2 car b 2 − 4ac = b + ε

−b − signe(b) b 2 − 4ac
x1 =
Formule stable : c 2a
x2 =
a x1

Autre méthode : développement asymptotique ε = 4ac/b 2



1 − ε = 1 − 12 ε − 14 ε 2 + O(ε 3 ) ⇒
c ε
x 1 = − (1 + + O(ε2 ))
b 2
b ε
x 2 = − (1 − + O(ε 2 ))
a 4
Sim. Numérique – chapitre2- 14

Stabilisation : somme et infini


Faire attention à l'ordre de sommation ( non
⊕ commutatif)
N
 1 1 1
SN = ≈1⊕ 2 ⊕ ... ⊕ N
1
n
sommation rétrograde ≈ N1 ⊕ ... ⊕ 12 ⊕ 1
sommation partielle ≈ ( N1 ⊕ ... ⊕ p1 ) ⊕ ( p−1
1
⊕ ... ⊕ 1
2
⊕ 1)

Eviter de transiter par des grands nombres (infinis)

Exemple : calcul de tanh(x)

sinh(x)
tanh(x) = NaN si x est grand !!!
cosh(x)
e x − e −x 1 − e −2x
= x = 1 si x est grand
e + e −x 1 + e −2x

Sim. Numérique – chapitre2- 15


Stabilisation : calcul rétrograde
Utiliser des méthodes et algorithmes STABLES

u 1 = 1 − 1e
Exemple, calcul de la suite : u n+1 = n u n − 1
e
 1
n→ ∞
propriétés : un = x n−1 e−x dx ⇒ 0 < u n < 1, u n ց, u n → 0
0

1
u
n+1 = n u
n −
calcul direct e ⇒u
n − u n = n!ε instable !
u
1 = u 1 + ε

v n + 1/e
calcul rétrograde v n−1 = avec v N = 0
n−1
vn + 1/e
vn−1 = (n − 1)!
n−1 ⇒ v n − vn = ε stable !
vN = ε (N − 1)!

Sim. Numérique – chapitre2- 15

Stabilisation : augmenter la précision


Remède universel aux problèmes d'instabilité numérique ?
Augmenter la précision (simple à double précision)

Méthode de l'encéphalogramme plat


Aspirine numérique : calme mais ne guérit pas !!!

Deux niveaux d'intervention :


local : les calculs critiques sont passés en double précision
(voire quadruple)
global : tout est passé en double précision
(option des compilateurs)
peut multiplier le temps de calcul par 4 ou 8, à utiliser pour faire des tests

Stratégie acceptable : augmenter localement la précision


Sim. Numérique – chapitre2- 16
Méthodologie
La méthode utilisée est-elle théoriquement stable ? si non la jeter !

Y a-t-il de très petites ou très grandes valeurs numériques ?


Si oui : localiser, analyser et « stabiliser » les zones critiques

Y a-t-il des tests suspects ?


Si oui : les analyser et les « stabiliser »

Comparaison des résultats simple et double précisions ?


Si différences importantes et inexpliquées : chercher les coupables

La stabilisation a un coût : temps calcul, complexité


il faut donc qu'il y ait une réelle nécessité !
ne stabiliser que les zones critiques !
voire penser à utiliser une autre méthode !
Sim. Numérique – chapitre2- 17