Gestire formule cicliche o ricorrenti in una tabella (ovvero riferimenti circolari).Ho una formula ricorrente.JMP può risolverlo, ma avverte dei cicli ogni volta che creo una nuova formula.
Come posso:
- Forzare una nuova iterazione?
- Configurare il numero di iterazioni (o criteri di arresto) per risolvere la ricorrenza?
- Evitare che la valutazione si ripeta? Elimina l'opzione Valutazione nel menu formula: non funziona.
La funzione è un po' più complessa ma non diversa dalla seguente, che funziona senza problemi.
X(k+1) = 0,99 * X(k)
If(
Selected() == 1, 1,
Row() == 1, 1,
Lag( :X ) * 0.99
)
Modellazione statistica avanzataRicerche sui consumatori e sul mercatoAccesso ai datiIngegneria della qualità e dei processiAnalisi di affidabilitàRe: Gestione di formule cicliche o ricorrenti in una tabella (ovvero riferimenti circolari).La funzione fornita dovrebbe funzionare così com'è, senza alcun avviso.Se in effetti fai riferimento alla colonna A nella formula per B e alla colonna B nella formula per A, potresti provare a scrivere quella logica come un'unica formula o seguire @Craige_Hales e fallo invece con uno script.
Tabella con la formula di esempio, questa dovrebbe essere valutata senza avvisi o errori.
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] )
)
Ri: Gestione delle formule cicliche (o ricorrenti) in una tabellaLo strumento di valutazione delle formule di JMP funziona valutando innanzitutto le colonne formula che dipendono solo da colonne non formula, quindi valutando le colonne formula che dipendono da colonne formula già valutate. Se la formula della colonna A dipende dalla colonna B e la formula della colonna B dipende dalla colonna A, JMP non può scegliere quale valutare per prima. Se riesci a indurre JMP a creare una dipendenza circolare, non puoi essere sicuro di quale colonna utilizzasse i vecchi dati dell'altra colonna.
JMP valuta una colonna dall'alto verso il basso. All'interno di una formula è possibile utilizzare la funzione lag (o subscript) per esaminare le righe precedenti e ottenere il valore calcolato in precedenza. Non sono sicuro di cosa succede se guardi le righe future, ma quel valore non è stato ancora calcolato.
Ci sono formule che potresti pensare possano funzionare in base alle regole di Excel, ma JMP non è un foglio di calcolo e gioca secondo le regole di cui sopra. Se è necessario fare in modo che la colonna A si riferisca a un ritardo della colonna B e che la colonna B si riferisca a un ritardo della colonna A, è necessario rendere A e B colonne non formula e scrivere JSL per riempirle. Aggiungi quel JSL a uno script di tabella con un nome come "Eseguimi quando i dati devono essere aggiornati".
Se disponi di una funzione ricorsiva, puoi creare una funzione JSL che richiama se stessa. JSL ha un limite abbastanza basso sulla profondità di ricorsione consentita, circa 100. Devi scrivere la tua istruzione if che decide quando interrompere la ricorsione. In genere viene utilizzato un parametro di profondità per interrompere la ricorsione, qualcosa del tipo (non testato e inutile...)
f = function({depth}, if(depth < 10, /* do something */ f(depth + 1) ) );
f(0)
Ri: Gestione delle formule cicliche (o ricorrenti) in una tabellaPer riferimento, Excel offre le seguenti opzioni per gestire i riferimenti circolari.
https://support.microsoft.com/en-us/office/change-formula-recalculation-iteration-or-precision-in-excel-73fc7dac-91cf-4d36-86e8-67124f6bcce4#:~:text=Iteration%20is %20il%20ricalcolo%20ripetuto,è%20chiamato%20a%20circolare%20riferimento .