J'ai examiné le code du simulateur Falstad en détail. Pour les circuits qui ne sont constitués que de composants linéaires comme des résistances, des commutateurs et des sources de tension (des choses comme les sorties de portes logiques sont considérées comme des sources de tension connectées à la terre aux fins de la simulation), le simulateur considère chaque nœud de circuit, chaque source de tension (connectant deux nœuds) , ou fil (de même) comme définissant une équation linéaire et une variable, de sorte que le nombre d'équations et le nombre de variables soient toujours égaux. Pour un nœud de circuit, la variable est la tension du nœud, et l'équation calcule le courant total qui le traverse égal au courant total injecté par toutes les sources de courant. Pour une source de tension ou un fil (un fil étant traité comme une source de tension où la différence de potentiel est nulle),
Des éléments comme les sources de courant et les résistances ne sont pas associés à des résistances ou à des variables. Au lieu de cela, les sources de courant augmentent le courant total requis pour un nœud de circuit (rappelez-vous que chaque nœud de circuit a une équation qui évalue le courant total entrant et sortant) et le diminue pour l'autre. Les résistances sont un peu plus délicates: pour l'équation de chaque point d'extrémité, la résistance ajoute des termes pour la tension de nœud de chaque point d'extrémité.
Une résistance de 100 ohms reliant les nœuds 1 et 2, par exemple, dirait que chaque augmentation de volt sur le nœud 1 diminuera le courant circulant dans le nœud 1 de 0,01 ampères et augmentera le courant circulant dans le nœud 2 d'une quantité similaire. De même, chaque augmentation de volt sur le nœud 2 augmenterait le courant circulant dans le nœud 1 de 0,01 ampères et diminuerait le courant circulant dans le nœud 2 d'une quantité similaire.
Considérons un circuit avec une alimentation de 10 volts reliant les nœuds 1 et 5 et des résistances de 100 ohms reliant les nœuds 1 et 2, 2 et 3, 2 et 4 et 3 et 4. Supposons en outre qu'il y a une icône de masse sur le nœud 1. Ainsi:
neg ---+-1---R100---2---R100---3---100---4---pos
gnd | |
+---------100--------+
Il y aurait deux "sources de tension": le fil de terre et l'alimentation de 10 volts (qui sont considérées comme équation / variable 5 et 6, respectivement). Les équations seraient donc:
-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)
Ce système d'équation peut être représenté comme une matrice NxN plus un tableau d'éléments N. Chaque équation est représentée par une ligne dans la matrice, avec des valeurs sur chaque ligne représentant les coefficients de chaque variable. Le côté droit de chaque équation est stocké dans le tableau séparé. Avant de résoudre les équations, on connaîtra le courant net circulant dans chaque nœud (zéro dans ce cas), et la différence de tension entre des paires de nœuds connectés par des sources de tension. La résolution des équations donnera la tension à chaque nœud et le courant traversant chaque source de tension.
Si le circuit contient des condensateurs, chacun d'eux sera considéré comme une source de tension en série avec une résistance de faible valeur; après chaque étape de simulation, la source de tension sera ajustée en fonction de la quantité de courant qui la traversera. Les inductances seront considérées comme des résistances de grande valeur qui alimentent le courant dans l'un et le retirent de l'autre (la quantité de courant étant ajustée en fonction de la tension aux bornes de la résistance). Pour les condensateurs et les inductances, la valeur de la résistance sera contrôlée par la quantité de temps représentée par une étape de simulation.
Les éléments de circuit plus complexes comme les transistors sont considérés comme des combinaisons de sources de tension, de sources de courant et de résistances. Contrairement aux éléments de circuit plus simples qui permettent de tout traiter une fois par pas de temps de simulation, des éléments comme les transistors calculent leurs résistances efficaces, etc. en fonction des tensions et des courants qu'ils voient, évaluent toutes les équations résultantes et réévaluent leur résistance en fonction de les nouvelles tensions et courants, réévaluent les équations, etc. dans le but d'atteindre un équilibre où leur résistance effective est telle qu'elle devrait être pour la tension et le courant que le transistor voit.
Le simulateur Falstad peut être décemment rapide pour des circuits de taille moyenne constitués entièrement d'éléments "linéaires". Le temps de résoudre à plusieurs reprises un système d'équations est assez raisonnable si la seule chose qui change est les coefficients du côté droit. Le temps devient beaucoup plus lent si le côté gauche change (par exemple parce que la résistance effective d'un transistor monte ou descend) parce que le système doit "refactoriser" les équations. Devoir refaire les équations plusieurs fois par étape de simulation (peut être nécessaire avec des transistors) rend les choses encore plus lentes.
Utiliser une grande matrice pour tout n'est pas une bonne approche pour les grandes simulations; même si la matrice sera assez clairsemée, elle occupera un espace proportionnel au carré du nombre de nœuds plus les sources de tension. Le temps requis pour résoudre la matrice à chaque étape de simulation sera proportionnel au carré de la taille de la matrice si le refactoring n'est pas requis, ou au cube de la taille de la matrice si le refactoring est requis. Néanmoins, l'approche a une certaine élégance lorsqu'il s'agit de montrer la relation entre un circuit et un système d'équations linéaires.