Python中的Sympy详细使用攻略
Sympy简介
Sympy是一个用于解数学问题的Python库,可以进行符号计算,可以实现多项式化简,微积分,解方程,线性代数,离散数学等等。
安装Sympy
使用pip安装Sympy库:
pip install sympy
符号定义
- 使用symbols函数定义符号
from sympy import symbols
x, y, z = symbols('x y z')
- symbols可以有三个参数,第一个是符号名字,第二个是整数,表示求导的次数,第三个是关键字“real”或“positive”,表示实数或正数。
from sympy import symbols
x, y, z, n = symbols('x y z n', integer=True)
f, g, h = symbols('f g h', cls=Function)
- 符号也可以直接定义在一个字符串之中
from sympy import sympify
expr = sympify('x**2 + 3*x - sin(2*pi*z)')
表达式化简
- 化简表达式
from sympy import simplify
from sympy import sin, cos, pi, exp
expr = (x**3 + x**2 - x - 1)/(x**2 + 2*x + 1)
simplify(expr)
- 因式分解
from sympy import factor
expr = x**2*z + 4*x*y*z + 4*y**2*z
factor(expr)
- 标准化简
from sympy import expand
expr = (x + 1)*(x + 2)*(x + 3)*(x + 4)
expand(expr)
- 对数展开
from sympy import log, ln
expr = log(x*y)
logcombine(expr)
方程求解
- 解方程组
from sympy import solve
solve([x + y - 3, x - y + 1], [x, y])
- 解一元方程
from sympy import Eq, solve
expr = Eq(x**2 + x - 6, 0)
solve(expr, x)
微积分
- 求导
from sympy import diff
expr = x**3 + x**2 - x - 1
diff(expr, x)
- 求多次导数
from sympy import Derivative
expr = x**3 + x**2 - x - 1
dg = Derivative(expr, x)
dg.doit().doit()
- 微积分积分
from sympy import integrate
expr = x
integrate(expr, x)
- 定积分计算
from sympy import integrate, oo
expr = exp(-x**2)
integrate(expr, (x, -oo, oo))
示例一
用Sympy库实现对函数f(x)=x^3+3x^2-4x+2在区间[-10, 10]的图像绘制
import matplotlib.pyplot as plt
import numpy as np
from sympy import symbols
from sympy.plotting import plot
# 定义符号x
x = symbols('x')
# 定义函数f
f = x**3 + 3*x**2 - 4*x + 2
# 对x在[-10, 10]内进行绘制
p = plot(f, xlim=[-10, 10], ylim=[-1000, 1000], show=False)
# 转换为numpy数组
x_vals = np.array(p[0].get_points()[0])
y_vals = np.array(p[0].get_points()[1])
# 绘制图像
plt.plot(x_vals, y_vals)
示例二
计算复合函数g(f(x))=2x^3-5x在f(x)=x^2-2x+3处的导数
from sympy import symbols, Function
# 定义符号
x = symbols('x')
# 定义函数
f = x**2 - 2*x + 3
g = 2*x**3 - 5*x
# 定义函数求导
df = Function('df')
df = f.diff(x)
# 计算结果
dg = g.diff(x)
dg.atoms()
dg = dg.subs(x, f)
dg = dg * df
dg