Falstad 시뮬레이터의 코드를 자세히 살펴 보았습니다. 저항, 스위치 및 전압 소스와 같은 선형 구성 요소로만 구성되는 회로의 경우 (시뮬레이션을 위해 논리 게이트 출력과 같은 것은 접지 연결 전압 소스로 간주 됨) 시뮬레이터는 각 회로 노드, 전압 소스 (두 노드 연결)를 고려합니다. 또는 방정식의 수와 변수의 수가 항상 같도록 선형 방정식과 변수를 정의 할 때 와이어와 유사하게 연결합니다. 회로 노드의 경우 변수는 노드의 전압이며 방정식은 전류 소스에 의해 주입 된 총 전류와 동일하게 흐르는 총 전류를 계산합니다. 전압원 또는 전선 (전위차가 0 인 전압원으로 취급되는 전선)의 경우,
전류 소스 및 저항과 같은 것은 저항 또는 변수와 관련이 없습니다. 대신 전류 소스는 하나의 회로 노드에 필요한 총 전류를 증가시키고 (각 회로 노드에는 유입 및 유출되는 총 전류를 평가하는 방정식이 있음을 기억하십시오) 다른 하나에 대해서는 감소시킵니다. 저항기는 조금 까다 롭습니다. 각 종단점 방정식에 대해 저항기는 각 종단점의 노드 전압에 대한 항을 추가합니다.
예를 들어 노드 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 옴 저항이있는 회로를 고려하십시오. 노드 1에 접지 아이콘이 있다고 가정하십시오.
neg ---+-1---R100---2---R100---3---100---4---pos
gnd | |
+---------100--------+
접지 전압과 10V 전원 (각각 방정식 / 가변 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 항목 배열로 표현 될 수 있습니다. 각 방정식은 행렬의 행으로 표시되며 각 행의 값은 각 변수의 계수를 나타냅니다. 각 방정식의 오른쪽은 별도의 배열에 저장됩니다. 방정식을 풀기 전에 각 노드에 흐르는 순 전류 (이 경우 0)와 전압 소스로 연결된 노드 쌍 간의 전압 차이를 알 수 있습니다. 방정식을 해결하면 각 노드의 전압과 각 전압원을 통해 흐르는 전류가 산출됩니다.
회로에 커패시터가 포함 된 경우 각 커패시터는 저값 저항과 직렬로 연결된 전압 소스로 간주됩니다. 각 시뮬레이션 단계 후, 전압 소스는 흐르는 전류의 양에 따라 조정됩니다. 인덕터는 하나의 전류를 공급하고 다른 하나를 제거하는 고 저항 저항기로 간주됩니다 (저항 양단의 전압에 따라 조정되는 전류량). 커패시터와 인덕터의 경우 저항 값은 시뮬레이션 단계로 표시되는 시간에 의해 제어됩니다.
트랜지스터와 같은 더 복잡한 회로 요소는 전압 소스, 전류 소스 및 저항의 조합으로 간주됩니다. 시뮬레이션 시간 단계마다 모든 것을 한 번 처리 할 수있는 더 간단한 회로 요소와 달리, 트랜지스터와 같은 요소는보고있는 전압과 전류를 기반으로 유효 저항 등을 계산하고 모든 결과 방정식을 평가 한 후 저항을 다시 평가합니다. 새로운 전압 및 전류, 유효 저항이 트랜시버가보고있는 전압 및 전류와 같아야하는 평형에 도달하기 위해 방정식 등을 재평가합니다.
Falstad 시뮬레이터는 전체적으로 "선형"요소로 구성된 중간 크기 회로에 대해 매우 빠릅니다. 방정식 시스템을 반복적으로 풀기위한 시간은 변하는 유일한 것이 오른쪽 계수라면 매우 합리적입니다. 시스템이 방정식을 "리팩토링"해야하므로 왼쪽이 변하면 (예 : 트랜지스터의 유효 저항이 올라가거나 내려가므로) 시간이 훨씬 느려집니다. 시뮬레이션 단계마다 여러 번 방정식을 리팩토링해야하는 경우 (트랜지스터에 필요할 수 있음) 아직 속도가 느려집니다.
모든 것을 위해 하나의 큰 매트릭스를 사용하는 것은 큰 시뮬레이션에 대한 좋은 접근 방식이 아닙니다. 매트릭스가 상당히 희소하더라도 노드 수의 제곱에 전압 소스를 더한 공간을 차지합니다. 각 시뮬레이션 단계에서 행렬을 해결하는 데 필요한 시간은 리팩토링이 필요하지 않은 경우 행렬 크기의 제곱 또는 리팩토링이 필요한 경우 행렬 크기의 큐브에 비례합니다. 그럼에도 불구하고이 접근법은 회로와 선형 방정식 시스템 간의 관계를 보여줄 때 특정 우아함을 가지고 있습니다.