python(7):sympy模块
sympy主要用于符号计算
1,基本操作
from sympy import* #from sympy import pprint #x=Symbol('x')#也可以这么单个定义 #y=Symbol('y') x,y,i,n,t,k=symbols('x y i n t k')#注意空格,不是逗号! z=Symbol('z') print x+y+x-y print ((x+y)**2).expand()#展开 print ((x+y)**2).subs(x,1)#subs(old,new) print ((x+y)**2).subs(x,y) print apart(1/((x+2)*(x+1)),x)#分离整式 print apart((x+1)/(x-1),x) print together(1/x+1/y+1/z)#合并 print together(apart((x+1)/(x-1),x),x)
ans:
2*x
x**2 + 2*x*y + y**2
(y + 1)**2
4*y**2
-1/(x + 2) + 1/(x + 1)
1 + 2/(x - 1)
(x*y + x*z + y*z)/(x*y*z)
(x + 1)/(x - 1)
2.极限求解
#求极限limit(func,variable,point)
print limit(sin(x)/x,x,0) print limit(x,x,oo)#oo表示无穷 print limit(1/x,x,oo) print limit(x**x,x,0)
remark:oo表示无穷, 这里sin,cos,tan 可以直接这么用
ans:1 ,oo, 0, 1
3.微分
diff(func,variable)
高阶微分:diff(sin(2*x),x,2),2表示阶数
print diff(sin(x),x) #print y print diff(sin(2*x),x) print diff(tan(x),x) print limit((tan(x+y)-tan(x))/y,y,0)#验证上述微分 ##高阶微分 print diff(sin(2*x),x,2) ans: cos(x) 2*cos(2*x) tan(x)**2 + 1 tan(x)**2 + 1 -4*sin(2*x)
4.级数展开
func.series(variable,a,b)从第a阶开始展开,10阶取不到!!
print cos(x).series(x,0,10) print (1/cos(x)).series(x,0,10) ans: 1 - x**2/2 + x**4/24 - x**6/720 + x**8/40320 + O(x**10) 1 + x**2/2 + 5*x**4/24 + 61*x**6/720 + 277*x**8/8064 + O(x**10)
补充:
#三角函数公式的展开
print sin(x+y).expand(trig=True)
ans:sin(x)*cos(y) + sin(y)*cos(x)
5.积分
#积分 print integrate(6*x**5,x) print integrate(sin(x),x) #定积分 print integrate(x**3,(x,-1,1)) print integrate(sin(x),(x,0,pi/2))
ans: x**6 -cos(x) 0 1
6.求解代数方程 solve
print solve(x**4-1,x) print solve([x+5*y-2,-3*x+6*y-15],[x,y]) ans: [-1, 1, -I, I] {x: -3, y: 1}
7.微分方程
f=Function('f')#注意要定义一下!!! #f(x).diff(x,x)+f(x) print dsolve(f(x).diff(x,x)+f(x),f(x))#什么意思?? print dsolve(f(x).diff(x,x)+1,f(x)) print dsolve(f(x).diff(x,x),f(x)) print dsolve(diff(f(x),x)-1,f(x))#这个意思好理解 #为什么与上式不同? print dsolve(diff(f(x),x)+f(x),f(x))# ans: Eq(f(x), C1*sin(x) + C2*cos(x)) Eq(f(x), C1 + C2*x - x**2/2) Eq(f(x), C1 + C2*x) Eq(f(x), C1 + x) Eq(f(x), C1*exp(-x))
8.矩阵化简
a11,a12,a13,a22,a23,a33=symbols('a11 a12 a13 a22 a23 a33') m=Matrix([[x,y,z]]) n=Matrix([[a11,a12,a13],[a12,a22,a23],[a13,a23,a33]]) v=Matrix([[x],[y],[z]]) f=m*n*v#二次型 print f print f.subs({x:1,y:1,z:1})#其他方式做替换subs((x,y),(u,v)) print f.subs((x,y,z),(1,1,1))#is ok #print f.subs([x,y,z],[1,1,1])#error!! ans: Matrix([[x*(a11*x + a12*y + a13*z) + y*(a12*x + a22*y + a23*z) + z*(a13*x + a23*y + a33*z)]]) Matrix([[a11 + 2*a12 + 2*a13 + a22 + 2*a23 + a33]]) Matrix([[x*(a11*x + a12*y + a13*z) + y*(a12*x + a22*y + a23*z) + z*(a13*x + a23*y + a33*z)]])
9.级数求和
summation
print summation(2*i-1,(i,1,3))#1,3都会取到 print summation(1/2**i,(i,0,oo)) print summation(1/log(n)**n,(n,2,oo))#不能计算总和,将打印相应的求和公式 print summation(exp(x),(x,0,4)) print summation(I**t,(t,1,3)) print summation((x*t)**n/factorial(n),(n,0,oo)) print summation(log(n/k-1)*exp(I*t*k),(k,0,n)) ans: 9 2 Sum(log(n)**(-n), (n, 2, oo)) 1 + E + exp(2) + exp(3) + exp(4) -1 exp(t*x) Sum(exp(I*k*t)*log(-1 + n/k), (k, 0, n)) 1
----END---- HAVE A GOOD ONE!
以上为本人课余自学工具书/blog的笔记整理, 常有更新, 非100%原创!且读且学习。