| name | sympy-1-14-0 |
| description | Complete toolkit for SymPy 1.14.0 providing symbolic mathematics in Python including algebra, calculus, matrices, equation solving, simplification, and printing. Use when building Python programs that require exact symbolic computation, symbolic expression manipulation, analytical differentiation/integration, equation solving, or mathematical typesetting via LaTeX output. |
SymPy 1.14.0
Overview
SymPy is a Python library for symbolic mathematics. Unlike numerical libraries (NumPy, SciPy), SymPy represents mathematical objects exactly — not approximately — and manipulates expressions with unevaluated variables in symbolic form. It is written entirely in Python with no external dependencies beyond Python itself.
SymPy supports: algebraic manipulation, calculus (derivatives, integrals, limits, series), equation solving (algebraic, ODE, systems), matrix operations, simplification, combinatorics, number theory, geometry, physics, plotting, code generation, and mathematical printing (LaTeX, ASCII, Unicode).
When to Use
- Building Python programs that require exact symbolic computation instead of floating-point arithmetic
- Manipulating mathematical expressions symbolically (expand, factor, substitute)
- Computing derivatives, integrals, limits, or series expansions analytically
- Solving algebraic equations, systems of equations, or differential equations
- Working with symbolic matrices and linear algebra
- Generating LaTeX output for mathematical formulas
- Any task where approximate numerical results are insufficient
Core Concepts
Symbols Must Be Declared
Unlike standalone CAS, SymPy does not auto-declare variables. Define symbols explicitly:
from sympy import symbols
x, y, z = symbols('x y z')
expr = x**2 + 2*y
Immutability
All SymPy expressions are immutable. Operations return new objects — nothing modifies in place:
expr = x + 1
expr.subs(x, 3)
Exception: Matrix objects are mutable. Use ImmutableMatrix when immutability is required.
Python Syntax, Not Mathematical Syntax
- Use
** for exponentiation, not ^ (which is XOR in Python)
- Use
* for explicit multiplication — implicit multiplication like 3x is invalid
- Use
Eq(a, b) for symbolic equality, not == (which tests structural equality)
- Expressions assumed equal to zero can omit
Eq: solveset(x**2 - 1, x) solves x² = 1
- Python division
/ produces floats; use Rational(1, 2) for exact rationals
Expression Trees
Every expression is a tree of Add, Mul, Pow, and function nodes. Inspect with:
from sympy import srepr
srepr(x**2 + x*y)
Every expression satisfies the key invariant: expr == expr.func(*expr.args) or has empty args (leaf node).
Assumptions on Symbols
By default, symbols are complex. Attach assumptions to enable simplifications:
x = symbols('x', positive=True)
y = symbols('y', real=True)
n = symbols('n', integer=True)
Usage Examples
from sympy import *
x, y, t = symbols('x y t')
expr = sin(x)**2 + cos(x)**2
simplify(expr)
diff(exp(x**2), x)
integrate(exp(-x), (x, 0, oo))
limit(sin(x)/x, x, 0)
solveset(x**2 - 2, x)
f = Function('f')
dsolve(Eq(f(t).diff(t, t) - f(t), exp(t)), f(t))
M = Matrix([[1, 2], [3, 4]])
M.eigenvals()
latex(Integral(cos(x)**2, (x, 0, pi)))
exp(sin(x)).series(x, 0, 4)
Advanced Topics
Core Expressions: Symbols, expression trees, substitution, immutability, and evaluation → Core Expressions
Algebra: Polynomial manipulation, equation solving, factorization, roots → Algebra
Calculus: Differentiation, integration, limits, series expansions, finite differences → Calculus
Matrices: Construction, operations, eigenvalues, RREF, nullspace, diagonalization → Matrices
Printing and Output: LaTeX, ASCII/Unicode pretty-print, code generation, MathML → Printing and Output
Advanced Topics: Physics modules, combinatorics, special functions, assumptions system, ODE solving → Advanced Topics