Sporala red del conocimiento
Página 1 de 80Algoritmos computacionales para analizar circuitos eléctricos de orden…
p. 1

ALGORITMOS COMPUTACIONALES PARA ANALIZAR CIRCUITOS

ELÉCTRICOS DE ORDEN SUPERIOR EN EL ESTADO

TRANSITORIO: UN ENFOQUE TOPOLÓGICO USANDO CÁLCULO

SIMBÓLICO

Brandon Santiago Ospina Rendón Proyecto de grado presentado como requisito para aspirar al título de Ingeniero Electricista Director Diego González Ocampo Codirector Wilson González Vanegas Grupo de Investigación en Campos Electromagnéticos y Fenómenos Energéticos -

CAFE

PROGRAMA DE INGENIERÍA ELÉCTRICA

UNIVERSIDAD TECNOLÓGICA DE PEREIRA

PEREIRA

2026

p. 3

Nota de Aceptación Firma del Presidente del jurado Firma del jurado 1 - Evaluador Firma del jurado 2 - Evaluador Firma del jurado 3 - Director Pereira, 13 de enero de 2026

p. 5

1.

Dedicatoria Dedicado a mis padres, quienes siempre han sido un apoyo incondicional en mi vida.

p. 7

2.

Agradecimientos Agradezco a mi codirector de tesis, el doctor Wilson González Vanegas, por su férrea voluntad para sacar adelante el proyecto HACEOS y a su paciencia a través de estos años. A mi director de tesis, el doctor Diego González Ocampo por haber confiado en mí desde el primer minuto para la realización de este proyecto además de ser un faro en los momentos más oscuros y difíciles de mi carrera.

Asímismo, agradezco a todos aquellos quienes estuvieron cuando más los necesité.

p. 9

CONTENIDO

pág.

1. Dedicatoria

2. Agradecimientos

3. INTRODUCCIÓN

11

3.1. DEFINICIÓN DEL PROBLEMA . . . . . . . . . . . . . . . . . . . . .

11

3.2. JUSTIFICACIÓN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12

3.3. OBJETIVOS

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

3.3.1.

Objetivo General . . . . . . . . . . . . . . . . . . . . . . . . . .

13

3.3.2.

Objetivos Específicos . . . . . . . . . . . . . . . . . . . . . . . .

13

4. MARCO TEÓRICO

15

4.1. Topología

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15

4.1.1.

Nodo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15

4.1.2.

Enlace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

16

4.1.3.

Árbol

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

16

4.2. Programación Orientada a Objetos . . . . . . . . . . . . . . . . . . . .

17

4.2.1.

Encapsulación . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

4.2.2.

Herencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

4.2.3.

Polimorfismo

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 10

4.2.4.

Abstracción . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

4.2.5.

Clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

4.2.6.

Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

4.3. Circuito Eléctrico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

4.3.1.

Voltaje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

4.3.2.

Corriente

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

4.3.3.

Resistencia

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

4.3.4.

Capacitancia

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

4.3.5.

Inductancia . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

20

4.3.6.

Estado Transitorio

. . . . . . . . . . . . . . . . . . . . . . . . .

20

4.3.7.

Estado Estable

. . . . . . . . . . . . . . . . . . . . . . . . . . .

20

4.4. Conjunto de Ecuaciones Linealmente Independientes

. . . . . . . . . .

21

4.5. Método de Corrientes de Enlace . . . . . . . . . . . . . . . . . . . . . .

21

4.6. Método Voltajes de Rama . . . . . . . . . . . . . . . . . . . . . . . . .

22

4.7. Ecuación Diferencial Ordinaria . . . . . . . . . . . . . . . . . . . . . . .

22

4.8. Cálculo Simbólico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

5. METODOLOGÍA

25

5.1. Descripción del circuito de estudio . . . . . . . . . . . . . . . . . . . . .

25

5.2. Enfoque topológico aplicado . . . . . . . . . . . . . . . . . . . . . . . .

26

5.3. Formulación de las ecuaciones diferenciales . . . . . . . . . . . . . . . .

28

5.4. Implementación del cálculo simbólico . . . . . . . . . . . . . . . . . . .

p. 11

6. IMPLEMENTACIÓN Y RESULTADOS

51

6.1. Algoritmo para el método de Voltajes de Rama

. . . . . . . . . . . . .

52

6.2. Obtención de las tres ecuaciones diferenciales . . . . . . . . . . . . . . .

54

6.3. Resultados MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . .

55

6.4. Solución simbólica de la EDO . . . . . . . . . . . . . . . . . . . . . . .

57

6.5. Gráficas de las respuestas transitorias . . . . . . . . . . . . . . . . . . .

61

7.

DISCUSIÓN

63

7.1. Interpretación de los resultados

. . . . . . . . . . . . . . . . . . . . . .

63

7.2. Ventajas y limitaciones del método propuesto

. . . . . . . . . . . . . .

64

7.3. Comparación con otros enfoques o herramientas . . . . . . . . . . . . .

64

7.4. Relevancia para la enseñanza de los circuitos eléctricos

. . . . . . . . .

68

8. CONCLUSIONES Y RECOMENDACIONES

69

8.1. Logros del trabajo

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

69

8.2. Contribuciones

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

69

8.3. Recomendaciones para futuras extensiones . . . . . . . . . . . . . . . .

70

Referencias

71

9. ANEXOS

73

9.1. Método de Cramer . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 13

LISTA DE FIGURAS

1.

Diagrama del circuito empleado en el caso de estudio . . . . . . . . . .

25

3.

Respuesta completa para el voltaje de rama v1 correspondiente a la resistencia R2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

59

4.

Respuesta completa para el voltaje de rama v10 correspondiente a la resistencia R1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

60

5.

Respuesta completa para el voltaje de rama v6 correspondiente a la resistencia R3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

60

6.

Respuestas transitorias para las tensiones de rama del circuito de prueba caso10n11p5i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 15

LISTA DE TABLAS

1.

Solución Entregada por la Herramienta . . . . . . . . . . . . . . . . . .

p. 17

3.

INTRODUCCIÓN

En el estudio de los circuitos eléctricos de orden superior, el análisis del estado transitorio representa un desafío significativo debido a la complejidad matemática asociada a la resolución de ecuaciones diferenciales y la aplicación de métodos topológicos. Actualmente, los estudiantes de Ingeniería Eléctrica enfrentan dificultades para comprender estos conceptos, lo que ha generado un represamiento académico en cursos como Circuitos Eléctricos I en la Universidad Tecnológica de Pereira. Este trabajo de grado, titulado: Algoritmos computacionales para analizar circuitos eléctricos de orden superior en el estado transitorio: un enfoque topológico usando cálculo simbólico, tiene como propósito contribuir al desarrollo de la herramienta HACEOS (Herramienta de Análisis de Circuitos Eléctricos de Orden Superior). Esta herramienta busca facilitar el aprendizaje mediante la implementación de algoritmos que permitan el análisis simbólico de circuitos en el dominio del tiempo, utilizando programación orientada a objetos y métodos basados en teoría de grafos. El enfoque del trabajo se centra en dos aspectos clave: Modelado matemático del estado transitorio mediante variables simbólicas y análisis topológico de circuitos después de la conmutación de interruptores. Con esto, se espera proporcionar una solución innovadora que mejore la comprensión de los estudiantes y optimice el proceso de enseñanza en el área de los circuitos eléctricos.

3.1.

DEFINICIÓN DEL PROBLEMA

El análisis de circuitos eléctricos de orden superior en el estado transitorio requiere resolver sistemas de ecuaciones diferenciales de orden superior, lo que representa un obstáculo para los estudiantes de Ingeniería Eléctrica. En la Universidad Tecnológica de Pereira, este desafío se agudiza debido a:

p. 18

1. El alto nivel de abstracción matemática: los estudiantes deben dominar técnicas

avanzadas para la solución de ecuaciones diferenciales y teoría de grafos para modelar circuitos con inductores, capacitores y acoplamientos magnéticos.

2. Ausencia de herramientas didácticas especializadas: la mayoría de las plataformas

educativas se centran en estados estacionarios o circuitos básicos, dejando un vacío en el análisis transitorio de sistemas dinámicos complejos.

3.2.

JUSTIFICACIÓN

La importancia de este proyecto radica en su contribución al proyecto HACEOS, una iniciativa del grupo de investigación CAFE (Campos Electromagnéticos y Fenómenos Energéticos) de la UTP, que busca crear una herramienta educativa para el análisis avanzado de circuitos eléctricos, que tiene como objetivo los siguientes: Facilitar el aprendizaje: al proporcionar respuestas simbólicas, los estudiantes pueden contrastar sus soluciones manuales y entender mejor los conceptos teóricos. Complementar la enseñanza: los docentes pueden utilizar esta herramienta para explicar de manera más clara los fenómenos transitorios en circuitos dinámicos. Usar cálculo simbólico: a diferencia de las herramientas convencionales (SPICE, SIMULINK), este enfoque permite obtener soluciones analíticas en el dominio del tiempo.

Integrar elementos de POO y topología: la programación orientada a objetos (POO) facilita el modelado modular de circuitos, mientras que la teoría de grafos permite la generación de ecuaciones linealmente independientes.

p. 19

3.3.

OBJETIVOS

3.3.1.

Objetivo General Desarrollar algoritmos computacionales basados en programación orientada a objetos y cálculo simbólico para analizar circuitos eléctricos de orden superior en el estado transitorio, considerando la topología de red y el efecto de interruptores.

