Stanislas Devoir Surveillé n°2 SUP
Le devoir est composé de 3 exercices indépendants dont les solutions seront EXCLUSIVEMENT don- nées sur le document réponse.
Les calculatrices sont INTERDITES.
Exercice 1. Analyse de code.
1. Pour chacune des fonctions suivantes, choisir parmi les propositions : 1. renvoie la valeur de l'intégrale par la méthode des rectangles à gauche.
2. renvoie la valeur de l'intégrale par la méthode des rectangles à droite.
3. renvoie la valeur de l'intégrale par la méthode des trapèzes.
4. renvoie la valeur d'un zéro de la fonction par dichotomie.
5. renvoie une autre valeur. Précisez laquelle.
6. renvoie un message d'erreur. Précisez lequel.
7. ne nit jamais. Préciser pourquoi.
Pour les intégrations, le premier argument de la fonction correspond à une liste contenant les valeurs du temps, alors que le second correspond aux valeurs de la fonction en ces temps.
Pour la dichotomie, le 1
erargument est la borne gauche de l'intervalle de recherche, le 2
eest la borne de droite, le 3
eest la fonction dont on cherche un zéro et le 4
eest la valeur du critère d'arrêt.
a)
def f01 ( t , y ) : I = 0
for i in range ( len ( t )−1):
I = I + ( t [ i +1]−t [ i ] ) * y [ i ] return I
b)
def f02 ( t , y ) : I = 0
for i in range ( len ( t )−1):
I = I + ( t [ i +1]−t [ i ] ) * y [ i +1]
c)
def f03 ( t , y ) : I = 0
for i in range ( len ( t )−1):
I = I + ( t [ i +1]−t [ i ] ) * y [ i +1]
return I
d)
def f04 ( t , y ) : I = 0
for i in range ( len ( t ) ) :
I += ( t [ i +1]−t [ i ] ) * y [ i +1]
return I
e)
def f05 ( x , y , f , eps ) : while True :
z = ( x+y )/2 i f f ( x )* f ( z ) > 0 :
x = z else :
y = z
i f abs ( x−y ) < eps : return z
f)
def f06 ( t , y ) : I = t [1]−t [ 0 ]
for i in range ( 1 , len ( t )−1):
I += ( t [ i +1]−t [ i ] ) * y ( i ) return I
g)
def f07 ( t , y ) : S = 0
for i in (0 , len ( t )−1):
S = S + ( t [ i +1]−t [ i ] ) * ( y [ i ]+y [ i +1])/2 return S
Stanislas
. Devoir Surveillé n°2 SUP
h)
def f08 ( t , y ) : VAL = 0
for i j k in range (0 , len ( t )−1):
VAL = VAL + ( t [ i j k +1]−t [ i j k ] ) / 2 * ( y [ i j k ]+y [ i j k +1]
return VAL
i)
def f09 ( t , y ) : a = 0 b = 0 . 5 c = 4*b
for x in range ( len ( t )−1):
a = a + ( t [ x+1]−t [ x ] ) * ( y [ x]+y [ x +1])*b c = 3*a + 1
return a
j)
def f10 ( a , b , f , eps ) : x=a , y=b
while abs ( x−y)>eps : z = ( x+y )/2 i f f ( x )* f ( z ) > 0 :
x = z else :
y = z x=a , y=b return ( x+y )/2
2. Soit une fonction dichotomie(a,b,f,eps) dénie correctement. On applique cet algorithme à la fonction f dénie par
x7→(x
−6)(x+ 3)(x
−10). Donner ce que renvoie la fonction dans les cas suivants après avoir tracé l'allure de la fonction
f.
a) Tracer l'allure de la fonction
fsur le document réponse.
b) dichotomie(0,7,f,1e-16) c) dichotomie(-100,0,f,1e-16) d) dichotomie(8,30,f,1e-16) e) dichotomie(-100,-5,f,1e-16) f) dichotomie(-100,100,f,1e-16)
Stanislas
. Devoir Surveillé n°2 SUP
Exercice 2. Représentation des entiers en complément à deux.
Dans cet exercice, on utilise la représentation des entiers en complément à deux sur 8 bits, i.e. 1 octet, on notera
N= 8 le nombre de bits. Étant donné un entier
n, on notera
nesa représentation et
⊕l'addition dans ce système de représentation.
On utilise le complément à 2 pour représenter
n∈Z:
∗
1 bit détermine le signe, le bit de poids fort à gauche : 0 pour un nombre positif et 1 pour un nombre négatif
∗
les 7 autres bits déterminent la valeur :
?
pour un nombre positif, on utilise le codage binaire naturel,
?
pour un nombre négatif, on utilise le complément à 2, on code en binaire naturel le nombre 2
N − |n|En pratique (on ne demande pas de démontrer ce résultat), pour obtenir la représentation en com- plément à 2 d'un entier négatif il sut d'écrire la décomposition en base 2 de son opposé, puis de rechercher le bit de poids le plus petit égal à 1 et d'échanger les bits qui se trouvent à sa gauche (lui exclus).
Exemple 1.
On a 123
10= (0111 1011)
2Donc
−123 = (1000 0101)2On rappelle que l'addition binaire sur des nombres de 8 bits (en s'interdisant le dépassement) s'eectue
comme suit : 1 1 0 0 0 1 0 1
+ 1 1 0 0 0 1 1 0
1 1 0 0 0 1 0 1 1
1. Déterminer l'ensemble des entiers représentables en machine.
2. Addition de nombres opposés. Déterminer
a) 62
e. b)
−62g.
c) En utilisant les représentations précédentes, déterminer en base 2 en posant l'opération, puis en base 10 , le résultat de la somme 63
e ⊕−63g.
3. Addition de nombres de signes opposés. Déterminer
a) 29.
eb)
−29.gEn utilisant les représentations précédentes, déterminer en base 2 en posant l'opération, puis en base 10 , les résultats des sommes
c)
−62g ⊕29.
ed) 62
e ⊕−29.g4. Addition de nombres positifs. Déterminer
a) 36.
eb) 66.
ec) 104.
gEn utilisant les représentations précédentes, déterminer en base 2 en posant l'opération, puis en base 10 , les résultats des sommes
d) 36
e ⊕66
e. e) 104
g⊕66
e.
5. Addition de nombres négatifs. Déterminer
a)
−36.gb)
−66.gc)
−104.]En utilisant les représentations précédentes, déterminer, en base 10 , les résultats des sommes
d)
−36g ⊕−66.ge)
−104] ⊕−66.g6. On souhaite maintenant programmer la décomposition d'un nombre entier en complément à deux sur 8 bits.
a) Écrire une fonction base qui, étant donné un entier naturel
ndonné en base 10, retourne la liste [a0,...,am] où
n= (am...a0)
2(on ne s'occupera pas du nombre de bits nécessaire pour représenter ce nombre).
b) Écrire une fonction complement_2 qui renvoie le complément à 2, sur 8 bits, d'un entier. Cette fonction renverra False en cas de dépassement de capacité.
Stanislas
. Devoir Surveillé n°2 SUP
Exercice 3. Mouvement d'une prothèse de main motorisée.
La gure
1montre une prothèse de main motorisée. La mise au point de ce type de prothèse nécessite de longues phases d'optimisation pour s'adapter au mieux aux mouvements naturels et aux besoins des personnes. L'exercice vise à simuler le mouvement d'ouverture et de fermeture de la pince.
Figure 1 Prothèse de main et modélisation du mouvement des doigts.
Un moteur commande l'angle
β. La loi de fermeture de la pince dépend des angles
θet
βdes doigts, dont les mouvements sont liés par la barre
CD. En exprimant la contrainte de distance imposée par la barre, il est assez simple d'obtenir l'équation liant
θet
β:
kDCk# »
=
L⇐⇒(R cos
β+
dcos
θ)2+ (R sin
β−h+
dsin
θ)2−L2= 0 (1)
En résolvant cette équation non linéaire, il est possible de déduire pour tout angle
βimposé par le moteur à la pince 1, l'angle
θde la pince 2.
Données :
h= 40 mm ,
L= 44 mm ,
R= 15 mm et
d= 1 cm .
Une fonction loi_es(theta,beta), qui prend en argument les angles
θet
βet qui retourne la valeur de la partie gauche de l'égalité (1) a été dénie et pourra être utilisée dans vos programmes.
1. Proposer une fonction derive(f,theta,beta,dt), qui prend en argument une fonction
f, les angles
θet
βet le pas de dérivation
dtet qui retourne la valeur de la dérivée numérique de la fonction
fpar rapport à la variable
θ.
2. Proposer une fonction resolution(f,x_ini, eps, beta,dt) basée sur la méthode de Newton, permettant de résoudre l'équation (1) pour un angle
βxé et renvoyant
θpour toute valeur de
βdonnée comme argument. Vous utiliserez des appels aux fonctions précédemment dénies.
3. Proposer un algorithme permettant de dénir un tableau d'environ 10 valeurs pour
βentre
−0,5et 0,3 rad , et de calculer le tableau des angles
θcorrespondants.
4. Donner les lignes de programme permettant de tracer l'évolution de l'angle
θen fonction de
β. Les axes seront légendés et la gure contiendra un titre.
Stanislas