01 · Punto de partida
De 1 paso a n pasos de un salto
P dice el próximo paso; pero ¿y en 5 pasos? ¿En 10? La respuesta es Pⁿ: la matriz que salta n pasos de una vez. Su entrada pᵢⱼ⁽ⁿ⁾ es la chance de ir de i a j en exactamente n pasos.
El puente es Chapman-Kolmogorov: para ir en m+n pasos se pasa por algún intermedio k.
- ¿Qué chance hay de 0 a 1 en 5 pasos: p₀₁⁽⁵⁾?
- ¿Cómo se calcula P² = P·P y Pⁿ en general?
- ¿A qué tienden las filas de Pⁿ con n grande?
- ¿Cuántos pasos borran el origen?
02 · Definición
¿Qué es pᵢⱼ⁽ⁿ⁾?
Tres ideas la fijan:
n pasos
pᵢⱼ⁽ⁿ⁾: de i a j en exactamente n pasos (con intermedios libres).
Potencia
La matriz Pⁿ = P·…·P. Su fila i es el futuro en n pasos desde i.
Puente CK
pᵢⱼ⁽ᵐ⁺ⁿ⁾ = Σₖ pᵢₖ⁽ᵐ⁾·pₖⱼ⁽ⁿ⁾: se suma por intermedios k.
En 2×2 (a = 0,3, b = 0,5): p₀₁⁽ⁿ⁾ = 0,375·(1−0,2ⁿ) y p₁₁⁽ⁿ⁾ = 0,375 + 0,625·0,2ⁿ. Ambas tienden a π₁ = 0,375.
| n | p₀₁⁽ⁿ⁾ | p₁₁⁽ⁿ⁾ | Filas |
|---|---|---|---|
| 1 | 0,300 | 0,500 | distintas |
| 2 | 0,360 | 0,400 | cerca |
| 5 | 0,375 | 0,375 | iguales (π) |
03 · Anatomía
Potencia, puente y límite
Cuatro lecturas de Pⁿ:
- P¹ = P
- Un paso: la base. P⁰ = identidad (cero pasos = quedarse).
- P² = P·P
- Dos pasos pasando por k: pᵢⱼ⁽²⁾ = Σₖ pᵢₖ·pₖⱼ.
- Pⁿ por potencias
- π(n) = π(0)·Pⁿ: N pasos de una vez en vez de iterar.
- Límite π
- Si converge, cada fila de Pⁿ tiende a π. El origen se borra.
Iterar πP
Paso a paso
Barato para un π(0) y N moderado. No da toda la matriz.
Potencia Pⁿ
Todo de una vez
Da todas las parejas i→j en n pasos. Cuesta K³ por producto.
04 · Ejemplos
Preguntas de n pasos
Toda pregunta «en n pasos» es una entrada de Pⁿ:
- 1Clima en 3 días.
p₀₁⁽³⁾: de sol hoy a lluvia en 3 días.
- 2Servidor en 10 min.
Fila desde caído: ¿ya volvió a libre?
- 3Regreso en 2.
pᵢᵢ⁽²⁾: salir y volver en dos pasos.
- 4Régimen en 20.
Filas ≈ π: el origen ya no importa.
- 5Puente CK.
En 5 = 2+3: pᵢⱼ⁽⁵⁾ = Σₖ pᵢₖ⁽²⁾·pₖⱼ⁽³⁾.
05 · Representación en Python
Multiplicar matrices, no casilleros
En Python, Pⁿ es producto matricial repetido. Con K chico basta triple bucle; con K grande, librerías. La verificación es Chapman-Kolmogorov.
Python en tu navegador. Estos bloques se ejecutan localmente con Pyodide, sin instalar nada. Compará P² a mano vs producto.
def matmul(A, B):
K = len(A)
return [[sum(A[i][k] * B[k][j] for k in range(K)) for j in range(K)] for i in range(K)]
P = [[0.7, 0.3], [0.5, 0.5]]
P2 = matmul(P, P)
print([[round(x, 3) for x in f] for f in P2])
P² = [[0,64 – 0,36], [0,6 – 0,4]]: en 2 pasos desde 0 hay 36 % de chance de 1.
Potencia y Chapman-Kolmogorov
P⁵ = P²·P³ debe cerrar exacto:
def matmul(A, B):
K = len(A)
return [[sum(A[i][k] * B[k][j] for k in range(K)) for j in range(K)] for i in range(K)]
def matpow(P, n):
K = len(P)
R = [[1.0 if i == j else 0.0 for j in range(K)] for i in range(K)]
for _ in range(n):
R = matmul(R, P)
return R
P = [[0.7, 0.3], [0.5, 0.5]]
P5a = matpow(P, 5)
P5b = matmul(matpow(P, 2), matpow(P, 3))
print([[round(x, 4) for x in f] for f in P5a])
print("CK cierra:", all(abs(P5a[i][j] - P5b[i][j]) < 1e-9 for i in range(2) for j in range(2)))
06 · Exploración
Laboratorio: las filas se vuelven π
Curvas p₀₁⁽ⁿ⁾ (turquesa, desde 0) y p₁₁⁽ⁿ⁾ (naranja, desde 1) hacia π₁ = 0,375 (blanca). Movete el paso n: en n = 1 difieren (0,3 vs 0,5); en n = 5 ya son π. La brecha entre ellas decae ×0,2 por paso.
Pⁿ hacia filas π
p₀₁⁽ⁿ⁾, p₁₁⁽ⁿ⁾ → π₁ = 0,375
En n 2: 0,360 y 0,400. Brecha 0,040.
En n = 0 valen 0 y 1 (identidad: sin pasos no hay viaje); desde n = 1 saltan a la fila de P y luego se juntan en π₁.
Preguntas para explorar
- En n = 0, ¿cuánto valen p₀₁ y p₁₁? ¿Por qué (P⁰ = I)?
- ¿En qué n la brecha cae bajo 0,01? ¿Qué potencia de 0,2 es?
- ¿Las filas de P⁵ son π? ¿Qué significa que el origen se borre?
Ver respuestas sugeridas
- 0 y 1: en 0 pasos se queda donde está (identidad).
- En n = 3 (0,2³ = 0,008 × 1). Tres pasos borran casi todo.
- Sí: ambas ≈ [0,625 – 0,375]. En 5 pasos da igual de dónde se vino.
07 · Comprensión
Confusiones frecuentes
«pᵢⱼ⁽ⁿ⁾ es pᵢⱼ a la n»
No: es la entrada (i,j) de la potencia matricial. Elevar casilleros rompe las filas.
«Pⁿ multiplica las chances»
Suma por caminos: pᵢⱼ⁽²⁾ = Σₖ pᵢₖ·pₖⱼ. Todos los puentes k aportan.
«P⁰ no existe»
Es la identidad: 0 pasos = quedarse. Útil como base de potencias.
«Si Pⁿ converge, P es aburrida»
No: converge a π con memoria corta, pero cada fila cuenta una historia distinta al inicio.
08 · Práctica guiada
Ejercicios con Python
Ejercicio 1: P² a mano
Con P 2×2 (a = 0,3, b = 0,5), calculá p₀₁⁽²⁾ por puentes: 0→0→1 más 0→1→1.
print(0.7 * 0.3 + 0.3 * 0.5)
Ver solución razonada
Da 0,36: 0,21 por quedarse y salir + 0,15 por salir y quedarse. Dos puentes, una suma.
Ejercicio 2: límite de filas
Sin ejecutar primero: ¿a qué tienden p₀₁⁽ⁿ⁾ y p₁₁⁽ⁿ⁾? Comprobalo con P¹⁰.
def matmul(A, B):
K = len(A)
return [[sum(A[i][k] * B[k][j] for k in range(K)) for j in range(K)] for i in range(K)]
P = [[0.7, 0.3], [0.5, 0.5]]
R = [[1.0, 0.0], [0.0, 1.0]]
for _ in range(10):
R = matmul(R, P)
print([[round(x, 4) for x in f] for f in R])
Ver solución
Ambas filas ≈ [0,625 – 0,375] = π. El origen se borró.
Ejercicio 3: CK en 5 = 2+3
Verificá p₀₁⁽⁵⁾ = p₀₀⁽²⁾·p₀₁⁽³⁾ + p₀₁⁽²⁾·p₁₁⁽³⁾ con tus potencias.
Ver una posible respuesta
def matmul(A, B):
K = len(A)
return [[sum(A[i][k] * B[k][j] for k in range(K)) for j in range(K)] for i in range(K)]
def matpow(P, n):
R = [[1.0, 0.0], [0.0, 1.0]]
for _ in range(n):
R = matmul(R, P)
return R
P = [[0.7, 0.3], [0.5, 0.5]]
P2, P3, P5 = matpow(P, 2), matpow(P, 3), matpow(P, 5)
print(round(P2[0][0] * P3[0][1] + P2[0][1] * P3[1][1], 6), round(P5[0][1], 6))
Ambos dan 0,3744: el puente por k = 0 y k = 1 suma el viaje en 5.
09 · Síntesis
Ideas para recordar
- Pⁿ da las chances en n pasos exactos.
- CK: P⁽ᵐ⁺ⁿ⁾ = P⁽ᵐ⁾·P⁽ⁿ⁾ sumando por intermedios.
- Pⁿ no es casillero a la n: es producto matricial.
- Si converge, las filas tienden a π.
- En Python: matmul + matpow, test CK.
Cerramos evolución. En el próximo bloque clasificaremos: estados recurrentes, transitorios y más.