Ik heb de code van de Falstad-simulator tot in detail onderzocht. Voor circuits die alleen bestaan uit lineaire componenten zoals weerstanden, schakelaars en spanningsbronnen (zaken als uitgangen van de logische poort worden ten behoeve van de simulatie beschouwd als geaarde spanningsbronnen), betreft de simulator elk circuitknooppunt, spanningsbron (die twee knooppunten verbindt) , of draad (eveneens) als het definiëren van een lineaire vergelijking en een variabele, zodat het aantal vergelijkingen en het aantal variabelen altijd gelijk zijn. Voor een circuitknooppunt is de variabele de spanning van het knooppunt, en de vergelijking berekent de totale stroom die erdoor vloeit gelijk aan de totale stroom die door een stroombron wordt geïnjecteerd. Voor een spanningsbron of draad (een draad die wordt behandeld als een spanningsbron waarbij het potentiaalverschil nul is), stelt de vergelijking het spanningsverschil tussen de twee circuitknooppuntspanningen gelijk aan het vereiste spanningsverschil, en de variabele is de hoeveelheid stroom stroomt door de spanningsbron van het ene knooppunt naar het andere.
Zaken als stroombronnen en weerstanden worden niet geassocieerd met weerstanden of variabelen. In plaats daarvan verhogen stroombronnen de totale stroom die nodig is voor één circuitknooppunt (onthoud dat elk circuitknooppunt een vergelijking heeft die de totale stroom die in en uit stroomt evalueert) en verlagen deze voor het andere. Weerstanden zijn iets lastiger: voor de vergelijking van elk eindpunt voegt de weerstand termen toe voor de knooppuntspanning van elk eindpunt.
Een weerstand van 100 ohm die knooppunten 1 en 2 verbindt, zou bijvoorbeeld zeggen dat elke volt toeneemt op knooppunt 1 zal de stroom die naar knooppunt 1 vloeit met 0,01 ampère verminderen en de stroom die naar knooppunt 2 stroomt met eenzelfde hoeveelheid toenemen. Evenzo zou elke volttoename op knooppunt 2 de stroom die naar knooppunt 1 stroomt met 0,01 ampère verhogen en de stroom die naar knooppunt 2 stroomt met eenzelfde hoeveelheid verminderen.
Beschouw een circuit met een voeding van 10 volt die knooppunten 1 en 5 verbindt, en weerstanden van 100 ohm die knooppunt 1 en 2, 2 en 3, 2 en 4, en 3 en 4 verbinden. Neem verder aan dat er een aardingspictogram op knooppunt 1 staat Dus:
neg --- + - 1 --- R100 --- 2 --- R100 --- 3 --- 100 --- 4 --- pos gnd | | + --------- 100 -------- +
Er zouden twee "spanningsbronnen" zijn: de massakabel en de 10 volt voeding (die worden beschouwd als respectievelijk vergelijking / variabele 5 en 6). De vergelijkingen zouden dus zijn:
-X1 * 0,01 + X5 -X6 = 0 Knooppunt 1 + X1 * 0,01 -X2 * 0,01 + X4 * 0,01 = 0 Knooppunt 2 + X2 * 0,01 -X3 * 0,01 + X4 * 0,01 = 0 Knooppunt 3 + X2 * 0,01 -X4 * 0,01 + X6 = 0 Knooppunt 4-X1 * 1 = 0 Volt 5 (spanning tussen 1 en gnd) -X1 * 1 + X4 * 1 = 10 Volt 6 (spanning tussen 1 en 4)
Dit vergelijkingssysteem kan worden weergegeven als een NxN-matrix plus een N-itemreeks. Elke vergelijking wordt weergegeven door een rij in de matrix, waarbij de waarden op elke rij de coëfficiënten van elke variabele vertegenwoordigen. De rechterkant van elke vergelijking wordt opgeslagen in de afzonderlijke array. Alvorens de vergelijkingen op te lossen, zal men de nettostroom kennen die naar elk knooppunt stroomt (in dit geval nul), en het spanningsverschil tussen paren knooppunten verbonden door spanningsbronnen. Het oplossen van de vergelijkingen levert de spanning op bij elk knooppunt en de stroom die door elke spanningsbron vloeit.
Als het circuit condensatoren bevat, wordt elk van deze beschouwd als een spanningsbron in serie met een lage weerstand; na elke simulatiestap wordt de spanningsbron aangepast aan de hoeveelheid stroom die er doorheen stroomde. Inductoren worden beschouwd als hoogwaardige weerstanden die de ene stroom toevoeren en de andere eruit halen (de hoeveelheid stroom wordt aangepast aan de spanning over de weerstand). Voor zowel condensatoren als inductoren wordt de waarde van de weerstand bepaald door de hoeveelheid tijd die wordt weergegeven door een simulatiestap.
Complexere circuitelementen zoals transistors worden beschouwd als combinaties van spanningsbronnen, stroombronnen en weerstanden. In tegenstelling tot de eenvoudigere circuitelementen die alles eenmaal per simulatietijdstap laten verwerken, berekenen elementen zoals transistors hun effectieve weerstanden enz. Op basis van de spanningen en stromen die ze zien, evalueren ze alle resulterende vergelijkingen en evalueren ze hun weerstand opnieuw op basis van de nieuwe spanningen en stromen, herevalueer de vergelijkingen, enz. in een poging om een evenwicht te bereiken waar hun effectieve weerstand is zoals het zou moeten zijn voor de spanning en stroom die de transitor ziet.
De Falstad-simulator kan behoorlijk snel zijn voor circuits van gemiddelde grootte die volledig uit "lineaire" elementen bestaan. De tijd om een stelsel vergelijkingen herhaaldelijk op te lossen is redelijk als het enige dat verandert de coëfficiënten aan de rechterkant zijn. De tijd wordt veel langzamer als de linkerkant verandert (bijvoorbeeld omdat de effectieve weerstand van een transistor omhoog of omlaag gaat) omdat het systeem de vergelijkingen moet "refactoren". Als je de vergelijkingen meerdere keren per simulatiestap moet refactoren (kan nodig zijn bij transistors), gaat het nog langzamer.
Het gebruik van één grote matrix voor alles is geen goede benadering voor grote simulaties; hoewel de matrix vrij schaars zal zijn, neemt hij evenredig ruimte in met het kwadraat van het aantal knooppunten plus spanningsbronnen. De tijd die nodig is om de matrix op te lossen bij elke simulatiestap zal evenredig zijn met het kwadraat van de matrixgrootte als refactoring niet vereist is, of met de kubus van matrixgrootte als refactoring vereist is. Desalniettemin heeft de benadering een zekere elegantie als het gaat om het aantonen van de relatie tussen een circuit en een systeem van lineaire vergelijkingen.