Tôi đã kiểm tra mã của trình giả lập Falstad một cách chi tiết. Đối với các mạch chỉ bao gồm các thành phần tuyến tính như điện trở, công tắc và nguồn điện áp (những thứ như đầu ra cổng logic được coi là nguồn điện áp nối đất cho mục đích mô phỏng), trình mô phỏng liên quan đến từng nút mạch, nguồn điện áp (kết nối hai nút) hoặc dây (tương tự) như xác định một phương trình tuyến tính và một biến, sao cho số phương trình và số lượng biến luôn bằng nhau. Đối với một nút mạch, biến là điện áp của nút và phương trình tính tổng dòng điện chạy qua nó bằng tổng dòng điện được bơm bởi bất kỳ nguồn hiện tại nào. Đối với nguồn điện áp hoặc dây (dây được xử lý như nguồn điện áp trong đó chênh lệch tiềm năng bằng 0),
Những thứ như nguồn và điện trở hiện tại không liên quan đến điện trở hoặc biến. Thay vào đó, các nguồn hiện tại làm tăng tổng dòng điện cần thiết cho một nút mạch (hãy nhớ rằng mỗi nút mạch có một phương trình để đánh giá tổng dòng chảy vào và ra) và giảm nó cho nút kia. Các điện trở phức tạp hơn một chút: đối với mỗi phương trình của điểm cuối, điện trở thêm các thuật ngữ cho điện áp nút của mỗi điểm cuối.
Ví dụ, một điện trở 100 ohm kết nối các nút 1 và 2 sẽ nói rằng mỗi lần tăng volt trên nút 1 sẽ làm giảm dòng điện chạy vào nút 1 thêm 0,01 amps và tăng dòng điện vào nút 2 thêm một lượng tương tự. Tương tự như vậy, mỗi lần tăng volt trên nút 2 sẽ làm tăng dòng chảy vào nút 1 thêm 0,01 amps và giảm dòng chảy vào nút 2 một lượng tương tự.
Hãy xem xét một mạch có nguồn cung cấp 10 volt kết nối các nút 1 và 5, và các điện trở 100 ohm kết nối nút 1 và 2, 2 và 3, 2 và 4, và 3 và 4. Giả sử thêm rằng có một biểu tượng mặt đất trên nút 1. Do đó:
neg ---+-1---R100---2---R100---3---100---4---pos
gnd | |
+---------100--------+
Sẽ có hai "nguồn điện áp": dây dẫn đất và nguồn 10 volt (được coi là phương trình / biến 5 và 6, tương ứng). Các phương trình do đó sẽ là:
-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)
Hệ phương trình này có thể được biểu diễn dưới dạng ma trận NxN cộng với mảng mục N. Mỗi phương trình được biểu diễn bằng một hàng trong ma trận, với các giá trị trên mỗi hàng biểu thị các hệ số của từng biến. Phía bên phải của mỗi phương trình được lưu trữ trong mảng riêng biệt. Trước khi giải các phương trình, người ta sẽ biết dòng điện ròng chảy vào từng nút (trong trường hợp này là 0) và chênh lệch điện áp giữa các cặp nút được kết nối bởi các nguồn điện áp. Việc giải các phương trình sẽ mang lại điện áp tại mỗi nút và dòng điện chạy qua từng nguồn điện áp.
Nếu mạch chứa tụ điện, mỗi trong số đó sẽ được coi là một nguồn điện áp nối tiếp với điện trở giá trị thấp; sau mỗi bước mô phỏng, nguồn điện áp sẽ được điều chỉnh theo lượng dòng điện chạy qua nó. Cuộn cảm sẽ được coi là điện trở có giá trị cao, cung cấp dòng điện vào một và đưa nó ra ngoài (dòng điện được điều chỉnh theo điện áp trên điện trở). Đối với cả tụ điện và cuộn cảm, giá trị của điện trở sẽ được kiểm soát bởi lượng thời gian được biểu thị bằng một bước mô phỏng.
Các phần tử mạch phức tạp hơn như bóng bán dẫn được coi là sự kết hợp của nguồn điện áp, nguồn hiện tại và điện trở. Không giống như các phần tử mạch đơn giản hơn cho phép mọi thứ được xử lý một lần trong bước thời gian mô phỏng, các phần tử như bóng bán dẫn tính toán điện trở hiệu dụng của chúng, v.v. dựa trên điện áp và dòng điện mà chúng nhìn thấy, đánh giá tất cả các phương trình kết quả và đánh giá lại điện trở của chúng dựa trên các điện áp và dòng điện mới, đánh giá lại các phương trình, v.v ... trong nỗ lực đạt đến trạng thái cân bằng trong đó điện trở hiệu dụng của chúng là như đối với điện áp và dòng điện mà transitor đang nhìn thấy.
Trình mô phỏng Falstad có thể nhanh chóng cho các mạch có kích thước vừa phải bao gồm các phần tử "tuyến tính". Thời gian để liên tục giải một hệ phương trình là khá hợp lý nếu điều duy nhất thay đổi là các hệ số bên phải. Thời gian trở nên chậm hơn nhiều nếu phía bên trái thay đổi (ví dụ vì điện trở hiệu dụng của bóng bán dẫn tăng hoặc giảm) vì hệ thống phải "cấu trúc lại" các phương trình. Phải thực hiện cấu trúc lại các phương trình nhiều lần trên mỗi bước mô phỏng (có thể cần thiết với bóng bán dẫn) làm cho mọi thứ chậm hơn.
Sử dụng một ma trận lớn cho mọi thứ không phải là một cách tiếp cận tốt cho các mô phỏng lớn; mặc dù ma trận sẽ khá thưa thớt, nó sẽ chiếm không gian tỷ lệ với bình phương số lượng nút cộng với nguồn điện áp. Thời gian cần thiết để giải ma trận trên mỗi bước mô phỏng sẽ tỷ lệ với bình phương kích thước ma trận nếu không cần tái cấu trúc hoặc theo khối kích thước ma trận nếu cần phải tái cấu trúc. Tuy nhiên, cách tiếp cận này có một sự tao nhã nhất định khi thể hiện mối quan hệ giữa một mạch và một hệ phương trình tuyến tính.