Scmpy符号运算学习笔记

导入

from __future__ import division
from sympy import *
x,y,z=symbols('x,y,z')
k,m,n=symbols('k,m,n',integer=Ture)
f,g,h=map(Function,'fgh')

数字表达式

符号

symbols(),var()函数用于赋值,可通过关键词指定假设条件。

var("x0,y0,x1,y1")
x=symbols("x",positive=True)

数值,运算符与函数

符号运算

表达式变换和化简

simplify()用于对数学表达式进行化简;
radsimp()对表达式的分母进行有理化;
expand()根据用户设置的标志参数对表达式进行展开;
factor()对多项式进行因式分解;

simplify((x+2)**2-(x+1)**2)
radsimp(1/(sqrt(5)+2*sqrt(2)))
expand(sin(x+y),trig=True)
factor(15*x**2+2*y-3*x-10*x*y)

方程

在Sympy中,表达式可以直接表示为值为0的方程。也可以使用Eq()创建方程。solve()可以对方程进行符号求解,其第一个参数为方程的表达式,其后的参数为未知变量。

a,b,c = symbols("a,b,c")
solve(a*x**2+b*x+c,x)

微分

Derivative是表示导函数的类,它的第一个参数是需要进行求导的数学函数,第二个参数是求导的自变量。但并不会进行求导运算。

t = Derivative(sin(x),x)
t
>>>	D(sin(x),x)

如果希望进行实际的运算,可调用其doit()方法:

t.doit()
>>>	cos(x)

也可以直接使用diff()函数或表达式的diff()方法来计算:

diff(sin(2*x),x)
>>>	2*cos(2*x)
sin(2*x).diff(x)
>>>	2*cos(2*x)

添加更多的符号参数表示高阶导数:

diff(sin(2*x),x,x)
>>>	-4*sin(2*x)

多个变量表示n阶偏导

diff(sin(x*y),x,2,y,3)
>>>	x*(x**2*y**2*cos(x*y)+6*x*y*sin(x*y)-6*cos(x*y))

微分方程

dsolve()可以对微分方程进行符号求解。第一个参数是带未知函数的表达式,第二个参数是需要进行求解的未知函数。

f=Function("f")
dsolve(Derivation(f(x),x)-f(x),f(x))
>>>	f(x) == C1*exp(x)

积分

integrate()可以计算定积分和不定积分

计算定积分时,可以用oo表示正无穷

integrate(sin(x),x)
>>>	-cos(x)

Derivative对象表示微分表达式类似,Integral对象表示积分表达式:

e=Integral(x*sin(x),x)
>>>	e

as_sum()方法可以将定积分转换为近似求和公式,将积分区域分割成N个小矩形的面积之和:

Integral(sin(x),(x,0,1)).as_sum(5)
>>>	sin(1/10)/5+sin(3/10)/5+sin(1/2)/5+sin(7/10)/5+sin(9/10)/5