Siru en Simusol · Documentación · Manual

PLAN_CONVOLUCION

Convolución en siru (plan, 02/10/2026)

Pedido del autor: poder describir una parte del circuito por su respuesta y no por sus elementos, como la convolución de SCEPTRE (manual, volumen 1, apéndice F y ejemplo 4.6), con la respuesta dada por tabla o por ecuación.

Qué es

Una caja de dos terminales descripta por su respuesta al impulso h(t):

Una caja de varias puertas se arma, como en SCEPTRE, con un elemento entre cada par de nodos.

Cómo lo hace SCEPTRE (y cómo lo haremos)

En cada instante τ la integral se parte en dos (F.11 a F.13):

Así el elemento es, en impedancia, v = e + r·i (fuente en serie con resistencia, el FCONVE de SCEPTRE) y en admitancia i = e + r·v (fuente de corriente en paralelo, el FCONVJ). La historia, con h e i lineales entre puntos, se suma igual: por cada tramo pasado [Tⱼ, Tⱼ₊₁], i(Tⱼ)·[h(τ−Tⱼ₊₁)+2h(τ−Tⱼ)]·ΔTⱼ/6 + i(Tⱼ₊₁)·[2h(τ−Tⱼ₊₁)+h(τ−Tⱼ)]·ΔTⱼ/6.

Cómo se escribe

.d (como SCEPTRE, con la respuesta en el archivo y no en el «Disk 12»)
ELEMENTS
 K1, 1-GND = FCONVE(H1)          impedancia
 K2, 3-4 = FCONVJ(H2)            admitancia
FUNCTIONS
 TABLE H1                         por tabla: t, h(t)
  0, 1000,  0.1, 818.7, ...
 H2(T) = exp(-T/0.5)/0.001        o por ecuación (función de un argumento)

.ds
ELEMENTS
 KE-K1, 1-GND = H1
 KJ-K2, 3-4 = H2
FUNCTIONS
 TABLE H1   (y los pares abajo)   o   H2(1) = exp(-x/0.5)/0.001

Estado (04/10/2026): hecho

Los seis pasos de abajo están hechos: tipos KE/KJ (r1965), slex/din (r1967, el reloj r1974-r1975), FCONVE/FCONVJ en un .d (r1969), Siru::Convolucion (r1977), Din (r1978), los ganchos del Integrador (r2000), Circuito (r2003), los ejemplos de siru/corpus/corpus/inventados (r1972, r2004, r2007), tests/convolucion.t (r2006, r2008) y el manual, sección 5.5 (r2010). La caja K por ecuación y por tabla sigue a la exacta con error 4·10⁻⁴ a paso 0.05 (orden 2), igual que la cuenta sola, y en admitancia desde un .d también.

Pasos

  1. libraryori.siru: tipos KE(2) = VOLTAGE - x1 - x2*CURRENT y KJ(2) = CURRENT - x1 - x2*VOLTAGE.
  2. slex/din: una rama KE/KJ toma su valor como el nombre de la respuesta; x1 y x2 pasan a las variables e_<rama> y r_<rama>, que son datos de etapa: ni parámetros (que son los mismos en todas las etapas) ni incógnitas. En el ampliado cada etapa tiene las suyas (s0_e_k1…). El .din lleva una sección # convoluciones con la rama, el modo, la variable que se convoluciona (ik1 o vk1), la respuesta (tabla del .din o expresión) y, en el ampliado, el c de cada etapa.
  3. slex/d2datdinc: en un .d, K1, a-b = FCONVE(H) es KE y FCONVJ es KJ.
  4. siru: Siru::Convolucion lee la sección, guarda la historia (t, i) de cada paso aceptado y da, para un paso (t, dt), los datos de cada etapa τ = t + cᵢ·dt; el Integrador los agrega a cada consulta. Al aceptar un paso, la corriente (o tensión) del final sale del sistema del instante y se agrega a la historia. h por tabla se interpola lineal; por ecuación se evalúa.
  5. El ejemplo inventado (siru/ejemplos/ o siru/corpus/inventados/): una fuente de corriente sobre una caja R y C en paralelo, escrita con sus elementos y escrita como K con h(t) = e^(−t/RC)/C por tabla y por ecuación. Las tres curvas tienen que coincidir. Prueba en siru/tests/convolucion.t.
  6. Documentación: siru/doc/MANUAL.md y slex/din/README.md.

Lo que no hace (todavía)