SymPy:1 分钟跑通 Python 符号计算,代数、微积分、解方程一个库搞定
【免费下载链接】sympyA computer algebra system written in pure Python项目地址: https://gitcode.com/GitHub_Trending/sy/sympy
SymPy 是纯 Python 编写的计算机代数系统,用符号计算代替浮点近似,直接给出精确的数学结果。它面向学生、开发者和科研人员,适合所有需要"算得准、看得懂"的数学场景,从化简一个表达式到解微分方程都能覆盖。
核心价值:精确符号计算,而非数值近似
SymPy 的定位很明确:用 Python 做数学,但结果不丢精度。sqrt(8)在 SymPy 里是2*sqrt(2),而不是 2.8284271247461903;方程解以根式形式给出,积分以解析式返回。它无需编译扩展,装完即用,这也是它和各类数值库最大的分工差异。
SymPy 在终端中的符号计算会话
30 秒上手:pip 一条命令,3 行代码见第一个结果
安装只需要一行,Python 3.9 及以上环境直接可用;需要最新开发版时,克隆仓库再装:
pip install sympy # 或者从源码安装最新开发版 git clone https://gitcode.com/GitHub_Trending/sy/sympy && cd sympy && python -m pip install .导入即用,下面的代码复制粘贴就能运行,最后一行就是 SymPy 给你的第一个精确答案:
from sympy import symbols, expand, simplify, sqrt x, y = symbols('x y') # 必须先声明符号,不能直接用变量名 expr = sqrt(8) # 精确值:2*sqrt(2) print(expand(x*(x + 2*y))) # -> x**2 + 2*x*y print(simplify(expr)) # -> 2*sqrt(2)Notebook 中的 SymPy 积分结果
核心能力速览:代数、微积分、矩阵、方程四类高频操作
SymPy 覆盖日常数学需求的四个高频场景,每个都只需一行调用。
代数操作:一行代码完成展开、因式分解与精确求根
expand展开、factor因式分解、solve解方程,输入输出全是精确符号形式,不经过浮点数。
from sympy import expand, factor, solve print(factor(x**2 + 2*x*y)) # -> x*(x + 2*y) print(solve(x**2 - 2, x)) # -> [-sqrt(2), sqrt(2)] print(solve(x**3 - 6*x + 1, x)) # 三次方程:返回三个精确的根式根三次方程的根以根式完整给出,这是符号计算区别于数值求根的地方:答案本身就是证明。
微积分三件套:求导、积分、极限都返回解析式
diff、integrate、limit三个函数覆盖微积分基础,结果均为闭合解析式。
from sympy import diff, integrate, limit, sin, exp, cos print(diff(sin(x)*exp(x), x)) # -> exp(x)*sin(x) + exp(x)*cos(x) print(integrate(exp(x)*sin(x) + exp(x)*cos(x), x)) # -> exp(x)*sin(x) print(limit(sin(x)/x, x, 0)) # -> 1极限直接返回闭式结果,不依赖数值逼近,0/0型未定式也能给出严格答案。
矩阵运算:零配置求特征值与线性方程组
Matrix创建后即可调用eigenvals求特征值,解线性方程组用LUsolve。
from sympy import Matrix M = Matrix([[1, 2], [2, 2]]) print(M.eigenvals()) # -> {3/2 - sqrt(17)/2: 1, 3/2 + sqrt(17)/2: 1} A, b = Matrix([[2, 1], [1, 3]]), Matrix([5, 10]) print(A.LUsolve(b)) # -> Matrix([[5/7], [65/7]])特征值以根式精确呈现并附带重数,矩阵运算全程不涉及任何近似。
可视化:plot 直接画出函数图像
SymPy 自带绑制接口,不需要额外的绘图库。
from sympy import plot, sin plot(sin(x), (x, -12, 12), show=False) # 有图形界面时自动弹出,无界面可保存配合图形后端,一行即可出图,下面这张区域填充效果就是绑制模块的测试输出:
plot 生成的区域填充图
完整场景:解微分方程并自动回代验证
工程中最典型的诉求是解微分方程并确认解正确,SymPy 可以把求解与验证串起来,整个过程不到 10 行代码。
from sympy import Function, symbols, dsolve, Eq, simplify t = symbols('t') f = Function('f') # 背景:二阶常系数齐次 ODE,初始条件 f(0)=1, f'(0)=0 ode = Eq(f(t).diff(t, 2) + 2*f(t).diff(t) + 5*f(t), 0) sol = dsolve(ode, f(t), ics={f(t).subs(t, 0): 1, f(t).diff(t).subs(t, 0): 0}) g = sol.rhs # 验证:把解代回原方程,残差应为 0 print(simplify(g.diff(t, 2) + 2*g.diff(t) + 5*g)) # -> 0 print(g.subs(t, 0)) # -> 1得到的解是(sin(2t)/2 + cos(2t))*exp(-t),残差化简为 0 且满足初始条件,说明结果严格成立,整个流程无需任何数值迭代。
进阶与避坑:几个新手最常踩的坑
- 符号必须用
symbols()声明:直接写x = 3之后再solve,SymPy 看到的就是普通 Python 变量,不会按符号处理。 - 精确结果是特性不是 bug:想拿小数时用
evalf()显式取近似值,例如sqrt(2).evalf(10)。 - 解复杂 ODE 前先化简:用
diff、simplify整理方程,dsolve的识别速度和成功率会明显提升。 - 漂亮的符号显示:在 Jupyter 或终端里先执行
init_printing(),sqrt、分数、矩阵才会展成排版好的数学式。
想继续深入,建议读官方入门教程 doc/src/tutorials/intro-tutorial/,微积分部分对应 calculus.rst,源码入口就在 sympy/core/。
符号计算的门槛比想象中低得多,装完试一把,去仓库里翻一翻你会得到更多 🚀
【免费下载链接】sympyA computer algebra system written in pure Python项目地址: https://gitcode.com/GitHub_Trending/sy/sympy
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考