Une suite harmonique

Résolu/Fermé
BoudineJean-Pierre - 16 mai 2018 à 19:39
BoudineJean-Pierre Messages postés 5 Date d'inscription mercredi 16 mai 2018 Statut Membre Dernière intervention 17 mai 2018 - 17 mai 2018 à 19:58
Bonjour,
Je souhaite construire des suites "harmoniques" c'est à dire que, si a,h,b, sont trois termes consécutifs, h est la moyenne harmonique de a et b.
Pour construire, je fixe a et h et j'ai b = a*h/(2*a-h).
Ce script :
a,h,c=14,15,1
while c<5:
(a,h)= (h,a*h/(2*a-h))
print h
c = c+1
fonctionne très bien, mais je préférerais les résultats sous forme de fractions rationnelles et quand je tente d'introduire "Fraction(h,a*h/(2*a-h))", j'ai un message d'erreur dont je ne me sort pas...



A voir également:

1 réponse

yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
Modifié le 16 mai 2018 à 22:45
bonsoir, peux-tu montrer ton programme complet, et nous indiquer quel message d'erreur tu as sur quelle ligne?
que veux-tu représenter sous forme de fraction rationnelle?
à ta place, moi je commencerais avec
a=Fraction(1,14)
h=Fraction(1,15)
c=1
1
BoudineJean-Pierre Messages postés 5 Date d'inscription mercredi 16 mai 2018 Statut Membre Dernière intervention 17 mai 2018
17 mai 2018 à 10:30
Merci de ton attention. Les deux premiers termes ne sont pas 1/14 et 1/15, mais 14 et 15. C'est ça qui est amusant. je ne parle pas de la suite harmonique classique (1/n).
h étant la moyenne harmonique de a et b, je ne calcule pas h avec a et b, je pose a et h et je calcule b, puis, b est la moyenne harmonique de h et un h' que je calcule, et ainsi de suite. Si on commence avec 1 et 1/2, on trouve la suite 1/n.

Si on commence avec 14 et 15, on continue avec 210/13 , 35/2 ; 210/11, etc.
le script me donne ça, mais sous forme décimale : 14,15, 16.1538...,17.5, etc.
Je voudrais la suite sous forme de fractions (celles ci-dessus, je les calcule à la main). le message d'erreur est :TypeError 'float' object cannot be interpreted as an index
0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476 > BoudineJean-Pierre Messages postés 5 Date d'inscription mercredi 16 mai 2018 Statut Membre Dernière intervention 17 mai 2018
17 mai 2018 à 12:31
peux-tu montrer ton programme complet. tu montres un message d'erreur sans montrer ton code.
0
BoudineJean-Pierre Messages postés 5 Date d'inscription mercredi 16 mai 2018 Statut Membre Dernière intervention 17 mai 2018
17 mai 2018 à 18:01
Comme dit dans mon premier message, j'ai simplement introduit le mot "Fraction". à l'endroit du calcul. Ce qui donne :

a,h,c=14,15,1
while c<50:
(a,h)= (h, Fraction(a*h/(2*a-h)))
print h
c = c+1

JP
0
BoudineJean-Pierre Messages postés 5 Date d'inscription mercredi 16 mai 2018 Statut Membre Dernière intervention 17 mai 2018
17 mai 2018 à 18:28
bon, là, j'ai un progrès :
from fractions import *
a,h,c=14,15,1
while c < 11:
g=a*h/(2*a-h)
(a,h)=(h,g)
e=Fraction.from_float(g)
print e
c=c+1
cette fois, les réponses sont sous forme de fraction ... mais le numérateur et le dénominateur ont douze chiffres chacun ! Ces fractions semblent correctes (le développement décimal est le même que celui de la fraction exacte (par exemple 210/13. Mais soit, elles ne sont pas réduites, soit le processus de calcul par Python donne une fraction très très proche, mais différente.
0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476 > BoudineJean-Pierre Messages postés 5 Date d'inscription mercredi 16 mai 2018 Statut Membre Dernière intervention 17 mai 2018
17 mai 2018 à 18:48
mélanger float et fraction ne peut que te causer des problèmes d'arrondis. utiliser des float, comme mis en évidence par Fraction.from_float est une hérésie dans ton contexte.
0