Sympy简介
符号语言
符号操作系统最有用的特征之一是对表达式的展开/化简等简化数学表达式的能力.Sympy有几十个功能来执行
对比
import math
import sympy
math.sqrt(8)
sympy.sqrt(8)
2.8284271247461903
2*sqrt(2)
Sympy库安装
下载地址:https://github.com/sympy/sympy/releases
问题
IDLE无法使用函数库解决方法
更新库(库更新)
python -m pip install -upgrade pip
使用idle解析器注意与python安装版本的一致;
Win+r输入cmd;输入python查看版本号
IDLE版本号
Sympy使用方法
sympy基础要求
两种格式:使用from sympy import * 与 import sympy
sympy库所要求的格式与python无异,所以字符的使用需要赋值;sympy赋值需要使用symbols()函数引用;
>>> x + 1
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
x + 1
NameError: name 'x' is not defined
>>> from sympy import *
>>> x = symbols('x')
>>> x+1
x + 1
sympy能够针对复杂的数进行简写
sympy能够针对字符进行简写,方便输入;
>>> sqrt(8)
2*sqrt(2)
简写
>>>x = symbols('x')
>>>y = symbols('y')
>>> eqr = x + 2*x*y
>>> eqr - x
2*x*y
将输入的格式展开
>>> expended_eqr = expand(x*eqr)
>>> expended_eqr
2*x**2*y + x**2
>>> factor_eqr = factor(expended_eqr)
>>> factor_eqr
x**2*(2*y + 1)
求极限(Limits)
求极限时,使用limit()公式,limit(公式,变量,趋近值)
>>> from sympy import *
>>> x = symbols('x')
>>> limit(sin(x)/x, x, 0)
1
求导数(Diff)
sympy字符+sympy字符=sympy字符
sympy字符+python字符= sympy字符
python字符+python字符 = python字符
>>> Integer(1)+Integer(2)
3
>>> 1+2
3
>>> type(Integer(1)+Integer(2))
<class 'sympy.core.numbers.Integer'>
>>> type(1+2)
<class 'int'>
>>> type(x+1)
<class 'sympy.core.add.Add'>
基础操作
基础操作涉及几个方面的转换
- 符号化语言进行计算某一点的值,使用subs(),涉及简单操作,批量操作,条件替换
- 将python字符串转换成sympy符号函数,evalf()
- 将sympy模块转换成Numpy函数,lambdify()
subs替换(substitute)
- 替换基础操作
程序的替换主要运用的数学公式为subs
>>> expr = x**2+x
>>> expr.subs(x, y)
y**2 + y
并且在替换过程中,subs可以实现计算操作
>>> expr.subs(x, 3)
12
- 替换过程中变量的变化
在替换过程中,变量并没有发生改变,只是重新建了一个sympy 字符
>>> type(expr)
<class 'sympy.core.add.Add'>
>>> type(expr.subs(x, y))
<class 'sympy.core.add.Add'>
>>> id(type)
140735591897504
>>> id(expr.subs(x, y))
1656217824696
- 批量操作方法
>>> y = symbols('y')
>>> z = symbols('z')
>>> b = 2*x +3*y +4*z
>>> b.subs([(x,1),(y,3),(z,7)])
39
>>> h = 'x**3 + y**3 + z**3'
>>> h
'x**3 + y**3 + z**3'
>>> type(h)
<class 'str'>
>>> sympify(h)
x**3 + y**3 + z**3
>>> type(h)
<class 'str'>
>>> type(sympify(h))
<class 'sympy.core.add.Add'>
>>> h.subs([(x,3),(y,4), (z,3)])
Traceback (most recent call last):
File "<pyshell#15>", line 1, in <module>
h.subs([(x,3),(y,4), (z,3)])
AttributeError: 'str' object has no attribute 'subs'
>>> sympify(h).subs([(x,3),(y,4), (z,3)])
118