37.1 Del esquema al modelo
Un dibujo ayuda a una persona a reconocer el circuito, pero un programa necesita datos explícitos: qué componentes existen, qué valor tiene cada uno y entre qué nodos está conectado. La posición gráfica no determina la conexión eléctrica.
37.2 Objetivos de una solución
Según el problema, el programa puede calcular tensiones nodales, corrientes de rama, potencia, respuesta temporal o respuesta en frecuencia. Primero estudiaremos circuitos resistivos lineales de corriente continua; después veremos cómo se extiende el mismo enfoque.
37.3 Circuito como grafo
La topología puede representarse mediante un grafo: los nodos eléctricos son vértices y los componentes son aristas. Una rama conoce sus dos extremos, pero no necesita conocer coordenadas de pantalla.
Separar el modelo eléctrico de la vista permite cambiar el dibujo sin alterar el cálculo.
37.4 Elegir el nodo de referencia
Las tensiones son diferencias de potencial. Se elige un nodo como referencia o masa y se le asigna 0 V. Las demás tensiones se miden respecto de él.
37.5 Unidades internas coherentes
Conviene calcular siempre en SI: volts, amperes, ohms, farads, henrys y segundos. Los prefijos de la interfaz se convierten al ingresar y se vuelven a aplicar al mostrar resultados.
const micro = valor => valor * 1e-6;
const mili = valor => valor * 1e-3;
const kilo = valor => valor * 1e3;37.6 Estructuras de datos
Un circuito pequeño puede describirse con objetos. Los identificadores de nodo son más seguros que depender de posiciones dentro de un arreglo.
const circuito = {
tierra: "0",
componentes: [
{ id: "V1", tipo: "V", n1: "1", n2: "0", valor: 12 },
{ id: "R1", tipo: "R", n1: "1", n2: "2", valor: 1000 },
{ id: "R2", tipo: "R", n1: "2", n2: "0", valor: 2000 }
]
};37.7 Convenciones de orientación
Cada rama se orienta de n1 hacia n2. Una corriente positiva circula en ese sentido y una tensión de rama se define como v=V(n1)−V(n2). Si el resultado es negativo, la magnitud real apunta en sentido opuesto.
37.8 Conductancia
Para una resistencia entre los nodos a y b:
Ia→b=G(Va−Vb)
La conductancia, medida en siemens, hace que las ecuaciones nodales sean lineales en las tensiones.
37.9 KCL como base del algoritmo
La ley de corrientes de Kirchhoff establece que la suma algebraica de corrientes en cada nodo es cero. Para cada nodo desconocido se escribe una ecuación independiente.
37.10 Forma matricial
Las ecuaciones pueden agruparse como:
G es la matriz de conductancias, v contiene tensiones nodales desconocidas e i contiene corrientes inyectadas. Resolver el circuito equivale a resolver este sistema lineal.
37.11 Sellado de una resistencia
Una resistencia entre dos nodos desconocidos a y b aporta:
Gab −= g; Gba −= g
Si uno de los extremos es tierra, solo se incorpora el término diagonal del otro nodo.
37.12 Sellado de una fuente de corriente
Para una fuente I orientada desde a hacia b, la fuente extrae corriente de a e inyecta corriente en b:
Los términos correspondientes a tierra no forman parte del vector de incógnitas.
37.13 Tensiones nodales conocidas
Una fuente ideal conectada entre un nodo y tierra fija directamente su tensión. En un programa didáctico puede tratarse como condición conocida y trasladar su contribución al segundo miembro.
Por ejemplo, una resistencia g entre el nodo desconocido a y un nodo de tensión Vs agrega g a Gaa y gVs al vector i.
37.14 Análisis nodal modificado
Una fuente de tensión entre dos nodos desconocidos no puede expresarse solo como conductancia. El análisis nodal modificado (MNA) agrega como incógnita la corriente de cada fuente de tensión y añade su ecuación constitutiva.
Este método también acomoda inductores y otras restricciones.
37.15 Construir un índice de nodos
function indexarNodos(componentes, tierra = "0") {
const ids = new Set();
for (const c of componentes) {
if (c.n1 !== tierra) ids.add(c.n1);
if (c.n2 !== tierra) ids.add(c.n2);
}
return new Map([...ids].sort().map((id, i) => [id, i]));
}El mapa traduce nombres legibles a filas y columnas de la matriz.
37.16 Crear matrices sin compartir filas
En JavaScript, Array(n).fill(Array(n).fill(0)) reutiliza la misma fila y produce errores sutiles. Cada fila debe ser un arreglo distinto.
const matrizCero = n =>
Array.from({ length: n }, () => Array(n).fill(0));37.17 Eliminación gaussiana
Para circuitos educativos pequeños, la eliminación de Gauss es suficiente. En cada columna se elige un pivote, se elimina la incógnita de las filas inferiores y finalmente se realiza sustitución hacia atrás.
El costo crece aproximadamente como n³; simuladores grandes usan matrices dispersas y algoritmos especializados.
37.18 Pivoteo parcial
Usar siempre la fila actual como pivote puede amplificar errores de redondeo o provocar una división por un valor casi nulo. El pivoteo parcial intercambia la fila por aquella cuyo coeficiente absoluto sea mayor en la columna.
37.19 Solucionador lineal en JavaScript
function resolver(A, b, eps = 1e-12) {
const n = b.length;
const M = A.map((fila, i) => [...fila, b[i]]);
for (let k = 0; k < n; k++) {
let p = k;
for (let i = k + 1; i < n; i++)
if (Math.abs(M[i][k]) > Math.abs(M[p][k])) p = i;
if (Math.abs(M[p][k]) < eps) throw new Error("Sistema singular");
[M[k], M[p]] = [M[p], M[k]];
for (let i = k + 1; i < n; i++) {
const factor = M[i][k] / M[k][k];
for (let j = k; j <= n; j++) M[i][j] -= factor * M[k][j];
}
}
const x = Array(n).fill(0);
for (let i = n - 1; i >= 0; i--) {
let suma = M[i][n];
for (let j = i + 1; j < n; j++) suma -= M[i][j] * x[j];
x[i] = suma / M[i][i];
}
return x;
}37.20 Ejemplo de dos nodos
Una fuente fija Vs alimenta R₁ hasta el nodo A; R₂ conecta A con B, R₃ conecta A a tierra y R₄ conecta B a tierra. Además, una fuente Is inyecta corriente desde tierra hacia B.
−g₂VA+(g₂+g₄)VB=Is
37.21 Recuperar corrientes de rama
Una vez conocidas las tensiones, las corrientes resistivas se calculan con I=(V₁−V₂)/R. La corriente de una fuente ideal de tensión suele obtenerse de KCL o directamente de la incógnita adicional de MNA.
Guardar la orientación elegida permite informar signos sin ambigüedad.
37.22 Potencia y convención pasiva
Si la corriente positiva entra por el terminal definido como positivo:
P>0 significa que el componente absorbe potencia; P<0, que la entrega. En una solución correcta, la suma algebraica de potencias debe ser aproximadamente cero.
37.23 Verificar KCL
No alcanza con obtener números. Se calcula el residuo de cada ecuación:
Un residuo pequeño respecto de las corrientes del circuito confirma que la solución satisface KCL dentro del error de redondeo.
37.24 Verificar conservación de potencia
La suma de potencias absorbidas y entregadas debe tender a cero. Esta prueba detecta errores de signo que pueden pasar inadvertidos aunque las tensiones parezcan razonables.
37.25 Circuitos problemáticos
- Un nodo flotante no tiene camino que fije su potencial respecto de tierra.
- Dos fuentes ideales de tensión incompatibles imponen restricciones contradictorias.
- Una resistencia nula no debe convertirse ingenuamente en conductancia infinita.
- Una resistencia negativa puede ser válida en un modelo activo, pero requiere interpretación.
- Valores
NaN, infinitos o unidades erróneas deben rechazarse antes del cálculo.
37.26 Validación de entrada
function resistenciaValida(r) {
return Number.isFinite(r) && r > 0;
}
function exigirNodo(id) {
if (typeof id !== "string" || !id.trim())
throw new TypeError("Identificador de nodo inválido");
}Los mensajes deben explicar qué componente falló y qué condición se esperaba.
37.27 Separar responsabilidades
Una arquitectura clara distingue cuatro capas:
- modelo del circuito;
- ensamblado de ecuaciones;
- solucionador numérico;
- presentación y dibujo.
Así es posible probar los cálculos sin depender del canvas y cambiar la interfaz sin tocar la física.
37.28 Pruebas automatizadas
Se prueban casos con solución conocida: divisor de tensión, resistencias en serie y paralelo, simetrías y circuitos desconectados. También se comprueban invariantes como KCL y balance de potencia.
const cerca = (a, b, tol = 1e-9) =>
Math.abs(a - b) <= tol * Math.max(1, Math.abs(a), Math.abs(b));37.29 Dibujar sin mezclar física
El canvas recibe nodos con coordenadas y resultados ya calculados. El color puede indicar potencial, las flechas el signo de corriente y las etiquetas los valores. La geometría solo comunica el modelo: no participa en las ecuaciones.
37.30 Laboratorio: solucionador nodal
Modificá la fuente y las cuatro resistencias. El circuito y las ecuaciones se actualizan en tiempo real. La fuente de corriente inyecta corriente en el nodo B.
—
El circuito se resolvió mediante análisis nodal.
37.31 Cómo interpretar el laboratorio
I₁ se define desde la fuente hacia A; I₂ desde A hacia B; I₃ e I₄ desde sus nodos hacia tierra. Una corriente negativa indica que el sentido real es el contrario.
La intensidad y dirección de las flechas reflejan los resultados. El residuo KCL y el error de potencia deberían quedar cerca de cero.
37.32 Extensión a corriente alterna
En régimen sinusoidal se reemplazan conductancias reales por admitancias complejas. El ensamblado topológico es el mismo, pero cada entrada contiene parte real e imaginaria:
JavaScript no incorpora complejos nativos; pueden representarse con pares {re, im} o mediante una biblioteca.
37.33 Extensión al dominio temporal
Capacitores e inductores introducen estado. Un método temporal aproxima derivadas y transforma cada paso en un circuito algebraico equivalente. Euler hacia atrás, por ejemplo, modela el capacitor mediante una conductancia C/Δt y una fuente dependiente de su historia.
El paso Δt debe resolver las constantes de tiempo relevantes y mantener estabilidad y precisión.
37.34 Componentes no lineales
Diodos y transistores producen ecuaciones no lineales. Se linealizan alrededor de una estimación, se resuelve el sistema y se repite mediante un método como Newton-Raphson hasta que el cambio sea suficientemente pequeño.
37.35 Ejercicio resuelto
Para el circuito del laboratorio use Vs=12 V, R₁=1 kΩ, R₂=2 kΩ, R₃=3 kΩ, R₄=1,5 kΩ e Is=2 mA.
- Construí la matriz nodal.
- Calculá VA y VB.
- Calculá las cuatro corrientes resistivas.
- Verificá KCL.
Ver solución
En mS, V y mA:
[1,8333 −0,5000; −0,5000 1,1667][VA;VB]=[12;2]
La solución es VA=7,941 V y VB=5,118 V.
I₁=(12−VA)/1 kΩ=4,059 mA; I₂=(VA−VB)/2 kΩ=1,412 mA.
I₃=VA/3 kΩ=2,647 mA; I₄=VB/1,5 kΩ=3,412 mA.
Nodo A: I₁−I₂−I₃≈0. Nodo B: I₂+Is−I₄≈0, salvo redondeo.
37.36 Errores frecuentes
- Confundir proximidad gráfica con conexión eléctrica.
- Incluir el nodo de tierra como tensión desconocida sin una restricción adicional.
- Mezclar kΩ, Ω, mA y A dentro de las ecuaciones.
- Perder la convención de signos al recuperar corrientes y potencias.
- Mutar la matriz original durante una prueba y reutilizarla después.
- Ignorar pivotes pequeños, nodos flotantes o datos no finitos.
- Confiar en la apariencia del dibujo sin comprobar KCL y potencia.
37.37 Ideas clave
- La topología se modela con nodos y ramas, separada de la representación visual.
- El análisis nodal convierte KCL en un sistema lineal Gv=i.
- El sellado agrega localmente la contribución de cada componente.
- MNA permite incorporar fuentes ideales de tensión y otros elementos.
- El pivoteo parcial mejora la robustez de la eliminación gaussiana.
- Las corrientes se recuperan desde las tensiones y las leyes constitutivas.
- Los residuos de KCL y el balance de potencia validan la solución.
- La misma arquitectura se extiende a CA, transitorios y dispositivos no lineales.
En el próximo tema integraremos los modelos del curso en un laboratorio interactivo de campos y circuitos.