SymPy 符号计算笔记
Published:
模块导入和基础设置
# 导入 Sympy
from sympy import *
# 启用终端美观打印
init_printing(use_unicode=True)
# 设置递归深度限制
sympy.core.evaluate(False)
符号与结构定义
符号定义
# 定义单个符号
x = symbols('x')
# 定义多个符号
y, z = symbols('y z')
# 定义带属性的符号(实数)
a = symbols('a', real=True)
# 定义希腊字母符号
theta = symbols('theta', cls=Symbol)
函数定义
# 定义单元函数
f = Function('f')(x)
# 定义多元函数
u = Function('u')(x, y)
# 定义 Lambda 函数
g = Lambda(x, x**2 + sin(x))
矩阵与张量
# 定义矩阵
M = Matrix([[1, x], [y, 2]])
# 定义张量(需要索引系统)
from sympy.tensor import IndexedBase, Idx
T = IndexedBase('T')
i, j = symbols('i j', cls=Idx)
tensor_expr = T[i, j]
特殊符号与运算符
特殊函数
# 伽马函数
gamma(x)
# 贝塞尔函数
besselj(0, x)
# 误差函数
erf(x)
特殊运算符
# 微分算子
Dx = Differential(x)
# 拉普拉斯算子
from sympy.vector import Laplacian
微积分运算
微分计算
# 一阶导数
diff(cos(x**2), x) # -2*x*sin(x**2)
# 偏导数
diff(x**2 * y**3, x, y) # 6*x*y**2
# 高阶导数
diff(exp(x), x, 3) # exp(x)
积分计算
# 不定积分
integrate(x*sin(x), x) # -x*cos(x) + sin(x)
# 定积分
integrate(x**2, (x, 0, 1)) # 1/3
# 多重积分
integrate(exp(-x**2 - y**2), (x, -oo, oo), (y, -oo, oo)) # π
极限与级数
# 极限计算
limit(sin(x)/x, x, 0) # 1
# Taylor展开
series(exp(x), x, 0, 4) # 1 + x + x**2/2 + x**3/6 + O(x**4)
方程求解
代数方程
# 单变量方程
solve(x**2 - 3*x + 2, x) # [1, 2]
# 多变量方程组
solve([x + y - 3, x - y - 1], [x, y]) # {x: 2, y: 1}
微分方程
# 常微分方程
eq = Eq(f.diff(x, x) + f, 0)
dsolve(eq) # f(x) = C1*sin(x) + C2*cos(x)
矩阵与张量运算
矩阵操作
A = Matrix([[1, 2], [3, 4]])
B = Matrix([[x, 1], [y, 2]])
# 基本运算
A + B # 矩阵加法
A * B # 矩阵乘法
A.T # 转置矩阵
A.det() # 行列式计算
A.rank()# 矩阵秩
A.trace() # 迹
A.inv() # 逆矩阵
张量运算
# 张量缩并
from sympy.tensor import tensorcontraction
expr = T[i, j]*T[j, k]
contracted = tensorcontraction(expr, (1, 2))
表达式操作
化简与替换
# 三角函数化简
trigsimp(sin(x)**2 + cos(x)**2) # 1
# 代数化简
simplify((x**2 - 1)/(x + 1)) # x - 1
# 带值计算
expr = x**2 + 2*x + 1
expr.subs(x, 2) # 9
# 部分替换
expr.subs(x, y) # y**2 + 2*y + 1
可视化与输出
函数绘图
from sympy.plotting import plot
# 2D绘图
p = plot(sin(x), cos(x), (x, -pi, pi), show=False)
p[0].line_color = 'r'
p.show()
# 3D绘图
from sympy.plotting import plot3d
plot3d(sin(x)*cos(y), (x, -5, 5), (y, -5, 5))
LaTeX 输出
print(latex(Integral(sqrt(x), x))) # \int \sqrt{x}\, dx
杂项
# 禁用自动简化
with evaluate(False):
expr = x + x + 1 # 保持为 Add(x, x, 1)