Python 求积分
高中及大学时代,苦『积分』久矣,当时如掌握了此『黑科技』,课堂作业岂不是秒秒钟搞定。本文将介绍如何用 Python 求积分,包括求一重积分、二重积分等等。
文章目录
Part.I Introduction
高中及大学时代,苦『积分』久矣,当时如掌握了此『黑科技』,课堂作业岂不是秒秒钟搞定。本文将介绍如何用 Python 求积分,包括求一重积分、二重积分等等。
需要的包有
- sympy:符号工具包
- scipy:科学计算包
from sympy import *
from scipy.stats import *
Part.II 基础知识
在正式开始之前,首先需要了解下面的一些基础知识。
Chap.I 特殊量的表示
在求积分的过程中,会用到许多像『无穷大』、『PI』等特数量,它们在sympy
库中是如何表示的呢?下面一个表格对它们进行了汇总
代码表示 | 符号 | 含义 |
---|---|---|
pi | π \pi π | 圆周率 |
oo | ∞ \infty ∞ | 无穷大 |
-oo | − ∞ -\infty −∞ | 负无穷大 |
exp(x) | e x e^x ex | 自然常数的 x 次幂 |
log(x) | l n ( x ) ln(x) ln(x) | 以自然常数为底的对数 l o g e x log_ex logex |
erf(x) | erf ( x ) \operatorname{erf}(x) erf(x) | 误差函数 erf ( x ) = 2 π ∫ 0 x e − t 2 d t \operatorname{erf}(x)=\frac{2}{\sqrt{\pi}}\int_{0}^{x} e^{-t^2}dt erf(x)=π2∫0xe−t2dt |
erfc(x) | erfc ( x ) \operatorname{erfc}(x) erfc(x) | 误差函数补 erfc ( x ) = 1 − erfc ( x ) \operatorname{erfc}(x)=1-\operatorname{erfc}(x) erfc(x)=1−erfc(x) |
erfi(x) | erfci ( x ) \operatorname{erfci}(x) erfci(x) | 虚误差函数 erfci ( x ) = − i erf ( i x ) = 2 π ∫ 0 x e t 2 d t \operatorname{erfci}(x)=-i\operatorname{erf}(ix)=\frac{2}{\sqrt{\pi}}\int_{0}^{x}e^{t^2}dt erfci(x)=−ierf(ix)=π2∫0xet2dt |
Chap.II integrate 函数简析
求积分的函数 integrate()
在scipy
包中被定义,它的常用方法汇总如下表所示
代码 | 含义 |
---|---|
integrate(f(x),x) | 计算不定积分 ∫ f ( x ) d x \int f(x)dx ∫f(x)dx |
integrate(f(x),(x,a,b)) | 计算定积分 ∫ a b f ( x ) d x \int_a^b f(x)dx ∫abf(x)dx |
integrate(f(x,y),x,y) | 计算双重不定积分 ∫ ∫ f ( x , y ) d x d y \int \int\ f(x,y)dxdy ∫∫ f(x,y)dxdy |
integrate(f(x,y),(x,a,b),(y,c,d)) | 计算双重定积分 ∫ c d ∫ a b f ( x , y ) d x d y \int_c^d \int_a^b\ f(x,y)dxdy ∫cd∫ab f(x,y)dxdy |
更高重积分同理
Part.III 求积分实例
这部分介绍几个求积分的实例。
Chap.I 一重积分
求不定积分
求下面的不定积分
F
(
x
)
=
∫
x
e
x
(
e
x
+
1
)
2
d
x
F(x)=\int \frac{xe^x}{(e^x+1)^2} \ dx
F(x)=∫(ex+1)2xex dx
代码如下
def singleIntegral_a():
""" 一重不定积分 """
x = symbols('x')
print(integrate(x*exp(x)/(exp(x)+1)**2, x))
return
结果为
x - x/(exp(x) + 1) - log(exp(x) + 1)
即
F
(
x
)
=
x
−
x
e
x
+
1
−
l
n
(
e
x
+
1
)
F(x)=x-\frac{x}{e^x+1}-ln\left( e^x+1 \right)
F(x)=x−ex+1x−ln(ex+1)
求定积分
F
(
x
)
=
∫
0
1
x
2
+
e
x
+
1
d
x
F(x)=\int_0^1 x^2+e^x+1 \ dx
F(x)=∫01x2+ex+1 dx
代码如下
def singleIntegral_b():
""" 一重定积分 """
x = symbols('x')
fmt=integrate(x**2 + exp(x) + 1, (x, 0, 1))
print(fmt)
print(fmt.evalf())
return
结果为
1/3 + E
3.05161516179238
Chap.II 二重积分
求不定积分
∫
e
x
2
+
y
2
d
x
\int e^{x^2+y^2}\ dx
∫ex2+y2 dx
代码如下:
def doubleIntegral_a():
""" 二重不定积分 """
x, y = symbols('x y')
fmt = integrate(exp(x**2+y**2),x,y)
print(fmt)
#print(fmt.evalf())
return
结果为
pi*erfi(x)*erfi(y)/4
即
F
(
x
)
=
π
4
⋅
erfci
(
x
)
⋅
erfci
(
y
)
F(x)=\frac{\pi}{4}\cdot\operatorname{erfci}(x)\cdot\operatorname{erfci}(y)
F(x)=4π⋅erfci(x)⋅erfci(y)
如果设定范围 x ∈ [ 0 , 1 ] , y ∈ [ 1 , 2 ] x\in[0,1],\ y\in[1,2] x∈[0,1], y∈[1,2],则代码为
def doubleIntegral_a():
""" 二重不定积分 """
x, y = symbols('x y')
fmt = integrate(exp(x**2+y**2),(x, 0, 1), (y, 1, 2))
print(fmt)
print(fmt.evalf())
return
结果为
-pi*erfi(1)**2/4 + pi*erfi(1)*erfi(2)/4
21.9251145961748
求定积分
F
(
x
)
=
∫
0
1
∫
0
3
−
2
y
x
y
d
x
d
y
F(x)=\int_{0}^{1}\int_{0}^{3-2y}xy\ dxdy
F(x)=∫01∫03−2yxy dxdy
代码如下:
def doubleIntegral_b():
""" 二重定积分 """
x, y = symbols('x y')
fmt = integrate(x * y, (x, 0, 3 - 2*y), (y, 0, 1))
print(fmt)
print(fmt.evalf())
return
结果为
3/4
0.750000000000000
Reference
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)