Fonction récursive ?

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.
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re...

Bonsoir Roger,
Je suis très impressionné par le résultat mais pas en mesure malheureusement de comprendre le code pour l'instant.
Je reverrai ça quand je serai plus grand :)
Merci pour ton intérêt sur le sujet, ta participation et ton aide.


Ce code n'est pas si compliqué qu'il en a l'air. Puisse vous en convaincre le commentaire en pièce jointe.
S'il y a encore quelques précisions à apporter, je le ferai dans la mesure du possible
.​

Contribution annulée et pièce jointe retirée. Voir #17, #18 et #22.​

Bonne journée.

ℝOGER2327
#8360


Mercredi 11 Haha 144 (Sortie de Saint Lucas Cranach, apocalypticien - fête Suprême Quarte)
25 Vendémiaire An CCXXV, 0,2368h - bœuf
2016-W41-7T00:34:06Z
 
Dernière édition:

francois1955

XLDnaute Junior
Bonjour Roger,
Merci pour tous ces commentaires détaillés. C'est magnifique!
Votre souci d'optimiser le code et son exécution, félicitations, c'est carrément de l'art !


Je ne joue pas dans cette catégorie.
Je ne suis qu'à un stade artisanal et je ne suis qu'un petit artisan malhabile.
Pour l'instant, ma priorité n'est pas la performance informatique mais de résoudre les problèmes rencontrés ça et là.

Vous le voyez, tout cela est d’une simplicité biblique.
Non , pas du tout !
Vous avez totalement oublié toutes les heures passées à emmagasiner une telle culture informatique et à acquérir une telle expertise !
Certes, avec tous les détails que vous me donnez, beaucoup de choses s' éclairent et certaines portes s'ouvrent mais il y a, malgré tout, encore de nombreuses difficultés à surmonter, ne serait-ce qu'au niveau de la syntaxe.

Nul besoin d’encombrer la
mémoire de nos machines de tableaux de cinq millions d’items !
Votre perfectionnisme vous aveugle.
Le travail dans la feuille à cinq millions d'items n'a absolument pas le même objectif, ni le même intérêt. Il a, comme je l'ai dit, un côté visuel que n'a pas un code exprimant directement et uniquement (rapidement ou pas) les seuls résultats finaux.
Cela dépend de ce qu'on cherche.
D'ailleurs, une fois réalisée, la feuille surchargée n'encombre pas la machine, elle peut passer tout simplement à la poubelle.
Et je suis passé au code, certes ... de très mauvaise qualité.:)
Cordialement.
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re...

(...)
Cela dépend de ce qu'on cherche.
(...)

J'ai cru lire (#6) :​
Bon, je ne m'en sors pas...
Voici ci-joint le document qui me pose problème.
Je cherche à reconstituer le tableau des valeurs v(w) pour w compris entre -126 et 89.
Par exemple, je cherche à vérifier que v(50) vaut environ 53.6
Si quelqu'un voit comment ça peut se programmer, ça m'aiderait beaucoup.
Merci
Mon manque de maîtrise de la langue m'a fait croire, bien à tort, j'en conviens, qu'il fallait reconstituer le tableau des valeurs v(w) pour w compris entre -126 et 89. Veuillez m'en excuser. À l'avenir, j'éviterai soigneusement de polluer les discussions que vous ouvrez. Je retire évidemment mes interventions malencontreuses.​

Humblement,

ℝOGER2327
#8361


Jeudi 12 Haha 144 (Saint Cosinus, savant - fête Suprême Quarte)
26 Vendémiaire An CCXXV, 7,0640h - aubergine
2016-W42-1T16:57:13Z
 

francois1955

XLDnaute Junior
Bonsoir Roger,
Mon manque de maîtrise de la langue m'a fait croire, bien à tort, j'en conviens, qu'il fallait reconstituer le tableau des valeurs v(w) pour w compris entre -126 et 89. Veuillez m'en excuser. À l'avenir, j'éviterai soigneusement de polluer les discussions que vous ouvrez. Je retire évidemment mes interventions malencontreuses.​


Il y a un malentendu.
Le problème était bien de reconstituer le tableau de valeurs!
Et vous l' avez fait fort brillamment, de façon vraiment très performante, je vous en félicite encore et vous en remercie vivement.
Je vous remercie aussi du temps passé et de vos commentaires fort détaillés sur votre code.

Je signifiais juste, au passage, que la feuille avec les 10000 colonnes avait aussi eu un intérêt pour moi.

Merci encore.
Francois

 

ODVJ

XLDnaute Impliqué
M'enfin ROGER2327!

Tu as fait un code superbe, concis et rapide et tu veux nous en priver!
Quand je dis nous, je ne parle pas de moi puisque j'ai eu le temps de le mettre au chaud ce matin.
C'était très formateur.
En plus tu avais fait une documentation Latex détaillée rendant ton code "évident", à la fin.

Je n'ai pas compris le dérapage qui aboutit à ta réaction. Tu as sans doute tes raisons.

Au plaisir de te relire

Cordialement
 

francois1955

XLDnaute Junior
Bonsoir OVDJ !
En plus tu avais fait une documentation Latex détaillée rendant ton code "évident", à la fin.
Je n'ai pas compris le dérapage qui aboutit à ta réaction. Tu as sans doute tes raisons.
Il ne faudrait pas que Roger n'ait été vexé que je ne trouve pas le code tout aussi évident que toi.

Roger, si c'est la raison, malgré votre volonté de très bien faire et votre désir de faire comprendre absolument tout à quiconque, vous ne pouvez pas faire d'un âne un cheval de course !
Euh... et si c'est le cas et si je comprends bien, c'est moi qui devrait être vexé ! Lol

Je pense qu'il s'agit d'un terrible et malheureux malentendu.
Merci encore pour tout.
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Bonjour francois1955, ODVJ.

Admettons le terrible et malheureux malentendu. Je n'ai voulu offenser personne, mais j'en ai un peu marre de lire que j'écris du code, certes «magnifique», mais tellement difficile ! Et non, je n'ai pas une énorme «culture informatique»*, pas plus qu'une quelconque «expertise»**. Je me contente d'une honnête culture mathématique et d'un attachement indéfectible au cartésianisme. Rien de plus.
Bref, si vous l'acceptez, l'incident est clos.

Je joins un commentaire plus développé pour expliquer pourquoi mon code ne mérite pas d'excessive admiration. D'autre part, je suis d'accord pour dire que
(...) le travail dans la feuille à cinq millions d'items n'a absolument pas le même objectif, ni le même intérêt. Il a (...) un côté visuel que n'a pas un code exprimant directement et uniquement (rapidement ou pas) les seuls résultats finaux. (...)
et j'apporte ma contribution dans ce sens.

Bonne soirée à vous.

ℝOGER2327
#8362


Vendredi 13 Haha 144 (Bienheureuse Fenouillard, sainte famille - fête Suprême Quarte)
27 Vendémiaire An CCXXV, 7,2203h - piment
2016-W42-2T17:19:43Z


(*) Rapprochement de deux mots dont je discerne d'ailleurs mal le rapport.
(**) Quand je vois le brillant «travail» des experts autoproclamés qui ont confisqué la démocratie pour gouverner le monde, je n'ai aucune envie de rentrer dans l'expertise !

2016-10-19 09:39 - Correction mineure d'une pièce jointe.
 

Pièces jointes

  • Limite d'une fonction itérée.xlsm
    36.5 KB · Affichages: 40
  • Construction raisonnée (3bis).pdf
    153.5 KB · Affichages: 31
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 496
Messages
2 088 982
Membres
103 997
dernier inscrit
SET2A