一文带您了解SymPy:使用Python进行符号数学运算

人工智能
SymPy 非常适合需要代数运算的问题。它可以用于求解复杂的方程和进行微积分运算。这里提供了一个快速入门的概述,并展示了一些使用 SymPy 的简单例子。​

SymPy 是一个 Python 库,专注于符号计算,提供了处理数学表达式、方程和公式的工具。与数值计算库不同,SymPy 能够进行符号微分、积分、极限等运算,适用于代数运算、微积分和方程求解等。与传统的数值计算库(如 NumPy)不同,SymPy 主要用于处理数学表达式、方程和公式的符号计算,而不是进行数值计算。

它支持多项式运算、矩阵操作、特征值计算等线性代数功能,并能处理数论和组合数学中的问题。SymPy 还具备简化数学表达式的功能,并能绘制数学函数和图形。作为一个完全用 Python 实现的开源库,SymPy 易于集成到 Python 环境中,广泛应用于学术研究、教育以及需要符号计算的领域。

什么是 SymPy?

它是计算机代数系统(computer alegebra systems,CAS)的一部分:一个允许我们进行代数和数学计算的库。

主要功能:

  • 简化、重排、因式分解和展开代数表达式和方程。
  • 求解各种类型的方程,包括线性方程、多项式方程和微分方程。
  • 执行微积分运算,包括微分和积分。
  • 绘制图形。
  • 生成原始 LaTeX 输出。
  • 生成渲染的 LaTeX 输出。

安装SymPy

pip install sympy

图片图片

简化和展开

首先,导入 SymPy。然后定义 SymPy 变量,才能使用它们。通过创建 SymPy 的 symbols 来实现这一点。这些符号代表了数学变量:

import sympy
from sympy import latex


a, b, x, y = sympy.symbols("a b x y")


display(a,b,x,y)

图片图片

然后,我们可以构建表达式和方程:

from IPython.display import Markdown, display


a = (x + 1)**2
b = x**2 + 2*x + 1 
display(a)
print(latex(a)) 
display(b) 


# Expand a...
expanded = sympy.expand(a)
display(Markdown(f"$a = {latex(expanded)}$"))


# Show a-b without simplifying...
a_minus_b = a-b
display(Markdown(f"$a-b = {latex(a_minus_b)}$"))


# Simplify...
display(Markdown(f"$a-b$ $= {latex(sympy.simplify(a_minus_b))}$"))

图片图片

等式判断

我们可以测试两个表达式是否相同,方法如下:

图片图片

变量赋值和评估

在定义了一个 SymPy 符号并将其分配给 Python 变量后,不能简单地给 Python 变量赋值。如果这样做,变量将不再是一个符号。相反,你需要使用 subs() 方法将值与 SymPy 符号关联起来:

x, y = sympy.symbols("x y")
expr = x+y
result = expr.subs({x: 2, y: 5})
print(f"{expr=}, {result=}")

图片图片

微分和积分

在 SymPy 中,积分和微分非常简单:

x = sympy.symbols("x")
expr = x**2
display(expr)


deriv = sympy.diff(expr)
display(deriv)


integral = sympy.integrate(deriv)
display(integral)

图片图片

求解二次方程

求解二次方程很简单,只需提供二次方程的系数,然后运行 SymPy 的 solve() 函数即可:

expr = x**2 + 3*x - 10
solutions = sympy.solve(expr, x, dict=True)


for solution in solutions:
    print(f"x={solution[x]}")

图片图片

有时,我们只希望看到实数解,而不是复数解。(复数解是包含虚数部分的解,即以负数平方根表示的解。)在这种情况下,我们可以使用 solveset() 并指定仅允许实数的域。例如:

expressions = []
expressions.append(x**2 - 9) 
expressions.append(x**2 + 9) 


for expr in expressions:
    display(expr)
    solutions = sympy.solveset(expr, x)
    display(solutions)


display(expressions[-1])
solutions = sympy.solveset(expressions[-1], x, domain=sympy.S.Reals)
print(f"There are {len(solutions)} real solutions for x.")

图片图片

转换为数值

SymPy 返回的结果是精确的数学符号。但有时我们希望将这些结果转换为数值表示,可以使用evalf 函数。示例如下:

expr=sympy.sqrt(8)
display(expr)
display(expr.evalf(4))

图片图片

绘制图形

使用 SymPy 绘制图形使用 SymPy 的 plot 函数,支持函数、隐函数和参数方程,下面是小几个例子。

  • 绘制简单的函数图形:
from sympy import symbols
from sympy.plotting import plot


x = symbols('x')
f = x**2 + 2*x + 1
plot(f, (x, -10, 10), title="Plot of f(x) = x^2 + 2x + 1")

图片图片

  • 绘制多个函数在同一图形上
from sympy import symbols
from sympy.plotting import plot


x = symbols('x')
f = x**2
g = x**3
plot(f, g, (x, -10, 10), title="Plot of f(x) = x^2 and g(x) = x^3",legend=True)

图片图片

  • 绘制隐函数图形
from sympy import symbols, Eq
from sympy.plotting import plot_implicit


x, y = symbols('x y')
eq = Eq(x**2 + y**2, 9)
plot_implicit(eq, (x, -5, 5), (y, -5, 5), title="Plot of Circle x^2 + y^2 = 9")

图片图片

  • 绘制参数方程图形
from sympy import symbols, cos, sin, pi
from sympy.plotting import plot_parametric


t = symbols('t')
x = cos(t)
y = sin(t)
plot_parametric(x, y, (t, 0, 2*pi), title="Plot of a Circle")

图片图片

SymPy 非常适合需要代数运算的问题。它可以用于求解复杂的方程和进行微积分运算。这里提供了一个快速入门的概述,并展示了一些使用 SymPy 的简单例子。

责任编辑:武晓燕 来源: 新语数据故事汇
相关推荐

2024-05-21 09:45:40

机器学习人工智能XAI

2024-10-06 14:01:47

Python装饰器对象编程

2024-07-11 12:14:20

Pythonmapfilter

2020-08-11 13:00:34

GNU bcLinuxShell

2024-08-19 00:01:00

2015-09-18 16:26:54

NaSC运算Ubuntu

2022-08-18 15:52:13

开发者阿里云

2024-03-12 17:54:55

容器类型Init

2023-07-31 07:25:27

2024-10-17 16:45:46

Python内置函数

2020-08-27 07:34:50

Zookeeper数据结构

2024-05-13 11:25:08

概念模型逻辑模型物理模型

2024-08-08 11:31:41

2024-11-18 17:16:18

Python性能优化编程

2023-11-20 08:18:49

Netty服务器

2023-04-26 15:43:24

容器编排容器编排工具

2022-02-25 07:34:36

MQTT协议RabbitMQ

2023-11-06 08:16:19

APM系统运维

2022-06-08 08:11:56

威胁建模网络安全网络攻击

2022-11-11 19:09:13

架构
点赞
收藏

51CTO技术栈公众号