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

python求三重积分_python Scipy积分运算大全(一重、二重及三重积分)相关推荐

  1. python卷积计算_python scipy卷积运算的实现方法

    scipy的signal模块经常用于信号处理,卷积.傅里叶变换.各种滤波.差值算法等. *两个一维信号卷积 >>> import numpy as np >>> x ...

  2. python求数值积分_Python大数据处理-Scipy基础入门,数值积分计算

    温馨提示:阅读本文只需要1分钟,您就可以掌握Scipy进行定积分计算.二重.三重积分.多重积分的计算.继续承接上文学习Scipy科学数据处理,为我们后面Python大数据处理开发打基础.今天主要学习分 ...

  3. python求乘积_Python实现求笛卡尔乘积的方法

    Python实现求笛卡尔乘积的方法 本文实例讲述了Python实现求笛卡尔乘积的方法.分享给大家供大家参考,具体如下: 在数学中,两个集合X和Y的笛卡尓乘积(Cartesian product),又称 ...

  4. python求圆面积_python如何求圆的面积

    首先我们要知道圆的面积计算公式:S = πr²,公式中S为所求圆的面积,π为圆周率,r为圆的半径. 示例: # 定义一个方法来计算圆的面积 def findArea(r): PI = 3.142 re ...

  5. python求圆面积_python如何求圆的面积 python求圆的面积方法

    python如何求圆的面积?本篇文章小编给大家分享一下python求圆的面积方法,代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 首先我们要知道圆的面积计算 ...

  6. python求乘积_Python实现求笛卡尔乘积方法详解

    这篇文章主要介绍了Python实现求笛卡尔乘积的方法,结合实例形式分析了Python计算笛卡尔乘积的原理与实现技巧,需要的朋友可以参考下 本文实例讲述了Python实现求笛卡尔乘积的方法.分享给大家供 ...

  7. python求众数_python求众数问题实例

    本文实例讲述了python求众数问题的方法,是一个比较典型的应用.分享给大家供大家参考.具体如下: 问题描述: 多重集中重数最大的元素称为众数...就是一个可以有重复元素的集合,在这个集合中重复的次数 ...

  8. python符号运算卷积_python scipy卷积运算的实现方法

    scipy的signal模块经常用于信号处理,卷积.傅里叶变换.各种滤波.差值算法等. *两个一维信号卷积 >>> import numpy as np >>> x ...

  9. 用python求期望_Python——EM(期望极大算法)教学(附详细代码与注解)

    今天,我们详细的讲一下EM算法. 前提准备 Jupyter notebook 或 Pycharm 火狐浏览器或谷歌浏览器 win7或win10电脑一台 网盘提取csv数据 需求分析 实现高斯混合模型的 ...

  10. python复数类型转换_Python程序设计——复数运算(包括极坐标转换)

    笔者本身是电气工程及其自动化专业出身,在平时的工作学习过程中,经常需要进行复数的运算以及矩阵相关的运算,但是奈何我实在是用不习惯matlab,一方面,matlab软件动辄十几个G这么大:另一方面,并且 ...

最新文章

  1. Python学习笔记二:布尔表达式
  2. 大手笔 !Julia Computing 获 2400 万美元融资,前 Snowflake CEO 加入董事会
  3. HiveQL之Database相关操作
  4. 404 – File or directory not found.
  5. Java工程师必备技能
  6. 单击浏览器右上角的X弹出提示窗口
  7. 关于【结合测试票】写法的总结。
  8. 大二实习使用的技术汇总(中)
  9. Spring Security 工作原理概览
  10. java web从入门到精通 明日科技 源码_Java Web 从入门到精通(明日科技)
  11. 老Java程序员花两天做了个消消乐(天天爱消除)
  12. Java一组数据,满足数量和求和的最优解
  13. 连接微信运动服务器忙,为啥微信运动突然不计步了(只需一招问题立马解决)...
  14. 人工智能正在改变市场营销的行为方式
  15. 小米 13 系列新品发布会将延期举行;马斯克:和苹果的误解得到了解决;IntelliJ IDEA 2022.3 发布|极客头条
  16. SSM框架学习——Maven进阶学习
  17. php如何与微信公众平台连接失败,微信公众平台接入问题,配置失败不知道是哪的原因?...
  18. Android中gradle配置项packagingOptions简述
  19. 异步传输模式 Asynchronous Transfer Mode
  20. imagenet分类

热门文章

  1. 第三周项目 侦察队委派任务
  2. 教你N种方法萤石云添加设备(转)
  3. matlab处理采集的声音数据
  4. lamp技术_LAMP技术简介:
  5. Power BI的基本操作
  6. 干货 | 云智慧透视宝Java代码性能监控实现原理
  7. 2021 HW —— 简单过程-致远OA
  8. 有关网线接法的几个问题
  9. apple API常用英语名词
  10. IOS版本回退操作教程