贡献者: addis
为了书写方便,本文使用 from sympy import *。所有的变量都假设用 sympy.symbols() 声明过。
import sympy as sm
x0, x1 = sm.symbols('x0, x1') 声明变量,类型为 sympy.core.symbol.Symbol
x, y, z = sm.symbols('x:z'),x4, x5, x6, x7 = symbols('x4:8')
pi, E, I, oo(无穷)
numer(n),类型为 sympy.core.numbers.Integer,也可能是 sympy.core.numbers.One
Rational(n,m)。如果 n, m 已经是 numbers.Integer 类型,也可以直接 n/m
I 的类型是 sympy.core.numbers.ImaginaryUnit,其他虚数和复数都没有专门的类型而是 I 和其他实数相乘相加。
sin(), asin(), sinh(), exp(), log(), sqrt()
latex(表达式) 可以把表达式转换为 latex 代码。
表达式.subs(符号, 表达式或值) 替换表达式中的符号
表达式.subs({符号1:表达式或值1, 符号2:表达式或值2}) 替换多个符号
args 参数。
expr = sin(x)**2 + cos(x)**2,那么 expr 的类型是 sympy.core.add.Add,expr.args 是 (cos(x)**2, sin(x)**2)。expr.args[0] 的类型是 sympy.core.power.Pow,expr.args[0].args 是 (cos(x), 2),以此类推。这样就可以生成一个树状结构。
summation(含i的表达式, (i, 第一个, 最后一个))(注意求和包含 最后一个 的项),例如 summation(1/2**n, (n, 1, 2))) 得 3/4,又例如 summation(1/2**n, (n, 1, oo)) 得 1。
product(含i的表达式, (i, 第一个, 最后一个)) 同理
mat = Matrix([[x**2, sin(x)], [1, 1/y]]),类型为 sympy.matrices.dense.MutableDenseMatrix
mat[i,j] 获取矩阵元。
mat[i] 返回单个矩阵元而不是像 numpy 一样返回一行。
mat[:,j] 获取一列,类型还是一样。
len(mat) 获取元素个数,shape(mat) 或者 mat.shape 获取形状。又如 Matrix([1,2]) 的形状是 (2,),而 Matrix([[1,2]]) 的形状是 (1,2)。
Matrix(Numpy矩阵) 也可以生成 sympy 矩阵。
mat.norm() 返回 2-norm,mat.norm(n) 返回 n-norm。
mat1 * mat2
dot(v1, v2)
mat.eigenvals() 求本征值,返回一个字典,表达式:简并重数。mat.eigenvals(multiple=true) 返回一个 list,可能包含重复的表达式。说明见 help(mat.eigenvals)
mat.eigenvects() 求本征值和本征矢,返回 tuple 的 list:[(本征值, 简并数, 本征空间), ...]
limit(sin(x)/x, x, 0)
diff(sin(x)**2, x)
integrate(exp(x)*(sin(x) + cos(x)), x)
integrate(表达式, (x, 下限, 上限))
dsolve(Eq(y(t).diff(t, t) - y(t), exp(t)), y(t))