pythonScipy积分运算⼤全(integrate模块——⼀重、⼆重及三重积分)
python中Scipy模块求取积分的⽅法:
SciPy下实现求函数的积分的函数的基本使⽤,积分,⾼等数学⾥有⼤量的讲述,基本意思就是求曲线下⾯积之和。
其中rn可认为是偏差,⼀般可以忽略不计,wi可以视为权重。
在SciPy⾥提供了很多的求各类积分的函数,依据传⼊参数的不同可以分为两类:⼀类是传⼊⼀个已知的函数和积分的上下限;另⼀类是传⼊点集,这个适⽤于做完物理实现后收集的⼀些数据,但函数⽆法确定,但有很多的数据点,那么这些点包络下的⾯积是多少,也是积分问题,所以在SciPy⾥有针对点集求积分的函数,形式上函数的参数是数组或者列表。
1、已知函数型求积分
本节以⼏个问题的形式展⽰SciPy下如何求积分。
问题1:这⾥假设函数为f(x)=x+1,求积分的上下限为[1,2],数学表达式为:
可以利⽤Scipy模块下的⼦模块integrate⾥的来求这个数学问题的计算值。
from scipy import integrate
def f(x):
return x + 1
v, err = integrate.quad(f, 1, 2)
print v
程序的执⾏结果为:
2.5
问题2:但对于f(x)=ax+b这种函数,a和b肯能未知的这种函数,quad能⽤么?答案是可以的,quad有形参args可以传⼊⼀些参数进去的。
from scipy import integrate
def f(x, a, b):
return a * x + b
v, err = integrate.quad(f, 1, 2, args = (-1, 1))
print v
程序的执⾏结果是:
-0.5
问题3:如果遇到积分函数有断点,可以通过quad函数的points给出断点继续求积分。例如:
这⾥f(x)在x=0的地⽅存在断点,如果没有给出断点就通过quad计算计算:
from scipy import integrate
import numpy as np
def f(x):
return 1 / np.sqrt(abs(x))
v, err = integrate.quad(f, -1, 1)
print v
程序运⾏时:
scipy1801.py:4: RuntimeWarning: divide by zero encountered in double_scalars
return 1 / np.sqrt(abs(x))
inf
结果是inf(⽆限、⽆穷)且有除0错误!修改⼀下:
from scipy import integratelinspace函数python
import numpy as np
def f(x):
return 1 / np.sqrt(abs(x))
v, err = integrate.quad(f, -1, 1, points=[0])
print v
结果是:
4
我们可以绘制⼀下这个函数的可视化曲线:
from scipy import integrate
import numpy as np
def f(x):
return 1 / np.sqrt(abs(x))
v, err = integrate.quad(f, -1, 1, points=[0])
print v
import numpy as np, matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import Axes3D
fig, ax = plt.subplots(figsize=(8, 3))
x = np.linspace(-1, 1, 10000)
ax.plot(x, f(x), lw=2)
ax.fill_between(x, f(x), color='green', alpha=0.5)
ax.set_xlabel("$x$", fontsize=18)
ax.set_ylabel("$f(x)$", fontsize=18)
ax.set_ylim(0, 25)
plt.show()
得到如下的结果图:
2 给出点集的积分
在⽆法确认积分函数的情况下,给出⼀些序列也可做积分。
问题4:求积分⽽是有这个函数的10个样本数据,那传⼊quad函数的不是f(x)=x,⽽是对应的各个(xi,yi)。from scipy import integrate
import numpy as np
def f(x):
return np.sqrt(x)
x = np.linspace(0, 2, 10)
y = f(x)
v = apz(y, x)
print v
程序的运⾏结果:
1.8652953655957172
3 多重积分
SciPy下的⼆重积分可以⽤dblquad函数来计算、三重积分可以⽤tplquad函数来计算⽽关于f(x1,x2,⋯,xn)的多重积分可以使⽤nquad函数。
⼆重积分dblquad函数来计算,假设有⼀个函数f(x,y)需要计算其⼆重积分。
如何⽤Scipy的呢?对于⼀个泛型的⼆重积分的⼀般表达式格式为:
那么dblquad函数的第⼀个形参应是f(x,y)、第2、3、4、5分别是a、b、g(x)、h(x),也就是说dblquad函数的第4和5是⼀个函数。
from scipy import integrate
import numpy as np
def f(x, y):
return x * y
def h(x):
return x
v, err = integrate.dblquad(f, 1, 2, lambda x: 1, h)
print v
程序的执⾏结果:
1.125
三重积分可以使⽤tplquad来计算。三重积分的⼀般表达式格式为:
⽽调⽤的形式为:
tqlquad(f, a, b, g, h, q, r)
其中f、g、h、q、r均为函数。下⾯以计算
⽤Python编写的程序如下所⽰:
from scipy import integrate
import numpy as np
f = lambda x, y, z : x
g = lambda x : 0
h = lambda x : (1 - x) / 2
q = lambda x, y : 0
r = lambda x, y : 1 - x - 2 * y
v, err = integrate.tplquad(f, 0, 1, g, h, q, r) print v
程序执⾏结果:
0.020********
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论