用途
SymPy 是一个用于符号数学计算的 Python 库,支持使用数学符号进行精确计算,而非数值近似。本技能为使用 SymPy 进行符号代数、微积分、线性代数、方程求解、物理计算和代码生成提供全面指导。
主要能力
符号计算基础
创建符号和表达式,支持假设条件(如 real、positive、integer 等)。提供化简与操作函数:simplify、expand、factor、cancel 等。
微积分
- 导数:diff 支持单变量、高阶和偏导数
- 积分:integrate 支持不定积分、定积分和反常积分
- 极限与级数:limit、series
方程求解
- 代数方程:solveset、solve
- 方程组:linsolve(线性)、nonlinsolve(非线性)
- 微分方程:dsolve
矩阵与线性代数
矩阵创建与运算(逆、行列式、转置)、特征值与特征向量、对角化、线性系统求解。
物理与力学
经典力学(拉格朗日方法)、矢量分析、量子力学。
高级数学
几何、数论、组合数学、逻辑与集合、统计学、特殊函数、多项式。
代码生成与输出
- lambdify:转换为可执行函数(支持 NumPy)
- codegen:生成 C/Fortran 代码
- latex:生成 LaTeX 输出
使用方式
最佳实践
- 始终先定义符号:
x, y, z = symbols('x y z') - 使用假设条件改善化简:
x = symbols('x', positive=True, real=True) - 使用精确算术:
Rational(1, 2)或S(1)/2,而非0.5 - 需要时进行数值求值:
result.evalf()或result.evalf(50) - 转换为 NumPy 函数以提升性能:
f = lambdify(x, expr, 'numpy') - 选择合适的求解器: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 输出、打印
常见使用模式
- 求解并验证
- 符号到数值的流水线
- 文档化数学结果
与科学工作流集成
- 与 NumPy 集成
- 与 Matplotlib 集成
- 与 SciPy 集成
适用场景
- 符号求解方程(代数、微分、方程组)
- 执行微积分运算(导数、积分、极限、级数)
- 操作和化简代数表达式
- 符号化处理矩阵和线性代数
- 物理计算(力学、量子力学、矢量分析)
- 数论计算(素数、因式分解、模运算)
- 几何计算(2D/3D 几何、解析几何)
- 将数学表达式转换为可执行代码(Python、C、Fortran)
- 生成 LaTeX 或其他格式化数学输出
- 需要精确数学结果
限制
- 部分方程可能无法代数求解,需使用数值方法(如 nsolve)
- 循环中反复使用 subs() 和 evalf() 性能较慢,建议使用 lambdify()
- 化简可能不如预期,可尝试不同化简函数或添加假设条件
- 使用浮点数(如 0.5)而非精确有理数可能导致意外数值结果
附加资源
- 官方文档:https://docs.sympy.org/
- 教程:https://docs.sympy.org/latest/tutorials/intro-tutorial/index.html
- API 参考:https://docs.sympy.org/latest/reference/index.html
- 示例:https://github.com/sympy/sympy/tree/master/examples