Comment programmer cette équation?
Fermémamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 - 16 févr. 2023 à 12:30
- Comment programmer cette équation?
- Programmer sms - Guide
- Programmer mail gmail - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Programmer un mail outlook - Guide
4 réponses
14 févr. 2023 à 09:44
Bonjour
Je n'ai pas regardé en détails.. mais il ne faudrait pas mettre des "t" à la place des "i" ?
15 févr. 2023 à 07:41
@jordane45 StatutModérateur bonjour. Même en remplaçant i à la place ça donne toujours des erreurs.
15 févr. 2023 à 15:50
Bonjour,
Ta fonction est définie de manière récursive mais ni f ni z0 ni sigma ni P ne sont définis dans leur formulation mathématique. Ensuite, ta somme dépend des zjt et des zit et ce serait une bonne idée de mémoriser les termes intermédiaires (voir programmation dynamique) car écrire la fonction récursive telle quelle sera beaucoup plus coûteux.
Vu que t est un paramètre muet, je suppose qu'on peut ignorer t, et voir (z_it) comme une suite (u_i). Est-ce le cas ?
Bonne chance
Merci beaucoup. ici f(z)= az(1-z), c'est ainsi que j'ai remplacé f(z[i][t)] par sa valeur qui est az[i][t](1-z[i][t]) tout en sachant que la fonction est comme un tableau a deux dimensions. le premier est le nombre des éléments (i= 1 à N avec ) et le second, le nombre d'itération (t). si possible veuillez me proposer une autre méthode pour programmer cette équation. Merci beaucoup
16 févr. 2023 à 12:30
Bonjour,
Vu que je ne comprends pas ce que sont a et t dans ce que tu expliques, je vais te montrer comment tu peux faire sur un exemple classique, une suite de Fibonnacci et te laisse l'adapter. C'est quasiment le même sujet que toi puisqu'un le terme à l'index i dépend des termes précédents.
Voici la version récursive :
def fibonacci_rec(i: int, f0: int = 0, f1: int = 1) -> int: if i == 0: # F_0 = 0 ret = f0 elif i == 1: # F_1 = 1 ret = f1 else: # F_n = F_{n-1} + F_{n-2} ret = fibonacci_rec(i - 1) + fibonacci_rec(i - 2) return ret def fibonacci(i: int, f0: int = 0, f1: int = 1) -> int: return fibonacci_rec(i, f0, f1) for i in range(0, 16): print(f"F_{i} = {fibonacci(i)}")
Voici la version en programmation dynamique : l'idée est d'accumuler les résultats précédents dans un dictionnaire d.
def fibonacci_dp(i: int, d: dict, f0: int = 0, f1: int = 1) -> int: ret = d.get(i) if ret is None: if i == 0: # F_0 = 0 ret = f0 elif i == 1: # F_1 = 1 ret = f1 else: # F_n = F_{n-1} + F_{n-2} ret = fibonacci_dp(i - 1, d) + fibonacci_dp(i - 2, d) d[i] = ret return ret def fibonacci(i: int, f0: int = 0, f1: int = 1) -> int: d = dict() return fibonacci_dp(i, d, f0, f1) for i in range(0, 16): print(f"F_{i} = {fibonacci(i)}")
Comme tu peux le voir le code est extrêmement proche de la version récursive.
Note : pour plus de performances on peut même remplacer les dernières lignes par :
d = dict() for i in range(0, 16): print(f"F_{i} = {fibonacci_dp(i, d)}")
... car comme ça au cours de la boucle for, les calculs intermédiaires sont partagés.
Bonne chance