Python 第三方模块 科学计算 SymPy模块

官方文档:https://docs.sympy.org/latest/index.html
参见:https://geek-docs.com/python/python-tutorial/python-sympy.html

一.概述
1.简介:

SymPy是Python中专门用于进行符号计算的库,旨在成为功能齐全的计算机代数系统.其可以解决诸如多项式求值/求极限/解方程/积分/微分/级数展开/
矩阵运算在内的大量问题

2.安装:

pip install sympy

二.符号的表示与运算
1.已知量的表示与运算
(1)有理数的表示:

class sympy.Rational(<p>[,q=1,gcd=None])
  #参数说明:
	p,q:分别指定分子/分母;均为real num

#实例:
>>> r37=sympy.Rational(3,7)
>>> r14=sympy.Rational(1,4)

(2)内置的特殊值符号:

#虚数单位i:
>>> sympy.I
I
>>> sympy.I**2
-1
>>> sympy.sqrt(-1)
I
#自然常数e:
>>> sympy.E
E
>>> sympy.log(sympy.E)
1
#无穷大∞:
>>> sympy.oo
oo
>>> 1/sympy.oo
0
>>> 1+sympy.oo
oo
>>> 1*sympy.oo
oo
>>> 1-sympy.oo
-oo
#圆周率π:
>>> sympy.pi
pi
>>> sympy.sin(sympy.pi/2)
1

(3)已知量的运算:

#和内置的int/float相同:
>>> r37+r14
19/28
>>> r37-r14
5/28
>>> r37*r14
3/28
>>> r37/r14
12/7
>>> r37**r14
3**(1/4)*7**(3/4)/7

2.未知量的表示与运算
(1)直接实例化类:

class sympy.Symbol(<name>[,**assumptions])
  #参数说明:
	name:指定符号名;str(仅能创建1个符号)

#实例:
>>> x=sympy.Symbol("x")
>>> x
x

(2)通过函数创建:

sympy.symbols(<names>[,cls=Symbol,**args])
  #参数说明:
    name:指定符号名;str/str list
      #对str,有以下语法:
      #1.能创建多个符号,彼此使用"...,..."/"... ..."分隔
      #2.能创建1个符号序列,使用"...:..."(默认从a/0开始)
      #3.能为变量名附加前/后缀,使用"(...)..."/"...(...)"(字母加数字前/后缀时可省略)
      #4.支持正则表达式
    cls:指定创建的符号类型;class
    seq:是否在仅创建1个符号时也转换为tuple;bool
    integer,real:分别指定是否为int/real;均为bool

#实例:
>>> sympy.symbols("a,b,c d")
(a, b, c, d)
>>> a,b,c,d=sympy.symbols("a,b,c d")
>>> a
a
>>> b
b
>>> c
c
>>> d
d
>>> sympy.symbols(["a","b"])
[a, b]
>>> a,b=sympy.symbols(["a","b"])
>>> a
a
>>> b
b
>>> type(a)
<class 'sympy.core.symbol.Symbol'>
>>> sympy.symbols("a:3")
(a0, a1, a2)
>>> sympy.symbols("a3:6")
(a3, a4, a5)
>>> sympy.symbols("a:d")
(a, b, c, d)
>>> sympy.symbols("a(d:f)")
(ad, ae, af)
>>> sympy.symbols("a(:d)")
(aa, ab, ac, ad)
>>> sympy.symbols("a:c f:h")
(a, b, c, f, g, h)

(3)未知量的运算:

#和内置的int/float相同:
>>> a+1
a + 1
>>> a+b
a + b
>>> (a+b)/2*a
a*(a/2 + b/2)
>>> a/=3
>>> a
a/3
>>> a**2
a**2/9

(3)方法:

对符号进行替换并重新求值:<sym>.subs([*args,**kwargs])
  #参数说明:
  	args:指定符号替换规则;<old>,<new>/(<old>,<new>) list
  	kwargs:指定符号替换规则;{
    
    <old>:<new>...}

#实例:
>>> (a+3).subs(a,3)
6
>>> (a+3).subs([(a,3)])
6
>>> (a+3).subs({
    
    a:3})
6

三.基本操作
1.创建符号等式:

class sympy.Equality(<lhs>[,rhs=0,**options])
  #相当于class sympy.Eq();和Python内置的"=="有所不同
  #参数说明:
  	lhs,rhs:分别指定等式左/右侧的表达式;均为sympy.Symbol
  	evaluate:指定是否立即进行判断;bool

#实例:
>>> sympy.Eq(x)
C:\Users\Euler\AppData\Local\Programs\Python\Python38\lib\site-packages\sympy\core\relational.py:492: SymPyDeprecationWarning:

Eq(expr) with rhs default to 0 has been deprecated since SymPy 1.5.
Use Eq(expr, 0) instead. See
https://github.com/sympy/sympy/issues/16587 for more info.

  SymPyDeprecationWarning(
Eq(x, 0)
>>> sympy.Eq(x,0)
Eq(x, 0)
>>> sympy.Eq(2,0)
False
>>> sympy.Eq(2,0,evaluate=False)
Eq(2, 0)
>>> sympy.Eq(True,1),True==1
(False, True)
  • 关于 = = == ==:
在SymPy中,"=="用于检查其2侧的表达式的结构是否完全相同

#实例:
>>> x=sympy.Symbol("x")
>>> x+1==4
False
>>> x==x
True
>>> (x+1)**2==x**2+2*x+1
False
>>> x.subs(x,1)==1
True

2.化简表达式:

sympy.simplify(<expr>[,ratio=1.7,measure=count_ops,rational=False,inverse=False,doit=True,**kwargs])
  #参数说明:
	expr:指定原表达式;为sympy.Symbol
	ratio:
	measure:
	rational:
	inverse:
	doit:

#实例:
>>> sympy.simplify((x+1)**2-(x**2+2*x+1))
0

猜你喜欢

转载自blog.csdn.net/weixin_46131409/article/details/112145926