Corrigé TDTP1

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 8

TDTP1

February 1, 2021

#
Introduction aux méthodes numériques
##
Série de travaux dirigés N° 1 ###
Corrigé

0.1 TD11 : Codage des nombres


1) Calculer la représentation en base 10 du nombre binaire suivant : (101000.10110000)2
(101000.10110000)2 = 25 + 23 + 2−1 + 2−3 + 2−4 = 40.6875

17
2) Calculer la représentation binaire des nombres suivants : a = 20 , b = 4.125 et c = −28.8625.
a = 17
20 = 0.85
0.85 ∗ 2 = 1.7 → 1
0.7 ∗ 2 = 1.4 → 1
0.4 ∗ 2 = 0.8 → 0
0.8 ∗ 2 = 1.6 → 1
0.6 ∗ 2 = 1.2 → 1
0.2 ∗ 2 = 0.4 → 0
... z}|{ z}|{ z}|{
a = 17
20 = 0.85 = (0.11 0110 0110 0110 . . . )2

b = 4.125
4 = 2∗2+0
2 = 2∗1+0
1 = 2∗0+1
donc 4 = (100)2 .
0.125 ∗ 2 = 0.250 → 0
0.250 ∗ 2 = 0.5 → 0
0.5 ∗ 2 = 1.0 → 1
0. ∗ 2 = 0 → 0
...
0.125 = (0, 001)2
par suite b = 4.125 = (100.001)2
c = −28.8625
28 = 2 ∗ 14 + 0

1
14 = 2 ∗ 7 + 0
7 = 2∗3+1
3 = 2∗1+1
1=2*0+1$
28 = (11100)2
0.8625 ∗ 2 = 1.725 → 1
0.725 ∗ 2 = 1.45 → 1
0.45 ∗ 2 = 0.9 → 0
0.9 ∗ 2 = 1.8 → 1
0.8 ∗ 2 = 1.6 → 1
0.6 ∗ 2 = 1.2 → 1
0.2 ∗ 2 = 0.4 → 0
0.4 ∗ 2 = 0.8 → 0
... z}|{ z}|{
0.8625 = (0.1101 1100 1100 . . .)2
z}|{ z}|{
et par suite c = −28.8625 = (−11100.1101 1100 1100 . . .)2
3) Déterminer la représentation en virgule flottante normalisée en base 10 et en base 2 des
nombres a, b et c
en base 10
a = 17 0
20 = 0.85 = (−1) × 0.85 × (10)
0

b = 4.125 = (−1) 0 × 0.4125 × (10) 1


c = c = −28.8625 = (−1)1 × 0.288625 × (10)2
en base 2 z}|{ z}|{ z}|{ z}|{ z}|{ z}|{
a = (0.11 0110 0110 0110 . . .)2 = (−1)0 × 0.11 0110 0110 0110 . . . × 20
b = (100.001)2 = (−1)0 × 0.100001 × 23=(11)2
z}|{ z}|{ z}|{ z}|{
c = (−11100.1101 1100 1100 . . .)2 = (−1)1 × 0.111001101 1100 1100 . . . × 25=(101)2
4) Déterminer la représentation au format simple précision suivant la norme IEEE 754 des nom-
bres a, b et c.
z}|{ z}|{ z}|{
a = (−1)0 × 1.1 0110 0110 0110 . . . × 2−1
z}|{ z}|{ z}|{
s = 0 et exposant=-1+127=(01111110)2 et m = 1 0110 0110 0110 donc
a=0 01111110 1 0110 0110 0110 0110 0110 10
b = (−1)0 × 1.00001 × 22=(10)2
s = 0 et exposant=2+127=129=(10000001)2 et m = 00001 donc
b=0 10000001 00001000000000000000000
z}|{
c = (−1)1 × 1.11001101 1100 . . . × 24=(100)2
z}|{
s = 1 et exposant=4+127=131=(10000011)2 et m = 11001101 1100 . . . donc
$c=$1 10000011 11001101 1100 1100 1100 110
5) Soit les nombres flottants au format simple précision selon la norme IEEE 754 :
a=10111101010000000000000000000000
b=01010101011000000000000000000000
c=00111101110011001100110011001100
Trouver la représentation en virgule flottante normalisée en base 10 de ces nombres.

