Corrigé TDTP1
Corrigé TDTP1
Corrigé TDTP1
February 1, 2021
#
Introduction aux méthodes numériques
##
Série de travaux dirigés N° 1 ###
Corrigé
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
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.
[ ]: 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);
3
for e= L:U
for m=(beta^(t-1):beta^t -1)
F(i)=m*beta^(e-t);
i=i+1;
end
end
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
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
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
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
[ ]:
[ ]:
[ ]: