Bonjour à tous,
Je suis actuellement en prépa scientifique et je débute donc la programmation sur Python.
J'ai un exercice à faire et je n'arrive pas à le mener à terme.
L'exercice :
On pose u[0]=1 et, pour tout n dans N,
u[n+1] = 0.5* (u[n] + (n+1)/(u[n]))
et v[n] = somme de : 1/(u[k])^5 pour k allant de 0 à n
Ecrire une fonction f(n) retournant la valeur de v[n]. On fera attention à ce que le calcul de f[n] ne demande pas trop de (re)calculs inutiles. Ainsi, f(10**6) doit être calculer en largement moins d'une minute.
Ce que j'ai déjà fait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 def suite_u(n): u = 1 for k in range(n): u = 0.5*(u + (k+1)/u) return u
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 def f(n): v = 0 for t in range(n+1): v += 1/(suite_u(t))**5 return v
Cependant, mon problème est que ces algorithmes ne sont pas assez optimisés pour répondre à la nécessité temporelle associée au calcul de f(10**6).
Pourriez-vous donc m'indiquer des techniques de les optimiser ???
Je suis très novice dans la matière.
MERCI !
Partager