Python中的sympy库

    前几天因为要实现数学公式的代码,里面含有字符运算,因为matlab不支持从零开始查找矩阵,所以用了python中的sympy库。

一、安装sympy

  1:在cmd中安装

因为大部分包的安装都差不多所以参考

  2:在pycharm中安装

    

python符号运算 = python中的符号运算_赋值

    

python符号运算 = python中的符号运算_python_02

      

python符号运算 = python中的符号运算_bc_03

     点击右面的 ‘+’号

    

     接下就等待安装就行

二、方法

1:定义数学符号

   让我们定义一个符号表达式代表数学表达式 。首先我们要注意到python中的变量必须赋值才能使用,所以无法表达该数学表达式。所以这里一定要引入特殊的符号,这里有两种方法

  

#_*_coding:utf-8_*_
 from sympy import *

 #第一种方法Symbol(赋值单个字符)
 x1 = Symbol('x1')
 y1 = Symbol('y1')
 sum1= x1+2*y1
 print(sum1)

 #第二种方法symbols(同时赋值多个字符)
 x2,y2 = symbols('x2 y2')
 sum2 = x2+2*y2
 print(sum2)

2: 展开与折叠

      展开:expand

例如:from sympy import *
             x,y = symbols('x y')
             d = 3*x*(5*x+4*y)**2
             expand(d)      合并:factor
             #_*_coding:utf-8_*_
from sympy import *
x,y = symbols('x y')
d = 6*x**3+3*x**3
factor(d)

3:简化表达式

普通的:
    from sympy import simplify
from sympy.abc import x
simplify((x**3 + x**2 - x - 1)/(x**2 + 2*x + 1))
x – 1
       三角化简
        from sympy import trigsimp,sin,cos
from sympy.abc import x,y
y = sin(x)/cos(x)
 
trigsimp(y)
tan(x)
指数化简
from sympy import *

 x,y,a,b = symbols('x y a b')
 sum = x**a*x**b
 powsimp(sum)x**(a+b)

4:解方程

==虽然表示等于,但是会有很大的问题。在sympy中,我们使用Eq(x,y)表示x=y
from sympy import *
 x,y,a,b = symbols('x y a b')
 solve(Eq(2*6*x+8,20))x=1
   使用linsolve([方程1,方程2,...],(变量1,变量2,...))
     #对多个方程求解,使用linsolve。方程的解为x=-1,y=3
linsolve([x+2*y-5,2*x+y-1], (x,y))

5:赋值运算

from sympy import *
     x,y,a,b = symbols('x y a b')
     sum = 5*x**5+2*3*y
     sum = sum.subs(x,1)

6:求导数

from sympy import *
 x,y,a,b = symbols('x y a b')
 sum = 5*x**5+2*3*y
 sum1 = diff(sum,x)

  7:积分

from sympy.abc import pi,x
from sympy import integrate,sin
 
integrate(sin(x), (x,0,pi))

答案:-cos(pi) + 1

  8:极限

  

from sympy.abc import x
from sympy import limit
limit(1/x, x, 0, '+')

答案:oo

  9:log运算

from sympy import log,expand_log
from sympy.abc import x,y,e
#expand_log为展开log,但需要将force=True,展开才能发生
expand_log(log(x**3), force=True)
3*log(x)
#expand_log为展开log,但需要将force=True,展开才能发生
expand_log(log(x**3))
log(x**3)
expand_log(log(e**x), force=True)
x*log(e)

三、创建字符矩阵

在我用代码实现数学公式后。发现了一个如果随机创建矩阵,是数字矩阵的话就没办法运行,后来想到了创建符号矩阵。

符号矩阵采用了list[]在套一个list[]让它生成类似于矩阵。

 [[Symbol('m') for w in range(5)] for w1 in range(5)]

通过这个办法就可以创建个符号矩阵。