Documentaciónpaso(pi0, P)
Nombre
paso - Calcula un paso de una cadena de Markov.
Sinopsis
pi1 = markov.paso(pi0, P)
Descripcion
Multiplica la distribucion actual por la matriz de transicion para obtener la distribucion del siguiente paso.
Es la operacion basica sobre la que se apoyan la evolucion temporal y la aproximacion de distribuciones estacionarias.
Formula:
Validaciones y casos borde
- Valida que
pi0sea una matriz fila de probabilidades. - Valida que
pi0no tenga probabilidades negativas y que sume1. - Valida que
Psea cuadrada y estocastica por filas. - Valida que
pi0.colcoincida con la dimension deP. - Si alguna condicion falla, emite
ERROR().
Comportamiento
- Recibe
pi0como distribucion inicial yPcomo matriz de transicion. - Delega la multiplicacion matricial en
matrices.multiplicar(...). - Retorna la nueva distribucion despues de un paso como matriz fila.
Funciones API relacionadas
markov.evolucion()markov.estacionaria()
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
| pi0 | MATRIZ | Distribucion inicial de probabilidad. |
| P | MATRIZ | Matriz de transicion o probabilidades. |
Valor de retorno
MATRIZ - Nueva distribucion despues de un paso, representada como matriz fila.
Ejemplo
ejemplo.blox
// Cadenas de MARKOV
//
// Problema
//
// Una cadena climática con 2 estados:
// 0 = Soleado
// 1 = Lluvioso
//
// Matriz de transición:
//
// P = [ [0.8, 0.2],
// [0.4, 0.6] ]
//
//
// Distribución inicial:
//
// pi0 = [1, 0]
//
// Objetivo
//
// Calcular la distribución al siguiente día: π1 = π0.P
// pi1 = pi0 * P
//
INCLUIR "vectores.api"
INCLUIR "matrices.api"
INCLUIR "markov.api"
INCLUIR "graficos.api"
FUNCION PRINCIPAL
INICIO "ejemplo_paso"
// 1. Preparacion de los datos
//
MATRIZ P[][]
P = matrices.crear_matriz(2,2)
P = [ [0.8, 0.2],
[0.4, 0.6] ]
MATRIZ pi0[1][2]
pi0[0][0] = 0 pi0[0][1] = 1
// 2. Calculo de la distribución al siguiente día: π1 = π0.P
//
MATRIZ pi1[][], pi2[][], pi3[][]
pi1 = markov.paso(pi0, P) // p1 = p0 P para p0 fila
pi2 = markov.paso(pi1, P) // p2 = p1 P para p1 fila
pi3 = markov.paso(pi2, P) // p3 = p2 P para p2 fila
IMPRIMIR("\npi0 = ")
matrices.imprimir(pi0)
IMPRIMIR("\nP = ")
matrices.imprimir(P)
IMPRIMIR("\npi1 = ")
matrices.imprimir(pi1)
IMPRIMIR("\npi2 = ")
matrices.imprimir(pi2)
IMPRIMIR("\npi3 = ")
matrices.imprimir(pi3)
// --- GRAFICOS ---
//
VECTOR x[], sol[4], nubl[4]
x = vectores.linspace(4, 0, 4)
sol[0] = pi0[0][0] nubl[0] = pi0[0][1]
sol[1] = pi1[0][0] nubl[1] = pi1[0][1]
sol[2] = pi2[0][0] nubl[2] = pi2[0][1]
sol[3] = pi3[0][0] nubl[3] = pi3[0][1]
TABLA curvas
curvas[1] = { X = x, Y = sol, nombre = "sol" }
curvas[2] = { X = x, Y = nubl, nombre = "nubl"}
graficos.graficar_trayectorias_n(curvas, "Markov", "PROG95 - MARKOV - ejemplo1 - paso().png")
FINAL