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爬虫教程之爬取百度贴吧并下载的示例
Mar 07 Python
Python中的深拷贝和浅拷贝详解
Jun 03 Python
Python运算符重载详解及实例代码
Mar 07 Python
Python线性回归实战分析
Feb 01 Python
python实现从pdf文件中提取文本,并自动翻译的方法
Nov 28 Python
Python+Redis实现布隆过滤器
Dec 08 Python
python实现异常信息堆栈输出到日志文件
Dec 26 Python
Python 解决相对路径问题:&quot;No such file or directory&quot;
Jun 05 Python
Django serializer优化类视图的实现示例
Jul 16 Python
python与js主要区别点总结
Sep 13 Python
python基础之爬虫入门
May 10 Python
ubuntu安装jupyter并设置远程访问的实现
Mar 31 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
解析phpstorm + xdebug 远程断点调试
2013/06/20 PHP
PHP中file_exists函数不支持中文名的解决方法
2014/07/26 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
2014/11/20 PHP
Yii使用DeleteAll连表删除出现报错问题的解决方法
2016/07/14 PHP
模拟用户点击弹出新页面不会被浏览器拦截
2014/04/08 Javascript
浅谈JavaScript Math和Number对象
2015/01/26 Javascript
解决jQuery上传插件Uploadify出现Http Error 302错误的方法
2015/12/18 Javascript
jQuery+css实现的换页标签栏效果
2016/01/27 Javascript
利用Angularjs实现幻灯片效果
2016/09/07 Javascript
JS+HTML5实现的前端购物车功能插件实例【附demo源码下载】
2016/10/17 Javascript
JavaScript用构造函数如何获取变量的类型名
2016/12/23 Javascript
详解nodeJS中读写文件方法的区别
2017/03/06 NodeJs
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
2017/04/10 jQuery
详解Vue.js Mixins 混入使用
2017/09/15 Javascript
使用gulp构建前端自动化的方法示例
2018/12/25 Javascript
js中对象与对象创建方法的各种方法
2019/02/27 Javascript
Nuxt.js实现一个SSR的前端博客的示例代码
2019/09/06 Javascript
vue实现文字加密功能
2019/09/27 Javascript
微信小程序 bindtap 传参的实例代码
2020/02/21 Javascript
[01:29]2014DOTA2展望TI 剑指西雅图DK战队专访
2014/06/30 DOTA
Python三元运算实现方法
2015/01/12 Python
使用Python编写一个最基础的代码解释器的要点解析
2016/07/12 Python
Python实现小数转化为百分数的格式化输出方法示例
2017/09/20 Python
opencv python 图像去噪的实现方法
2018/08/31 Python
Python实现获取系统临时目录及临时文件的方法示例
2019/06/26 Python
Python 中如何实现参数化测试的方法示例
2019/12/10 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
2020/04/08 Python
用纯css3实现的图片放大镜特效效果非常不错
2014/09/02 HTML / CSS
瑞典轮胎在线:Tirendo.se
2018/06/21 全球购物
中专生学习生活的自我评价分享
2013/10/27 职场文书
视光学专业毕业生推荐信
2013/10/28 职场文书
市场营销专科应届生求职信
2013/11/24 职场文书
会计专业自荐信
2013/12/02 职场文书
解除租房协议书
2014/12/03 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书
golang 实现菜单树的生成方式
2021/04/28 Golang