Traiter des formules cycliques ou récurrentes dans un tableau (c'est-à-dire des références circulaires).J'ai une formule qui est récurrente.JMP peut le résoudre, mais il avertit des cycles chaque fois que je crée une nouvelle formule.
Comment puis-je:
- Forcer une nouvelle itération ?
- Configurer le nombre d'itérations (ou les critères d'arrêt) pour résoudre la récurrence ?
- Empêcher que l'évaluation se reproduise ? L'option Supprimer Eval dans le menu de formule n'a pas fonctionné.
La fonction est un peu plus complexe mais ne diffère pas de la suivante, qui fonctionne sans problème.
X (k+1) = 0,99 * X(k)
If(
Selected() == 1, 1,
Row() == 1, 1,
Lag( :X ) * 0.99
)
Modélisation statistique avancéeÉtudes de consommation et de marchéAccès aux donnéesIngénierie Qualité et ProcédésAnalyse de fiabilitéRe : Gérer des formules cycliques ou récurrentes dans un tableau (c'est-à-dire des références circulaires).La fonction que vous avez fournie devrait fonctionner telle quelle, sans aucun avertissement.Si vous faites en fait référence à la colonne A dans la formule de B et à la colonne B dans la formule de A, vous pouvez essayer d'écrire cette logique sous la forme d'une formule unique ou suivre @Craige_Hales et faites-le plutôt avec un script.
Tableau avec votre exemple de formule, cela devrait être évalué sans avertissement ni erreur.
New Table( "Untitled 16",
Add Rows( 10 ),
New Column( "X",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( If( Selected() == 1, 1, Row() == 1, 1, Lag( :X ) * 0.99 ) ),
Set Selected
),
Set Row States( [0, 0, 0, 0, 1, 0, 0, 0, 1, 0] )
)
Re : Gérer des formules cycliques (ou récurrentes) dans un tableauL'évaluateur de formules de JMP fonctionne en évaluant d'abord les colonnes de formules qui dépendent uniquement des colonnes sans formule, puis en évaluant les colonnes de formules qui dépendent des colonnes de formules déjà évaluées. Si la formule de la colonne A dépend de la colonne B et que la formule de la colonne B dépend de la colonne A, JMP ne peut pas choisir laquelle évaluer en premier. Si vous parvenez à inciter JMP à créer une dépendance circulaire, vous ne pouvez pas être sûr quelle colonne utilisait les anciennes données de l'autre colonne.
JMP évalue une colonne de haut en bas. Dans une formule, vous pouvez utiliser la fonction de décalage (ou la création d'indices) pour examiner les lignes précédentes et obtenir la valeur précédemment calculée. Je ne suis pas sûr de ce qui se passe si vous regardez les lignes futures, mais cette valeur n'a pas encore été calculée.
Il existe des formules qui pourraient fonctionner sur la base de règles Excel, mais JMP n'est pas une feuille de calcul et joue selon les règles ci-dessus. Si vous devez faire en sorte que la colonne A fasse référence à un décalage de la colonne B et que la colonne B fasse référence à un décalage de la colonne A, vous devez faire en sorte que A et B soient des colonnes sans formule et écrire du JSL pour les remplir. Ajoutez ce JSL à un script de table avec un nom tel que "Exécutez-moi lorsque les données doivent être mises à jour".
Si vous avez une fonction récursive, vous pouvez créer une fonction JSL qui s'appelle elle-même. JSL a une limite assez basse sur la profondeur de récursion autorisée, environ 100. Vous devez écrire votre propre instruction if qui décide quand arrêter la récursion. Généralement, un paramètre de profondeur est utilisé pour arrêter la récursion, quelque chose comme (non testé et inutile...)
f = function({depth}, if(depth < 10, /* do something */ f(depth + 1) ) );
f(0)
Re : Gérer des formules cycliques (ou récurrentes) dans un tableauPour référence, Excel propose les options suivantes pour gérer les références circulaires.
https://support.microsoft.com/en-us/office/change-formula-recalculation-iteration-or-precision-in-excel-73fc7dac-91cf-4d36-86e8-67124f6bcce4#:~:text=Iteration%20is %20le%20recalcul%20répété,est%20appelé%20a%20circulaire%20référence .