📜  SciPy – 集成

📅  最后修改于: 2022-05-13 01:54:38.818000             🧑  作者: Mango

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)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)

输出 :

(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)

输出 :

(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)

输出:

(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)

输出:

(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) 

输出:

(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) 

输出:

(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)

输出:

(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)

输出:

(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) 

输出:

(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) 

输出 :