Python 中的Sympy详细使用

  • Post category:Python

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