3.3.2.

Objetivos Específicos Comprender los principios de la programación orientada a objetos (POO) y su aplicabilidad en la simulación de circuitos eléctricos. Diseñar un modelo matemático que permita formular ecuaciones integro-diferenciales simbólicas linealmente independientes, basado en teoría de grafos. Implementar algoritmos en MATLAB para la construcción automática de matrices de incidencia y la resolución simbólica de ecuaciones en el dominio del tiempo.

p. 20

(página sin texto)

p. 21

4.

MARCO TEÓRICO

Este capítulo establece los fundamentos teóricos indispensables para el análisis de circuitos eléctricos de orden superior en régimen transitorio, que constituye el núcleo de la presente investigación. Se revisan los principios que describen el comportamiento dinámico de sistemas con múltiples elementos almacenadores de energía, así como las metodologías formales para su modelado matemático. Adicionalmente, se explican los conceptos de topología de redes, independencia lineal de ecuaciones y cálculo simbólico, los cuales, combinados con técnicas de programación orientada a objetos, proporcionan la base para el desarrollo de los algoritmos computacionales implementados en la herramienta HACEOS.

4.1.

Topología Es una rama de las matemáticas que estudia las propiedades de conexión de una red eléctrica que permanecen invariables ante deformaciones como el estiramiento o la torsión de sus ramas, sin alterar la interconexión de los elementos. Se enfoca exclusivamente en la estructura geométrica del circuito: cómo los nodos (puntos de unión) están interconectados por ramas (elementos individuales), definiendo conceptos fundamentales como mallas, lazos y árboles, lo que permite abstraer el comportamiento físico específico de los componentes para analizar la estructura de la red de manera sistemática y general.

4.1.1.

Nodo En un circuito eléctrico, un nodo es un punto de conexión entre dos o más elementos de circuito (como resistencias, fuentes o capacitores) . En un esquemático, se representa comúnmente con un punto sólido (•). Todo conductor ideal (con resistencia eléctrica

p. 22

considerada nula) entre elementos forma parte de un mismo nodo, lo que implica que todos sus puntos están al mismo potencial eléctrico . Esta propiedad es crucial para la aplicación de la Ley de Corrientes de Kirchhoff (LCK)

4.1.2.

Enlace En el análisis de circuitos, un enlace (comúnmente llamado rama o branch) es un elemento de circuito de dos terminales que conecta dos nodos. Puede ser un componente simple (como un resistor, un capacitor o una fuente de voltaje) o una combinación de varios componentes conectados en serie . En la teoría de grafos, un enlace corresponde a una arista del grafo . El conjunto de todos los enlaces define cómo está interconectada la red.

4.1.3.

Árbol Es un subconjunto de enlaces de un circuito conectado que une todos sus nodos sin formar ningún lazo cerrado . Es un concepto de la teoría de grafos esencial para formulaciones sistemáticas del análisis de circuitos, como el método de análisis por variables de enlace. Las propiedades clave de un árbol son:

Conecta todos los nodos del circuito.

Contiene exactamente (n-1) enlaces, donde n es el número de nodos. No contiene lazos o mallas.

Los enlaces que no forman parte del árbol elegido se denominan enlaces de eslabón (links o chords). La adición de cualquier enlace de eslabón al árbol crea un lazo único, que es fundamental para aplicar la Ley de Voltajes de Kirchhoff (LVK) de manera sistemática.

p. 23

La elección de un árbol no es única para un circuito dado, pero proporciona un marco ordenado para escribir ecuaciones independientes.

4.2.

Programación Orientada a Objetos La Programación Orientada a Objetos (POO) es un paradigma de programación basado en el concepto de objetos, que contienen datos en forma de atributos y código en forma de métodos. Se fundamenta en cuatro pilares principales: encapsulación, herencia, polimorfismo y abstracción.

4.2.1.

Encapsulación La encapsulación es el mecanismo que restringe el acceso directo a los componentes de un objeto, permitiendo que los datos y métodos internos estén ocultos y solo puedan modificarse a través de una interfaz pública bien definida. Esto protege la integridad del estado del objeto.

4.2.2.

Herencia La herencia es el mecanismo mediante el cual una clase (subclase) adquiere las propiedades y comportamientos de otra clase (superclase), permitiendo la reutilización de código y estableciendo relaciones jerárquicas entre clases.

4.2.3.

Polimorfismo El polimorfismo permite que objetos de diferentes clases respondan de manera específica al mismo mensaje o llamada a método. Esto se logra mediante la sobrecarga de métodos (mismo nombre, diferentes parámetros) o la sobrescritura (redefinición en subclases).

p. 24

4.2.4.

Abstracción La abstracción es el proceso de identificar características esenciales de un objeto, ignorando los detalles irrelevantes para el contexto actual. En POO, se implementa mediante clases abstractas e interfaces que definen comportamientos sin proporcionar implementación completa.

4.2.5.

Clases Una clase es una plantilla o molde que define las propiedades (atributos) y comportamientos (métodos) comunes a un conjunto de objetos. Representa un concepto abstracto a partir del cual se crean instancias concretas (objetos).

4.2.6.

Métodos Los métodos son funciones o procedimientos asociados a una clase u objeto que definen su comportamiento. Operan sobre los datos del objeto (atributos) y definen las operaciones que pueden realizarse sobre él.

4.3.

Circuito Eléctrico Un circuito eléctrico de orden superior es aquel cuyo comportamiento dinámico se describe mediante una ecuación diferencial de segundo orden o superior, una característica que surge de la interacción de dos o más elementos almacenadores de energía distintos, típicamente inductores y condensadores. A diferencia de los circuitos de primer orden con un solo elemento almacenador, estos sistemas pueden exhibir comportamientos más complejos como oscilaciones y resonancia, donde la energía fluctúa entre los campos magnético de las bobinas y eléctrico de los capacitores.

p. 25

4.3.1.

Voltaje El voltaje (o tensión) entre dos puntos en un circuito se define como la energía necesaria para mover una unidad de carga de un punto a otro. Se mide en voltios (V), representa la causa del movimiento de cargas y se interpreta como la diferencia de potencial eléctrico.

4.3.2.

Corriente la corriente eléctrica es la tasa de flujo de carga eléctrica a través de una sección transversal de un material conductor. Se define matemáticamente como la derivada de la carga respecto al tiempo y su unidad es el amperio (A). La corriente convencional se considera como el flujo de cargas positivas, aunque en los metales el flujo real corresponde a electrones (cargas negativas) moviéndose en sentido contrario.

4.3.3.

Resistencia La resistencia, es la oposición que presenta un material al flujo de corriente eléctrica. Su unidad es el ohmio (Ω). Para muchos materiales (llamados óhmicos), la resistencia es una constante que relaciona linealmente el voltaje aplicado y la corriente resultante, mediante la ecuación V=IR. Este valor depende de las propiedades físicas del material (resistividad), su longitud y su área transversal.

4.3.4.

Capacitancia un capacitor se define como un elemento de circuito pasivo que almacena energía en su campo eléctrico cuando hay una diferencia de potencial entre sus placas. La capacitancia (C) es la medida de la capacidad de un capacitor para almacenar carga por unidad de voltaje, dada por, C = q/v, donde q es la carga almacenada y V es el voltaje aplicado.

p. 26

Su unidad es el faradio (F). Un capacitor ideal no disipa energía, sino que la almacena y la libera, y su corriente depende de la tasa de cambio del voltaje

4.3.5.

Inductancia Un inductor es un elemento de circuito pasivo que almacena energía en su campo magnético cuando circula corriente por él. La inductancia (L) es la medida de la capacidad de un inductor para oponerse a cambios en la corriente que lo atraviesa, debido a la fuerza electromotriz autoinducida. Su unidad es el henry (H). Un inductor ideal tampoco disipa energía, y el voltaje en sus terminales es proporcional a la tasa de cambio de la corriente.

4.3.6.

Estado Transitorio El estado transitorio es el régimen de comportamiento temporal que experimenta un circuito eléctrico inmediatamente después de una perturbación, como un cambio abrupto en la fuente de alimentación (al encenderla o apagarla) o una alteración en sus conexiones. Durante este período, que suele ser breve, las tensiones y corrientes en los elementos que almacenan energía (inductores y condensadores) evolucionan de forma dinámica desde sus condiciones iniciales hasta alcanzar un nuevo equilibrio, caracterizándose por una respuesta natural que a menudo decae exponencialmente o presenta oscilaciones amortiguadas, hasta que los efectos de este cambio inicial se disipan por completo y el circuito se estabiliza.

4.3.7.

Estado Estable El estado estable es la condición de operación permanente en la que se encuentra un circuito eléctrico una vez que ha transcurrido un tiempo suficiente luego de cualquier

p. 27

perturbación y el régimen transitorio ha desaparecido por completo. En este estado, si el circuito es lineal y está alimentado por fuentes sinusoidales, la respuesta forzada domina completamente el comportamiento, manifestándose como tensiones y corrientes puramente sinusoidales de la misma frecuencia que la fuente, conocida como respuesta en estado estable sinusoidal; en sistemas con fuentes de corriente continua, el estado estable se alcanza cuando todas las corrientes y tensiones en el circuito se vuelven constantes, comportándose los capacitores como circuitos abiertos y los inductores como cortocircuitos en el análisis final.

4.4.

