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 相关文章推荐
python连接sql server乱码的解决方法
Jan 28 Python
Python通过DOM和SAX方式解析XML的应用实例分享
Nov 16 Python
神经网络(BP)算法Python实现及应用
Apr 16 Python
Python文件读写保存操作的示例代码
Sep 14 Python
Python在图片中插入大量文字并且自动换行
Jan 02 Python
使用Python实现将list中的每一项的首字母大写
Jun 11 Python
Python绘制频率分布直方图的示例
Jul 08 Python
python tornado修改log输出方式
Nov 18 Python
Python pandas库中的isnull()详解
Dec 26 Python
Python抓包程序mitmproxy安装和使用过程图解
Mar 02 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
Jun 06 Python
keras:model.compile损失函数的用法
Jul 01 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
2019年漫画销量排行榜:鬼灭登顶 海贼单卷制霸 尾田盛赞鬼灭
2020/03/08 日漫
在PHP中利用XML技术构造远程服务(上)
2006/10/09 PHP
PHP默认安装产生系统漏洞
2006/10/09 PHP
PHP SESSION的增加、删除、修改、查看操作
2015/03/20 PHP
详解Yii2.0使用AR联表查询实例
2017/06/16 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
lib.utf.js
2007/08/21 Javascript
Javascript的数组与字典用法与遍历对象的属性技巧
2012/11/07 Javascript
JQuery for与each性能比较分析
2013/05/14 Javascript
js 实现 input type=&quot;file&quot; 文件上传示例代码
2013/08/07 Javascript
nodejs中使用多线程编程的方法实例
2015/03/24 NodeJs
jQuery+Ajax+PHP+Mysql实现分页显示数据实例讲解
2015/09/27 Javascript
jQuery仿京东商城楼梯式导航定位菜单
2016/07/25 Javascript
Angularjs实现mvvm式的选项卡示例代码
2016/09/08 Javascript
将form表单通过ajax实现无刷新提交的简单实例
2016/10/12 Javascript
electron + vue项目实现打印小票功能及实现代码
2018/11/25 Javascript
Node.js 如何利用异步提升任务处理速度
2019/01/07 Javascript
小程序红包雨的实现示例
2019/02/19 Javascript
每周一练 之 数据结构与算法(Stack)
2019/04/16 Javascript
vue组件之间的数据传递方法详解
2019/04/19 Javascript
Elementui表格组件+sortablejs实现行拖拽排序的示例代码
2019/08/28 Javascript
微信小程序实现列表的横向滑动方式
2020/07/15 Javascript
解决vue页面刷新,数据丢失的问题
2020/11/24 Vue.js
js实现扫雷源代码
2020/11/27 Javascript
swiper实现导航滚动效果
2020/12/13 Javascript
[42:04]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第一局
2016/03/03 DOTA
python实现本地批量ping多个IP的方法示例
2019/08/07 Python
python二进制读写及特殊码同步实现详解
2019/10/11 Python
UDP协议功能
2013/01/06 面试题
领导干部廉政承诺书
2014/03/27 职场文书
工作建议书范文
2014/05/13 职场文书
应届毕业生自荐信
2014/05/28 职场文书
119消防日活动总结
2014/08/29 职场文书
2014房屋登记授权委托书
2014/10/13 职场文书
退休欢送会主持词
2015/07/01 职场文书
关于Python OS模块常用文件/目录函数详解
2021/07/01 Python