贡献者: 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))