《用Python进行科学计算》——SymPy

SymPy是Python的数学符号计算库,用它可以进行数学公式的符号推导。

欧拉恒等式

e** iπ + 1 = 0
e是自然指数的底,i是虚数单位,π是圆周率。
验证这个公式:

from sympy import *

print(E**(I*pi)+1)
# 0

欧拉恒等式可以用下面的公式运算:
e** ix = cos x + i sin x

#coding:utf-8

from sympy import *
from pprint import pprint

print(E**(I*pi)+1)
# 0


#为了用SymPy求证上面的公式,需要引入变量x,在SymPy中,数学符号是
#Symbol类的对象,所以先要创建
x=Symbol('x')

#expand函数可以将公式展开,
print(expand(E**(I*x)))
# exp(I*x)
# exp不是math.exp或者numpy.exp,而是sympy.exp,它
# 是一个类,用来表述自然指数函数

# expand函数有关键字参数complex,当它为true时,expand将把公式
#分为实数和虚数两个部分
print(expand(exp(I*x),complex=True))
# I*exp(-im(x))*sin(re(x)) + exp(-im(x))*cos(re(x))
#显然这里将符号x当作复数了,指定符号x必须为实数。

x=Symbol('x',real=True)
print(expand(exp(I*x),complex=True))
# I*sin(x) + cos(x)

# 用泰勒多项式展开
tmp=series(exp(I*x),x,0,10)
pprint(tmp)
"""
1 + I*x - x**2/2 - I*x**3/6 + x**4/24 + I*x**5/120 - x**6/720 - I*x**7/5040 + 
x**8/40320 + I*x**9/362880 + O(x**10)
  
"""

# 分别获得tmp的实部和虚部,分别和cos和sin的展开公式进行比较
pprint(re(tmp))

"""
x**8/40320 - x**6/720 + x**4/24 - x**2/2 + re(O(x**10)) + 1

"""

pprint(series(cos(x),x,0,10))

"""
1 - x**2/2 + x**4/24 - x**6/720 + x**8/40320 + O(x**10)

"""

pprint(im(tmp))

"""
x**9/362880 - x**7/5040 + x**5/120 - x**3/6 + x + im(O(x**10))

"""


pprint(series(sin(x),x,0,10))

"""
x - x**3/6 + x**5/120 - x**7/5040 + x**9/362880 + O(x**10)

"""

球体体积

使用scipy数值积分可以计算球体体积,而SymPy的符号积分函数integrate则可以帮助我们进行符号积分。
integrate进行不定积分:

In [3]: x=Symbol('x')
In [4]: integrate(x*sin(x),x)
Out[4]: -x*cos(x) + sin(x)

如果指定x的取值范围的话,integrate则进行定积分运算:

In [5]: integrate(x*sin(x),(x,0,2*pi))
Out[5]: -2*pi

计算球体体积。

y(x)=(r*r-x*x)**0.5
In [11]: #创建多个符号

In [12]: x,y,y=symbols('x,y,r')

In [13]: r=symbols('r',positive=True)

In [14]: #定义r大于0

In [18]: circle_area=2*integrate(sqrt(r**2-x**2),(x,-r,r))
In [19]: circle_area
Out[19]: pi*r**2


In [16]: #得到了球与X-Y平面轴交线圆的面积
In [17]: #因为球体积是对切面进行积分,所以替换r为切面方程
In [21]: circle_area=circle_area.subs(r,sqrt(r**2-x**2))

In [22]: circle_area
Out[22]: pi*(r**2 - x**2)

In [23]: integrate(circle_area,(x,-r,r))
Out[23]: 4*pi*r**3/3



猜你喜欢

转载自blog.csdn.net/mashaokang1314/article/details/82903864