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