Introducción
Un clásico problema para explicar el poder del principio de superposición y de la simetría consiste en calcular la resistencia entre los puntos A y B de la siguiente red infinita de resistores:
La forma más simple de resolverlo es asumir que inyectamos una corriente de 1 por A, dejando desconectados los otros nodos. Por simetría, las corrientes que partan del nodo serán todas iguales a 1/4:
Por linealidad y simetría, si repetimos el procedimiento inyectando una corriente de -1 por el nodo B, las corrientes que partan del mismo serán iguales a -1/4. Aplicando el principio de superposición (posible por la linealidad de la Ley de Ohm), llegamos a las siguientes corrientes:

Superposición de los efectos de inyectar una corriente unitaria por el nodo A y extraer una corriente unitaria por el nodo B.
Como esto equivale a inyectar una corriente de 1 por A y extraerla por B, la diferencia de potencial entre ambos nodos será idéntica a la resistencia entre estos. La corriente que circula por el resistor unitario que los une es 1/2 y, por lo tanto, la resistencia entre A y B es 1/2.
Una variante de este problema (considerablemente más compleja) que ha aparecido en múltiples lugares (incluso XKCD) es la siguiente:
En lo que resta del post veremos como obtener una solución numérica y, finalmente, una analítica a este problema.
Una solución numérica
Un nodo cualquiera de la red de resistores debe satisfacer la ley de Kirchhoff de conservación de corrientes. Como las corrientes a través de cada resistor unitario son iguales a la diferencia de tensión, tenemos:
.
Estas ecuaciones se aplicarán a todos los nodos a excepción de los que estén conectados a fuentes externas. Si reemplazamos la red infinita de resistores por una red finita con N2 nodos, la aplicación de la ecuación de nodos nos dejará N2 – 2 ecuaciones, ya que la ecuación de nodos no se aplicará donde conectemos la fuente. Esta cantidad de ecuaciones es suficiente para determinar todas las tensiones, ya que las tensiones de dos nodos son forzadas por la fuente.
Utilizando una topología toroidal por simplicidad y aplicando Gauss Seidel + SOR con ω = 1.5 llegamos al siguiente código (ver resultados en codepad):
TOL = 1e-6 K = 1.5 def solve(n): assert n >= 4 v = [[0.5 for y in range(n)] for x in range(n)] delta = 2 * TOL FIXED_VALUES = { (0, 0): 1, (2, 1): 0 } while delta > TOL: delta = 0 for x in range(n): for y in range(n): if (x, y) in FIXED_VALUES: v[x][y] = FIXED_VALUES[(x, y)] continue vo = v[x][y] vn = (v[x - 1][y] + v[(x + 1) % n][y] + v[x][y - 1] + v[x][(y + 1) % n]) / 4.0 v[x][y] = vn * K + vo * (1 - K) delta = max(abs(vn - vo), delta) return 1.0 / (4 * v[0][0] - v[-1][0] - v[1][0] - v[0][-1] - v[0][1]) if __name__ == '__main__': from time import time for n in (8, 16, 32, 64, 128): start = time() print 'N = %d - R = %f - Time: %f s' % (n, solve(n), time() - start)
Ejecutando el código completo (la versión de codepad excluye N = 64 y N = 128 por las limitaciones al tiempo de ejecución) obtenemos la siguiente salida:
N = 8 - R = 0.734997 - Time: 0.000000 s N = 16 - R = 0.763460 - Time: 0.094000 s N = 32 - R = 0.770537 - Time: 0.781000 s N = 64 - R = 0.772408 - Time: 2.532000 s N = 128 - R = 0.773033 - Time: 23.687000 s
Se observa una convergencia relativamente rápida a un valor cercano a 0.773 y un comportamiento bastante extraño del tiempo de ejecución.
Una solución analítica
Si llamamos Vi j a la tensión del nodo m, n e Im n a la corriente inyectada en el mismo, la conservación de la corriente nos lleva a lo siguiente:
.
Las corrientes inyectadas pueden representarse como
,
donde las “deltas” inyecta una corriente unitaria en el nodo 0, 0 y la extraen por el nodo M, N. Esta ecuación en diferencias no tiene una solución única por esencialmente el mismo motivo que el potencial de una carga puntual no tiene una única solución: el núcleo del laplaciano es no trivial. Pero hay una solución única si exigimos que el potencial se vaya a cero cuando m y n se van a infinito.
Un método muy utilizado para resolver ecuaciones diferenciales es aplicar una transformación inversible que convierta a la ecuación diferencial en una simple ecuación algebraica. Si esta última puede resolverse, aplicando la transformación inversa obtendremos una solución en el dominio original.
Si aplicamos la “versión adecuada” de la transformada de Fourier en dos dimensiones,
,
podemos ver que la transformada de Vm-1 n es
.
Utilizando esto, llegamos a la siguiente ecuación algebraica sobre V(p, q):
.
Resolviéndola:
.
Antitransformando:
.
Pero a nosotros nos interesa la resistencia entre los nodos 0, 0 y M, N, igual a la diferencia de tensión entre ambos nodos (ya que circula entre ellos una corriente unitaria). Por lo tanto,
Ahora “solo” resta resolver esta integral para cuando M = 2 y N = 1:
.
Evaluándola numéricamente obtenemos 0.7732, un valor que coincide en 3 cifras significativas con el obtenido previamente.
Solución analítica de la integral
ADVERTENCIA: gran cantidad de fórmulas que no aportan mucho…
Podemos empezar buscando una solución via Wolfram Alpha, pero no funciona. Entonces comenzamos expandiendo el numerador:
Trabajando con el primer término,
,
llegamos a una forma en tabla (Tabla 64, Formula 12):
Aplicando la fórmula y simplificando:
Del mismo modo podemos proceder con el segundo término:
La integral del último término se anula, como puede verse a continuación:
Mediante estas integraciones, la integral doble original
se reduce a una integral simple:
.
,
coincidiendo con el resultado aproximado anterior.
Conclusiones y reconocimientos
Esto vindica, como Fer bien conoce, la importancia de aplicar Fourier cuando uno se encuentra frente a un problema que no sabe como resolver. 😛
Soluciones esencialmente idénticas a esta fueron desarrolladas mucho antes por las fuentes citadas y por “frooha”, que desarrolló una solución muy similar a esta, entre otros. También existe al menos una solución por la via experimental, preferida por los electrónicos.