常用函数总结
函数 | 作用 |
---|---|
.subs(符号, 替换量) |
用来计算函数值 |
sympify(字符串) |
将字符串转变为一个 SymPy 表达式 |
.evalf(精度) |
转换为指定精度数值解的函数 |
lambdify(符号-自变量, SymPy表达式-函数, 'numpy') |
将 SymPy 表达式转换为 NumPy 可使用的函数 |
simplify(SymPy表达式-函数) |
将函数化为最简形式 |
expand(SymPy表达式-函数) |
将多项式函数展开 |
factor(SymPy表达式-函数) |
将多项式函数因式分解 |
collect(SymPy表达式-函数, 符号-自变量) |
多项式合并同类项函数 |
cancel(SymPy表达式-函数) |
有理分式化简函数 |
apart(SymPy表达式-函数) |
有理分式展开函数 |
diff(SymPy表达式-函数, 符号-自变量, 阶数 = 1) |
对自变量求导 |
integrate(SymPy表达式-函数, 符号-自变量) |
对自变量求不定积分 |
integrate(SymPy表达式-函数, (符号-自变量, 积分下限, 积分上限)) |
对自变量求不定积分 |
integrate(SymPy表达式-函数, (符号-自变量, 积分下限, 积分上限), (符号-自变量, 积分下限, 积分上限), ...) |
对自变量求重积分 |
limit(SymPy表达式-函数, 符号-自变量, 数值, 符号) |
对函数求数值处的极限, 符号表示左右极限 |
.series(符号-自变量, 展开点, 阶数) |
将函数在指定站开点展开为指定阶数的泰勒级数, 余项是皮亚诺余项 |
Eq(方程左端表达式, 方程右端的表达式) |
构造方程 |
solveset(方程, 符号-未知数, domain = 范围) |
在指定数域内解方程, 默认为复数域 |
dsolve(方程, 方程中的函数 |
解微分方程 |
Matrix(列表) |
构造矩阵 |
.T |
矩阵转置 |
eye(阶数) |
构造指定阶数的单位阵 |
zeros(阶数) |
构造指定阶数的零矩阵 |
ones(阶数) |
构造指定阶数的一矩阵 |
diag(a, b, c, ...) |
构造对角阵, a, b, c, …为对角线元素 |
A**幂 |
矩阵的幂 |
A**-1 |
逆矩阵 |
.det() |
计算方针行列式 |
.eigenvals() |
计算特征值 |
plot(SymPy表达式-函数, (符号-自变量, 区间左端, 区间右端)) |
画显式函数图像 |
plot_implicit(方程) |
画隐函数图像 |
plotting.plot3d(SymPy表达式-函数, (符号-自变量, 区间左端, 区间右端), (符号-自变量, 区间左端, 区间右端), ...) |
画3维图像 |
sympy是一个Python的科学计算库,用一套强大的符号计算体系完成多项式求值、求极限、解方程、求积分、微分方程、级数展开、矩阵运算等计算问题。
SymPy 是自由软件, 免费开源, 而且使用 Python 编写而成, SymPy 具有很强的通用性, 而且上手简单
首先导入库
import sympy
import sympy
x, y = sympy.symbols('x y')
from sympy.abc import alpha, x, y
实际上, 该模块下面已经为我们定义好了, 下面是模块中已经定义好的符号
from sympy import symbols
a, b, c, d, e, f, g, h, i, j = symbols('a, b, c, d, e, f, g, h, i, j')
k, l, m, n, o, p, q, r, s, t = symbols('k, l, m, n, o, p, q, r, s, t')
u, v, w, x, y, z = symbols('u, v, w, x, y, z')
A, B, C, D, E, F, G, H, I, J = symbols('A, B, C, D, E, F, G, H, I, J')
K, L, M, N, O, P, Q, R, S, T = symbols('K, L, M, N, O, P, Q, R, S, T')
U, V, W, X, Y, Z = symbols('U, V, W, X, Y, Z')
alpha, beta, gamma, delta = symbols('alpha, beta, gamma, delta')
epsilon, zeta, eta, theta = symbols('epsilon, zeta, eta, theta')
iota, kappa, lamda, mu = symbols('iota, kappa, lamda, mu')
nu, xi, omicron, pi = symbols('nu, xi, omicron, pi')
rho, sigma, tau, upsilon = symbols('rho, sigma, tau, upsilon')
phi, chi, psi, omega = symbols('phi, chi, psi, omega')
需要注意, lambda是保留关键字, 定义符号时要使用lamda
, 没有’b’
参数 | 作用 |
---|---|
positive |
指定定义域, 默认是False, 即定义域是 x ∈ R |
import sympy
x, y = sympy.symbols('x y', positive = True)
这样在求解过程中x
必须满足这个前提条件
import sympy
variables = sympy.symbols('x1:10')
print(variables)
结果
(x1, x2, x3, x4, x5, x6, x7, x8, x9)
函数 | 作用 |
---|---|
.subs(符号, 替换量) |
用来计算函数值 |
sympify(字符串) |
将字符串转变为一个 SymPy 表达式 |
.evalf(精度) |
转换为指定精度数值解的函数 |
lambdify(符号-自变量, SymPy表达式-函数, 'numpy') |
将 SymPy 表达式转换为 NumPy 可使用的函数 |
simplify(SymPy表达式-函数) |
将函数化为最简形式 |
expand(SymPy表达式-函数) |
将多项式函数展开 |
factor(SymPy表达式-函数) |
将多项式函数因式分解 |
collect(SymPy表达式-函数, 符号-自变量) |
多项式合并同类项函数 |
cancel(SymPy表达式-函数) |
有理分式化简函数 |
apart(SymPy表达式-函数) |
有理分式展开函数 |
作用: 计算函数值
import sympy
x = sympy.symbols('x')
y = 5 * x ** 2 + sympy.cos(x)
print(y.subs(x, 0))
结果:
1
作用: 将字符串转变为一个 SymPy 表达式
import sympy
string = 'cos(x) * (x + 3)'
y = sympy.sympify(string)
print('y = ', y)
结果:
y = (x + 3)*cos(x)
将圆周率 PI 保留三位有效数字
import sympy
print(sympy.pi.evalf(3))
计算函数值, 并保留3位有效数字
结果:
3.14
作用: 可以获得高精度, 如保留小数点后 1000 位
import sympy
import numpy
a = numpy.pi / 6
x = sympy.symbols('x')
y = sympy.sin(x)
f = sympy.lambdify(x, y, 'numpy')
print(f(a))
print(y.subs(x, sympy.pi / 3))
结果:
0.49999999999999994
sqrt(3)/2
作用: 化简函数表达式
import sympy
x = sympy.symbols('x')
y = sympy.sin(x)**2 + sympy.cos(x)**2
print('化简前\ny =', y)
print('化简后\ny =', sympy.simplify(y))
结果:
化简前
y = sin(x)**2 + cos(x)**2
化简后
y = 1
作用: 有理函数展开为多项式
import sympy
x = sympy.symbols('x')
y = (x + 1) ** 2
print('展开前\ny =', y)
print('展开后\ny =', sympy.expand(y))
结果:
展开前
y = (x + 1)**2
展开后
y = x**2 + 2*x + 1
作用: 有理函数因式分解
import sympy
x = sympy.symbols('x')
y = (x + 1) ** 2
print('展开前\ny =', y)
print('展开后\ny =', sympy.expand(y))
print('因式分解\ny =', sympy.factor(y))
结果:
展开前
y = (x + 1)**2
展开后
y = x**2 + 2*x + 1
因式分解
y = (x + 1)**2
作用: 有理函数合并同类项
作用: 消去分子分母的公因式使用
作用: 将有理分式展开
函数 | 作用 |
---|---|
diff(SymPy表达式-函数, 符号-自变量, 阶数 = 1) |
对自变量求导 |
import sympy
x = sympy.symbols('x')
y = 5 * x ** 2 + sympy.cos(x)
print('y =', y)
print("y' =", sympy.diff(y, x))
结果:
y = 5*x**2 + cos(x)
y' = 10*x - sin(x)
函数 | 作用 |
---|---|
integrate(SymPy表达式-函数, 符号-自变量) |
对自变量求不定积分 |
integrate(SymPy表达式-函数, (符号-自变量, 积分下限, 积分上限)) |
对自变量求不定积分 |
integrate(SymPy表达式-函数, (符号-自变量, 积分下限, 积分上限), (符号-自变量, 积分下限, 积分上限), ...) |
对自变量求重积分 |
import sympy
x = sympy.symbols('x')
y = 5 * x ** 2 + sympy.cos(x)
print('y =', y)
print("y的一个原函数 =", sympy.integrate(y, x))
结果:
y = 5*x**2 + cos(x)
y的一个原函数 = 5*x**3/3 + sin(x)
import sympy
x = sympy.symbols('x')
y = sympy.exp(-x)
print("e的-x方从0到无穷大的定积分为", sympy.integrate(y, (x, 0, 'oo')))
结果:
e的-x方从0到无穷大的定积分为 1
二重积分
import sympy
x, y = sympy.symbols('x y')
z = sympy.exp(-x**2 - y**2)
print(sympy.integrate(z, (x, '-oo', 'oo'), (y, '-oo', 'oo')))
结果:
pi
函数 | 作用 |
---|---|
limit(SymPy表达式-函数, 符号-自变量, 数值, 符号) |
对函数求数值处的极限, 符号表示左右极限 |
符号取值: '+'
(右极限) 或 '-'
(左极限)
import sympy
x = sympy.symbols('x')
y = sympy.sin(x) / x
print(sympy.limit(y, x, 0, '-'))
结果:
1
函数 | 作用 |
---|---|
.series(符号-自变量, 展开点, 阶数) |
将函数在指定站开点展开为指定阶数的泰勒级数, 余项是皮亚诺余项 |
import sympy
x = sympy.symbols('x')
y = sympy.sin(x)
print(y.series(x, 0, 4))
结果:
x - x**3/6 + O(x**4)
函数 | 作用 |
---|---|
Eq(方程左端表达式, 方程右端的表达式) |
构造方程 |
solveset(方程, 符号-未知数, domain = 范围) |
在指定数域内解方程, 默认为复数域 |
dsolve(方程, 方程中的函数 |
解微分方程 |
import sympy
x = sympy.symbols('x')
e = sympy.Eq(x**2 - x, 0)
print(e)
结果:
Eq(x**2 - x, 0)
import sympy
x = sympy.symbols('x')
e = sympy.Eq(x**2 - x, 0)
print('解:', sympy.solveset(e, x))
结果:
解: {0, 1}
import sympy
x = sympy.symbols('x')
# 建立函数
f = sympy.symbols('f', cls = sympy.Function)
e = sympy.Eq(f(x).diff(x, 2) - 2*f(x).diff(x) + f(x), sympy.sin(x))
print('解:', sympy.dsolve(e, f(x)))
结果:
解: Eq(f(x), (C1 + C2*x)*exp(x) + cos(x)/2)
函数 | 作用 |
---|---|
Matrix(列表) |
构造矩阵 |
.T |
矩阵转置 |
eye(阶数) |
构造指定阶数的单位阵 |
zeros(阶数) |
构造指定阶数的零矩阵 |
ones(阶数) |
构造指定阶数的一矩阵 |
diag(a, b, c, ...) |
构造对角阵, a, b, c, …为对角线元素 |
A**幂 |
矩阵的幂 |
A**-1 |
逆矩阵 |
.det() |
计算方针行列式 |
.eigenvals() |
计算特征值 |
import sympy
A = sympy.Matrix([[3, -2, 4, -2], [5, 3, -3, -2], [5, -2, 2, -2], [5, -2, -3, 3]])
print(A.eigenvals())
结果:
{3: 1, -2: 1, 5: 2}
字典的键表示特征值, 值表示特征值的重数
函数 | 作用 |
---|---|
plot(SymPy表达式-函数, (符号-自变量, 区间左端, 区间右端)) |
画显式函数图像 |
plot_implicit(方程) |
画隐函数图像 |
plotting.plot3d(SymPy表达式-函数, (符号-自变量, 区间左端, 区间右端), (符号-自变量, 区间左端, 区间右端), ...) |
画3维图像 |
import sympy
x = sympy.symbols('x')
y = x ** 2
sympy.plot(y, (x, -2, 2))
import sympy
x, y = sympy.symbols('x, y')
e = sympy.Eq(x**2 + y**2, 1)
sympy.plot_implicit(e)
import sympy
x, y = sympy.symbols('x, y')
z = x * sympy.exp(-x ** 2 - y ** 2)
sympy.plotting.plot3d(z, (x, -3, 3), (y, -2, 2))
使用Rational()
函数构造分数
import sympy
a = sympy.Rational(2, 2)
print(a)
print(type(a))
结果:
1/2
由于构造出来的a是对象, 所有打印出来以分数的形式, 而不是小数