Falstadシミュレーターのコードを詳細に調べました。抵抗、スイッチ、電圧源などの線形コンポーネントのみで構成される回路の場合(シミュレーションでは、論理ゲート出力のようなものは接地接続電圧源と見なされます)、シミュレータは各回路ノード、電圧源(2つのノードを接続)を考慮します、または(同様に)線形方程式と変数を定義するものとして、方程式の数と変数の数が常に等しくなるようにします。回路ノードの場合、変数はノードの電圧であり、方程式は、任意の電流源から注入された合計電流に等しいノードを流れる合計電流を計算します。電圧源またはワイヤ(電位差がゼロの電圧源として扱われているワイヤ)の場合、
電流源や抵抗のようなものは、抵抗や変数に関連付けられていません。代わりに、電流源は、1つの回路ノードに必要な合計電流を増加させ(各回路ノードには、流入および流出する合計電流を評価する式があることを思い出してください)、他のノードに対して減少させます。抵抗器は少し複雑です。各エンドポイントの方程式に対して、抵抗器は各エンドポイントのノード電圧の項を追加します。
たとえば、ノード1と2を接続する100Ωの抵抗は、ノード1での各ボルトの増加により、ノード1に流れる電流が0.01アンペア減少し、ノード2に流れる電流が同様に増加すると言います。同様に、ノード2での各ボルトの増加により、ノード1に流れる電流が0.01アンペア増加し、ノード2に流れる電流が同様の量だけ減少します。
ノード1と5を接続する10ボルトの電源と、ノード1と2、2と3、2と4、および3と4を接続する100オームの抵抗器を備えた回路を考えてみましょう。
neg ---+-1---R100---2---R100---3---100---4---pos
gnd | |
+---------100--------+
2つの「電圧源」があります:グランドリードと10ボルト電源(それぞれ式/変数5と6と見なされます)。したがって、方程式は次のようになります。
-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)
この方程式系は、NxN行列とN個のアイテム配列として表されます。各方程式は行列の行で表され、各行の値は各変数の係数を表します。各方程式の右側は、個別の配列に格納されます。方程式を解く前に、各ノードに流れる正味電流(この場合はゼロ)と、電圧源によって接続されたノードのペア間の電圧差を知ることができます。方程式を解くと、各ノードの電圧と各電圧源を流れる電流が得られます。
回路にコンデンサが含まれている場合、それらはそれぞれ低値抵抗と直列の電圧源と見なされます。各シミュレーションステップの後に、電圧ソースは、流れる電流の量に従って調整されます。インダクタは、一方に電流を供給して他方から取り出す高抵抗の抵抗器と見なされます(抵抗の両端の電圧に応じて電流量が調整されます)。コンデンサとインダクタの両方について、抵抗値はシミュレーションステップで表される時間によって制御されます。
トランジスタなどのより複雑な回路要素は、電圧源、電流源、抵抗の組み合わせと見なされます。シミュレーションタイムステップごとにすべてを一度に処理できる単純な回路要素とは異なり、トランジスターなどの要素は、表示されている電圧と電流に基づいて実効抵抗などを計算し、結果の方程式をすべて評価し、それに基づいて抵抗を再評価します新しい電圧と電流、等式を再評価するなどして、トランジタが見ている電圧と電流に対して有効抵抗が存在するはずの平衡に達するよう努力します。
Falstadシミュレーターは、完全に「線形」要素で構成される中規模の回路に対してかなり高速です。変化する唯一のものが右側の係数である場合、連立方程式を繰り返し解く時間はかなり妥当です。システムが方程式を「リファクタリング」しなければならないため、左側が変化すると(たとえば、トランジスタの実効抵抗が上昇または下降するため)、時間が非常に遅くなります。シミュレーションステップごとに方程式を複数回リファクタリングしなければならない(トランジスタの場合に必要になる可能性がある)ので、物事はさらに遅くなります。
すべてに1つの大きなマトリックスを使用することは、大規模なシミュレーションには適していません。マトリックスはかなりまばらですが、ノードと電圧源の数の2乗に比例してスペースを占有します。各シミュレーションステップでマトリックスを解くのに必要な時間は、リファクタリングが不要な場合はマトリックスサイズの2乗に比例し、リファクタリングが必要な場合はマトリックスサイズの3乗に比例します。それにもかかわらず、回路と線形方程式系との関係を示すことになると、このアプローチにはある種の優雅さがあります。