2. La commandeprint math.sin(x)va afficher
① Une erreur ② 0.8414709848078965 ③ −1 ④ 0.0
3. La commandeprint np.sin(x)va afficher
① Une erreur ② 0.8414709848078965 ③ −1 ④ 0.0
4. La commandeprint sin(v)va afficher
① Une erreur
② array([0.84147098,0.0])
③ array([0.0,0.84147098])
④ 0.84147098
5. La commandeprint math.sin(v)va afficher
① Une erreur
② array([0.84147098,0.0])
③ array([0.0,0.84147098])
④ 0.84147098
6. La commandeprint np.sin(v)va afficher
① Une erreur
② array([0.84147098,0.0])
③ array([0.0,0.84147098])
④ 0.84147098
2 Révisions sur les listes
On définit ensuite dans le programme PYTHON: tmes=[0,50,100,150,200,250]
Cmes=[1e-2,7.85e-3,6.25e-3,4.68e-3,3.60e-3,2.82e-3]
C0=1e-2
7. La commandeprint Cmes[1]va afficher
① 7.85e-3 ② 1e-2 ③ 2.82e-3 ④ Une erreur
8. La commandeprint Cmes[1:4]va afficher
① [1e-2,7.85e-3,6.25e-3,4.68e-3]
② [1e-2,7.85e-3,6.25e-3]
③ [7.85e-3,6.25e-3,4.68e-3]
④ [7.85e-3,6.25e-3,4.68e-3,3.60e-3]
9. La commandeprint tmes[-1]va afficher
① 250 ② 200 ③ 0 ④ Une erreur
10. La commandeprint range(len(tmes))va afficher
① [1,2,3,4,5,6]
② [0,1,2,3,4,5]
③ [0,1,2,3,4,5,6]
④ [1,2,3,4,5]
11. Compléter la fonction suivante afin qu’elle calcule la somme des termes d’une listeL de nombres (en prenant la convention que si la liste est vide alors la somme est nulle) :
def somme(L):
________________________________________________________
for k in range(len(L)):
________________________________________________________
________________________________________________________
3 Les écarts quadratiques
Pour une mesuretmes[i],Cmes[i] et une valeur der donnée, la quantité : ei =
C0e−r·tmes[i]−Cmes[i]2
est l’écart quadratiqueentre la mesure et le modèle. On définit une fonctionden posant : d(r)=
5 i=0
C0e−r·tmes[i]−Cmes[i]2
Cette fonction représente la somme des écarts quadratiques entre les mesures effectuées et le modèle.
12. On considère la fonction : def mystere(r):
E=[]
for i in range(len(tmes)):
E.append((C0*math.exp(-r*tmes[i])-Cmes[i])**2) return E
Décrire ce que calculemystere(r):
13. Compléter la fonction suivante afin qu’elle calcule la quantitéd(r) définie ci-dessus en faisant appel aux fonctionsmystereetsomme:
def d(r):
________________________________________________________
On obtient la représentation graphique suivante pour la fonctiondsur l’intervalle [10−4,10−2] :
01000 01002 01003 01004 01005 01060
0 0100000
0100002 0100003 0100004 0100005 0100060 0100062 0100063
0011
0122345364789649593643418145340
On observe que la fonctiond possède un minimum. On considère que le modèle qui cor- respond le mieux aux mesures est celui qui est associé au paramètrer pour lequeld(r) est minimum. Afin de déterminer ce minimum, on va déterminer les valeurs qui annulent la dérivée ded.
14. La fonctiondest dérivable surR. Sa dérivée est définie par
① d′(r)=
5
i=0
2
C0e−r·tmes[i]−Cmes[i]
② d′(r)=2C05
i=0
tmes[i]e−r·tmes[i]
Cmes[i]−C0e−r·tmes[i]
③ d′(r)=
5
i=0
2e−r·tmes[i]
C0e−r·tmes[i]−Cmes[i]
④ d′(r)=
5
i=0
2C0e−r·tmes[i]
C0e−r·tmes[i]−Cmes[i]
15. Compléter la fonction suivante pour qu’elle calcule la valeur ded′(r) :
def d_prim(r):
________________________________________________________
for k in range(len(tmes)):
________________________________________________________
________________________________________________________
4 Minimisation
On rappelle la fonction suivante qui met en œuvre la méthode de dichotomie :
def dichotomie(f,a,b,epsilon):
while (b-a)>epsilon:
c=float(a+b)/2 if f(a)*f(c)<=0:
b=c else:
a=c
return float(a+b)/2
16. Pour déterminer une valeur approchée à 10−3près de
3 par dichotomie, il faut écrire
① dichotomie(lambda x:x**3-2,0,1,1e-3)
② dichotomie(x**2-3,1,2,1e-3)
③ dichotomie(lambda x:x^2-3,1,2,1e-3)
④ dichotomie(lambda x:x**2-3,1,2,1e-3)
On ne va pas utiliser directement la fonctiondichotomiepour obtenir une approxima- tion d’une solution de l’équation d′(r)=0 mais on va s’en inspirer pour construire une autre méthode d’approximation : laméthode de la fausse position.
Étant données une fonction continue f et deux valeursa etb tellesa<bet f(a) et f(b) sont de signes contraires, on considère la droiteD pas- sant pas les points (a,f(a)) et (b,f(b)). On note alors c l’abscisse du point d’intersection de D avec l’axe des abscisses. Le principe de l’algo- rithme est le suivant :
— si f(a) et f(c) sont de signes contraires, alors on poseb=c, sinon on posea=c;
— on continue jusqu’à ce que l’on aitb−aε oùεest la précision souhaitée.
❛
❜
❝
17. La droiteDa pour équation
① y=f(a)+ f(b)−f(a) b−a (x−a)
② y=f(b)+f(b)−f(a) b−a (x−a)
③ y=f(a)− f(b)−f(a) b−a (x−a)
④ y=f(a)+ f(b)−f(a) b−a (x−b)
18. L’abscissecdu point d’intersection deDavec l’axe des abscisses vaut
① c=a−f(a)f(b)−f(a) b−a
② c=a+f(a) b−a f(b)−f(a)
③ c=a−f(b) b−a f(b)−f(a)
④ c=a−f(a) b−a f(b)−f(a)
19. Compléter la définition suivante en programmant l’algorithme de la fausse position décrit plus haut (on pourra s’inspirer de la fonctiondichotomie).
def fausse_position(f,a,b,epsilon):
________________________________________________________
________________________________________________________
________________________________________________________
________________________________________________________
________________________________________________________
________________________________________________________
________________________________________________________
________________________________________________________
________________________________________________________
20. Indiquer comment utiliser la fonction précédente pour déterminer une approximation à 10−6près du paramètrer pour lequeld(r) est minimal :
Corrections
1. La fonctionsinn’existe pas dans PYTHONsans charger de module supplémentaire : réponse 1.
2. La commandemath.sin(x)calcule une valeur approchée de sin(1) qui est un nombre stric- tement positif : réponse 2.
3. Les fonctions mathématiques du module NUMPYpeuvent s’appliquer à des nombres : réponse 2.
4. La commandesinn’existe pas : réponse 1.
5. Les fonctions mathématiques du modulemathne peuvent pas être appliquées à des vecteurs : réponse 1.
6. Appliquée à un vecteur, la commandenp.sincalcule les sinus de chaque composante du vec- teur : réponse 2.
7. SiLest une liste,L[1] est le deuxième élément de cette liste (le premier estL[0]) : réponse 1.
8. SiLest une liste, alorsL[a:b] est la liste dont les éléments sontL[a],...,L[b−1] : réponse 3.
9. SiLest une liste, alorsL[−1] est le dernier élément de cette liste : réponse 1.
10. Sinest un entier,range(n)est la liste [0,...,n−1]. Par ailleurs,len(tmes)est le nombre d’éléments de la listetmesc’est à dire 6 : réponse 2.
11.
def somme(L):
s=0
for k in range(len(L)):
s=s+L[k]
return s
12. Cette fonction construit et renvoie la liste [e0,...,e5] des écarts quadratiques relativement àr. 13.
def d(r):
return somme(mystere(r))
14. Avec les formules de dérivation usuelles : d
dr
(C0e−r t−C)2
=2C0(−t)e−r t(C0e−r t−C) C’est la réponse 2.
15. En définissant des notations intermédiaires pour éviter les lignes trop longues :
def d_prim(r):
s=0
for k in range(len(tmes)):
t=tmes[k]
C=Cmes[k]
s=s+2*C0*t*math.exp(-r*t)*(C-C0*math.exp(-r*t)) return s
On peut déjà faire un test en cherchant les racines ded_primavec la fonctionfsolvede SCIPY:
from scipy.optimize import fsolve print fsolve(d_prim,1e-4)
[ 0.00499284]
Représentation graphique de la fonctiond′: rr=np.linspace(1e-4,1e-2,100) plt.clf()
plt.plot(rr,[d_prim(r) for r in rr]) plt.axhline(y=0,color=’k’)
plt.xlabel("r") plt.ylabel("d’(r)")
01000 01002 01003 01004 01005 01060
7 80105
80104 80103 80102 0100
01234
16. Pour déterminer une valeur approchée de
3, il faut rechercher les racines dex→x2−3. Cette fonction s’écritlambda x:x**2-3avec PYTHON. De plus, cette racine est à chercher entre 1 et 2 : réponse 3.
17. Ces quatre équations définissent bien une droite. Il suffit de déterminer pour laquelle on ay= f(a) lorsquex=aety=f(b) lorsquex=b: réponse 1.
18. On cherche pour quelle valeur dexl’équation précédente donney=0 : réponse 4.
19. On reprend l’algorithme de dichotomie et on remplace le calcul dec avec la formule précé- dente :
def fausse_position(f,a,b,epsilon):
while (b-a)>epsilon:
c=a-f(a)*float(b-a)/(f(b)-f(a)) if f(a)*f(c)<=0:
b=c else:
a=c
return float(a+b)/2
20.
fausse_position(d_prim,1e-4,1e-2,1e-5)
Rq. Il se trouve en fait que sur cet exemple, l’algorithme de la fausse position ne converge pas cor- rectement. On peut également utiliser l’algorithme de dichotomie.
r0=dichotomie(d_prim,1e-4,1e-2,1e-5) print r0
0.00499682617188
Vérification graphique : pour cette valeur der, on représente graphiquement les mesures ainsi que la fonctionC.
plt.clf()
t=np.linspace(0,300) plt.plot(tmes,Cmes,’k+’) plt.plot(t,C0*np.exp(-r0*t)) plt.xlabel("t")
plt.ylabel("C(t)")
0 10 200 210 300 310 400
5 06003
06004 06007 06001 06008 06009 0600 0600 06020
0123