python 符号计算_Python 符号计算模块sympy 简介

众所周知,科学计算包括数值计算和符号计算两种计算。在数值计算中,计算机处理的对象和得到的结果都是数值,而在符号计算中,计算机处理的数据和得到的结果都是符号。这种符号可以是字母、公式,也可以是数值,但它与纯数值计算在处理方法、处理范围、处理特点等方面有较大的区别。可以说,数值计算是近似计算;而符号计算则是绝对精确的计算。它不容许有舍入误差,从算法上讲,它是数学,它比数值计算用到的数学知识更深更广。最流行的通用符号计算软件有:MAPLE,Mathematica,Matlab,Python sympy等等。

Python sympy的一大优点在于免费且开源,可以通过pip在线安装。它不依赖于外部库。SymPy支持符号计算、高精度计算、模式匹配、绘图、解方程、微积分、组合数学、离散 数学、几何学、概率与统计、物理学等方面的功能。什么是符号计算?

举一个简单的例子,计算开8开根号,使用math模块得到近似浮点数,使用sympy模块得到2倍的根号2,不使用近似计算。>>> import math

>>> import sympy

>>> math.sqrt(8)

2.8284271247461903

>>> sympy.sqrt(8)

2*sqrt(2)

我们看一下根号4的符号计算结果:>>> sympy.sqrt(4)

2

好像是python的整数2,其实不对。我们看一下结果的数据类型, 返回的是sympy特有的整数类。>>> type(sympy.sqrt(4))

我们再看分数怎么表示:>>> 1/3 #python3 中,分数会以近似的浮点数来表示

0.3333333333333333

>>> sympy.Rational(1,3)

1/3

>>> type(sympy.Rational(1,3))#sympy中会以特有的分数类来表示

如何创建符号变量?>>> from sympy import *

>>> x = symbols('x') #创建单个符号变量

>>> x

x>>> y, z , nu = symbols('y z nu') #同时创建多个符号变量

>>> y, z, nu

(y, z, nu)

注意,python变量的名字和符号变量的名字可以不一致:>>> a, b = symbols(’b a’)#最好不要这样交叉写,容易产生混淆

>>> a

b

>>> b

a

可以将已有的符号变量的表达式赋值给新的符号变量,此时新的符号变量不用额外声明。注意sympy仍然遵从python的惯例,乘法用'*‘表示,幂运算用”**“表示,”^"还是表示异或(XOR)。expr = z**2 + 2*y

注意,重新绑定符号表达式中的符号变量的值,不会影响到该符号表达式。要想更新,需重新绑定一遍。>>>expr = z**2 + 2*y

>>> expr

2*y + z**2

>>>y = z+3 #将python变量y绑定到 符号表达式’z'+3

>>>expr # 不影响

2*y + z**2

>>> expr = z**2 + 2*y # 重新绑定

>>> expr #有了改变

z**2 + 2*z + 6如果改变表达式中符号变量的值?

用subs函数。>>> (x+1).subs(x,100)

101

>>> expr = x+3*z

>>> expr.subs({x:1, z:2})

7相等的写法

用Eq函数。“=”依然表示赋值,“==”依然表示判断真假。>>> Eq(x+1, z)

Eq(x + 1, z)

>>> Eq(x+1, x) #明显不等的直接返回False

False

>>> Eq(x+1, x+1) # 结构一样且相等会直接返回True

True

>>> Eq(x+1, x+1) == True # 和python的True 相等

True

>>> type(Eq(x+1, x+1)) # 但类型不一样

>>> Eq((x+1)**2, x**2 + 2*x +1)#数学上相等,但结构不一样,sympy不会直接判定为True

Eq((x + 1)**2, x**2 + 2*x + 1)

#可以通过做差后化简看是否等于0来判定

>>> expr = (x+1)**2 - (x**2 + 2*x +1)

>>> Eq(simplify(expr),0) # 化简用simplify函数

True

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值