Szczegółowo zbadałem kod symulatora Falstad. W przypadku obwodów, które składają się tylko z elementów liniowych, takich jak rezystory, przełączniki i źródła napięcia (takie jak wyjścia bramki logicznej do celów symulacji są uważane za źródła napięcia podłączone do uziemienia), symulator uwzględnia każdy węzeł obwodu, źródło napięcia (łączące dwa węzły) lub drut (podobnie) jako definicję równania liniowego i zmiennej, tak że liczba równań i liczba zmiennych są zawsze równe. W przypadku węzła obwodu zmienną stanowi napięcie węzła, a równanie oblicza całkowity przepływający przez niego prąd równy całkowitemu prądowi wtryskiwanemu przez dowolne źródła prądu. W przypadku źródła napięcia lub drutu (drut traktowany jako źródło napięcia, w którym różnica potencjałów wynosi zero),
Rzeczy takie jak źródła prądu i rezystory nie są powiązane z rezystorami lub zmiennymi. Zamiast tego źródła prądu zwiększają całkowity prąd wymagany dla jednego węzła obwodu (pamiętaj, że każdy węzeł obwodu ma równanie, które ocenia całkowity prąd wpływający i wypływający) i zmniejszają go dla drugiego. Rezystory są nieco trudniejsze: dla równania każdego punktu końcowego rezystor dodaje warunki dla napięcia węzła każdego punktu końcowego.
Na przykład 100-omowy rezystor łączący węzły 1 i 2 powiedziałby, że każdy wzrost napięcia w węźle 1 zmniejszy prąd płynący do węzła 1 o 0,01 ampera i zwiększy prąd płynący do węzła 2 o podobną wartość. Podobnie, każdy wzrost napięcia w węźle 2 zwiększyłby prąd przepływający do węzła 1 o 0,01 ampera i zmniejszyłby prąd przepływający do węzła 2 o podobną wartość.
Rozważ obwód z zasilaniem 10 V łączącym węzły 1 i 5 oraz rezystory 100 omów łączące węzły 1 i 2, 2 i 3, 2 i 4 oraz 3 i 4. Załóżmy ponadto, że w węźle 1 znajduje się ikona uziemienia:
neg ---+-1---R100---2---R100---3---100---4---pos
gnd | |
+---------100--------+
Byłyby dwa „źródła napięcia”: przewód uziemiający i zasilanie 10 woltów (które są uważane odpowiednio za równanie / zmienną 5 i 6). Równania byłyby zatem:
-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)
Ten układ równań można przedstawić jako macierz NxN plus macierz N elementów. Każde równanie jest reprezentowane przez wiersz w macierzy, a wartości w każdym rzędzie reprezentują współczynniki każdej zmiennej. Prawa strona każdego równania jest przechowywana w osobnej tablicy. Przed rozwiązywaniem równań poznamy prąd netto płynący do każdego węzła (w tym przypadku zero) oraz różnicę napięć między parami węzłów połączonych źródłami napięcia. Rozwiązanie równań da napięcie na każdym węźle i prąd przepływający przez każde źródło napięcia.
Jeśli obwód zawiera kondensatory, każdy z nich będzie traktowany jako źródło napięcia szeregowo z rezystorem o niskiej wartości; po każdym etapie symulacji źródło napięcia zostanie dostosowane zgodnie z ilością prądu, który przez niego przepłynął. Cewki indukcyjne będą uważane za rezystory o wysokiej wartości, które doprowadzają prąd do jednego i wyjmują go do drugiego (ilość prądu jest regulowana zgodnie z napięciem na rezystancji). Zarówno dla kondensatorów, jak i cewek, wartość rezystancji będzie kontrolowana przez czas reprezentowany przez etap symulacji.
Bardziej złożone elementy obwodu, takie jak tranzystory, są uważane za kombinacje źródeł napięcia, źródeł prądu i rezystorów. W przeciwieństwie do prostszych elementów obwodu, które pozwalają przetwarzać wszystko raz na krok symulacji, elementy takie jak tranzystory obliczają efektywne rezystancje itp. Na podstawie napięć i prądów, które widzą, oceniają wszystkie wynikające równania i ponownie oceniają ich rezystancję na podstawie nowe napięcia i prądy ponownie oceniają równania itp. w celu osiągnięcia równowagi, w której ich efektywna rezystancja jest taka, jaka powinna być dla napięcia i prądu, które widzi tranzystor.
Symulator Falstad może być dość szybki dla obwodów średniej wielkości, które składają się całkowicie z elementów „liniowych”. Czas do wielokrotnego rozwiązywania układu równań jest całkiem rozsądny, jeśli jedyną zmianą są współczynniki po prawej stronie. Czas staje się znacznie wolniejszy, jeśli zmienia się lewa strona (np. Ponieważ efektywna rezystancja tranzystora rośnie lub maleje), ponieważ układ musi „refaktoryzować” równania. Konieczność wielokrotnego refaktowania równań wiele razy na krok symulacji (może to być konieczne w przypadku tranzystorów) sprawia, że wszystko jest jeszcze wolniejsze.
Użycie jednej dużej matrycy do wszystkiego nie jest dobrym podejściem do dużych symulacji; chociaż matryca będzie dość rzadka, zajmie miejsce proporcjonalne do kwadratu liczby węzłów plus źródeł napięcia. Czas potrzebny do rozwiązania macierzy na każdym etapie symulacji będzie proporcjonalny do kwadratu rozmiaru matrycy, jeśli refaktoryzacja nie jest wymagana, lub do kostki rozmiaru matrycy, jeśli wymagana jest refaktoryzacja. Niemniej jednak podejście ma pewną elegancję, jeśli chodzi o pokazywanie związku między obwodem a układem równań liniowych.