python中的符号运算

Python中的sympy库

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

一、安装sympy

  1:在cmd中安装

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

文章转载自:https://www.cnblogs.com/wuwen19940508/p/6925191.html

  2:在pycharm中安装

    

    

      

     点击右面的 ‘+’号

    

     接下就等待安装就行

二、方法

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:解方程

     注意在python中=是赋值的意思,==虽然表示等于,但是会有很大的问题。在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)]

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

 

 

 

 

 

 

 

  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值