SciPy – 集成
Scipy 是Python的科学计算模块,提供了许多著名数学函数的内置函数。 scipy.integrate子包提供了多种积分技术,包括常微分方程积分器。
使用scipy.integrate查找集成
数值积分是使用数值技术对积分进行近似计算。给定函数对象积分函数的方法:
- quad – 通用集成
- dblquad – 通用双重积分
- nquad – 通用 n 折积分
- fixed_quad – 高斯正交,阶数 n
- 正交- 高斯正交到容差
- romberg – Romberg 集成
- trapz – 梯形规则
- cumtrapz – 累积计算积分的梯形规则
- 辛普森——辛普森法则
- romb – Romberg 集成
- polyint – 分析多项式积分 (NumPy)
(1) 四边形:
提供了函数quad 来对两点之间的一个变量的函数进行积分。这些点可以是 +infinite 或 –infinite 以表示无限的限制。
例子:
Python3
from scipy.integrate import quad
def f(x):
return 3.0*x*x + 1.0
I, err = quad(f, 0, 1)
print(I)
print(err)
Python3
from scipy.integrate import dblquad
area = dblquad(lambda x, y: x*y, 0, 0.5,
lambda x: 0, lambda x: 1-2*x)
print(area)
Python3
from scipy.integrate import nquad
def f(x, y, z):
return x*y*z
I = nquad(f, [[0, 1], [0, 5], [0, 5]])
print(I)
Python3
# import scipy.integrate
from scipy import integrate
def func(x): return 3*x**3
# using scipy.integrate.fixed_quad() method
# n is the order of integration
gfg = integrate.fixed_quad(func, 1.0, 2.0, n=2)
print(gfg)
Python3
# import scipy.integrate.
from scipy import integrate
def f(x): return 3*x**3
# using scipy.integrate.quadrature() method
g = integrate.quadrature(f, 0.0, 1.0)
print(g)
Python3
# import numpy and scipy.integrate
import numpy as np
from scipy import integrate
f = lambda x: 3*(np.pi)*x**3
# using scipy.integrate.romberg()
g = integrate.romberg(f, 1, 2, show = True)
print(g)
Python3
# Python program explaining
# numpy.trapz() function
# importing numpy as geek
import numpy as np
b = [2, 4]
a = [6, 8]
f = np.trapz(b, a)
print(f)
Python3
# import numpy and scipy.integrate.cumtrapz
import numpy as np
from scipy import integrate
a = np.arange(0, 5)
b = np.arange(0, 5)
# using scipy.integrate.cumtrapz() method
f = integrate.cumtrapz(b, a)
print(f)
Python3
# import numpy and scipy.integrate
import numpy as np
from scipy import integrate
a = np.arange(0, 5)
b = np.arange(0, 5)
# using scipy.integrate.simps() method
f = integrate.simps(b, a)
print(f)
Python3
# import numpy and scipy.integrate
import numpy as np
from scipy import integrate
x = np.arange(0,5)
# using scipy.integrate.romb() method
f = integrate.romb(x)
print(f)
Python3
# Python code explaining
# numpy.polyint()
# importing libraries
import numpy as np
# Constructing polynomial
p1 = np.poly1d([2,6])
p2 = np.poly1d([4,8])
a = np.polyint(p1, 1)
b = np.polyint(p2, 2)
print ("\n\nUsing polyint")
print ("p1 anti-derivative of order = 2 : \n", a)
print ("p2 anti-derivative of order = 2 : \n", b)
输出 :
2.0
2.220446049250313e-14
(2)dblquad:
这将使用 2 个参数执行双重积分。
例子:
蟒蛇3
from scipy.integrate import dblquad
area = dblquad(lambda x, y: x*y, 0, 0.5,
lambda x: 0, lambda x: 1-2*x)
print(area)
输出 :
(0.010416666666666668, 4.101620128472366e-16)
(3) nquad :
对 n 个变量进行积分
例子:
蟒蛇3
from scipy.integrate import nquad
def f(x, y, z):
return x*y*z
I = nquad(f, [[0, 1], [0, 5], [0, 5]])
print(I)
输出 :
(78.12499999999999, 8.673617379884033e-13)
(4) 固定四边形:
借助 scipy.integrate.fixed_quad() 方法,我们可以使用定阶高斯求积来计算定积分
例子:
蟒蛇3
# import scipy.integrate
from scipy import integrate
def func(x): return 3*x**3
# using scipy.integrate.fixed_quad() method
# n is the order of integration
gfg = integrate.fixed_quad(func, 1.0, 2.0, n=2)
print(gfg)
输出:
(11.25, None)
(5) 正交:
借助 scipy.integrate.quadrature() 方法,我们可以使用固定容差高斯求积来计算定积分
例子:
蟒蛇3
# import scipy.integrate.
from scipy import integrate
def f(x): return 3*x**3
# using scipy.integrate.quadrature() method
g = integrate.quadrature(f, 0.0, 1.0)
print(g)
输出:
(0.7500000000000001, 2.220446049250313e-16)
(6) 罗姆伯格:
借助 scipy.integrate.romberg() 方法,我们可以得到一个可调用函数从极限 a 到 b 的 romberg 积分
例子:
蟒蛇3
# import numpy and scipy.integrate
import numpy as np
from scipy import integrate
f = lambda x: 3*(np.pi)*x**3
# using scipy.integrate.romberg()
g = integrate.romberg(f, 1, 2, show = True)
print(g)
输出:
Romberg integration of
Steps StepSize Results
1 1.000000 42.411501
2 0.500000 37.110063 35.342917
4 0.250000 35.784704 35.342917 35.342917
The final result is 35.34291735288517 after 5 function evaluations.
35.34291735288517
(7) 陷阱:
numpy.trapz()函数使用复合梯形规则沿给定轴积分。
参考:numpy.trapz()函数| Python
蟒蛇3
# Python program explaining
# numpy.trapz() function
# importing numpy as geek
import numpy as np
b = [2, 4]
a = [6, 8]
f = np.trapz(b, a)
print(f)
输出:
6.0
(8) 卡姆特拉兹:
借助 scipy.integrate.cumtrapz() 方法,我们可以使用复合梯形法则得到 y(x) 的累积积分值。
例子:
蟒蛇3
# import numpy and scipy.integrate.cumtrapz
import numpy as np
from scipy import integrate
a = np.arange(0, 5)
b = np.arange(0, 5)
# using scipy.integrate.cumtrapz() method
f = integrate.cumtrapz(b, a)
print(f)
输出:
[0.5 2. 4.5 8. ]
(9) 简化:
在 scipy.integrate.simps() 方法的帮助下,我们可以使用沿轴的样本和复合辛普森规则来获得 y(x) 的积分。
例子:
蟒蛇3
# import numpy and scipy.integrate
import numpy as np
from scipy import integrate
a = np.arange(0, 5)
b = np.arange(0, 5)
# using scipy.integrate.simps() method
f = integrate.simps(b, a)
print(f)
输出:
8.0
(10) 罗布:
借助 scipy.integrate.romb() 方法,我们可以使用从极限 a 到 b 的函数样本获得 romberg 积分
例子:
蟒蛇3
# import numpy and scipy.integrate
import numpy as np
from scipy import integrate
x = np.arange(0,5)
# using scipy.integrate.romb() method
f = integrate.romb(x)
print(f)
输出:
8.0
(11) polyint:
numpy.polyint(p, m) :计算指定阶多项式的反导数。
参考: Python的numpy.polyint()
蟒蛇3
# Python code explaining
# numpy.polyint()
# importing libraries
import numpy as np
# Constructing polynomial
p1 = np.poly1d([2,6])
p2 = np.poly1d([4,8])
a = np.polyint(p1, 1)
b = np.polyint(p2, 2)
print ("\n\nUsing polyint")
print ("p1 anti-derivative of order = 2 : \n", a)
print ("p2 anti-derivative of order = 2 : \n", b)
输出 :
Using polyint
p1 anti-derivative of order = 2 :
2
1 x + 6 x
p2 anti-derivative of order = 2 :
3 2
0.6667 x + 4 x