Sympy简介

符号语言
符号操作系统最有用的特征之一是对表达式的展开/化简等简化数学表达式的能力.Sympy有几十个功能来执行
对比

  1. import math
  2. import sympy
  3. math.sqrt(8)
  4. sympy.sqrt(8)
  5. 2.8284271247461903
  6. 2*sqrt(2)

Sympy库安装

下载地址:https://github.com/sympy/sympy/releases

问题

IDLE无法使用函数库解决方法

  • 更新库(库更新)

    1. python -m pip install -upgrade pip
  • 使用idle解析器注意与python安装版本的一致;

Win+r输入cmd;输入python查看版本号
image.png
IDLE版本号
image.png

Sympy使用方法

sympy基础要求

两种格式:使用from sympy import * 与 import sympy
sympy库所要求的格式与python无异,所以字符的使用需要赋值;sympy赋值需要使用symbols()函数引用;

  1. >>> x + 1
  2. Traceback (most recent call last):
  3. File "<pyshell#0>", line 1, in <module>
  4. x + 1
  5. NameError: name 'x' is not defined
  6. >>> from sympy import *
  7. >>> x = symbols('x')
  8. >>> x+1
  9. x + 1

sympy能够针对复杂的数进行简写

sympy能够针对字符进行简写,方便输入;

  1. >>> sqrt(8)
  2. 2*sqrt(2)

简写

  1. >>>x = symbols('x')
  2. >>>y = symbols('y')
  3. >>> eqr = x + 2*x*y
  4. >>> eqr - x
  5. 2*x*y

将输入的格式展开

  1. >>> expended_eqr = expand(x*eqr)
  2. >>> expended_eqr
  3. 2*x**2*y + x**2
  4. >>> factor_eqr = factor(expended_eqr)
  5. >>> factor_eqr
  6. x**2*(2*y + 1)

求极限(Limits)

求极限时,使用limit()公式,limit(公式,变量,趋近值)

  1. >>> from sympy import *
  2. >>> x = symbols('x')
  3. >>> limit(sin(x)/x, x, 0)
  4. 1

求导数(Diff)

sympy字符+sympy字符=sympy字符
sympy字符+python字符= sympy字符
python字符+python字符 = python字符

  1. >>> Integer(1)+Integer(2)
  2. 3
  3. >>> 1+2
  4. 3
  5. >>> type(Integer(1)+Integer(2))
  6. <class 'sympy.core.numbers.Integer'>
  7. >>> type(1+2)
  8. <class 'int'>
  9. >>> type(x+1)
  10. <class 'sympy.core.add.Add'>

基础操作

基础操作涉及几个方面的转换

  1. 符号化语言进行计算某一点的值,使用subs(),涉及简单操作,批量操作,条件替换
  2. 将python字符串转换成sympy符号函数,evalf()
  3. 将sympy模块转换成Numpy函数,lambdify()

    subs替换(substitute)

  • 替换基础操作

程序的替换主要运用的数学公式为subs

  1. >>> expr = x**2+x
  2. >>> expr.subs(x, y)
  3. 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
  • 条件替换

    python 字符串的转换(sympify)

    将python字符串转换成sympy函数模块需要使用sympify函数。
    注意是将原函数进行转换而不是转变原函数的性质
>>> 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

evalf函数使用

lambdify