TP 2 : Nombres et calculs avec Python

publicité
TP 2 : Nombres et calculs avec Python
⋄ Avant tout :
• Lancer S PYDER directement avec l’icône
sur le bureau ;
• Retrouver votre configuration de la semaine dernière avec Fichier/Charger une session en allant chercher le fichier spyder.session dans Mes documents.
Exercice 1 Quelques calculs avec le module math : On utilisera en général ce module en écrivant :
from math import *
au début d’un programme ou dans une console. On a ainsi accès directement à toutes les fonctions
du module math, par exemple :
print pi, sin(pi),cos(pi)
print e, exp(1), log(e)
Utiliser les fonctions du module math pour traiter les calculs des questions suivantes.
(a) Datation au carbone 14. À la mort d’un être vivant, le carbone 14 présent dans son organisme
se désintègre au fil des années de sorte que, si p est la proportion de C 14 restante au bout de
N années, alors N = −8310 ln(p).
• Écrire une fonction datation_C14(p) qui calcule N en fonction de p.
• La momie Ötzi retrouvée dans un glacier en 1991 contenait 52.8% du C 14 initial à 1%
près. Donner un encadrement de son âge.
• L’Australopithecus afarensis Lucy, découverte en 1974 a un âge estimé à 4.4 millions d’années. Estimer la proportion de C 14 restante. A-t-on pu effectuer la datation du squelette
au C 14 ?
(b) Calculs de distances. Un bateau navigue en suivant un certain cap. À un instant donné, le bateau est en position B 1 et le commandant repère un récif R sous un angle de 22◦ . Un mile plus
loin, en position B 2 , le commandant repère ce même récif R sous un angle de 34◦ . Calculer la
distance H R (distance entre le récif et la trajectoire).
R
B1
22◦
B2
1 mile
34◦
H
Trajectoire
tan(22◦ )
.
tan(34◦ ) − tan(22◦ )
BLes fonctions trigonométriques sin, cos, tan de P YTHON travaillent en radians et non en
degrés.
On pourra commencer par calculer la distance : B 2 H =
Exercice 2 Nombres complexes avec P YTHON et module cmath : On peut définir et calculer avec
des nombres complexes. Un nombre complexe z = a + ib se note a+bj ou complex(a,b) avec
P YTHON. Attention : le complexe i se note ici complex(0,1) ou 0+1j ou plus simplement 1j.
(a) Tester dans une console les commandes suivantes :
z1.real
z1.imag
z1.conjugate()
z1=2+1j
z2=complex(1,2)
z1+z2
z1*z2
z1/z2
z1**2
BIl
y
a
bien
des
parenthèses
après
conjugate (et pas après real et imag).
(b) Chercher dans la documentation en ligne de P YTHON le module cmath et regarder les différentes fonctions proposées. À quoi correspondent les fonctions abs, phase, polar et rect ?
(c) Écrire sous forme algébrique les nombres complexes :
2+i
,
2−i
1 − 2i
,
3+i
(1 − 4i)(1 − i)
(1 + i)2
Déterminer également le module et un argument de chacun de ces nombres.
(d) On considère les nombres a = 3, b = 6 et c = 8 + i. Vérifier numériquement, avec P YTHON, que
arg(c) + arg(c − a) + arg(c − b) = π/4.
Exercice 3 Comprendre et modifier un programme : On considère la fonction suivante :
def ecriture_base_10(n):
if n==0:
print 0
else:
print n%10
ecriture_base_10(n/10)
(a) Taper ce programme dans l’éditeur et l’enregistrer sous un nom pertinent.
(b) Lancer le programme puis faire quelques tests dans la console (essayer par exemple dans la
console ecriture_base_10(209), essayer ensuite avec d’autres nombres).
(c) Que réalise la fonction ecriture_base_10 ?
(d) En s’inspirant de cette fonction, écrire une fonction qui réalise la décomposition en binaire
(base 2).
(e) Modifier les deux fonctions précédentes pour qu’elles affichent les chiffres de la décomposition « de la gauche vers la droite. »
Exercice 4 Quelques calculs en base 10 et en base 2 :
(a) ✎ Quel est le plus grand nombre que l’on peut écrire avec (au plus) p chiffres en base 10 ?
(b) ✎ Quel est le plus petit nombre qui s’écrit avec exactement p chiffres en base 10 ?
(c) ✎ Soit n un entier et p le nombre de chiffres dans l’écriture de n en base 10. Déterminer un
encadrement de n à l’aide de p puis en déduire un encadrement de p à l’aide de ln(n).
(d) ✎ Reprendre les questions précédentes en base 2.
Exercice 5 Les nombres flottants : Un nombre flottant x est représenté dans l’ordinateur sous la
forme :
x = m · 2p
où m et p sont des entiers relatifs (il y a de plus quelques conditions sur m et p). ✎ Le nombre 0.25
peut-il se représenter exactement sous cette forme ? ✎ Montrer que le nombre 0.1 ne peut pas être
représenté exactement sous cette forme. Ceci explique que même un calcul simple comme 0.1 + 0.2
présente déjà des problèmes d’approximation.
TP 2 : Nombres et calculs avec Python
Éléments de correction
Ex. 3 : Pour afficher les chiffres de la décomposition de la gauche vers la droite :
def ecriture_base_10_gauche(n):
if n==0:
print 0
else:
ecriture_base_10_gauche(n/10)
print n%10
Par exemple :
ecriture_base_10_gauche(209)
0 2 0 9
Pour avoir des décompositions en binaire, on remplace les 10 par des 2 dans les programmes précédents.
Ex. 4 :
(a) Le plus grand nombre que l’on peut écrire avec au plus p chiffres en base 10 est :
99 · · · 9 = 10p − 1
p chiffres
Par exemple le plus grand nombre qui s’écrit avec 3 chiffres en base 10 est 999 = 1000 − 1 =
103 − 1.
(b) Le plus petit nombre qui s’écrit avec exactement p chiffres en base 10 est :
100 · · · 0 = 10p−1
p chiffres
Par exemple le plus petit nombre qui s’écrit avec 3 chiffres en base 10 est 100 = 102 .
(c) Si n s’écrit avec p chiffres en base 10, alors d’après ce qui précède 10p−1 É n É 10p − 1, ou
encore :
10p−1 É n < 10p
On applique la fonction ln (strictement croissante) :
(p − 1) ln(10) É ln(n) < p ln(10)
puis on divise par ln(10) (qui est strictement positif ) :
p −1 É
ln(n)
<p
ln(10)
On en déduit l’encadrement de p :
ln(n)
ln(n)
<pÉ
+1
ln(10)
ln(10)
(d) Dans le cas de la base 2 :
• Le plus grand nombre qui s’écrit avec p chiffres en base 2 est 2p − 1 ;
• Le plus petit nombre qui s’écrit avec exactement p chiffres en base 2 est 2p−1 ;
• Si un entier n s’écrit avec exactement p chiffres en base 2, alors 2p−1 É n É 2p − 1 ou
encore 2p−1 É n < 2p ;
• En appliquant la fonction ln, on obtient (p − 1) ln(2) É ln(n) < p ln(2) et on en déduit :
ln(n)
ln(n)
<pÉ
+1
ln(2)
ln(2)
Ex. 5 : Le nombre 0.25 est égal à 1/4, on a donc 0.25 = 2−2 . Par conséquent, 0.25 peut s’écrire sous
la forme m · 2p avec m = 1 et p = −2. Pour montrer que 0.1 ne peut pas s’écrire exactement sous
la forme m · 2p , on fait un raisonnement par l’absurde. On suppose donc que le nombre 0.1 peut
s’écrire 0.1 = m · 2p avec m et p des entiers. Alors m est un entier strictement positif, donc m Ê 1.
Comme 0.1 < 1, on a nécessairement p < 0 (car si o avait p Ê 0, on aurait 2p Ê 1 et m ·2p Ê 1). Notons
q = −p de sorte que q > 0. L’égalité 0.1 = m · 2p peut également s’écrire 2q = 10m. On en déduit que
le nombre 2q doit être divisible par 5, or ceci est impossible. On donne deux justifications possibles :
– On remarque qu’une puissance de 2 a nécessairement pour dernier chiffre 2, 4, 6 ou 8 (excepté
20 ) alors qu’un nombre divisible par 5 a pour dernier chiffre 0 un 5. Ainsi, une puissance de 2
n’est jamais divisible par 5 ;
– Le seul facteur premier qui apparait dans la décomposition de 2q est 2 alors que le nombre 5
apparait dans la décomposition en facteurs premiers de 10m. Par conséquent 2q ne peut pas
être égal à10m.
On en déduit donc que 0.1 ne peut pas s’écrire sous la forme m · 2p . Par conséquent, le nombre 0.1
ne peut pas être représenté de manière exacte par un flottant dans l’ordinateur.
Téléchargement