2
a=1 01111010 10000000000000000000000 s=1 c’est un nombre négatif
e=(01111010)2 − 127 = −5
m=(1.1)2 = 1.5
par suite a = (−1)1 × 1.5 × 2−5 = (−1)1 × 0.046875 = (−1)1 × 0.46875 × 10−1
b=0 10101010 11000000000000000000000
s=0 c’est un nombre positif
e=(10101010)2 − 127 = 43
m=(1.11)2 = 1, 75
par suite b = (−1)0 × 1.75 × 243 =15 393 162 788 864=(−1)0 × 0.15393162788864 × (10)14
c=0 01111011 100 1100 1100 1100 1100 1100 s=0 c’est un nombre positif
e=(01111011)2 − 127 = −4
m=(1.10011001100110011001100)2 = 1, 5999999046
par suite c = (−1)0 × 1.5999999046 × 2−4 = 0.099999994 = (−1)0 × 0.99999994 × (10)−1 ' 0.1
Remarque: Le nombre 0.1 est approché par 0.099999994 en représentation binaire simple préci-
sion.

0.2 TD12 : Observer la différence entre le calcul algébrique et le calcul numérique.


1) Déterminer le nombre de valeurs normalisées qui peuvent être représentées par un système
de représentation flottant avec base β, mantisse m places, exposant e avec L ≤ e ≤ M.

card(F) = 2 × card([ βm−1 , βm − 1]) × card([ L, U ]) (1)


m m −1
= 2 × (β − β ) × (U − L + 1 ) (2)

2) Calculer le nombre de valeurs normalisées dans le cas où β = 10, m = 3, L = −15 et U = 16.

card(F) = 2 × card([ βm−1 , βm − 1]) × card([ L, U ]) (3)


m m −1
= 2 × (β − β ) × (U − L + 1 ) (4)
3 2
= 2 × (10 − 10 ) × (16 − (−15) + 1) (5)
= 2 × 900 × 32 (6)
= 57600 (7)

3) Déterminer l’ensemble F(2, 3, −1, 3)

[ ]: function [F]=floating_numbers(beta,t,L,U)
%% fonction pour construire les flottants normalisés

%calculer le cardinal
cardinal=2*(beta^t-beta^(t-1))*(U-L+1);

F=zeros(1,cardinal/2);

%remplir la partie positive


i=1; %indice de sauvegarde

3
for e= L:U
for m=(beta^(t-1):beta^t -1)
F(i)=m*beta^(e-t);
i=i+1;
end
end

%ajouter la partie négative


F=[-F(end:-1:1),F];
return

[ ]: %% Script pour visualiser la distribution des nombres flottants

%choix des paramètres


beta=2; %base
t=3; %nombre de chiffres significatifs
L=-1; %exposant minimum
U=3; %exposant maximum

F=floating_numbers(beta,t,L,U);
%préparer le graphique
hold on
subplot(2,1,1)
sizes=10*ones(size(F));
colors=50*abs(F);
Y=zeros(size(F)); %ordonnées nulles des points
scatter(F,Y,sizes,colors,'filled')
xlim([-1.5,1.5])

%deuxième plot
subplot(2,1,2)
sizes=10*ones(size(F));
colors=zeros(size(F));
Y=zeros(size(F)); %ordonnées nulles des points
scatter(F,Y,sizes,colors,'filled')

4) Soient trois réels x = 0.125106, z = 0.4371012, w = 0.2151010. En utilisant le système de


numération de la question 2 pour le stockage de ces nombres, calculer :

a) La somme x + z et commenter le résultat


x = 0.125106 est représenté par 0.125 × 100 .
z = 0.4371012 est représenté par 0.437 × 100 .
pour calculer la somme x + z on doit s’aligner sur le plus grand exposant.
x + z = 0.5622072 est donc représenté par 0.562 × 100 .
b) Le produit xz et commenter le résultat
x = 0.125106 est représenté par 0.125 × 100 .

4
z = 0.4371012 est représenté par 0.437 × 100 . x ∗ z = 0.0546839827 est représenté par 0.546 ×
100 .
c) La division w/x
x = 0.125106 est représenté par 0.125 × 100 . w = 0.2151010 est représenté par 0.215 × 100 .
w/x = 1.7193499912 est représenté par 0.172 × 101
5) Soient trois réels x = 0.400 × 100 et y = z = 0.100 × 103 . En utilisant le système de numéra-
tion de l’exercice précédent pour le stockage de ces nombres, calculer les deux sommes
( x + y) + z et x + (y + z).
x + y = 0.000400 × 103 + 0.100 × 103 = 0.100400 × 103 est représenté par 0.100 × 103 . donc
( x + y) + z est représenté par 0.100 × 103 + 0.100 × 103 = 0.200 × 103 .
6) Considérons une machine décimale avec mantisse à 4 chiffres. Calculer l’erreur de représen-
tation et l’erreur relative de représentation pour les nombres : a = 9.023506, b = 158.26 et
c = 0.00158894.
7) Dans le cadre du codage des nombres flottants en base 2. Déterminer

a) L’erreur d’affectation
b) L’erreur de l’opération d’addition
c) L’erreur de l’opération de soustraction
d) L’erreur de l’opération de mulitplication
e) L’erreur de l’opération de division

0.3 TD13 : Observer l’approximation numérique sous Matlab


√ √
1. Calculer algébriquement les expressions suivantes : x = 0.6 + 0.2 + 0.2 + 0.2, y = 2∗ 2−
2, z = 1 − 3 ∗ ( 43 − 1).
x = 1.2, y = 0, z = 0.
2. Calculer numériquement les expressions ci-dessus en utilisant le logiciel Matlab et les for-
mats short, long et rat pour afficher les résultats.

[ ]: format short //format par défaut


x=0.6+0.2+0.2+0.2
y=sqrt(2)*sqrt(2)-2
z=1-3*(4/3-1)
format long
x=0.6+0.2+0.2+0.2
y=sqrt(2)*sqrt(2)-2
z=1-3*(4/3-1)
format rat
x=0.6+0.2+0.2+0.2
y=sqrt(2)*sqrt(2)-2
z=1-3*(4/3-1)

5
√ 4
Pour y et z, la représentation sur ordinateur des nombres 2 et 3 entraine des erreurs d’arrondi
et par suite une erreur de calcul.
3. En utilisant le logiciel Matlab, calculer le plus grand nombre entier naturel n tel que le nom-
bre en est représenté en mémoire machine.

[ ]: n=1;
while(isfinite(exp(n))) % on pourra remplacer cette ligne par while(exp(n)~=Inf)
n=n+1;
end
n=n-1
fprintf('exp(%d)=%g\t exp(%d)=%g\n',n,exp(n),n+1,exp(n+1))

( x +1)−1 x +(1−1)
4. Sous Matlab, calculer les expressions y = x et z = x pour x = 10−7 , 10−8 ,. . .,
10−16 , 10−17 . Que constatez-vous ?
[ ]: %% Script pour calculer l'expression de y et z
exposants=-11:-1:-17;

for e =exposants
%calculer y
x=10^e;
y=((x+1)-1)/x;
%calculer z
z=(x+(1-1))/x;
%affichage
fprintf('y=%e\tz=%f\n',y,z)
end

5. Déterminer l’ensemble F(2, 3, −1, 3)


6. Représenter l’ensemble F(2, 3, −1, 3) en utilisant Matlab.

0.4 TD14 : Observer, à travers un exemple, la non fiabilité du calcul machine


