sommes partielles de la série harmonique

publicité
SOMMES PARTIELLES DE LA SÉRIE HARMONIQUE
Durée : 25 minutes
Soient a et b deux nombres entiers strictement positifs, avec a ¤ b. On considère la somme
Spa ; bq QUESTION 1.1 Spa ; bq.
QUESTION 1.2 petit entier
n¥1
QUESTION 1.3 entier naturel
N
PlusGrand(M)
tel que
ņ
1
k
k 1
On admet que quel que soit le nombre
M
1
.
k
k a
Somme(a, b)
Écrire un programme
Écrire un programme
b̧
qui étant donnés
a
et
b
qui étant donné un réel
qui calcule la somme
M
¡0
renvoie le plus
¥ M.
il existe toujours un tel
n.
PlusPetit(N, epsilon) qui étant donnés un réel ε ¡ 0 et un
petits entiers a et b pour lesquels on a à la fois b a
1 ¥ N et
Écrire un programme
détermine les deux plus
b̧
¤ ε.
1
k
k a
Par exemple, appliqué à
mais
ng Lycée Saint Louis
N3
et
ε 0,01,
ce programme renverra le couple
1
300
1
301
1
302
0,009 966 85 . . .
1
299
1
300
1
301
0,010 000 07 . . ..
1
p300 ; 302q
, car
sommes partielles de la série harmonique
solution
QUESTION 1.1 Ici on utilise une boucle
termes.
pour
, car on doit sommer un nombre connu à l'avance de
def Somme (a , b) :
S = 0
for k in range (a , b + 1) :
S += 1/ k
return S
QUESTION 1.2 Dans cette question on doit renvoyer un indice, pas la valeur de la somme. Et en
particulier on ne doit pas renvoyer un couple (indice, somme). Comme on ne sait pas à l'avance le nombre
d'étapes à faire, on utilise un boucle tant que.
def PlusGrand (M ) :
S = 0
k = 1
while S <= M :
S += 1/ k
k += 1
return k
QUESTION 1.3 Question plus dicile. Déjà, il faut comprendre que la condition b a
1 ¥ N, couplée
au fait que a et b doivent être minimaux, fait qu'on aura en fait exactement b a 1 N (imaginons
en eet que la solution optimale pa, bq soit telle que b a 1 ¡ N : comme Spa, b 1q ¤ Spa, bq et que
pb 1q a 1 ¥ N, on a une solution avec un b plus petit en prenant pa, b 1q).
Pour trouver la solution pa, bq, la meilleure stratégie rencontrée dans les copies est à peu près la suivante.
Peu ont pensé au fait qu'il n'y a pas à recalculer Spa, bq à chaque étape : une soustraction et une addition
susent, en remarquant que
Spa
1, b
1q Spa, bq 1
a
1
.
b
def PlusPetit (N , epsilon ) :
# On part de la solution triviale
a = 1
b = N
S = Somme (a , b )
while S > epsilon :
a += 1
b += 1
S = S - 1/( a -1) + 1/ b
return (a , b )
L'inconvénient de cette stratégie, c'est que si ε est très petit, on fait de nombreuses étapes : pour N 1, on
s'arrête lorsque 1{a ¤ ε c'est-à-dire a ¥ 1{ε. Si N 2, c'est pire puisque 1{a 1{pa 1q 2{a et ceci est plus
petit que ε lorsque a 2{ε. Pour N termes, on a quelque chose du genre a N{ε étapes avant d'aboutir.
On va essayer d'aller beaucoup plus vite, en partant de ce majorant (sans doute un peu large) a N{ε, et
reculer . Pour ceux qui ne sont pas convaincus que c'est bien un majorant de la solution :
Spa, bq ng Lycée Saint Louis
1
a
1
a
1
2
1
b
¤ N a1 .
sommes partielles de la série harmonique
from numpy import ceil
def PlusPetit (N , epsilon ) :
# On part de la solution triviale
a = int ( ceil ( N / epsilon ))
b = a + N - 1
S = Somme (a , b )
S_ = S + 1/( a -1) - 1/ b
while S_ <= epsilon :
S = S_
a -= 1
b -= 1
S_ = S + 1/( a -1) - 1/ b
return (a , b )
Voyons si l'on a en eet été plus rapide avec cette version : ajoutons trois lignes à ces deux programmes :
un nb_étapes = 0 avant la boucle, un nb_étape += 1 dans la boucle et un print("Nombre d'étapes : ",
nb_étapes) juste avant le return. Voici ce qu'on obtient.
In [11]: # Premi è re version
PlusPetit (10 , 0.001)
Nombre d ' é tapes : 9995
Out [11]: (9996 , 10005)
In [12]: # Deuxi è me version
PlusPetit (10 , 0.001)
Nombre d ' é tapes : 4
Out [12]: (9996 , 10005)
ng Lycée Saint Louis
3
sommes partielles de la série harmonique
Téléchargement