python中Scipy模块求取积分的方法:

SciPy下实现求函数的积分的函数的基本使用,积分,高等数学里有大量的讲述,基本意思就是求曲线下面积之和。

其中rn可认为是偏差,一般可以忽略不计,wi可以视为权重。

在SciPy里提供了很多的求各类积分的函数,依据传入参数的不同可以分为两类:一类是传入一个已知的函数和积分的上下限;另一类是传入点集,这个适用于做完物理实现后收集的一些数据,但函数无法确定,但有很多的数据点,那么这些点包络下的面积是多少,也是积分问题,所以在SciPy里有针对点集求积分的函数,形式上函数的参数是数组或者列表。

1、已知函数型求积分

本节以几个问题的形式展示SciPy下如何求积分。

  • 问题1:这里假设函数为f(x)=x+1,求积分的上下限为[1,2],数学表达式为:

可以利用Scipy模块下的子模块integrate里的quad函数来求这个数学问题的计算值。

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

结果是:

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 = integrate.trapz(y, x)
print v

程序的运行结果:

1.8652953655957172

3 多重积分

SciPy下的二重积分可以用dblquad函数来计算、三重积分可以用tplquad函数来计算而关于f(x1,x2,⋯,xn)的多重积分可以使用nquad函数。

  • 二重积分dblquad函数来计算,假设有一个函数f(x,y)需要计算其二重积分。
如何用Scipy的dblquad函数呢? 对于一个泛型的二重积分的一般表达式格式为:

那么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.02083333333



 

python Scipy积分运算大全(integrate模块——一重、二重及三重积分)的更多相关文章

  1. Numpy使用大全(python矩阵相关运算大全)-Python数据分析基础2

    //2019.07.10python数据分析基础——numpy(数据结构基础) import numpy as np: 1.python数据分析主要的功能实现模块包含以下六个方面:(1)numpy—— ...

  2. python scipy样条插值函数大全(interpolate里interpld函数)

    scipy样条插值 scipy样条插值1.样条插值法是一种以可变样条来作出一条经过一系列点的光滑曲线的数学方法.插值样条是由一些多项式组成的,每一个多项式都是由相邻的两个数据点决定的,这样,任意的两个 ...

  3. SciPy 积分

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  4. python内置函数大全(分类)

    python内置函数大全 python内建函数 最近一直在看python的document,打算在基础方面重点看一下python的keyword.Build-in Function.Build-in ...

  5. Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块

    Python第十一天    异常处理  glob模块和shlex模块    打开外部程序和subprocess模块  subprocess类  Pipe管道  operator模块   sorted函 ...

  6. Python学习—基础篇之常用模块

    常用模块 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要 ...

  7. python第六天 函数 python标准库实例大全

    今天学习第一模块的最后一课课程--函数: python的第一个函数: 1 def func1(): 2 print('第一个函数') 3 return 0 4 func1() 1 同时返回多种类型时, ...

  8. Python 全栈开发六 常用模块学习

    本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve configparser hashlib 一. ...

  9. 【学习笔记】--- 老男孩学Python,day14 python内置函数大全

    参考:  https://www.cnblogs.com/pyyu/p/6702896.html http://www.runoob.com/python3/python3-built-in-func ...

随机推荐

  1. 1003 Emergency (25分) 求最短路径的数量

    1003 Emergency (25分)   As an emergency rescue team leader of a city, you are given a special map of ...

  2. CF 1073 E. Segment Sum

    https://codeforces.com/problemset/problem/1073/E 题意:[l,r]中,出现0—9数字的种类数不超过k的数的和 dp[i][j][0/1] 表示 dfs到 ...

  3. Qt编译Curl

    1.下载Curl,下载地址:https://curl.haxx.se/download.html,windows下载.zip压缩包,解压到E盘. 2.在”开始菜单“—>”所有程序“->”Q ...

  4. Python 之网络编程之socket(2)黏包现象和socketserver并发

    一:黏包 ###tcp协议在发送数据时,会出现黏包现象.     (1)数据粘包是因为在客户端/服务器端都会有一个数据缓冲区,     缓冲区用来临时保存数据,为了保证能够完整的接收到数据,因此缓冲区 ...

  5. Lesson 9 Royal espionage

    What important thing did King Alfred learn when he penetrated the Danish camp of Guthrum? Alfred the ...

  6. C 语言入门---第六章 C语言数组

    数组就是一些列具有相同类型的数据的集合,这些数据在内存中一次挨着存放,彼此之间没有缝隙. 我们可以将二维数组看作一个Excel表格,有行有列,length1 表示行数,length2 表示列数,要在二 ...

  7. java反射初探

    java反射 反射是java的重要特性之一,java.lang.reflect 是jdk支持反射的重要包,我下面可能会对构造器Constructor,属性Filed,方法Method会用到.反射其实很 ...

  8. SC.Lab3对于Factory的构建过程(from HIT)

    Factory设计模式基本就是通过传入指定的参数/或者不传入参数,通过Factory的某个方法(为了避免实例化Factory对象,一般方法为静态static),来获取一个对象.这个是Factory用的 ...

  9. Unity初识项目结构与面板

    一.Unity的项目结构 Unity中的一个项目是有若干个场景组成的,每一个场景又是由若干个游戏对象组成的,每一个游戏对象身上有若干个组件,每一个组件有若干个属性. 项目——>场景——>游 ...

  10. FTP大量数据(百万级数据)传输尝试

    接上篇<Java FTPClient 大量数据传输的问题(未解决)> 因为数据量过大 FTPClient获取文件列表信息会出现不稳定的问题,找了很多方法都没有解决. 网上找的这一篇文章 h ...