Conjunto de Ecuaciones Linealmente Independientes Un conjunto de ecuaciones es linealmente independiente (LI) cuando ninguna de las ecuaciones que lo componen puede ser expresada como una combinación lineal de las otras; es decir, cada ecuación aporta información nueva y esencial sobre las variables del sistema que no está contenida en las demás. En el análisis de circuitos, esta propiedad es crucial para evitar sistemas sobredeterminados o subdeterminados, garantizando que el conjunto de ecuaciones derivado de las Leyes de Kirchhoff sea el mínimo necesario y suficiente para encontrar una solución única para todas las incógnitas, como las corrientes o tensiones, sin redundancias que no aporten nuevo conocimiento.

4.5.

Método de Corrientes de Enlace El método se enuncia de la siguiente manera. Es posible encontrar cualquier voltaje o corriente en un circuito si se conocen todas las corrientes en los enlaces. Mediante la aplicación de la segunda ley de Kirchhoff a todos los anillos fundamentales se obtiene el conjunto de ecuaciones LI, posteriormente se despejan las corrientes de rama en función de las corrientes de enlace mediante el uso de ecuaciones auxiliares, para finalmente

p. 28

obtener un sistema lineal de n x n donde sólo aparezcan corientes de enlace.

4.6.

Método Voltajes de Rama El método se enuncia de la siguiente manera. Es posible encontrar cualquier voltaje o corriente en un circuito si se conocen todos los voltajes en las ramas. Mediante la primera ley de Kirchhoff aplicada a todos los cortes fundamentales se obtiene un conjunto LI, posteriormente se depejan los voltajes de enlace en función de los voltajes de rama mediante ecuaciones auxiliares, para finalmente obtener un sistema lineal de n x n donde sólo aparezcan voltajes de rama.

4.7.

Ecuación Diferencial Ordinaria Una ecuación diferencial ordinaria (EDO) es una ecuación matemática que relaciona una función desconocida con una o más de sus derivadas, describiendo cómo la tasa de cambio de una cantidad (como la velocidad de variación de un voltaje o una corriente) depende de la propia cantidad y, potencialmente, del tiempo. En ingeniería eléctrica, es la herramienta fundamental para modelar el comportamiento dinámico de los circuitos que contienen elementos almacenadores de energía, como capacitores y inductores, ya que las leyes físicas que gobiernan estos elementos i(t) = CdV(t)/dt para un capacitor y v(t) = Ldi(t)/dt para un inductor. Estas relaciones establecen naturalmente ecuaciones diferenciales entre tensión y corriente.

4.8.

Cálculo Simbólico El cálculo simbólico, también conocido como Sistemas de Álgebra Computacional (CAS), es una disciplina que permite a los ordenadores manipular fórmulas matemáticas con

p. 29

precisión analítica utilizando símbolos en lugar de aproximaciones numéricas, lo que lo convierte en una herramienta poderosa en ingeniería al facilitar la obtención de soluciones exactas, explorar parametrizaciones y comprender la estructura fundamental de los modelos, a diferencia de la computación numérica tradicional que trabaja con valores concretos, pues este opera con variables, constantes y expresiones matemáticas abstractas mediante un software especializado que implementa esta capacidad para realizar operaciones como derivación, integración, simplificación de expresiones y resolución de ecuaciones de forma analítica, preservando todas las variables y parámetros en su forma simbólica para proporcionar resultados generales y teóricos.

p. 30

(página sin texto)

p. 31

5.

METODOLOGÍA

5.1.

Descripción del circuito de estudio El circuito de análisis está compuesto por cinco interruptores, uno de dos vías y cuatro sencillos, tres resistencias, tres capacitancias, dos inductancias mutuamente acopladas y una inductancias sin acoplamiento, una fuente de voltaje DC y una fuente de corriente AC. Los parámetros de los elementos y la topología de conexión se muestran a continuación.

Figura 1. Diagrama del circuito empleado en el caso de estudio

p. 32

5.2.

Enfoque topológico aplicado Para el análisis de este circuito se emplea el método topológico de voltajes de rama, el cual constituye una técnica sistemática basada en teoría de grafos que permite validar los algoritmos generados en la herramienta HACEOS. Este enfoque utiliza las matrices fundamentales de la topología del circuito - específicamente la Matriz de Cortes Fundamentales (MFC) y la Matriz de Anillos Fundamentales (MFA) - para formular completamente el conjunto de ecuaciones que describen el comportamiento dinámico del sistema.

(a) Grafo conectado con etiquetas (b) Árbol conectado (c) Grafo conectado y orientado con etiquetas La aplicación de este método inicia con la identificación del árbol y los enlaces del grafo del circuito, procediendo luego a establecer las relaciones entre voltajes de ra-

p. 33

ma y voltajes de enlace mediante transformaciones algebraicas simbólicas. La implementación computacional genera automáticamente el Conjunto de Ecuaciones General Integro-Diferencial Linealmente Independiente (CEGIDLI), el cual se resuelve mediante técnicas de álgebra simbólica que incluyen factorización, sustitución de excitaciones y solución de sistemas matriciales. Esta metodología no solo garantiza la correcta formulación de las ecuaciones diferenciales ordinarias que gobiernan el circuito, sino que también valida la eficacia de los algoritmos desarrollados para el análisis de circuitos de orden superior, demostrando su capacidad para manejar configuraciones complejas con múltiples elementos almacenadores de energía y acoplamientos magnéticos.

p. 34

5.3.

Formulación de las ecuaciones diferenciales La rutina principal de HACEOS realiza la extracción de información del circuito, posteriormente almacena la información de cada puerta como nodos de envio y recibo, naturaleza, tipo, parámetros, variables simbólicas de voltaje y corriente en dos objetos principales, uno de datos y otro matemático.

La función HACEOS implementa una metodología sistemática para el análisis simbólico de circuitos eléctricos de orden superior en el dominio del tiempo, iniciando con la validación de entradas donde verifica que el parámetro caso sea una estructura y carga configuraciones predeterminadas mediante hcs opciones si no se proporcionan opciones específicas. Posteriormente, construye un modelo de red base (hcs.modelo red()) y selecciona el modelo de datos apropiado según el estado de análisis (estacionario, transitorio, conmutación o combinaciones), utilizando métodos especializados de extracción e inicialización para cada caso. A continuación, procesa la información del circuito mediante md.construir() para crear objetos de cada componente e importa condiciones iniciales con md.importar(), mientras genera estadísticas del caso. Si está habilitada la opción dibujar graficos, genera representaciones gráficas de la topología del circuito. En la fase de modelado matemático, inicializa variables simbólicas para tensiones y corrientes, calcula matrices de incidencia de anillos (mm.calcular MFAs) y cortes (mm.calcular MFCs), determina inductancias mutuamente acopladas (mm.calcular MIMAs) y resuelve el sistema mediante el método de voltajes de rama, culminando con la estructuración de resultados que integra los modelos de datos, red y matemático para su posterior análisis.

Esta clase modelo matematico constituye el núcleo computacional del sistema HA- CEOS para el análisis simbólico de circuitos eléctricos de orden superior, iniciando con un constructor que establece la estructura de datos organizada en clases y modelos

p. 35

para diferentes estados de operación (DC, SIN, EXP, etc.) y métodos de solución (VR, CE, VN, CM). El método construir objetos se encarga de instanciar cada elemento del circuito a partir de las definiciones de clases preconfiguradas, creando los objetos matemáticos correspondientes a puertas y marcas de polaridad. Los métodos calcular MIMAs, calcular MFAs y calcular MFCs implementan los algoritmos fundamentales de teoría de grafos para determinar respectivamente la matriz de inductancias mutuamente acopladas, la matriz fundamental de anillos (árbol de expansión y enlaces) y la matriz fundamental de cortes, esenciales para formular las ecuaciones de malla y nodo. La función voltajes enlace fx rama establece las relaciones de transformación entre variables de enlace y rama mediante manipulación simbólica, mientras que voltajes rama ejecuta el proceso completo de solución al sustituir corrientes por sus primitivas, aplicar la matriz de cortes para obtener el sistema de ecuaciones integro-diferenciales (CEGIDLI), separar excitaciones mediante factorización simbólica, construir las matrices de coeficientes A y vector de excitaciones b, resolver el sistema algebraico resultante y finalmente expresar la solución como ecuaciones diferenciales ordinarias listas para su resolución numérica o analítica, completando así el flujo desde la descripción topológica del circuito hasta la obtención de su modelo matemático completo.

5.4.

Implementación del cálculo simbólico function obj = modelo_matematico() Esta función inicializa la estructura completa del modelo matemático definiendo propiedades organizadas jerárquicamente para clasificar elementos según su comportamiento en dominio estacionario, conmutación y transitorio. Específicamente, crea estructuras anidadas que categorizan elementos en DC, SIN (sinusoidal), EXP (exponencial), No- Fuente y Combinada, cada una conteniendo subestructuras para puertas y marcas de

p. 36

