Manejar fórmulas cíclicas o recurrentes en una tabla (también conocidas como referencias circulares).Tengo una fórmula que es recurrente.JMP puede solucionarlo, pero advierte sobre ciclos cada vez que creo una nueva fórmula.
Cómo puedo:
- ¿Forzar una nueva iteración?
- ¿Configurar el número de iteraciones (o criterios de parada) para resolver la recurrencia?
- ¿Evitar que la evaluación se repita? Suprimir la opción Eval en el menú de fórmulas, no funcionó.
La función es un poco más compleja pero no diferente de la siguiente, que funciona sin problemas.
X(k+1) = 0,99 * X(k)
If(
Selected() == 1, 1,
Row() == 1, 1,
Lag( :X ) * 0.99
)
Modelado estadístico avanzadoInvestigación de Consumidores y MercadosAcceso a los datosIngeniería de Calidad y ProcesosAnálisis de fiabilidadRe: Manejo de fórmulas cíclicas o recurrentes en una tabla (también conocidas como referencias circulares).La función que proporcionó debería funcionar tal como está, sin advertencias.Si de hecho estás haciendo referencia a la columna A en la fórmula para B y a la columna B en la fórmula para A, entonces puedes intentar escribir esa lógica como una fórmula única o seguir @Craige_Hales Siga el consejo y hágalo con un guión.
Tabla con su fórmula de ejemplo, esto debería evaluarse sin advertencias ni errores.
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: Trabajar con fórmulas cíclicas (o recurrentes) en una tablaEl evaluador de fórmulas de JMP funciona evaluando primero las columnas de fórmula que solo dependen de columnas que no son de fórmula y luego evaluando las columnas de fórmula que dependen de columnas de fórmula que ya están evaluadas. Si la fórmula de la columna A depende de la columna B y la fórmula de la columna B depende de la columna A, JMP no puede elegir cuál evaluar primero. Si logra engañar a JMP para que cree una dependencia circular, no podrá estar seguro de qué columna estaba usando datos antiguos de la otra columna.
JMP evalúa una columna de arriba a abajo. Dentro de una fórmula, puede utilizar la función de retraso (o subíndice) para mirar filas anteriores y obtener el valor calculado previamente. No estoy seguro de qué sucede si miras las filas futuras, pero ese valor aún no se ha calculado.
Hay fórmulas que podrías pensar que podrían funcionar según las reglas de Excel, pero JMP no es una hoja de cálculo y juega según las reglas anteriores. Si necesita hacer que la columna A se refiera a un retraso de la columna B y que la columna B se refiera a un retraso de la columna A, debe hacer que A y B sean columnas sin fórmula y escribir JSL para completarlas. Agregue ese JSL a un script de tabla con un nombre como "Ejecúteme cuando sea necesario actualizar los datos".
Si tiene una función recursiva, puede crear una función JSL que se llame a sí misma. JSL tiene un límite bastante bajo en la profundidad de recursividad permitida, aproximadamente 100. Tienes que escribir tu propia declaración if que decida cuándo detener la recursividad. Normalmente se utiliza un parámetro de profundidad para detener la recursividad, algo así como (no probado y sin sentido...)
f = function({depth}, if(depth < 10, /* do something */ f(depth + 1) ) );
f(0)
Re: Trabajar con fórmulas cíclicas (o recurrentes) en una tablaComo referencia, Excel ofrece las siguientes opciones para manejar referencias circulares.
https://support.microsoft.com/en-us/office/change-formula-recalculation-iteration-or-precision-in-excel-73fc7dac-91cf-4d36-86e8-67124f6bcce4#:~:text=Iteration%20is %20el%20recálculo%20repetido,%20se llama%20una%20circular%20referencia .