[ I N P U T S ]
Describe a linear circuit and specify the analysis type — You can use an Input File. Unsure how? Learn here!
Circuit syntax reference
One element per line (or separated by :), fields
separated by ,; node 0 is ground. See
the documentation for a full walkthrough, or pick
an example circuit above to see it in practice.
The first letter of an element's name selects its type. Element
letters, element names and node names are not
case-sensitive: R1 and r1 are the same
resistor, and node A is node a.
| Letter | Element | Fields |
|---|---|---|
| j | current source | name,n1,n2,value |
| e | voltage source | name,n+,n−,value |
| r | resistor | name,n1,n2,value |
| s | short circuit | name,n1,n2 |
| c | capacitor | name,n1,n2,value[,initial voltage] |
| l | inductor | name,n1,n2,value[,initial current] |
| m | mutual inductance | name,L1,L2,M |
| t | ideal transformer | name,n1,n2,N1,N2 |
| o | ideal op-amp | name,n+,n−,n_out |
| z | z-parameters (impedance) two-port block | name,n1,n2 |
| y | y-parameters (admittance) two-port block | name,n1,n2 |
| h | h-parameters (hybrid) two-port block | name,n1,n2 |
| g | g-parameters (inverse hybrid) two-port block | name,n1,n2 |
| a | a-parameters (ABCD / transmission) two-port block | name,n1,n2 |
| b | b-parameters (inverse transmission) two-port block | name,n1,n2 |
A value can be a number, a symbol (r_load,
vin) or an expression — and an expression referring
to another answer, like 2*v_2, makes a dependent
(controlled) source. For FD and TR analysis give source values in
the s-domain: 5/s for a 5 V step, 1 for a
unit impulse.
Write the apostrophe — 1'k — to say plainly that you
mean an SI prefix. A bare 1k also works, but it is
ambiguous (one kilo, or one times a variable named k?) and
Symbulator will stop and ask.
| Prefix | Means | Example |
|---|---|---|
| 'P | peta, ×1015 | 2'P |
| 'T | tera, ×1012 | 2'T |
| 'G | giga, ×109 | 2'G |
| 'M | mega, ×106 | 4.7'M |
| 'k or 'K | kilo, ×103 | 1'k |
| 'm | milli, ×10−3 | 5'm |
| 'u or 'µ | micro, ×10−6 | 4.7'u |
| 'n | nano, ×10−9 | 10'n |
| 'p | pico, ×10−12 | 33'p |
| 'f | femto, ×10−15 | 100'f |
| 'a | atto, ×10−18 | 5'a |
Case matters here. 'M is mega and
'm is milli — a factor of a billion apart. (Both
'k and 'K mean kilo.) Micro accepts
either u or µ, so a value pasted from a
datasheet works as typed. There is no prefix for exa:
E is reserved for scientific notation, where
8E3 means 8000.
8000, 8000. and 8E3 all mean
the same number; the last two are read as approximate rather than
exact.
When conducting an AC analysis, or an analysis in the AC mode,
i, I, j and J
all mean the imaginary unit and cannot be used as
variable names — write 3j, 3*j or
3*i and you get the same thing, shown as
3j. Outside AC, those four letters are ordinary
variable names like any other. pi is π. Every other
name you write is an ordinary variable, so Q,
S and beta mean what you intend rather
than something out of SymPy. Euler's number is exp(1).
In FD analysis s is the complex frequency and in TR
t is time; elsewhere both are ordinary variables.
In Evaluate and Solve you can refer to any answer
with or without its underscore, in any capitalisation — so
i_r1, ir1, i_R1 and
IR1 all mean the current through r1.
Answers are named v_<node> for node voltages and,
per element, i_ current, v_ voltage drop,
p_ power, s_ complex power,
z_/r_ impedance seen by a source.
About input file (.cir) format
A plain text Input File can hold as many circuits as you like. Each one
starts with its name in square brackets, followed by optional
settings and then the element lines. Save it with a
.cir extension.
# comments start with a hash [Problem 1 — divider] analysis: dc e1,1,0,20 r1,1,2,5'k r2,2,0,15'k [Problem 2 — RC transient] analysis: tr variables: v_2 e1,1,0,10/s r1,1,2,2200 c1,2,0,4.7e-6
Settings are all optional:
analysis (dc/ac/fd/tr), omega,
variables, tool (th/er/port) with
n1/n2/kind, and the
expert-mode equation, condition and
unknowns.
Update this circuit in the input file when it already exists, above, adds the circuit you're describing to it — or updates it, if a circuit by that name is already there. Upload Input File, below, reads a file like this — its circuits become the live Input File in your browser, replacing whatever was there before (nothing is stored on the server). Download this input file, below, appears once you've made a change to it (uploaded a file, or added or updated a circuit).
Settings
x·vin/(r1 + x) is left as it is. A prefixed value is a
decimal, so SI prefixes and exact can't both apply.
Expert Mode
Provide additional equations, unknowns and/or conditions to be considered.
[ O U T P U T S ]
Results
Evaluate
Solve
About this checkbox
off searches the complex plane too (the calculator's cSolve);
on keeps the unknowns real (its solve)
Download output
Download an output file with the information you decide to include.
Plot
About Symbulator 9
Symbulator is a program to solve linear electric circuits symbolically and numerically. It accepts inputs with numerical and symbolic values, and provides numerical and symbolic results. The name is a portmanteau of "symbolic simulator". Symbulator is widely regarded as the best symbolic simulator of linear electric circuits ever made for a calculator. [more]
Symbulator was made by Roberto Perez-Franco on a Texas Instruments TI-89 calculator, starting in April 1999 as an engineering student at Universidad Tecnológica de Panamá (UTP). An early version won 1st place at the IEEE Student Paper Contest for Latin America in 2000. Version 5 served as Roberto's graduation thesis in January 2001. He released version 6 in 2013 and version 7 in 2023, along with a port to the TI-Nspire as version 8.
This port of Symbulator to Python and SymPy is version 9 in that lineage. Whereas versions 1 through 8 were written by Roberto entirely by hand, this new version — in a sign of the times — was ported and developed using Anthropic's AI assistant. Claude took care of all the coding, while Roberto provided instructions and feedback, during a week-long collaboration session. It is the author's hope that this port will preserve Symbulator for a new generation and beyond.
You do not have to pay anything to use Symbulator. It has always been free of cost, and always will be. Since June 2013, all versions of Symbulator were offered under a Creative Commons License (CC) BY-NC-SA. Since 2026, all versions of Symbulator are free and open-source software, released under the MIT licence: you may use, study, modify and share it, including commercially, with attribution. The solver is published as the symbulator package on PyPI, and the project for the solver and this interface lives on GitHub. Contributions, bug reports and circuits that break it are all welcome.