Install any skill in seconds. Free to start, no credit card required.
Get Started Free →SymPy is a Python library for symbolic mathematics that enables exact computation using mathematical symbols rather than numerical approximations.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-10 | ✗→✓ | ▲ Improved | 262% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 183% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 170% | 0% |
| case-01 | ✓→✓ | = Same ✓ | 237% | 0% |
| case-06 | ✓→✓ | = Same ✓ | 163% | 0% |
SymPy is a Python library for symbolic mathematics that enables exact computation using mathematical symbols rather than numerical approximations. This skill provides comprehensive guidance for performing symbolic algebra, calculus, linear algebra, equation solving, physics calculations, and code generation using SymPy.
Use this skill when:
sqrt(2) not 1.414...)Creating symbols and expressions:
pythonfrom sympy import symbols, Symbol x, y, z = symbols('x y z') expr = x**2 + 2*x + 1 # With assumptions x = symbols('x', real=True, positive=True) n = symbols('n', integer=True)
Simplification and manipulation:
pythonfrom sympy import simplify, expand, factor, cancel simplify(sin(x)**2 + cos(x)**2) # Returns 1 expand((x + 1)**3) # x**3 + 3*x**2 + 3*x + 1 factor(x**2 - 1) # (x - 1)*(x + 1)
For detailed basics: See references/core-capabilities.md
Derivatives:
pythonfrom sympy import diff diff(x**2, x) # 2*x diff(x**4, x, 3) # 24*x (third derivative) diff(x**2*y**3, x, y) # 6*x*y**2 (partial derivatives)
Integrals:
pythonfrom sympy import integrate, oo integrate(x**2, x) # x**3/3 (indefinite) integrate(x**2, (x, 0, 1)) # 1/3 (definite) integrate(exp(-x), (x, 0, oo)) # 1 (improper)
Limits and Series:
pythonfrom sympy import limit, series limit(sin(x)/x, x, 0) # 1 series(exp(x), x, 0, 6) # 1 + x + x**2/2 + x**3/6 + x**4/24 + x**5/120 + O(x**6)
For detailed calculus operations: See references/core-capabilities.md
Algebraic equations:
pythonfrom sympy import solveset, solve, Eq solveset(x**2 - 4, x) # {-2, 2} solve(Eq(x**2, 4), x) # [-2, 2]
Systems of equations:
pythonfrom sympy import linsolve, nonlinsolve linsolve([x + y - 2, x - y], x, y) # {(1, 1)} (linear) nonlinsolve([x**2 + y - 2, x + y**2 - 3], x, y) # (nonlinear)
Differential equations:
pythonfrom sympy import Function, dsolve, Derivative f = symbols('f', cls=Function) dsolve(Derivative(f(x), x) - f(x), f(x)) # Eq(f(x), C1*exp(x))
For detailed solving methods: See references/core-capabilities.md
Matrix creation and operations:
pythonfrom sympy import Matrix, eye, zeros M = Matrix([[1, 2], [3, 4]]) M_inv = M**-1 # Inverse M.det() # Determinant M.T # Transpose
Eigenvalues and eigenvectors:
pythoneigenvals = M.eigenvals() # {eigenvalue: multiplicity} eigenvects = M.eigenvects() # [(eigenval, mult, [eigenvectors])] P, D = M.diagonalize() # M = P*D*P^-1
Solving linear systems:
pythonA = Matrix([[1, 2], [3, 4]]) b = Matrix([5, 6]) x = A.solve(b) # Solve Ax = b
For comprehensive linear algebra: See references/matrices-linear-algebra.md
Classical mechanics:
pythonfrom sympy.physics.mechanics import dynamicsymbols, LagrangesMethod from sympy import symbols # Define system q = dynamicsymbols('q') m, g, l = symbols('m g l') # Lagrangian (T - V) L = m*(l*q.diff())**2/2 - m*g*l*(1 - cos(q)) # Apply Lagrange's method LM = LagrangesMethod(L, [q])
Vector analysis:
pythonfrom sympy.physics.vector import ReferenceFrame, dot, cross N = ReferenceFrame('N') v1 = 3*N.x + 4*N.y v2 = 1*N.x + 2*N.z dot(v1, v2) # Dot product cross(v1, v2) # Cross product
Quantum mechanics:
pythonfrom sympy.physics.quantum import Ket, Bra, Commutator psi = Ket('psi') A = Operator('A') comm = Commutator(A, B).doit()
For detailed physics capabilities: See references/physics-mechanics.md
The skill includes comprehensive support for:
For detailed advanced topics: See references/advanced-topics.md
Convert to executable functions:
pythonfrom sympy import lambdify import numpy as np expr = x**2 + 2*x + 1 f = lambdify(x, expr, 'numpy') # Create NumPy function x_vals = np.linspace(0, 10, 100) y_vals = f(x_vals) # Fast numerical evaluation
Generate C/Fortran code:
pythonfrom sympy.utilities.codegen import codegen [(c_name, c_code), (h_name, h_header)] = codegen( ('my_func', expr), 'C' )
LaTeX output:
pythonfrom sympy import latex latex_str = latex(expr) # Convert to LaTeX for documents
For comprehensive code generation: See references/code-generation-printing.md
pythonfrom sympy import symbols x, y, z = symbols('x y z') # Now x, y, z can be used in expressions
pythonx = symbols('x', positive=True, real=True) sqrt(x**2) # Returns x (not Abs(x)) due to positive assumption
Common assumptions: real, positive, negative, integer, rational, complex, even, odd
pythonfrom sympy import Rational, S # Correct (exact): expr = Rational(1, 2) * x expr = S(1)/2 * x # Incorrect (floating-point): expr = 0.5 * x # Creates approximate value
pythonfrom sympy import pi, sqrt result = sqrt(8) + pi result.evalf() # 5.96371554103586 result.evalf(50) # 50 digits of precision
python# Slow for many evaluations: for x_val in range(1000): result = expr.subs(x, x_val).evalf() # Fast: f = lambdify(x, expr, 'numpy') results = f(np.arange(1000))
solveset: Algebraic equations (primary)linsolve: Linear systemsnonlinsolve: Nonlinear systemsdsolve: Differential equationssolve: General purpose (legacy, but flexible)This skill uses modular reference files for different capabilities:
core-capabilities.md: Symbols, algebra, calculus, simplification, equation solvingmatrices-linear-algebra.md: Matrix operations, eigenvalues, linear systemsphysics-mechanics.md: Classical mechanics, quantum mechanics, vectors, unitsadvanced-topics.md: Geometry, number theory, combinatorics, logic, statisticscode-generation-printing.md: Lambdify, codegen, LaTeX output, printingpythonfrom sympy import symbols, solve, simplify x = symbols('x') # Solve equation equation = x**2 - 5*x + 6 solutions = solve(equation, x) # [2, 3] # Verify solutions for sol in solutions: result = simplify(equation.subs(x, sol)) assert result == 0
python# 1. Define symbolic problem x, y = symbols('x y') expr = sin(x) + cos(y) # 2. Manipulate symbolically simplified = simplify(expr) derivative = diff(simplified, x) # 3. Convert to numerical function f = lambdify((x, y), derivative, 'numpy') # 4. Evaluate numerically results = f(x_data, y_data)
python# Compute result symbolically integral_expr = Integral(x**2, (x, 0, 1)) result = integral_expr.doit() # Generate documentation print(f"LaTeX: {latex(integral_expr)} = {latex(result)}") print(f"Pretty: {pretty(integral_expr)} = {pretty(result)}") print(f"Numerical: {result.evalf()}")
pythonimport numpy as np from sympy import symbols, lambdify x = symbols('x') expr = x**2 + 2*x + 1 f = lambdify(x, expr, 'numpy') x_array = np.linspace(-5, 5, 100) y_array = f(x_array)
pythonimport matplotlib.pyplot as plt import numpy as np from sympy import symbols, lambdify, sin x = symbols('x') expr = sin(x) / x f = lambdify(x, expr, 'numpy') x_vals = np.linspace(-10, 10, 1000) y_vals = f(x_vals) plt.plot(x_vals, y_vals) plt.show()
pythonfrom scipy.optimize import fsolve from sympy import symbols, lambdify # Define equation symbolically x = symbols('x') equation = x**3 - 2*x - 5 # Convert to numerical function f = lambdify(x, equation, 'numpy') # Solve numerically with initial guess solution = fsolve(f, 2)
python# Symbols from sympy import symbols, Symbol x, y = symbols('x y') # Basic operations from sympy import simplify, expand, factor, collect, cancel from sympy import sqrt, exp, log, sin, cos, tan, pi, E, I, oo # Calculus from sympy import diff, integrate, limit, series, Derivative, Integral # Solving from sympy import solve, solveset, linsolve, nonlinsolve, dsolve # Matrices from sympy import Matrix, eye, zeros, ones, diag # Logic and sets from sympy import And, Or, Not, Implies, FiniteSet, Interval, Union # Output from sympy import latex, pprint, lambdify, init_printing # Utilities from sympy import evalf, N, nsimplify
pythonfrom sympy import symbols, solve, sqrt x = symbols('x') solution = solve(x**2 - 5*x + 6, x) # [2, 3]
pythonfrom sympy import symbols, diff, sin x = symbols('x') f = sin(x**2) df_dx = diff(f, x) # 2*x*cos(x**2)
pythonfrom sympy import symbols, integrate, exp x = symbols('x') integral = integrate(x * exp(-x**2), (x, 0, oo)) # 1/2
pythonfrom sympy import Matrix M = Matrix([[1, 2], [2, 1]]) eigenvals = M.eigenvals() # {3: 1, -1: 1}
pythonfrom sympy import symbols, lambdify import numpy as np x = symbols('x') expr = x**2 + 2*x + 1 f = lambdify(x, expr, 'numpy') f(np.array([1, 2, 3])) # array([ 4, 9, 16])
symbols() before use0.5 instead of Rational(1, 2)Rational() or S() for exact arithmeticsubs() and evalf() repeatedlylambdify() to create a fast numerical functionsolve, solveset, nsolve (numerical)simplify, factor, expand, trigsimppositive=True)simplify(expr, force=True) for aggressive simplificationOther measured skills in the registry, with their headline benchmark lift.