polaridad. Paralelamente, configura cuatro métodos de solución posibles: VR (Voltaje de Rama), CE (Corrientes de Enlace), VN (Voltajes de Nodo) y CM (Corrientes de Malla), inicializando matrices para MIMA (Matriz de Inductancias Mutuamente Acopladas), MAF (Matriz de Anillos Fundamentales) y MCF (Matriz de Cortes Fundamentales). Las variables simbólicas para voltajes y corrientes se inicializan como arreglos vacíos listos para su posterior definición durante el análisis del circuito. construir_objetos(obj,md) Este método realiza la instanciación concreta de objetos matemáticos a partir de las definiciones abstractas del modelo de datos (md). Mediante un sistema de doble iteración sobre etiquetas de islas (DC, SIN, EXP, NoFuente, Combinada) y campos (puertas, marcas pol), accede a las clases almacenadas en obj.clases para crear instancias específicas que se almacenan en obj.elementos. Cada objeto creado hereda las propiedades matemáticas de su clase correspondiente y se vincula con los parámetros físicos extraídos del modelo de datos, estableciendo así el mapeo completo entre la descripción física del circuito y su representación matemática operable simbólicamente. calcular_MIMAs(obj, mm, md, estados) Calcula la matriz de inductancias mutuamente acopladas (MIMA) para circuitos que contienen pares de inductores magnéticamente acoplados. La función identifica primero las inductancias acopladas en el circuito cero menos, extrayendo sus identificadores, marcas de polaridad y coeficiente de inductancia mutua (M). Construye una matriz 2x2 donde los elementos diagonales contienen las autoinductancias (L1, L2) y los no diagonales la inductancia mutua. Mediante análisis de las conexiones y polaridades relativas usando matrices auxiliares M_aux y M_val, determina el signo correcto de los términos mutuos según la convención del punto, asignando finalmente la MIMA completa a

p. 37

todos los tipos de islas en el modelo matemático.

1 function

calcular_MIMAs(obj ,mm ,md ,estados)

2

if estados == "estacionario"

3

circuito = md. circuito_cero_menos ;

4

num_marcas_pol = md.stats_caso.num_marcas;

5

if num_marcas_pol == 1

6

MIMA

= zeros (2,2);

7

id_L1 = md. circuito_cero_menos .marcas_pol (2);

8

id_L2 = md. circuito_cero_menos .marcas_pol (4);

9

IDs = [id_L1 ,id_L2 ];

10

n_mark_L1 = md. circuito_cero_menos .marcas_pol (3);

11

n_mark_L2 = md. circuito_cero_menos .marcas_pol (5);

12

M = md. circuito_cero_menos .marcas_pol (6);

13

L1 = md. circuito_cero_menos .puertas(md. circuito_cero_menos .puertas (:,1) == id_L1 ,5);

14

L2 = md. circuito_cero_menos .puertas(md. circuito_cero_menos .puertas (:,1) == id_L2 ,5);

15

16

MIMA (1,1) = L1;

17

MIMA (2,2) = L2;

18

MIMA (1,2) = M;

19

MIMA (2,1) = M;

20

21

M_aux = zeros (2,2);

22

M_aux (1,:) = md. circuito_cero_menos .puertas(md. circuito_cero_menos .puertas (:,1) == id_L1 ,[2 3]);

23

M_aux (2,:) = md. circuito_cero_menos .puertas(md. circuito_cero_menos .puertas (:,1) == id_L2 ,[2 3]);

24

25

M_val = zeros (2,2);

p. 38

for i = 1:2

27

if M_aux (1,i) == n_mark_L1

28

M_val(1,i) = 1;

29

else

30

M_val(1,i) = 0;

31

end

32

end

33

for i = 1:2

34

if M_aux (2,i) == n_mark_L2

35

M_val(2,i) = 1;

36

else

37

M_val(2,i) = 0;

38

end

39

end

40

41

if sum(M_val (:,1)) < 2

42

MIMA (1,2) = (-1) * M;

43

MIMA (2,1) = (-1) * M;

44

end

45

etiquetas_islas = {’DC’,’SIN’,’EXP’,’NoFuente ’,’Combinada ’ };

46

for i = 1: numel( etiquetas_islas )

47

mm.modelos .( estados).( etiquetas_islas {i}).MIMA = MIMA;

48

end

49

50

else

51

% El codigo funciona solo con 2 inductancias mutuamente acopladas

52

error (" modelo_matematico : calcular_MIMAs: Existen mas de dos inductancias acopladas ")

53

end

p. 39

calcular_MFCs(obj, mr, estados) Construye la Matriz Fundamental de Cortes (MFC) mediante un proceso iterativo que identifica cortes fundamentales en el grafo del circuito. Para cada rama del árbol (weight=1), elimina temporalmente ramas y enlaces, luego analiza las componentes conexas resultantes usando conncomp. Al reconectar cada enlace individualmente, detecta cuando se cierra un lazo y registra los identificadores de los elementos involucrados en el corte. Los signos en la matriz se determinan según la posición relativa de los nodos respecto a las islas separadas por el corte, almacenando las relaciones en una matriz de cortes que posteriormente se asigna a todas las islas del modelo.

1 function

calcular_MFCs(obj ,mr ,estados)

2

G = mr. graficos_orientados .depurados .( estados);

3

matriz_cortes = zeros(1,max(mr. graficos_orientados .depurados .( estados).Edges.ID));

4

etiquetas_islas = {’DC’,’SIN’,’EXP’,’NoFuente ’,’Combinada ’};

5

for i = 1: numel( etiquetas_islas )

6

obj.modelos .( estados).( etiquetas_islas {i}).MCF = matriz_cortes ;

7

end

8

nodos = cellfun(@(x) str2double(x(2: end)), G.Edges.EndNodes);

9

matriz_enlaces = [];

10

numnodos = numnodes(G);

11

vecUnos = ones(1, numnodos);

12

contador_cortes = 1;

13

weak_bins = conncomp(G," Type","weak ");

14

if vecUnos == weak_bins

15

lineas = table2struct(G.Edges);

16

% Deteccion de posicion de Ramas en la Tabla

17

for e = 1: size(nodos ,1)

p. 40

%fprintf(’Ciclo %d\n’, e);

19

var = lineas(e);

20

if var.Weights == 1

21

pos = [pos ,e];

22

% Deteccion de posicion de Enlaces en la Tabla

23

for i = 1: size(nodos ,1)

24

var2 = lineas(i);

25

if var2.Weights == 2

26

pos2 = [pos2 ,i];

27

pos_tabla = [pos ,pos2 ];

28

% disp(pos_tabla);

29

end

30

end

31

MF = rmedge(G,pos_tabla);

32

% Ciclo para agregar enlaces de 1 en 1

33

for f = 1: numel(pos2)

34

% Se analizan Islas de la rama para tomar referencia

35

[islas ,~] = conncomp(MF ," OutputForm ","cell","Type ","weak ");

36

nombres = {’Isla1 ’,’Isla2 ’};

37

a = cell2struct(islas ,nombres ,2);

38

rama_tabla = table(G.Edges.EndNodes(pos (1) ,:),G. Edges.Weights(pos (1)),G.Edges.ID(pos (1)),G.Edges.Labels(pos (1)),G. Edges.NAT(pos (1)),G.Edges.VAL_P(pos (1)) ,...

39

’VariableNames ’,{’EndNodes ’ ’Weights ’ ’Labels ’ ’ID’

’NAT’ ’VAL_P ’ });

40

ramaEstruct = table2struct(rama_tabla);

41

if ismember(ramaEstruct.EndNodes (1),a.Isla1) == 1

42

islaEnvio = a.Isla1;

43

else

p. 41

islaEnvio = a.Isla2;

45

end

46

enlace_agregar = table(G.Edges.EndNodes(pos2(f) ,:) ,G.Edges.Weights(pos2(f)),G.Edges.Labels(pos2(f)),G.Edges.ID(pos2(f )),G.Edges.NAT(pos2(f)),G.Edges.VAL_P(pos2(f)), ...

47

’VariableNames ’,{’EndNodes ’ ’Weights ’ ’Labels ’

’ID’ ’NAT’ ’VAL_P ’});

48

enlaceEstruct = table2struct(enlace_agregar );

49

P = addedge(MF , enlace_agregar);

50

51

% Verificacion de islas con la conexion del enlace

52

num_nodos = numnodes(G);

53

vector_nodos = ones(1, num_nodos);

54

weak_bins = conncomp(P," Type","weak ");

55

if vector_nodos == weak_bins

56

vector_rama = G.Edges.ID(pos);

57

nombre_variable = sprintf(’corte_ %d’, vector_rama);

58

matriz_enlaces = [G.Edges.ID(pos2(f)), matriz_enlaces ];

59

valor_variable = [vector_rama ,matriz_enlaces ];

60

datos .( nombre_variable ) = valor_variable;

61

fields = fieldnames(datos);

62

campo_actual = fields{ contador_cortes };

63

rys = datos .( campo_actual);

64

65

matriz_cortes(contador_cortes ,rys) = 1;

66

67

% Se analiza el sentido de cada enlace

68

if ismember(enlaceEstruct.EndNodes (1), islaEnvio) == 1

p. 42

else

70

posMenos = [contador_cortes ,G.Edges.ID( pos2(f));posMenos ];

71

end

72

end

73

enlace_agregar = table ();

74

end

75

matriz_enlaces = [];

76

contador_cortes = contador_cortes + 1;

77

end

78

% Reset de variables antes del nuevo ciclo

79

pos2 = [];

80

pos = [];

81

pos_tabla = [];

82

end

83

84

% Ciclo por para agregar signos a elementos

85

for w = 1: size(posMenos ,1)

86

matriz_cortes(posMenos(w,1),posMenos(w,2)) = -1;

87

end

88

89

% Rellenar MCF de cada isla con la matriz completa

90

for i = 1: numel( etiquetas_islas )

91

obj.modelos .( estados).( etiquetas_islas {i}).MCF = matriz_cortes;

92

end

93

end

94 end

p. 43

calcular_MFAs(obj, mr, estados) Genera la Matriz Fundamental de Anillos (MFA) aplicando algoritmos de teoría de grafos al grafo orientado depurado del circuito. El proceso inicia eliminando temporalmente los enlaces (ramas con weight=2) para obtener un árbol de expansión, luego reintroduce secuencialmente cada enlace identificando el anillo fundamental correspondiente mediante la función allcycles. Cada fila de la MFA representa un anillo, con entradas +1/-1 según la coincidencia o oposición entre la orientación del elemento y la dirección del anillo. La función maneja especialmente la asignación de signos negativos mediante el registro en posMenos cuando la dirección de la rama se opone al sentido del anillo fundamental.

voltajes_enlace_fx_rama(obj, mm, md, estados) Establece las relaciones algebraicas entre voltajes de enlace y voltajes de rama mediante operaciones simbólicas con la Matriz Fundamental de Anillos (MFA). Para cada isla, extrae la submatriz correspondiente y aplica las ecuaciones de malla derivadas de la MFA para expresar cada voltaje de enlace como combinación lineal de voltajes de rama. La función maneja casos con múltiples filas en la MFA mediante iteraciones anidadas, y finalmente depura las expresiones simbólicas usando children y coeffs para eliminar coeficientes numéricos diferentes de ±1, produciendo una tabla T que contiene las relaciones transformadas listas para su uso en la formulación del sistema de ecuaciones.

1 function T = voltajes_enlace_fx_rama (obj ,mm ,md ,estados)

2

etiquetas_islas = {’DC’,’SIN’,’EXP’,’NoFuente ’,’Combinada ’};

3

T = table ();

4

for i = 1: numel( etiquetas_islas )

5

puertas_md = md.elementos .( estados).( etiquetas_islas{i}). puertas;

6

puertas_mm = mm.elementos .( estados).( etiquetas_islas{i}).

p. 44

puertas;

7

MAF = mm.modelos .( estados).( etiquetas_islas {i}).MAF; isla

8

ids = [];

9

for x = 1: numel(puertas_md)

10

ids = [ids , puertas_md{x}.id];

11

end

12

A = MAF(:,ids);

13

indices_filas = any(A, 2);

14

A = A(indices_filas , :);

15

if size(A,1) == 1

16

voltajes_rama = 0;

17

for x = 1: size(A,2)

18

if A(x) == 0

19

continue

20

end

21

if A(x) > 0

22

if puertas_md{x}. tipo == 1

23

voltajes_rama = -1 * puertas_mm{x}. varV;

24

else

25

voltaje_enlace = puertas_mm{x}. varV;

26

end

27

end

28

if A(x) < 0

29

if puertas_md{x}. tipo == 1

30

voltajes_rama = voltajes_rama + puertas_mm{x}. varV;

31

else

32

voltaje_enlace = puertas_mm{x}. varV;

33

voltajes_rama = puertas_mm{x}. varV + voltajes_rama;

34

end

p. 45

end

36

end

37

fila_temp = table(voltaje_enlace ,voltajes_rama ,’ VariableNames ’,{’voltaje_enlace ’ ’voltajes_rama ’});

38

T = [T; fila_temp ];

39

voltajes_rama = 0;

40

else

41

for r = 1: size(A,1)

42

for s = 1: size(A,2)

43

if A(r,s) == 0

44

continue

45

end

46

if A(r,s) > 0

47

if puertas_md{s}. tipo == 1

48

voltajes_rama = voltajes_rama + (-1) * puertas_mm{s}. varV;

49

else

50

voltaje_enlace = puertas_mm{s}. varV;

51

end

52

end

53

if A(r,s) < 0

54

if puertas_md{s}. tipo == 1

55

voltajes_rama = voltajes_rama + puertas_mm {s}. varV;

56

else

57

voltaje_enlace = puertas_mm{s}. varV;

58

voltajes_rama = puertas_mm{s}. varV + voltajes_rama;

59

end

60

end

61

end

p. 46

fila_temp = table(voltaje_enlace ,voltajes_rama ,...

63

’VariableNames ’,{’voltaje_enlace ’ ’voltajes_rama ’ });

64

T = [T; fila_temp ];

65

end

66

end

67

end

68

for i = 1: size(T.voltajes_rama ,1)

69

V = children(T.voltajes_rama);

70

for j = 1: numel(V{i})

71

if abs(coeffs(V{i}{j})) ~= 1

72

V{i}{j} = 0;

73

end

74

V2{i}{j} = V{i}{j};

75

end

76

end

77

V = transpose(V2);

78

R = 0;

79

for i = 1: size(V,1)

80

for j = 1: numel(V{i})

81

R = V{i}{j} + R;

82

end

83

T.voltajes_rama(i) = R;

84

R = 0;

85

end

86 end

p. 47

voltajes_rama(mm, md, estados, T) Ejecuta el proceso completo de solución del circuito mediante el método de voltajes de rama. Comienza aplicando la MFC a las corrientes primitivas para obtener el CEGID- LI (Conjunto de Ecuaciones General Integro-Diferencial Linealmente Independiente). Sustituye voltajes de enlace usando la tabla T de transformaciones, identifica y reemplaza fuentes de voltaje conocidas (constantes, sinusoidales, exponenciales) y separa el sistema en matriz de coeficientes A y vector de excitaciones b mediante factorización simbólica con collect y children. Resuelve el sistema algebraico usando inversión matricial (A−1·b), obtiene ecuaciones diferenciales mediante numden y presenta los resultados en formato tabular mostrando las EDOs para cada voltaje de rama, completando así la transición desde la descripción circuital hasta las ecuaciones dinámicas gobernantes.

1 function

cegidli = voltajes_rama(mm ,md ,estados ,T)

2

[R,L,C,LM ,VI ,II ,VD ,ID ,CTE ,SIN ,COS ,EXP ,INTS ,INTC] = id_col_caso;

3

% Llamar matriz de cortes fundamentales

4

MCF = mm.modelos .( estados).DC.MCF;

5

columnas_cero = all(MCF == 0, 1);

6

MCF = MCF(:, ~columnas_cero);

7

8

% Llamar vector de corrientes simbolicas

9

I = mm.variables.corrientes;

10

i_primitivas = sym ([]);

11

12

% Sustituir corrientes por sus respectivas primitivas

13

etiquetas_islas = {’DC’,’SIN’,’EXP’,’NoFuente ’,’Combinada ’};

14

15

for i = 1: numel(I)

16

for j = 1: numel( etiquetas_islas )

17

puertas_md = md.elementos .( estados).( etiquetas_islas{j}).

p. 48

puertas;

18

puertas_mm = mm.elementos .( estados).( etiquetas_islas{j}). puertas;

19

for k = 1: numel(puertas_mm)

20

if puertas_mm{k}. varI == I(i)

21

i_primitivas(i,1) = puertas_mm{k}. primitiva_I;

22

end

23

end

24

end

25

end

26

indices_no_cero = find(i_primitivas ~= 0);

27

i_primitivas = i_primitivas( indices_no_cero);

28

29

% Detectar voltajes de enlace y pasarlos a voltajes de rama

30

i_final = i_primitivas;

31

for j = 1: size(T,1)

32

if any(has(i_primitivas ,T. voltaje_enlace (j)))

33

i_final = subs(i_final ,T. voltaje_enlace (j),T.voltajes_rama (j));

34

end

35

end

36

disp(T)

37

% Realizar la multiplicacion matriz por vector

38

cegidli = MCF * i_final;

39

