遇到复杂计算找python绝对不让你失望,sympy是一个python的科学计算库,用一套强大的符号计算体系完成诸如多项式求值、求极限、解方程、求积分、微分方程、级数展开、矩阵运算等等计算问题。虽然matlab的类似科学计算能力也很强大,但是python以其语法简单、易上手、异常丰富的三方库生态,个人认为可以更优雅地解决日常遇到的各种计算问题。安装在本博客就不细讲了!
1、表达式与表达式求值:
1
2
3
4
5
6
7
|
#--------多项式求解--------
#定义变量
x = sympy.symbol( 'x' )
fx = 5 * x + 4
#使用evalf函数传值
y1 = fx.evalf(subs = {x: 6 })
print (y1)
|
1
2
3
4
5
6
|
#多元表达式
x = sympy.symbol( 'x' )
y = sympy.symbol( 'y' )
fx = x * x + y * y
result = fx.evalf(subs = {x: 3 ,y: 4 })
print (result)
|
2、函数方程求解:
1
2
3
4
5
6
7
|
#解方程 有限解
#定义变量
x = sympy.symbol( 'x' )
y = sympy.symbol( 'y' )
fx = x * 3 + 9
#可求解直接给出解向量
print (sympy.solve(fx,x))
|
1
2
3
4
5
6
7
|
#解方程无穷多解
#定义变量
x = sympy.symbol( 'x' )
y = sympy.symbol( 'y' )
fx = x * 3 + y * * 2
#得到是x与y的关系式,
print (sympy.solve(fx,x,y))
|
1
2
3
4
5
6
7
|
#解方程组
#定义变量
x = sympy.symbol( 'x' )
y = sympy.symbol( 'y' )
f1 = x + y - 3
f2 = x - y + 5
sympy.solve([f1,f2],[x,y])
|
3、求和
1
2
3
4
5
6
7
|
import sympy
#定义变量
n = sympy.symbol( 'n' )
f = 2 * n
#前面参数放函数,后面放变量的变化范围
s = sympy.summation(f,(n, 1 , 100 ))
print (s)
|
解带有求和式的方程 :
1
2
3
4
5
6
7
|
#解释一下,i可以看做是循环变量,就是x自己加五次
#先定义变量,再写出方程
x = sympy.symbol( 'x' )
i = sympy.symbol( 'i' )
f = sympy.summation(x,(i, 1 , 5 )) + 10 * x - 15
result = sympy.solve(f,x)
print (result)
|
4、求极限(注意,math包中sin和很多数学函数会报错,要用sympy中的,无穷大用 sympy.oo 表示)
1
2
3
4
5
6
7
8
9
10
11
|
#求极限使用limit方法
#定义变量与函数
x = sympy.symbol( 'x' )
f1 = sympy.sin(x) / x
f2 = ( 1 + x) * * ( 1 / x)
f3 = ( 1 + 1 / x) * * x
#三个参数是 函数,变量,趋向值
lim1 = sympy.limit(f1,x, 0 )
lim2 = sympy.limit(f2,x, 0 )
lim3 = sympy.limit(f3,x,sympy.oo)
print (lim1,lim2,lim3)
|
5、求导
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#求导使用diff方法
x = sympy.symbol( 'x' )
f1 = 2 * x * * 4 + 3 * x + 6
#参数是函数与变量
f1_ = sympy.diff(f,x)
print (f1_)
f2 = sympy.sin(x)
f2_ = sympy.diff(f2,x)
print (f2_)
#求偏导
y = sympy.symbol( 'y' )
f3 = 2 * x * * 2 + 3 * y * * 4 + 2 * y
#对x,y分别求导,即偏导
f3_x = sympy.diff(f3,x)
f3_y = sympy.diff(f3,y)
print (f3_x)
print (f3_y)
|
6、求定积分
1
2
3
4
5
6
|
#求定积分用 integrate方法
x = sympy.symbol( 'x' )
f = 2 * x
#参数传入 函数,积分变量和范围
result = sympy.integrate(f,(x, 0 , 1 ))
print (result)
|
上面的求法有点烂,难的就罢工不干了,我丢,还是喜欢scipy,如下: http://liao.cpython.org/scipy18/ scipy 还能解决很多数值计算,包括多重积分。
1
2
3
4
5
|
from scipy import integrate
def f(x):
return x + 1
v, err = integrate.quad(f, 1 , 2 ) # err为误差
print (v)
|
以下计算多重积分:
1
2
3
4
5
6
|
#求多重积分,先求里面的积分,再求外面的
x,t = sympy.symbols( 'x t' )
f1 = 2 * t
f2 = sympy.integrate(f1,(t, 0 ,x))
result = sympy.integrate(f2,(x, 0 , 3 ))
print (result)
|
7、求不定积分
1
2
3
4
5
|
#求不定积分其实和定积分区别不大
x = sympy.symbol( 'x' )
f = (sympy.e * * x + 2 * x)
f_ = sympy.integrate(f,x)
print (f_)
|
8、数学符合补充:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#数学符合
#虚数单位i
sympy.i
#自然对数低e
sympy.e
#无穷大
sympy.oo
#圆周率
sympy.pi
#求n次方根
sympy.root( 8 , 3 )
#求对数
sympy.log( 1024 , 2 )
#求阶乘
sympy.factorial( 4 )
#三角函数
sympy.sin(sympy.pi)
sympy.tan(sympy.pi / 4 )
sympy.cos(sympy.pi / 2 )
|
9、公式展开与折叠
1
2
3
4
5
6
7
8
9
|
x = sympy.symbol( 'x' )
#公式展开用expand方法
f = ( 1 + 2 * x) * x * * 2
ff = sympy.expand(f)
print (ff)
#公式折叠用factor方法
f = x * * 2 + 1 + 2 * x
ff = sympy.factor(f)
print (ff)
|
10、公式分离与合并(分数的分离与合并)
1
2
3
4
5
6
7
8
9
10
|
x = sympy.symbol( 'x' )
y = sympy.symbol( 'y' )
#公式展开用apart方法,和expand区别不是很大,常用于分数进行分离
f = (x + 2 ) / (x + 1 )
ff = sympy.apart(f)
print (ff)
#公式折叠用tegother方法
f = ( 1 / x + 1 / y)
ff = sympy.together(f)
print (ff)
|
11、表达式简化
1
2
3
4
5
6
|
#simplify( )普通的化简
simplify((x * * 3 + x * * 2 - x - 1 ) / (x * * 2 + 2 * x + 1 ))
#trigsimp( )三角化简
trigsimp(sin(x) / cos(x))
#powsimp( )指数化简
powsimp(x * * a * x * * b)
|
到此这篇关于python 中的sympy详细使用的文章就介绍到这了,更多相关python sympy使用内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/cj151525/article/details/95756847