On considère la suite (un ) définie par un = un−1 + un4−2 avec u0 = 1 et u1 = a avec a ∈ R.
√ une fonction en langage Matlab qui représente graphiquement, pour a = −2 et a =
1. Ecrire
(1 − 2/2, les m premiers (l’entier m est saisi par clavier) termes de la suite (un ).
[ ]: m=input('donner m \n');
u=zeros(1,m);
v=zeros(1,m);
w=zeros(1,m);
a=-2;
b=(1-sqrt(2))/2;
u(1)=1;
v(1)=1;
u(2)=a;
v(2)=b;

6
for i=3:m
u(i)=u(i-1)+u(i-2)/4;
v(i)=v(i-1)+v(i-2)/4;
end

for i=1:m
w(i)=b^(i-1);
fprintf('u=%e\tv=%e\tw=%e\t\n',u(i),v(i),w(i))
end
figure
subplot(2,1,1)
plot(1:m,u)
hold on
subplot(2,1,2)
plot(1:m,v)
hold off

figure
subplot(2,1,1)
plot(1:m,w)
hold on
subplot(2,1,2)
plot(1:m,abs(v-w))

2. Pour le cas où a = (1 − 2/2, représenter graphiquement
√ les m premiers termes de la suite
n
calculés au moyen de la formule: un = ((1 − 2/2) . Que constatez-vous ?

[ ]: m=input('donner m \n');
u=zeros(1,m);
v=zeros(1,m);
w=zeros(1,m);
a=-2;
b=(1-sqrt(2))/2;
u(1)=1;
v(1)=1;
u(2)=a;
v(2)=b;
for i=3:m
u(i)=u(i-1)+u(i-2)/4;
v(i)=v(i-1)+v(i-2)/4;
end

for i=1:m
w(i)=b^(i-1);
fprintf('u=%e\tv=%e\tw=%e\t\n',u(i),v(i),w(i))
end
figure

7
subplot(2,1,1)
plot(1:m,u)
hold on
subplot(2,1,2)
plot(1:m,v)
hold off

figure
subplot(2,1,1)
plot(1:m,w)
hold on
subplot(2,1,2)
plot(1:m,abs(v-w))

3. Notons par (un ) la suite calculée par la formule de récurrence ci-dessus. Afficher pour les m
premiers termes l’erreur commise |un − un |.
Le polynôme caractéristique de la suite est r2 − r − 1/4 √
= 0 dont √le déscriminant ∆ = 1 + 1 = 2
1− 2
ce qui entraine deux racines réelles distinctes r1 = 2 et r2 = 1+2 2 . Le terme général de la suite
est alors donné par un = λ1 r1n + λ2 r2n où λ1 et λ2 sont des constantes détérminées par u0 et u1 .
u0 = 1 entraine: λ1 + λ2 = 1
u1 = a entraine λ1 r1 + (1 − λ1 )r2 = a
2 −a −r1
On obtient ainsi λ1 = r√ et λ2 = a√ .
2 √ 2 √
5+√ 2 −5+
√ 2
pour a = −2, on a λ1 = et λ2 =
√ 2 2 2 2
1− 2
pour a = 2 = r1 , on a λ1 = 1 et λ2 = 0
Concernant la suite dont le second terme est -2, on obtient pour 3ème terme la valeur -2+1/4=-
u n −2
7/4 négative et par la suite tous les termes suivants sont négatifs (un = un−1 + ) et la suite
4
tend vers −∞ ce qui est en accord avec le résulat théorique un = λ1 r1n + λ2 r2n puisque r1n → 0 car
|r1 | < 1 et |r2 | > 1 ce qui entraine que r2n → +∞ multiplié par λ2 < 0 entraine que un → −∞.
Pour la suite un avec u1 = r1 , on obtient λ1 = 1 et λ2 = 0 ce qui donne un = r1n avec |r1 | < 1 ce qui
donne théoriquement une suite convergente vers 0 en oscillant autour de 0. Mais numériquement
et à cause d’une erreur numérique on obtient une valeur négative au lieu d’une valeur positive et
u n −2
encore une fois et à cause de la relation un = un−1 + la suite diverge vers −∞.
4
[ ]:

4. Représenter ces erreurs graphiquement.

[ ]:

5. Que constatez-vous ? Que s’est-il passé ?

[ ]:

Vous aimerez peut-être aussi