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)]
通过这个办法就可以创建个符号矩阵。