francois1955
XLDnaute Junior
Bonsoir,
J'ai des difficultés de programmation sur le problème suivant (fonction récursive ?):
Soit H la fonction définie, pour r entier compris entre 0 et 200, par H(r) = Max [r ; g(r)] avec
g(r)=37/38*H(r-1) + 1/38*H(r+35)
Le but est de calculer H(r) pour toute valeur de r.
Le document que j'étudie me donne l’indication d’algorithme suivante :
Initialiser le tableau H0(r) en posant H0(r)=r pour tout r.
Balayer le tableau par itération en posant H i+1(r) = Max [ r ; 37/38*H i (r-1) + 1/38*H i (r+35) ]
On me dit que la suite H(i, r) converge très rapidement vers H(r).
Pour simplifier, je me contente ici d'un cas particulier, celui de H(50).
Le document me dit que H(50) vaut environ 53.6
Mais quand j'exécute mon programme, j'obtiens H(50)=50 car ma suite H(i,50) reste constante et égale à 50
Quelqu'un peut-il me dire où je fais erreur ?
Voici ce que j'ai fait en VBA pour Excel:
**************************
' Utilisation d'un tableau H(i , r)= Hi(r) où i est l'indice et r le relatif compris entre 0 et 200
Dim H(10000, 500)
' Initialisation du tableau H(0,r)
For r = 0 To 200
H(0, r) = r
Next r
' Recherche d'un cas particulier, la valeur H(50)
' Pour cela, on cherche la limite de H(i, 50)
' d teste le Max entre 50 et 37 / 38 * H(i, 49) + 1 / 38 * H(i, 85)
For i = 0 To 9998
d = 50 - 37 / 38 * H(i, 49) - 1 / 38 * H(i, 85)
If d >= 0 Then
H(i + 1, 50) = 50
Else
H(i + 1, 50) = 37 / 38 * H(i, 49) + 1 / 38 * H(i, 85)
End If
Next i
Cells(1, 1) = H(9998, 50)
****************************
Merci d'avance pour toute aide.
J'ai des difficultés de programmation sur le problème suivant (fonction récursive ?):
Soit H la fonction définie, pour r entier compris entre 0 et 200, par H(r) = Max [r ; g(r)] avec
g(r)=37/38*H(r-1) + 1/38*H(r+35)
Le but est de calculer H(r) pour toute valeur de r.
Le document que j'étudie me donne l’indication d’algorithme suivante :
Initialiser le tableau H0(r) en posant H0(r)=r pour tout r.
Balayer le tableau par itération en posant H i+1(r) = Max [ r ; 37/38*H i (r-1) + 1/38*H i (r+35) ]
On me dit que la suite H(i, r) converge très rapidement vers H(r).
Pour simplifier, je me contente ici d'un cas particulier, celui de H(50).
Le document me dit que H(50) vaut environ 53.6
Mais quand j'exécute mon programme, j'obtiens H(50)=50 car ma suite H(i,50) reste constante et égale à 50
Quelqu'un peut-il me dire où je fais erreur ?
Voici ce que j'ai fait en VBA pour Excel:
**************************
' Utilisation d'un tableau H(i , r)= Hi(r) où i est l'indice et r le relatif compris entre 0 et 200
Dim H(10000, 500)
' Initialisation du tableau H(0,r)
For r = 0 To 200
H(0, r) = r
Next r
' Recherche d'un cas particulier, la valeur H(50)
' Pour cela, on cherche la limite de H(i, 50)
' d teste le Max entre 50 et 37 / 38 * H(i, 49) + 1 / 38 * H(i, 85)
For i = 0 To 9998
d = 50 - 37 / 38 * H(i, 49) - 1 / 38 * H(i, 85)
If d >= 0 Then
H(i + 1, 50) = 50
Else
H(i + 1, 50) = 37 / 38 * H(i, 49) + 1 / 38 * H(i, 85)
End If
Next i
Cells(1, 1) = H(9998, 50)
****************************
Merci d'avance pour toute aide.
Dernière édition: