Examinei o código do simulador Falstad com mais detalhes. Para circuitos que consistem apenas em componentes lineares como resistores, comutadores e fontes de tensão (coisas como saídas de porta lógica são consideradas fontes de tensão conectadas ao terra para fins de simulação), o simulador considera cada nó do circuito, fonte de tensão (conexão de dois nós) ou wire (da mesma forma) como definindo uma equação linear e uma variável, de modo que o número de equações e o número de variáveis sejam sempre iguais. Para um nó de circuito, a variável é a tensão do nó, e a equação calcula a corrente total que flui através dele igual à corrente total injetada por quaisquer fontes de corrente. Para uma fonte ou fio de tensão (um fio sendo manuseado como fonte de tensão em que a diferença de potencial é zero),
Coisas como fontes de corrente e resistores não estão associados a resistores ou variáveis. Em vez disso, as fontes de corrente aumentam a corrente total necessária para um nó do circuito (lembre-se de que cada nó do circuito possui uma equação que avalia a corrente total que entra e sai) e diminui para o outro. Os resistores são um pouco mais complicados: para a equação de cada ponto final, o resistor adiciona termos para a tensão do nó de cada ponto final.
Um resistor de 100 ohm que conecta os nós 1 e 2, por exemplo, diria que cada aumento de volt no nó 1 diminuirá a corrente que flui para o nó 1 em 0,01 amperes e aumentará a corrente que flui para o nó 2 em uma quantidade semelhante. Da mesma forma, cada aumento de volt no nó 2 aumentaria a corrente que entra no nó 1 em 0,01 amperes e diminuiria a corrente que entra no nó 2 em uma quantidade semelhante.
Considere um circuito com uma fonte de 10 volts conectando os nós 1 e 5 e os resistores de 100 ohm conectando os nós 1 e 2, 2 e 3, 2 e 4 e 3 e 4. Suponha ainda que exista um ícone de aterramento no nó 1. Assim:
neg ---+-1---R100---2---R100---3---100---4---pos
gnd | |
+---------100--------+
Haveria duas "fontes de tensão": o fio terra e a fonte de 10 volts (que são consideradas como equação / variável 5 e 6, respectivamente). As equações seriam assim:
-X1*0.01 +X5 -X6 = 0 Node 1
+X1*0.01 -X2*0.01 +X4*0.01 = 0 Node 2
+X2*0.01 -X3*0.01 +X4*0.01 = 0 Node 3
+X2*0.01 -X4*0.01 +X6 = 0 Node 4
-X1*1 = 0 Volts 5 (voltage between 1 and gnd)
-X1*1 +X4*1 = 10 Volts 6 (voltage between 1 and 4)
Este sistema de equação pode ser representado como uma matriz NxN mais uma matriz de itens N. Cada equação é representada por uma linha na matriz, com valores em cada linha representando os coeficientes de cada variável. O lado direito de cada equação é armazenado em uma matriz separada. Antes de resolver as equações, conheceremos a corrente líquida que flui para cada nó (neste caso, zero) e a diferença de tensão entre pares de nós conectados por fontes de tensão. A resolução das equações produzirá a tensão em cada nó e a corrente que flui através de cada fonte de tensão.
Se o circuito contiver capacitores, cada um deles será considerado uma fonte de tensão em série com um resistor de baixo valor; após cada etapa da simulação, a fonte de tensão será ajustada de acordo com a quantidade de corrente que fluiu através dela. Os indutores serão considerados resistores de alto valor que alimentam a corrente em uma e a retiram na outra (a quantidade de corrente sendo ajustada de acordo com a tensão na resistência). Para capacitores e indutores, o valor da resistência será controlado pela quantidade de tempo representada por uma etapa de simulação.
Elementos de circuito mais complexos, como transistores, são considerados combinações de fontes de tensão, fontes de corrente e resistores. Ao contrário dos elementos de circuito mais simples que permitem que tudo seja processado uma vez por etapa do tempo de simulação, elementos como transistores calculam suas resistências efetivas etc. com base nas tensões e correntes que estão vendo, avaliam todas as equações resultantes e reavaliam sua resistência com base em as novas tensões e correntes reavaliam as equações, etc., em um esforço para alcançar um equilíbrio em que a resistência efetiva seja a mesma para a tensão e a corrente que o transitor está vendo.
O simulador Falstad pode ser decentemente rápido para circuitos de tamanho moderado que consistem inteiramente em elementos "lineares". O tempo para resolver repetidamente um sistema de equações é bastante razoável se a única coisa que muda são os coeficientes do lado direito. O tempo fica muito mais lento se o lado esquerdo mudar (por exemplo, porque a resistência efetiva de um transistor aumenta ou diminui) porque o sistema precisa "refatorar" as equações. Ter que refatorar as equações várias vezes por etapa de simulação (pode ser necessário com transistores) torna as coisas ainda mais lentas.
Usar uma grande matriz para tudo não é uma boa abordagem para grandes simulações; mesmo que a matriz seja bastante esparsa, ela ocupará espaço proporcional ao quadrado do número de nós mais as fontes de tensão. O tempo necessário para resolver a matriz em cada etapa da simulação será proporcional ao quadrado do tamanho da matriz, se a refatoração não for necessária, ou ao cubo do tamanho da matriz, se for necessária a refatoração. No entanto, a abordagem tem certa elegância quando se trata de mostrar a relação entre um circuito e um sistema de equações lineares.