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捕捉和模拟鼠标事件的方法
Jun 03 Python
Python实现可获取网易页面所有文本信息的网易网络爬虫功能示例
Jan 15 Python
python通过paramiko复制远程文件及文件目录到本地
Apr 30 Python
python多线程共享变量的使用和效率方法
Jul 16 Python
解析python的局部变量和全局变量
Aug 15 Python
在PyTorch中Tensor的查找和筛选例子
Aug 18 Python
提升python处理速度原理及方法实例
Dec 25 Python
python字符串下标与切片及使用方法
Feb 13 Python
django实现后台显示媒体文件
Apr 07 Python
Django给表单添加honeypot验证增加安全性
May 06 Python
Django中celery的使用项目实例
Jul 07 Python
Python中tqdm的使用和例子
Sep 23 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
JAVA/JSP学习系列之六
2006/10/09 PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
2015/01/29 PHP
php版微信自动获取收货地址api用法示例
2016/09/22 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
关于IE中getElementsByClassName不能用的问题解决方法
2013/08/26 Javascript
js采用map取到id集合组并且实现点击一行选中一行
2013/12/16 Javascript
14款NodeJS Web框架推荐
2014/07/11 NodeJs
sails框架的学习指南
2014/12/22 Javascript
详解js中class的多种函数封装方法
2016/01/03 Javascript
javascript 动态脚本添加的简单方法
2016/10/11 Javascript
jQuery ajax的功能实现方法详解
2017/01/06 Javascript
详解vue渲染从后台获取的json数据
2017/07/06 Javascript
浅析Visual Studio Code断点调试Vue
2018/02/27 Javascript
JS基于对象的链表实现与使用方法示例
2019/01/31 Javascript
Element实现表格分页数据选择+全选所有完善批量操作
2019/06/07 Javascript
详解vue 自定义组件使用v-model 及探究其中原理
2019/10/11 Javascript
jQuery轮播图功能制作方法详解
2019/12/03 jQuery
js实现省级联动(数据结构优化)
2020/07/17 Javascript
Pyramid将models.py文件的内容分布到多个文件的方法
2013/11/27 Python
python实现登陆知乎获得个人收藏并保存为word文件
2015/03/16 Python
分享一个可以生成各种进制格式IP的小工具实例代码
2017/07/28 Python
Python 解决中文写入Excel时抛异常的问题
2018/05/03 Python
python+opencv 读取文件夹下的所有图像并批量保存ROI的方法
2019/01/10 Python
CSS3 重置iphone浏览器按钮input,select等表单元素的默认样式
2014/10/11 HTML / CSS
全球最大的在线旅游公司:Expedia
2017/11/16 全球购物
Joules官网:女士、男士和儿童服装和鞋类
2018/10/23 全球购物
网站域名和主机:Domain.com
2019/04/01 全球购物
Belstaff英国官方在线商店:Belstaff.co.uk
2021/02/09 全球购物
优秀毕业生求职信
2014/06/05 职场文书
学前教育专业求职信
2014/09/02 职场文书
2014年护士长工作总结
2014/11/11 职场文书
入党宣誓仪式主持词
2015/06/29 职场文书
团支部组织委员竞选稿
2015/11/21 职场文书
幼儿园中班教学反思
2016/03/03 职场文书
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
2021/11/11 Python
MIME类型中application/xml与text/xml的区别介绍
2022/01/18 HTML / CSS