disp (" CONJUNTO DE ECUACIONES

GENERALES

INTEGRO -DIFERENCIALES

LINEALMENTE

INDEPENDIENTES ")

40

disp(cegidli)

41

42

% Depurar cegidli (Eliminar corrientes simbolicas)

43

fila = has(cegidli ,mm.variables.corrientes);

44

cegidli = cegidli (~ fila);

p. 49

T = table ();

46

for j = 1: numel( etiquetas_islas )

47

puertas_md = md.elementos .( estados).( etiquetas_islas{j}). puertas;

48

puertas_mm = mm.elementos .( estados).( etiquetas_islas{j}). puertas;

49

for k = 1: numel(puertas_md)

50

if puertas_md{k}.nat == VI

51

id = puertas_md{k}.id;

52

v_sym = puertas_mm{k}. varV;

53

switch puertas_md{k}. tipo_senal

54

case{CTE}

55

v_real = puertas_md{k}. parametro;

56

case{SIN}

57

A = puertas_md{k}. parametro.amplitud;

58

B = puertas_md{k}. parametro.w;

59

E = puertas_md{k}. parametro.desfase;

60

F = puertas_md{k}. parametro.offset;

61

v_real = A*sin(B*t+E)+F;

62

case{COS}

63

A = puertas_md{k}. parametro.amplitud;

64

B = puertas_md{k}. parametro.w;

65

E = puertas_md{k}. parametro.desfase;

66

F = puertas_md{k}. parametro.offset;

67

v_real = A*cos(B*t+E)+F;

68

case{EXP}

69

A = puertas_md{k}. parametro.amplitud;

70

B = puertas_md{k}. parametro.exponente;

71

E = puertas_md{k}. parametro.offset;

72

v_real = A*exp(B*t)+E;

73

end

p. 50

fila_temp = table(id ,v_sym ,v_real ,’VariableNames ’,{’ID ’ ’voltaje_simbolico ’,’voltaje_real ’});

76

T = [T; fila_temp ];

77

end

78

end

79

end

80

81

for i = 1: size(T,1)

82

if any(has(cegidli ,T(i,:). voltaje_simbolico ))

83

vs = T(i,:). voltaje_simbolico ;

84

vr = T(i,:).voltaje_real;

85

cegidli = subs(cegidli ,vs ,vr);

86

end

87

end

88

89

% Separar excitaciones del sistema de ecuaciones

90

sym_variables = symvar(cegidli);

91

sym_voltages = mm.variables.voltajes;

92

v_target = transpose(intersect(sym_variables ,sym_voltages));

93

cegidli_factorizado = collect(cegidli ,v_target); % Se factorizan los coeficientes de cada voltaje

94

sub_expr = children( cegidli_factorizado );

95

% disp (" CONJUNTO DE ECUACIONES

GENERALES

INTEGRO -DIFERENCIALES

LINEALMENTE

INDEPENDIENTES ")

96

% disp( cegidli_factorizado )

97

temp_1 = 0;

98

temp_2 = 0;

99

A = str2sym(’[]’);

100

b = str2sym(’[]’);

101

for i = 1: numel(sub_expr)

p. 51

for j = 1: numel(sub_expr{i})

103

if has(sub_expr{i}{j},mm.variables.voltajes)

104

temp_1 = temp_1 + sub_expr{i}{j};

105

else

106

temp_2 = temp_2 + sub_expr{i}{j};

107

end

108

end

109

A(i,1) = temp_1;

110

b(i,1) = temp_2;

111

temp_1 = 0;

112

temp_2 = 0;

113

end

114

115

% Obtener vector de soluciones b

116

b = (-1) * b;

117

disp (" VECTOR DE EXCITACIONES B")

118

disp(b)

119

120

% Obtener la matriz de coeficientes A

121

A_m = sym(zeros(numel(v_target),numel(v_target)));

122

logic_voltage = eye(numel(v_target),numel(v_target));

123

for i = 1: size(logic_voltage ,1)

124

for j = 1: size(A_m ,2)

125

A_m(i,j) = subs(A(i),v_target ,logic_voltage(j,:));

126

end

127

end

128

A = A_m;

129

disp (" MATRIZ DE COEFICIENTES A")

130

disp(A)

131

132

% Solucionar el sistema usando x = A^-1 * b

p. 52

disp (" >>> SOLUCION

DEL SISTEMA :")

134

system_solution = A^-1 * b;

135

disp( system_solution )

136

137

% Obtener los denominadores de las funciones de transferencia

138

P = [];

139

Q = [];

140

for i = 1: numel( system_solution )

141

[num ,den] = numden( system_solution (i));

142

P = [P;num];

143

Q = [Q;den];

144

end

145

% EDO = horzcat(Q,P);

146

disp (" ECUACIONES

DIFERENCIALES DE CADA

VOLTAJE DE RAMA ")

147

tabla_edo = table(transpose(v_target),Q,P,’VariableNames ’,{’ Voltaje ’,’Denominador Q(t)’,’Numerador P(t)’});

148

disp(tabla_edo)

149 end

p. 53

i_function_v(mm,md,estados) Realiza la asignación de la ecuación primitiva de corriente dependiendo de la naturaleza del elemento circuital, en caso de que el elemento sea una fuente de voltaje, la función devuelve la variable simbólica de corriente asociada a esa rama.

1 function

i_function_v(obj ,mm ,md ,estados)

2

[R,L,C,LM ,VI ,II ,VD ,ID ,CTE ,SIN ,COS ,EXP ,~,~] = id_col_caso;

3

etiquetas_islas = {’DC’,’SIN’,’EXP’,’NoFuente ’ ’Combinada ’};

4

D = sym(’D’); % Operador derivada

5

t = sym(’t’); % Variable simbolica de tiempo

6

7

for i = 1: numel( etiquetas_islas )

8

if ~isempty(md.elementos .( estados).( etiquetas_islas {i}). puertas) % Verificar si el elemento se NO se encuentra vacio

9

for j = 1: numel(md.elementos .( estados).( etiquetas_islas {i }).puertas)

10

obj_md = md.elementos .( estados).( etiquetas_islas {i}). puertas{j()};

11

obj_mm = mm.elementos .( estados).( etiquetas_islas {i}). puertas{j}();

12

switch obj_md.nat

13

case{R}

14

obj_mm.primitiva_I = obj_md.parametro ^-1 * obj_mm.varV;

15

case{L}

16

obj_mm.primitiva_I = obj_md.parametro ^-1 * D ^-1 * obj_mm.varV;

17

case{C}

18

obj_mm.primitiva_I = obj_md.parametro * D * obj_mm.varV;

p. 54

case{LM}

20

id_acoples = md. circuito_cero_menos .puertas(md . circuito_cero_menos .puertas (:,4)==LM);

21

v_acoples = mm.variables.voltajes(md. circuito_cero_menos .puertas (:,4)==LM);

22

M = mm.modelos .( estados).( etiquetas_islas {i}).

MIMA;

23

m_primitivas = M^-1 * D^-1 * v_acoples;

24

T = table ();

25

for v = 1:2

26

fila_temp = table(id_acoples(v), m_primitivas(v,:),’VariableNames ’,{’ID’ ’primitiva ’});

27

T = [T; fila_temp ];

28

end

29

id = obj_md.id;

30

for v = 1:2

31

if T.ID(v) == id

32

obj_mm.primitiva_I = T.primitiva(v);

33

end

34

end

35

case{VI}

36

obj_mm.primitiva_I = obj_mm.varI;

37

case{II}

38

switch obj_md.tipo_senal

39

case{CTE}

40

obj_mm.primitiva_I = obj_md.parametro;

41

case{SIN}

42

A = obj_md.parametro.amplitud;

43

B = obj_md.parametro.w;

44

E = obj_md.parametro.desfase;

45

F = obj_md.parametro.offset;

p. 55

obj_mm.primitiva_I = A*sin(B*t+E)+F;

47

case{COS}

48

A = obj_md.parametro.amplitud;

49

B = obj_md.parametro.w;

50

E = obj_md.parametro.desfase;

51

F = obj_md.parametro.offset;

52

obj_mm.primitiva_I = A*cos(B*t+E)+F;

53

case{EXP}

54

A = obj_md.parametro.amplitud;

55

B = obj_md.parametro.exponente;

56

E = obj_md.parametro.offset;

57

obj_mm.primitiva_I = A*exp(B*t)+E;

58

end

59

end

60

end

61

end

62

end

63 end

p. 56

(página sin texto)

p. 57

6.

IMPLEMENTACIÓN Y RESULTADOS

Para solucionar el circuito, el programa ejecuta una secuencia de rutinas de extracción y depuración de la información, mediante las cuales genera los objetos necesarios para el análisis posterior. A continuación, crea un conjunto de variables simbólicas. Una vez realizado el análisis de conectividad, el programa calcula las matrices de incidencia de cortes y de anillos. Esta información se almacena en las propiedades MFC (Matriz Fundamental de Cortes) y MFA (Matriz Fundamental de Anillos), respectivamente. Asimismo, se dispone de propiedades para almacenar las variables simbólicas de voltaje y corriente asociadas a cada elemento del circuito.

La multiplicación de la matriz fundamental de cortes por el vector de corrientes da como resultado la formulación de la primera ley de Kirchhoff para todos los cortes, como puede observarse en las figuras. De manera análoga, al multiplicar la matriz fundamental de anillos por el vector de voltajes se obtiene la expresión de la segunda ley de Kirchhoff para todos los anillos del circuito, tal como se muestra a continuación. En el caso del circuito de prueba, el análisis se lleva a cabo mediante el método de Voltajes de Rama, siguiendo el siguiente algoritmo de solución.

p. 58

6.1.

Algoritmo para el método de Voltajes de Rama

1. Elegir como rama el elemento donde se pide la respuesta deseada.

2. Elegir como ramas los siguientes los elementos en el siguiente orden Fuentes

de voltaje independientes, resistencias, capacitancias, inductancias, inductancias mutuamente acopladas y finalmente fuentes de corriente (es recomendable siempre dejar esta como última opción). Tener en cuenta que el número de ramas se toma como el número de nodos menos uno. nramas = nnodos −1

(1)

3. Elegir como enlaces el resto de elementos del circuito

4. Plantear la matriz de voltajes en las inductancias mutuamente acopladas

teniendo en cuenta los sentidos de corriente asumidos y la ubicación de las marcas de polaridad.

5. Del paso anterior hacer la inversa de la matriz de acoples e integrar el vector

de tensiones con respecto al tiempo.

6. Plantear un vector de corrientes de n x 1 en donde n es el número de elementos

de circuito.

7. Recorrer en orden cada posición del vector anterior y reemplazar esa corriente

por la ecuación primitiva de corriente de ese elemento.

8. Realizar la matriz fundametal de cortes (MFC) para el circuito de análisis,

teniendo en cuenta los sentidos de corriente asumidos.

p. 59

9. Realizar la matriz fundamental de anillos (MFA), teniendo en cuenta las

polaridades de los elementos.

10. Crear un vector de voltajes de n x 1 donde n es el número de elementos del

circuito.

11. Realizar la multiplicación de la MFA con el vector de voltajes. Esto da como

resultado la segunda ley de Kirchhoff de la siguiente forma: (P Vsubidas −P Vcaidas = 0).

12. Despejar todos los voltajes de enlace en función de los voltajes de rama.

13. Recorrer en orden el vector de corrientes con ecuaciones primitivas y despejar

por cada voltaje de enlace reemplazar con sus respectivos de voltajes de rama hallados en el paso anterior.

14. Realizar la multiplicación de MFC con este último vector.

15. Esta última multiplicación de como resultado el CEGIDLI igualado a cero.

16. Separar las excitaciones de las variables del anterior conjunto de ecuaciones.

17. Reemplazar las derivadas por el operador simbólico:

d dt =⇒D

18. Reemplazar las integrales por el operador simbólico:

R dt =⇒D−1

19. Si alguna ecuación del CEGIDLI tiene algún operador integral entonces mul-

tiplicar la expresión en ambos lados por el operador derivada de tal forma que no existan integrales en la ecuación.

20. Expresar de forma matricial el conjunto de ecuaciones de la siguiente forma:

p. 60

[A] ·⃗x =⃗b donde:

[A]: es la matriz de coeficientes con el operador D⃗ x: es el vector de incógnitas⃗ b: es el vector de excitaciones NOTA: para este algoritmo el vector de incógnitas corresponde a los voltajes de rama

21. Encontrar la respuesta deseada usando el método de Crammer. En caso de

querer todas las respuestas, se puede realizar la siguiente operación matricial:⃗ x = [A]−1 ·⃗b NOTA: esta operación inversa se puede realizar a mano, pero también se puede mediante algunos comandos de MATLAB.

22. Una vez encontradas las ecuaciones diferenciales, estas se pueden resolver

usando algún método numérico o usando las funciones ode ó dsolve de MATLAB para hallar las respuesta exactas en el dominio del tiempo. .

6.2.

Obtención de las tres ecuaciones diferenciales Al ejecutar el programa sobre el caso caso10n11p5i, el software realiza un análisis completo de conectividad y posteriormente entrega un resultado a través de la venta de comandos de MATLAB donde se muestran las ecuaciones diferenciales simbólicas las cuales son las soluciones completas y exactas del circuito.

p. 61

6.3.

Resultados MATLAB >> resultados = haceos(caso10n11p5i, hcs_opt) voltaje_enlace voltajes_rama v8 v9 −v10 v2 v1 v5 v1 v7 v1 v4 v6 Tabla de Primitivas Primitivas de Corriente En función de Voltajes de Rama v1/3000 v1/3000 v2/D v1/D v4/D + v8/D v6/D + (v9 −v10)/D sin(1000t + 5313/100)/250 sin(1000t + 5313/100)/250 v6/2000 v6/2000 (Dv7)/1000000 (Dv1)/1000000 v4/D + (2v8)/D v6/D + (2(v9 −v10))/D i9 i9 v10/1000 v10/1000

p. 62

Vector de Excitaciones B B =   − sin  1000t + 5313

100



250

−12 D

24

D   Matriz de Coeficientes A A =   D

1000000 + 1

D +

1

3000

0

0

0

1

D +

1

2000

−1 D

0

−1 D

2

D +

1

1000

  Ecuaciones Diferenciales Voltaje Denominador Q(t) Numerador P(t) v1 3D2 + 1000D + 3000000 −12000D sin 1000t + 5313

100

 v6 D2 + 4000D + 2000000 −24000D v10 D2 + 4000D + 2000000 24000D + 24000000 A continuación se presentan las ecuacions diferenciales obtenidas usando notación de Leibniz para las derivadas.

p. 63

Tabla 1. Solución Entregada por la Herramienta Voltaje de Rama Ecuación Diferencial VR2(t)

3 d2

dt2v1(t) + 1000 d dtv1(t) + 3000000v1(t) = −12000 d dt sin (1000t + 53.13) VR3(t) d2 dt2v6(t) + 4000 d dtv6(t) + 2000000v6(t) = −24000 d dtv(t) VR1(t) d2 dt2v10(t) + 4000 d dtv10(t) + 2000000v10(t) = 24000 d dtv(t) + 24000000v(t)

6.4.

Solución simbólica de la EDO Para resolver las ecuaciones entregadas por el software, es necesario hacer uso de la función dsolve de MATLAB. Se realiza el análisis para la primea ecuación diferencial.

3 d2

dt2v1(t) + 1000 d dtv1(t) + 3000000v1(t) = −12000 d dt sin (1000t + 53.13)

(2)

1 % Resolver

ecuacion diferencial de segundo orden

2 % 3*y’’ + 1000*y’ + 3000000*y =

-12000* cos (1000*t + 53.13)

3

4 % Definir

variable simbolica

5 syms y(t)

6

7 % Definir

derivadas 8 Dy = diff(y, t); % Primera derivada 9 D2y = diff(y, t, 2); % Segunda derivada

10

11 % Definir

la ecuacion diferencial

12 eqn = 3* D2y + 1000* Dy + 3000000*y ==

-12000* cos (1000*t + 53.13);

13

14 % Resolver

la ecuacion diferencial 15 sol = dsolve(eqn);

16

17 % Mostrar

la solucion

18 disp(’Solucion

de la ecuacion diferencial :’)

19 pretty(sol)

Lo anterior da como resultado la siguiente función matemática en el dominio del tiempo que expresa la tensión de rama v1(t) o equivalente al voltaje en la resistencia vR2(t):

p. 64

v1(t) = exp  −500t

3

 cos

500

√ 35t

3

!  3

250 sin

5313

100

 + 1  −sin

500

√ 35t

3

! "

3

500 cos

1000t −500 √ 35t

3

+ 5313

100

!

3

500 cos

1000t + 500 √ 35t

3

+ 5313

100

!

+ 9 √

35

8750 cos

1000t −500 √ 35t

3

+ 5313

100

!

+ 9 √

35

8750 cos

1000t + 500 √ 35t

3

+ 5313

100

!

+ 3 √

35

17500 sin

1000t −500 √ 35t

3

+ 5313

100

!

+ 3 √

35

17500 sin

1000t + 500 √ 35t

3

+ 5313

100

! # −cos

500

√ 35t

3

! "

3

500 sin

1000t −500 √ 35t

3

+ 5313

100

!

+

3

500 sin

1000t + 500 √ 35t

3

+ 5313

100

!

−3 √

35

17500 cos

1000t −500 √ 35t

3

+ 5313

100

!

+ 3 √

35

17500 cos

1000t + 500 √ 35t

3

+ 5313

100

!

+ 9 √

35

8750 sin

1000t −500 √ 35t

3

+ 5313

100

!

−9 √

35

8750 sin

1000t + 500 √ 35t

3

+ 5313

100

! #

(3)

De la expresión anterior se puede obtener la gráfica reemplazando la variable de tiempo por un vector y graficando punto por punto, la respuesta obtenida es la siguiente:

p. 65

Figura 3. Respuesta completa para el voltaje de rama v1 correspondiente a la resistencia R2 Para la segunda ecuación diferencial correspondiente al voltaje de rama v10 se tiene la siguiente ecuación diferencial.

d2 dt2v10(t) + 4000 d dtv10(t) + 2000000v10(t) = 24000 d dtv(t) + 24000000v(t)

(4)

Se presenta la solución exacta en el dominio del tiempo para la ecuación (4) v10(t) = e−t(1000 √ 194+14000)

35

194

97

−5 !

−5 √ 194et(1000√194−14000))( √

194 + 14)

194

+ 12

(5)

p. 66

Figura 4. Respuesta completa para el voltaje de rama v10 correspondiente a la resistencia R1 Se presenta la tercer ecuación diferencial la cual corresponde al voltaje de rama v6 d2 dt2v6(t) + 4000 d dtv6(t) + 2000000v6(t) = −24000 d dtv(t)

(6)

v6(t) = √

194 et(1000

√ 194−14000) √

194 + 14



194

−e−t(1000 √ 194+14000)

7

194

97

−1 !

(7)

La siguiente gráfica corresponde a la respuesta en el tiempo del voltaje de rama v6 Figura 5. Respuesta completa para el voltaje de rama v6 correspondiente a la resistencia R3

p. 67

6.5.

Gráficas de las respuestas transitorias Para analizar el comportamiento transitorio de los voltajes en las ramas, es necesario retomar el sistema de ecuaciones diferenciales que modela la dinámica del circuito. Al igualar a cero el término independiente (lado derecho) de dichas ecuaciones, se eliminan las excitaciones externas del sistema. La solución del conjunto homogéneo resultante proporciona entonces la respuesta natural o transitoria, la cual depende únicamente de la energía almacenada inicialmente en los elementos reactivos y de la topología del circuito.

3 d2

dt2v1(t) + 1000 d dtv1(t) + 3000000 · v1(t) = 0

(8)

d2 dt2v6(t) + 4000 d dtv6(t) + 2000000 · v6(t) = 0

(9)

d2 dt2v10(t) + 4000 d dtv10(t) + 2000000 · v10(t) = 0

(10)

(a) Transitorio de v1 (b) Transitorio de v6 (c) Transitorio de v10 Figura 6. Respuestas transitorias para las tensiones de rama del circuito de prueba caso10n11p5i

p. 68

(página sin texto)

p. 69

7.

DISCUSIÓN

7.1.

Interpretación de los resultados Como se muestra en la sección 6.3, los algoritmos desarrollados calculan de manera satisfactoria los voltajes de enlace a partir de los voltajes de rama. Asimismo, se observa que el despeje de las ecuaciones de corriente, la construcción del vector de excitaciones y la generación de la matriz de coeficientes se realizan de forma correcta y automatizada. Este resultado es posible gracias a la utilización de las funciones del toolbox de cálculo simbólico de MATLAB, cuyas rutinas optimizadas garantizan precisión en las operaciones algebraicas requeridas.

La ecuación (5) se compone de tres términos: dos exponenciales que decaen en el tiempo y un tercer término constante de doce voltios, el cual representa la respuesta en estado estable. Como puede observarse en la figura 3, la curva resultante converge asintóticamente hacia este valor.

La figura 4 muestra la respuesta gráfica de la ecuación (7). Matemáticamente, su forma es similar a la anterior, ya que también está compuesta por dos exponenciales que decaen en el tiempo. No obstante, a diferencia del caso previo, esta ecuación no presenta un término constante; en consecuencia, su valor en estado estacionario es de cero voltios. La figura 2 ilustra el comportamiento descrito por la ecuación (2), que corresponde a una respuesta de tipo oscilatorio. Esta oscilación es el resultado de la presencia de funciones seno y coseno en sus términos, las cuales operan a distintas amplitudes. Además, la respuesta presenta un decaimiento progresivo debido al factor exponencial negativo que multiplica al primer término. En consecuencia, aunque la señal es oscilatoria, su amplitud decae asintóticamente hacia cero, lo que determina que su valor en estado estacionario sea de cero voltios.

p. 70

7.2.

Ventajas y limitaciones del método propuesto El algoritmo desarrollado en esta tesis se presenta en sí como una herramienta que le permita al docente explicar de forma secuencial y detallada el procedimiento para resolver un circuito eléctrico mediante un método topológico. Sin embargo hay algunas limitaciones; el ingreso de los datos de un circuito en la herramienta es un trabajo tedioso que requiere un tiempo adicional para que el estudiante o docente entienda cómo se deben llenar todos los campos de forma correcta, esto en sí mismo puede llegar a presentar un problema si lo que se quiere es acortar los tiempos de enseñanza y aprendizaje de la asignatura de Circuitos Eléctricos I. Existe otra limitación la cual corresponde a la asignación de las ecuaciones primitivas para las inductancias mutuamente acopladas, esto debido a que el algoritmo presentado para calcular las MIMA’s funciona sólo si el circuito tiene como máximo dos inductancias mutuamente acopladas, si llegase a tener más de dos el algoritmo no se ejecuta, por este motivo se envía un mensaje de error advirtiendo al usuario que el circuito contiene más de dos inductancias acopladas.

En la versión presentada en esta tesis aún no se realizan pruebas para fuentes dependientes de tensión y corriente.

Tampoco se han realizado pruebas para fuentes independientes con señal de tipo exponencial.

7.3.

Comparación con otros enfoques o herramientas Se presenta una comparación con el software PROTEUS de las respuestas obtenidas en el dominio del tiempo para los voltajes en las ramas v1, v6 y v10, los cuales corresponde a los voltajes en las resistencias R2, R3 y R1 respectivamente.

p. 71

A continuación se muestran las respuestas temporales para los voltajes de rama. (a) Resultado obtenido de con HACEOS (b) Resultado obtenido con PROTEUS (c) Resultado obtenido con Simulink

p. 72

(a) Resultado obtenido de con HACEOS (b) Resultado obtenido con PROTEUS (c) Resultado obtenido con Simulink

p. 73

(a) Resultado obtenido de con HACEOS (b) Resultado obtenido con PROTEUS (c) Resultado obtenido con Simulink

p. 74

7.4.

Relevancia para la enseñanza de los circuitos eléctricos El desarrollo de esta tesis ha permitido no sólo desarrollar algoritmos para solucionar circuitos eléctricos, además, ha permitido desarrollar una metodología que permita al docente explicar de forma secuencial y ordenada la solución de un circuito eléctrico, esta metodología presentada de esta manera podría ayudar a que los estudiantes de la asignatura comprendan de mejor manera los conceptos que usarán el resto de su carrera, además de identificar aquellos items que se les dificulta a la hora de resolver un circuito eléctrico. La implementación de esta tesis en la enseñanza de esta asignatura puede llegar a impactar de forma positiva la forma en la que los estudiantes perciben la asignatura.

p. 75

8.

CONCLUSIONES Y RECOMENDACIONES

8.1.

Logros del trabajo El desarrollo de este trabajo ha permitido alcanzar los siguientes logros: Se lograron generar los algoritmos necesarios para el análisis de circuitos en el estado transitorio, estos algoritmos permiten hacer análisis exactos de las respuestas transitorias que se presentan en un circuito eléctrico.

Se lograron obtener las respuestas simbólicas para el conjunto de ecuaciones dinámicas de un circuito eléctrico.

Se lograron obtener las soluciones exactas para el conjuntos de ecuaciones diferenciales que modelan las respuestas de los voltajes en los elementos circuitales. Un logro no esperado con esta tesis fue el desarrollo de un algoritmo más actualizado para el método de voltajes de rama el cual incluye análisis de conectividad mediante las matrices de incidencia de cortes y anillos.

8.2.

Contribuciones El desarrollo de esta tesis aportará a robustecer HACEOS mediante la implementación de sus algoritmos para análisis en el estado transitorio para circuitos eléctricos de orden superior. Asimismo contribuirá al proceso de enseñanza de la asignatura mediante el algoritmo presentado para resolver por el método de voltajes de rama.

p. 76

8.3.

Recomendaciones para futuras extensiones Aunque esta tesis presente algoritmos para el análisis de circuitos en el estado transitorio mediante un enfoque topológico se recomienda que en el futuro se puedan integrar los métodos de análisis no topológicos ya que estos son más conocidos y son los que usualmente se enseñan a los estudiantes.

Asimismo, se prevé que, una vez que los algoritmos superen todas las etapas de validación, pueda desarrollarse una interfaz gráfica de usuario (GUI) para el software HACEOS. Este desarrollo tiene como objetivo principal superar la limitación actual en el ingreso de datos, mejorando así la experiencia del usuario.

p. 77

BIBLIOGRAFÍA

[1] A. Acosto Montoya, Análisis de Circuitos Eléctricos: Un Enfoque Teórico. Bogotá, Colombia: Ediciones de la U, 2022.

[2] C. K. Alexander y M. N. O. Sadiku, Fundamentals of Electric Circuits, 7th ed. New York, NY, USA: McGraw-Hill, 2021. [ISBN: 978-1-260-47767-2] [3] T. L. Floyd, Principios de Circuitos Eléctricos, 8va ed. Naucalpan de Juárez, México: Pearson Educación, 2007.

[4] C. K. Alexander y M. N. O. Sadiku, Fundamentos de Circuitos Eléctricos, 5ta ed. Ciudad de México, México: McGraw-Hill Educación, 2013.

[5] L. Joyanes, Programación Orientada a Objetos, 2da ed. Madrid, España: McGraw- Hill / Interamericana de España, S.A., 1998.

[6] D. J. Barnes y M. Kölling, Programación orientada a objetos con Java, una introducción práctica usando BlueJ. Madrid, España: Pearson Educación, 2007. [7] A. Amhed y B. Prasad, Foundations of Software Design. EEUU: CRC Press, 2016. [8] D. B. West, Introduction to Graph Theory, 2nd ed. USA: Pearson, 2001. [9] J. A. Bondy y U. S. R. Murty, Graph Theory, ser. Graduate Texts in Mathematics. Springer, 2008.

[10] M. A. Henning y J. H. van Vuuren, Graph and Network Theory. An Applied Approach using Mathematica. Springer, 2022.

p. 78

(página sin texto)

p. 79

9.

ANEXOS

9.1.

Método de Cramer Si Ax=b es un sistema de ecuaciones, A es la matriz de coeficientes del sistema x = (x1,...,xn)’ es el vector columna de las incógnitas, y b es el vector columna de los términos independientes, entonces la solución al sistema se presenta así: xj = det(Aj) det(A) Donde Aj, es la matriz resultante de reemplazar la j-ésima columna de A por el vector columna b.

x =       x1

...

xn       b =       b1

...

bn       Aj =             a1,1

· · ·

a1,j−1 b1 a1,j+1

· · ·

a1,n a2,1

· · ·

a2,j−1 b2 a2,j+1

· · ·

a2,n

...

...

...

...

...

...

...

an−1,1

· · ·

an−1,j−1 bn−1 an−1,j+1

· · ·

an−1,n an,1

· · ·

an,j−1 bn an,j+1

· · ·

an,n             Usando las propiedades de la multiplicación de matrices:

Ax = b ⇔A−1Ax = A−1b ⇔Ix = A−1b ⇔x = A−1b Entonces:

p. 80

x = A−1b = (Adj A)t |A| b Por lo tanto:

xj = (A−1b)j = n X i=1 Aij |A|bi = Pn i=1 Aijbi |A| = |Aj| |A| ,

Cita: Ospina-Rendón, Brandon Santiago (2026), Algoritmos computacionales para analizar circuitos eléctricos de orden superior en el estado transitorio: un enfoque topológico usando cálculo simbólico, Universidad Tecnológica de Pereira, p. N. https://hdl.handle.net/11059/16825