SymPy 是一个由 Python 语言编写的符号计算库。我将在本文中简要地介绍如何利用 SymPy 进行符号计算。在介绍 SymPy 之前,我们首先要明确何谓符号计算?计算机代数系统又是什么?
什么是符号计算 ?
处理数学对象的计算称为符号计算。在符号计算中,数学对象是精确表示的,而不是近似的,未计算的数学表达式会以符号形式保留。与符号计算相对应的是数值计算,下面将以两个例子来展示二者之间的区别。
数值计算示例
下面是一个计算
数值解的例子:
import math
math.pi
print(math.sin(math.pi))
符号计算示例
下面是一个计算
解析解的例子:
from sympy import *
sin(pi)
对比
的数值和符号计算结果可以发现,数值计算结果无法精确地表示出
,只能用一个很小的浮点数
表示,而符号计算结果则得出
。
明确了数值计算和符号计算之间的区别后,让我们再来认识什么是计算机代数系统。
什么是计算机代数系统 ?
计算机代数系统(Computer Algebra System,缩写作:CAS)是进行符号运算的软件。在计算机代数系统中运算的对象是数学表达式,通常表达式有如下几类:多元多项式
标准函数(三角函数、指数函数等)
特殊函数(
函数、Bessel 函数等)
多种函数组成的复合函数
表达式的导数、积分、和与积等
级数
矩阵
以下列出了几种典型的符号计算:表达式化简
表达式求值
表达式的变形:展开、积、幂、部分分式表示、将三角函数转换为指数函数等
一元或多元微分
带条件的化简
部分或完整的因式分解
求解线性或非线性方程
求解微分方程或差分方程
求极限
求函数的定积分、不定积分
泰勒展开、洛朗展开等
无穷级数展开
级数求和
矩阵运算
数学公式的
或
显示
通常符号计算软件也具备一定的数值运算能力,例如可以进行如下运算:求函数确切值
求高精度值,如
线性代数的数值运算
此外符号计算软件也具有描绘二维、三维函数图像的功能。
实际上,目前存在众多的计算机代数系统,下面列出了几种:Maple
MuPAD
Maxima
Mathcad
Mathematica
MATLAB Symbolic Math Toolbox
SageMath
为什么选择 SymPy ?
那么,是什么让 SymPy 从这众多软件中脱颖而出,让我们选择它呢?我觉得有如下 4 个原因:SymPy 是自由软件,免费开源,在遵守许可证条款的前提下,用户可以自由地根据自己的需求修改其源代码。与之形成对比的是,Maple、MuPad、Mathcad、MATLAB、Mathematica 等都是商业软件,价格昂贵;
SymPy 使用 Python 编写而成,与使用自己发明的语言的计算机代数系统相比(如 Maxima 由 LISP 编写),SymPy 具有很强的通用性。SymPy 完全用 Python 编写,完全在 Python 中执行。这样,只要您熟悉 Python,那么 SymPy 将会很容易入门;
与另一个使用 Python 的符号计算软件——SageMath 相比,SymPy 的优点是安装包体积小;
SymPy 的一个重要特性是,它可以作为库集成到其他软件中,为别的软件所用。SageMath 便是将 SymPy 作为其子模块,然后再加入其他模块,构建出一个功能齐全的数学软件。
准备知识
在学习如何使用 SymPy 进行符号计算之前,请确保您满足如下几个条件:学习过微积分
学习过线性代数
熟悉 Python 基本语法
了解 Python 面向对象编程方法</