sympy解二维微分方程_SymPy 符号计算基本教程

570f0780bec26768e3903c8bcb81899e.png

SymPy 是一个由 Python 语言编写的符号计算库。我将在本文中简要地介绍如何利用 SymPy 进行符号计算。在介绍 SymPy 之前,我们首先要明确何谓符号计算?计算机代数系统又是什么?

什么是符号计算 ?

处理数学对象的计算称为符号计算。在符号计算中,数学对象是精确表示的,而不是近似的,未计算的数学表达式会以符号形式保留。与符号计算相对应的是数值计算,下面将以两个例子来展示二者之间的区别。

数值计算示例

下面是一个计算

equation?tex=%5Csin%5Cpi 数值解的例子:
import math
math.pi
print(math.sin(math.pi))

equation?tex=%5Cdisplaystyle%7B1.2246467991473532e-16%7D

符号计算示例

下面是一个计算

equation?tex=%5Csin%5Cpi 解析解的例子:
from sympy import *
sin(pi)

equation?tex=%5Cdisplaystyle+0

对比

equation?tex=%5Csin%5Cpi 的数值和符号计算结果可以发现,数值计算结果无法精确地表示出
equation?tex=%5Csin%5Cpi+%3D+0 ,只能用一个很小的浮点数
equation?tex=%281.22%5Ctimes+10%5E%7B-16%7D%29 表示,而符号计算结果则得出
equation?tex=%5Csin%5Cpi+%3D+0

明确了数值计算和符号计算之间的区别后,让我们再来认识什么是计算机代数系统。

什么是计算机代数系统 ?

计算机代数系统(Computer Algebra System,缩写作:CAS)是进行符号运算的软件。在计算机代数系统中运算的对象是数学表达式,通常表达式有如下几类:

  • 多元多项式
  • 标准函数(三角函数、指数函数等)
  • 特殊函数(
    equation?tex=%5CGamma 函数、Bessel 函数等)
  • 多种函数组成的复合函数
  • 表达式的导数、积分、和与积等
  • 级数
  • 矩阵

以下列出了几种典型的符号计算:

  • 表达式化简
  • 表达式求值
  • 表达式的变形:展开、积、幂、部分分式表示、将三角函数转换为指数函数等
  • 一元或多元微分
  • 带条件的化简
  • 部分或完整的因式分解
  • 求解线性或非线性方程
  • 求解微分方程或差分方程
  • 求极限
  • 求函数的定积分、不定积分
  • 泰勒展开、洛朗展开等
  • 无穷级数展开
  • 级数求和
  • 矩阵运算
  • 数学公式的
    equation?tex=%5CTeX
    equation?tex=%5CLaTeX 显示

通常符号计算软件也具备一定的数值运算能力,例如可以进行如下运算:

  • 求函数确切值
  • 求高精度值,如
    equation?tex=%5Cpi
  • 线性代数的数值运算

此外符号计算软件也具有描绘二维、三维函数图像的功能。

实际上,目前存在众多的计算机代数系统,下面列出了几种:

  • Maple
  • MuPAD
  • Maxima
  • Mathcad
  • Mathematica
  • MATLAB Symbolic Math Toolbox
  • SageMath

为什么选择 SymPy ?

那么,是什么让 SymPy 从这众多软件中脱颖而出,让我们选择它呢?我觉得有如下 4 个原因:

  1. SymPy 是自由软件,免费开源,在遵守许可证条款的前提下,用户可以自由地根据自己的需求修改其源代码。与之形成对比的是,Maple、MuPad、Mathcad、MATLAB、Mathematica 等都是商业软件,价格昂贵;
  2. SymPy 使用 Python 编写而成,与使用自己发明的语言的计算机代数系统相比(如 Maxima 由 LISP 编写),SymPy 具有很强的通用性。SymPy 完全用 Python 编写,完全在 Python 中执行。这样,只要您熟悉 Python,那么 SymPy 将会很容易入门;
  3. 与另一个使用 Python 的符号计算软件——SageMath 相比,SymPy 的优点是安装包体积小;
  4. SymPy 的一个重要特性是,它可以作为库集成到其他软件中,为别的软件所用。SageMath 便是将 SymPy 作为其子模块,然后再加入其他模块,构建出一个功能齐全的数学软件。

准备知识

在学习如何使用 SymPy 进行符号计算之前,请确保您满足如下几个条件:

  • 学习过微积分
  • 学习过线性代数
  • 熟悉 Python 基本语法
  • 了解 Python 面向对象编程方法
  • 会使用 JupyterLab Notebook 交互式开发环境
  • 了解
    equation?tex=%5CLaTeX 是什么东西

如何使用 SymPy ?

前面的第 1 个符号计算示例展示了如何利用 SymPy 精确地计算三角函数,实际上,它的功能远不仅于此。作为一个强大的符号计算库,它几乎能够计算所有带符号变量的表达式。下面从本节开始将介绍如何使用 SymPy。

导入 SymPy 库

在使用 SymPy 之前需要先将其导入,有两种方式:

  1. 直接导入:
import sympy

2. 利用 from 语句导入:

from sympy import *

两种方式都导入了 SymPy 库中的所有函数、对象、变量等。区别是调用方式不同。比如在调用 sqrt(

equation?tex=%5Csqrt%7B%5C%3B%5C%3B%7D )函数时,前者应写成
sympy.sqrt(2),后者则直接写成 sqrt(2)。为了力求简洁,我们使用第 2 种方式导入 SymPy 。
注意:为了防止命名空间冲突,PEP 标准推荐使用第一种方式导入库。但是,通常一个符号运算 Python 源文件是单独使用的,稍加注意就可以避免命名空间冲突的问题。

新建符号

在使用符号之前,先要利用 symbols 函数定义符号,语句是:

# 新建符号 x, y
x, y = symbols('x y')

还有一个更简洁的方法是,利用 SymPy 的 abc 子模块导入所有拉丁、希腊字母:

# 利用 SymPy 的 abc 子模块新建符号 x, y
from sympy.abc import x, y
注意:希腊字母
equation?tex=%5Clambda (lambda) 是 Python 保留关键字,当用户需要使用这个字母时,请写成
lamda(不写中间的 'b')。

新建符号变量时可以指定其定义域,比如指定

equation?tex=x%5Cin+%5Cmathbf%7BR%7D%2C+x+%3E+0+ :
x = symbols('x', positive = True)

这样在求解过程中

equation?tex=x 必须满足这个前提条件。

可以利用 symbols 函数依次新建类似

equation?tex=x_%7B1%7D%2C%5C%2Cx_%7B2%7D%2C%5C%2Cx_%7B3%7D%2C%5C%2Cx_%7B4%7D 的多个变量:
vars = symbols('x_1:5')
vars
(x_1, x_2, x_3, x_4)
vars[0]

equation?tex=%5Cdisplaystyle+x_%7B1%7D

下面是一个符号计算的完整例子:

from sympy import *
x, y, z = symbols('x y z')
y = expand((x + 1)**2) # expand
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值