sympy by davila7/claude-code-templates
npx skills add https://github.com/davila7/claude-code-templates --skill sympySymPy 是一个用于符号数学的 Python 库,它支持使用数学符号进行精确计算,而非数值近似。本技能提供了使用 SymPy 进行符号代数、微积分、线性代数、方程求解、物理计算和代码生成的全面指导。
在以下情况下使用此技能:
sqrt(2) 而非 1.414...)创建符号和表达式:
from sympy import symbols, Symbol
x, y, z = symbols('x y z')
expr = x**2 + 2*x + 1
# 带假设
x = symbols('x', real=True, positive=True)
n = symbols('n', integer=True)
简化和操作:
from sympy import simplify, expand, factor, cancel
simplify(sin(x)**2 + cos(x)**2) # 返回 1
expand((x + 1)**3) # x**3 + 3*x**2 + 3*x + 1
factor(x**2 - 1) # (x - 1)*(x + 1)
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
详细基础知识: 参见 references/core-capabilities.md
导数:
from sympy import diff
diff(x**2, x) # 2*x
diff(x**4, x, 3) # 24*x (三阶导数)
diff(x**2*y**3, x, y) # 6*x*y**2 (偏导数)
积分:
from sympy import integrate, oo
integrate(x**2, x) # x**3/3 (不定积分)
integrate(x**2, (x, 0, 1)) # 1/3 (定积分)
integrate(exp(-x), (x, 0, oo)) # 1 (反常积分)
极限和级数:
from 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)
详细微积分运算: 参见 references/core-capabilities.md
代数方程:
from sympy import solveset, solve, Eq
solveset(x**2 - 4, x) # {-2, 2}
solve(Eq(x**2, 4), x) # [-2, 2]
方程组:
from sympy import linsolve, nonlinsolve
linsolve([x + y - 2, x - y], x, y) # {(1, 1)} (线性)
nonlinsolve([x**2 + y - 2, x + y**2 - 3], x, y) # (非线性)
微分方程:
from 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))
详细求解方法: 参见 references/core-capabilities.md
矩阵创建和运算:
from sympy import Matrix, eye, zeros
M = Matrix([[1, 2], [3, 4]])
M_inv = M**-1 # 逆矩阵
M.det() # 行列式
M.T # 转置
特征值和特征向量:
eigenvals = M.eigenvals() # {特征值: 重数}
eigenvects = M.eigenvects() # [(特征值, 重数, [特征向量])]
P, D = M.diagonalize() # M = P*D*P^-1
求解线性系统:
A = Matrix([[1, 2], [3, 4]])
b = Matrix([5, 6])
x = A.solve(b) # 求解 Ax = b
全面的线性代数: 参见 references/matrices-linear-algebra.md
经典力学:
from sympy.physics.mechanics import dynamicsymbols, LagrangesMethod
from sympy import symbols
# 定义系统
q = dynamicsymbols('q')
m, g, l = symbols('m g l')
# 拉格朗日量 (T - V)
L = m*(l*q.diff())**2/2 - m*g*l*(1 - cos(q))
# 应用拉格朗日方法
LM = LagrangesMethod(L, [q])
向量分析:
from 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) # 点积
cross(v1, v2) # 叉积
量子力学:
from sympy.physics.quantum import Ket, Bra, Commutator
psi = Ket('psi')
A = Operator('A')
comm = Commutator(A, B).doit()
详细的物理能力: 参见 references/physics-mechanics.md
本技能全面支持:
详细的高等主题: 参见 references/advanced-topics.md
转换为可执行函数:
from sympy import lambdify
import numpy as np
expr = x**2 + 2*x + 1
f = lambdify(x, expr, 'numpy') # 创建 NumPy 函数
x_vals = np.linspace(0, 10, 100)
y_vals = f(x_vals) # 快速数值求值
生成 C/Fortran 代码:
from sympy.utilities.codegen import codegen
[(c_name, c_code), (h_name, h_header)] = codegen(
('my_func', expr), 'C'
)
LaTeX 输出:
from sympy import latex
latex_str = latex(expr) # 转换为 LaTeX 用于文档
全面的代码生成: 参见 references/code-generation-printing.md
from sympy import symbols
x, y, z = symbols('x y z')
# 现在 x, y, z 可以用于表达式
x = symbols('x', positive=True, real=True)
sqrt(x**2) # 由于正数假设,返回 x(而非 Abs(x))
常用假设:real, positive, negative, integer, rational, complex, even, odd
from sympy import Rational, S
# 正确(精确):
expr = Rational(1, 2) * x
expr = S(1)/2 * x
# 错误(浮点数):
expr = 0.5 * x # 创建近似值
from sympy import pi, sqrt
result = sqrt(8) + pi
result.evalf() # 5.96371554103586
result.evalf(50) # 50 位精度
# 多次求值时较慢:
for x_val in range(1000):
result = expr.subs(x, x_val).evalf()
# 快速:
f = lambdify(x, expr, 'numpy')
results = f(np.arange(1000))
solveset: 代数方程(主要)linsolve: 线性系统nonlinsolve: 非线性系统dsolve: 微分方程solve: 通用目的(遗留,但灵活)本技能使用模块化的参考文件来涵盖不同能力:
core-capabilities.md : 符号、代数、微积分、简化、方程求解
matrices-linear-algebra.md : 矩阵运算、特征值、线性系统
physics-mechanics.md : 经典力学、量子力学、向量、单位
advanced-topics.md : 几何、数论、组合数学、逻辑、统计学
code-generation-printing.md : Lambdify、codegen、LaTeX 输出、打印
from sympy import symbols, solve, simplify
x = symbols('x')
# 求解方程
equation = x**2 - 5*x + 6
solutions = solve(equation, x) # [2, 3]
# 验证解
for sol in solutions:
result = simplify(equation.subs(x, sol))
assert result == 0
# 1. 定义符号问题
x, y = symbols('x y')
expr = sin(x) + cos(y)
# 2. 符号化操作
simplified = simplify(expr)
derivative = diff(simplified, x)
# 3. 转换为数值函数
f = lambdify((x, y), derivative, 'numpy')
# 4. 数值求值
results = f(x_data, y_data)
# 符号化计算结果
integral_expr = Integral(x**2, (x, 0, 1))
result = integral_expr.doit()
# 生成文档
print(f"LaTeX: {latex(integral_expr)} = {latex(result)}")
print(f"Pretty: {pretty(integral_expr)} = {pretty(result)}")
print(f"Numerical: {result.evalf()}")
import 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)
import 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()
from scipy.optimize import fsolve
from sympy import symbols, lambdify
# 符号化定义方程
x = symbols('x')
equation = x**3 - 2*x - 5
# 转换为数值函数
f = lambdify(x, equation, 'numpy')
# 使用初始猜测进行数值求解
solution = fsolve(f, 2)
# 符号
from sympy import symbols, Symbol
x, y = symbols('x y')
# 基本运算
from sympy import simplify, expand, factor, collect, cancel
from sympy import sqrt, exp, log, sin, cos, tan, pi, E, I, oo
# 微积分
from sympy import diff, integrate, limit, series, Derivative, Integral
# 求解
from sympy import solve, solveset, linsolve, nonlinsolve, dsolve
# 矩阵
from sympy import Matrix, eye, zeros, ones, diag
# 逻辑和集合
from sympy import And, Or, Not, Implies, FiniteSet, Interval, Union
# 输出
from sympy import latex, pprint, lambdify, init_printing
# 实用工具
from sympy import evalf, N, nsimplify
from sympy import symbols, solve, sqrt
x = symbols('x')
solution = solve(x**2 - 5*x + 6, x)
# [2, 3]
from sympy import symbols, diff, sin
x = symbols('x')
f = sin(x**2)
df_dx = diff(f, x)
# 2*x*cos(x**2)
from sympy import symbols, integrate, exp
x = symbols('x')
integral = integrate(x * exp(-x**2), (x, 0, oo))
# 1/2
from sympy import Matrix
M = Matrix([[1, 2], [2, 1]])
eigenvals = M.eigenvals()
# {3: 1, -1: 1}
from 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])
"NameError: name 'x' is not defined"
symbols() 定义符号意外的数值结果
0.5 这样的浮点数,而不是 Rational(1, 2)Rational() 或 S() 进行精确算术循环中性能缓慢
subs() 和 evalf()lambdify() 创建快速的数值函数"无法求解此方程"
solve, solveset, nsolve(数值)简化未按预期工作
simplify, factor, expand, trigsimppositive=True)simplify(expr, force=True) 进行强力简化每周安装数
192
仓库
GitHub 星标数
23.4K
首次出现
2026年1月21日
安全审计
安装于
opencode161
gemini-cli151
claude-code149
cursor146
codex141
github-copilot133
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:
from 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:
from 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:
from 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:
from 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:
from 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:
from sympy import solveset, solve, Eq
solveset(x**2 - 4, x) # {-2, 2}
solve(Eq(x**2, 4), x) # [-2, 2]
Systems of equations:
from 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:
from 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:
from 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:
eigenvals = M.eigenvals() # {eigenvalue: multiplicity}
eigenvects = M.eigenvects() # [(eigenval, mult, [eigenvectors])]
P, D = M.diagonalize() # M = P*D*P^-1
Solving linear systems:
A = 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:
from 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:
from 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:
from 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:
from 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:
from sympy.utilities.codegen import codegen
[(c_name, c_code), (h_name, h_header)] = codegen(
('my_func', expr), 'C'
)
LaTeX output:
from sympy import latex
latex_str = latex(expr) # Convert to LaTeX for documents
For comprehensive code generation: See references/code-generation-printing.md
from sympy import symbols
x, y, z = symbols('x y z')
# Now x, y, z can be used in expressions
x = 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
from 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
from sympy import pi, sqrt
result = sqrt(8) + pi
result.evalf() # 5.96371554103586
result.evalf(50) # 50 digits of precision
# 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 solving
matrices-linear-algebra.md : Matrix operations, eigenvalues, linear systems
physics-mechanics.md : Classical mechanics, quantum mechanics, vectors, units
advanced-topics.md : Geometry, number theory, combinatorics, logic, statistics
code-generation-printing.md : Lambdify, codegen, LaTeX output, printing
from 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
# 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)
# 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()}")
import 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)
import 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()
from 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)
# 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
from sympy import symbols, solve, sqrt
x = symbols('x')
solution = solve(x**2 - 5*x + 6, x)
# [2, 3]
from sympy import symbols, diff, sin
x = symbols('x')
f = sin(x**2)
df_dx = diff(f, x)
# 2*x*cos(x**2)
from sympy import symbols, integrate, exp
x = symbols('x')
integral = integrate(x * exp(-x**2), (x, 0, oo))
# 1/2
from sympy import Matrix
M = Matrix([[1, 2], [2, 1]])
eigenvals = M.eigenvals()
# {3: 1, -1: 1}
from 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])
"NameError: name 'x' is not defined"
symbols() before useUnexpected numerical results
0.5 instead of Rational(1, 2)Rational() or S() for exact arithmeticSlow performance in loops
subs() and evalf() repeatedlylambdify() to create a fast numerical functionWeekly Installs
192
Repository
GitHub Stars
23.4K
First Seen
Jan 21, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
opencode161
gemini-cli151
claude-code149
cursor146
codex141
github-copilot133
Apify Actor 输出模式生成工具 - 自动化创建 dataset_schema.json 与 output_schema.json
1,300 周安装
"Can't solve this equation"
solve, solveset, nsolve (numerical)Simplification not working as expected
simplify, factor, expand, trigsimppositive=True)simplify(expr, force=True) for aggressive simplification