Documentaciónpaso(pi0, P)

paso(π0,P)\texttt{paso}(\pi_{0}, 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:

πn+1=πnP\pi_{n+1}=\pi_n P

Validaciones y casos borde

  • Valida que pi0 sea una matriz fila de probabilidades.
  • Valida que pi0 no tenga probabilidades negativas y que sume 1.
  • Valida que P sea cuadrada y estocastica por filas.
  • Valida que pi0.col coincida con la dimension de P.
  • Si alguna condicion falla, emite ERROR().

Comportamiento

  • Recibe pi0 como distribucion inicial y P como 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ámetroTipoDescripción
pi0MATRIZDistribucion inicial de probabilidad.
PMATRIZMatriz 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