今天已经发过两遍这篇文章了。但是代码块和超链接都被B站的审核莫名其妙地吞掉了。所以为了内容完整性我还是发源码版吧。还是那句话,想获得好的阅读体验,上Github吧。https://github.com/TaiXuan91/TXToolLibrary
## 简述
SymPy也是SciPy.org的Python套件之一。SymPy是一个主要为Python提供符号运算功能的模块。
目前的数学运算主要可以分为符号运算和数值运算两部分。
符号运算更贴近于理想的数学理论。它将一些抽象符号按照约定的规则进行运算,而不一定纠结于用十进制小数表示一个数的具体值。多项式的展开和因式分解,方程的解析解,微积分运算的解析解等都属于典型的用符号运算工具库求解的问题。
而数值运算更偏向于工程和实用。它的关键词是近似与精确度。求解一个问题的解析解并不是数值运算所关心的。只要近似解能和解析解差不多就行了。如果不够近似,数值解法也不会试图去寻找解析解,而是通过更大的运算量来获取更高的精度。数值解其实用得比解析解更普遍。比如我们求圆的面积的时候一般是给出一个具体的近似解,而不是告诉别人这个圆的面积是$\pi$的多少倍。之前所介绍的NumPy,SciPy就是比较偏向于数值运算的工具包。
## 获取
使用pip安装SymPy(需要管理员权限)。
```bash
pip install sympy
```
## 基本使用
这里介绍两个我认为可能很有用的功能——化简多项式和求微积分。其实SymPy能做的比这多得多。具体请看官方的文档。
注意,为了方便查看每一步的结果,我推荐在ipython中运行这些实验代码。
首先我们导入SymPy:
```python
from sympy import *
```
`symbols`的作用是声明一个符号变量。就相当于我们在数学题中写的“设有变量x”。而从Python语法的角度来说,`symbols('x')`会返回一个“符号变量”类的对象。它的加减乘除等运算都已经被重载。我们直接把符号变量加键乘除就能得到对应的多项式。
```python
x,y=symbols('x y')
```
接下来我们尝试写两个多项式:
```python
f1=sin(x)**2 + cos(x)**2
print(f1)
f2=(x**3 + x**2 - x - 1)/(x**2 + 2*x + 1)
print(f2)
```
使用`simplify`函数可以对多项式进行化简。
```python
r1=simplify(f1)
print(r1)
r2=simplify(f2)
print(r2)
```
`limit`函数可以进行取极限运算。这个例子中,是令$sim(x)/x$中的$x$趋于$0$。
```python
limit(sin(x)/x, x, 0)
```
`diff`函数用于求微分(求导数)。
```python
diff(sin(x))
```
`integrate`函数用于求积分。像例子中的用法实际给出的答案是不带后边常数项的不定积分。
```python
integrate(x**2)
```
## 资料
[SymPy官网](http://www.sympy.org/en/index.html)