Python 实现定积分与二重定积分的操作


Posted in Python onMay 26, 2021

1.概述

最近项目需要使用程序实现数学微积分,最初想用java实现,后来发现可用文档太少,实现比较麻烦,后来尝试使用python实现,代码量较少,主要有sympy与scipy两种实现方式,本文主要记录scipy的实现方式。

2.内容

2.1 所求函数

Python 实现定积分与二重定积分的操作

2.2 python代码

# 引入需要的包
import scipy.integrate
from numpy import exp
from math import sqrt
import math

# 创建表达式
f = lambda x,y : exp(x**2-y**2)

# 计算二重积分:(p:积分值,err:误差)
# 这里注意积分区间的顺序
# 第二重积分的区间参数要以函数的形式传入
p,err= scipy.integrate.dblquad(f, 0, 2, lambda g : 0, lambda h : 1)	
print(p)

2.3 注意问题

1. exp尽量使用numpy的exp

2. 注意积分区间参数的顺序

3. 第二重积分的区间参数要以函数的形式传入

补充:python实现求解积分

例子 1:

假设有随机变量 x,定义域 X,其概率密度函数为 p(x),f(x) 为定义在 X 上的函数,目标是求函数 f(x) 关于密度函数 p(x) 的数学期望 Python 实现定积分与二重定积分的操作

蒙特卡洛法根据概率分布 p(x) 独立地抽样 n 个样本 x1,x2,…..xn,得到近似的 f(x) 期望为:

Python 实现定积分与二重定积分的操作

其实这个的理解就是要求一个拥有概率密度的函数期望值

期望=积分(每个点的密度函数*每个点的价值函数)

例子 2:

假设我们想要求解 h(x) 在 X 上的积分:

Python 实现定积分与二重定积分的操作

我们将 h(x) 分解成一个函数 f(x) 和一个概率密度函数 p(x) 的乘积,进而又将问题转换为求解函数 f(x) 关于密度函数 p(x) 的数学期望 Python 实现定积分与二重定积分的操作

Python 实现定积分与二重定积分的操作

这里的Ep(x)是相当于把整个分布当时了概率分布,即总发生概率为1.

这里,f(x) 表示为 Python 实现定积分与二重定积分的操作,则有:

Python 实现定积分与二重定积分的操作

更一般的,假设我们想要求解 Python 实现定积分与二重定积分的操作,熟悉积分的同学肯定已经知道答案为 Python 实现定积分与二重定积分的操作,那么如何用采样的方法来得到这个值呢?

Python 实现定积分与二重定积分的操作,0<x<10,那么 Python 实现定积分与二重定积分的操作

下面是代码:

'''import random
num=1000000
sum=0
for i in range(0,num):
    x=random.uniform(0,10)
    sum+=x*x*10
sum/=1000000
print(sum)'''
import random
numSamples=10000
samples=[random.uniform(0,10)for _ in range(numSamples)]
f_samples=[10*sample**2 for sample in samples]
result=1/10000.0*sum(f_samples)
print(result)

result=333.10527012455066

random.uniform(x,y)表示在[x,y)之间生成一个 实数

对于复杂的 h(x),这种方法计算起来显然就更加方便了(特别是忘记积分怎么算的同学)。

蒙特卡洛方法其实就是利用大数定理通过大量统计来算出最后的值。

到这里为止,我们简单的介绍了蒙特卡洛方法,但是依旧没有提到要怎么利用复杂的概率密度函数进行采样。

接下来我们来看一下接受-拒绝法(accept-reject sampling method),它也是蒙特卡洛法中的一种类型适用于不能直接抽样的情况。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Windows下Eclipse+PyDev配置Python+PyQt4开发环境
May 17 Python
wxpython中Textctrl回车事件无效的解决方法
Jul 21 Python
Python 获得命令行参数的方法(推荐)
Jan 24 Python
python散点图实例之随机漫步
Aug 27 Python
python pytest进阶之fixture详解
Jun 27 Python
django框架基于queryset和双下划线的跨表查询操作详解
Dec 11 Python
python关闭占用端口方式
Dec 17 Python
python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案
Feb 18 Python
Python网页解析器使用实例详解
May 30 Python
Java多线程实现四种方式原理详解
Jun 02 Python
python tqdm实现进度条的示例代码
Nov 10 Python
python 制作本地应用搜索工具
Feb 27 Python
python 解决微分方程的操作(数值解法)
python 实现体质指数BMI计算
May 26 #Python
Python 如何解决稀疏矩阵运算
Python selenium模拟网页点击爬虫交管12123违章数据
python scipy 稀疏矩阵的使用说明
python中os.path.join()函数实例用法
May 26 #Python
python实现简单的井字棋
May 26 #Python
You might like
thinkphp3.2.2前后台公用类架构问题分析
2014/11/25 PHP
php array_key_exists() 与 isset() 的区别
2016/10/24 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2020/01/22 PHP
asp javascript 实现关闭窗口时保存数据的办法
2007/11/24 Javascript
控制页面按钮在后台执行期间不重复提交的JS方法
2013/06/24 Javascript
js弹窗返回值详解(window.open方式)
2014/01/11 Javascript
如何正确理解javascript的模块化
2017/03/02 Javascript
jQuery插件zTree实现更新根节点中第i个节点名称的方法示例
2017/03/08 Javascript
让网站自动生成章节目录索引的多个js代码
2018/01/07 Javascript
使用vue-cli打包过程中的步骤以及问题的解决
2018/05/08 Javascript
nodeJs爬虫的技术点总结
2018/05/13 NodeJs
浅谈针对Vue相同路由不同参数的刷新问题
2018/09/29 Javascript
详解mpvue中使用vant时需要注意的onChange事件的坑
2019/05/16 Javascript
node爬取新型冠状病毒的疫情实时动态
2020/02/06 Javascript
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
2021/02/23 Vue.js
python解决方案:WindowsError: [Error 2]
2016/08/28 Python
深入理解Python分布式爬虫原理
2017/11/23 Python
python使用for循环计算0-100的整数的和方法
2019/02/01 Python
python 计算一个字符串中所有数字的和实例
2019/06/11 Python
Python解释器以及PyCharm的安装教程图文详解
2020/02/26 Python
TensorFlow tf.nn.conv2d_transpose是怎样实现反卷积的
2020/04/20 Python
html+css实现自定义图片上传按钮功能
2019/09/04 HTML / CSS
世界领先的以旅馆为主的在线预订平台:Hostelworld
2016/10/09 全球购物
Pretty Green美国:英式摇滚服饰风格代表品牌之一
2019/01/23 全球购物
自荐信要包含哪些内容
2013/11/06 职场文书
体育专业学生自我评价范文
2014/01/17 职场文书
会计岗位职责范本
2014/03/07 职场文书
聚美优品励志广告词
2014/03/14 职场文书
中国好声音广告词
2014/03/18 职场文书
单位消防安全责任书
2014/07/23 职场文书
2014年党员自我剖析材料
2014/10/07 职场文书
2014年幼儿园老师工作总结
2014/12/05 职场文书
忠犬八公的故事观后感
2015/06/05 职场文书
小学三年级班主任工作经验交流材料
2015/11/02 职场文书
八年级地理课件资料及考点知识分享
2019/08/30 职场文书