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交换变量
Sep 06 Python
玩转python爬虫之爬取糗事百科段子
Feb 17 Python
Python探索之URL Dispatcher实例详解
Oct 28 Python
numpy排序与集合运算用法示例
Dec 15 Python
python使用筛选法计算小于给定数字的所有素数
Mar 19 Python
python斐波那契数列的计算方法
Sep 27 Python
python3 unicode列表转换为中文的实例
Oct 26 Python
解决python执行不输出系统命令弹框的问题
Jun 24 Python
python垃圾回收机制(GC)原理解析
Dec 30 Python
Python响应对象text属性乱码解决方案
Mar 31 Python
Python定时任务APScheduler原理及实例解析
May 30 Python
再谈python_tkinter弹出对话框创建
Mar 20 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
php+dojo 的数据库保存拖动布局的一个方法dojo 这里下载
2007/03/07 PHP
dedecms中显示数字验证码的修改方法
2007/03/21 PHP
PHP MemCached 高级缓存应用代码
2010/08/05 PHP
php通过数组实现多条件查询实现方法(字符串分割)
2014/05/06 PHP
ThinkPHP登录功能的实现方法
2014/08/20 PHP
PHP实现格式化文件数据大小显示的方法
2015/01/03 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
2015/09/23 PHP
ThinkPHP静态缓存简单配置和使用方法详解
2016/03/23 PHP
thinkPHP5框架分页样式类完整示例
2018/09/01 PHP
jquery特效 幻灯片效果示例代码
2013/07/16 Javascript
php+js实现倒计时功能
2014/06/02 Javascript
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
2015/03/06 Javascript
JS原型链 详解及示例代码
2016/09/06 Javascript
正则表达式,替换所有HTML标签的简单实例
2016/11/28 Javascript
jQuery遮罩层实例讲解
2017/05/11 jQuery
node.js中路由,中间件,ge请求和post请求的参数详解
2017/12/26 Javascript
vue实现未登录跳转到登录页面的方法
2018/07/17 Javascript
JavaScript根据json生成html表格的示例代码
2018/10/24 Javascript
vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码
2019/04/04 Javascript
微信小程序拼接图片链接无底洞深入探究
2019/09/03 Javascript
Vue列表如何实现滚动到指定位置样式改变效果
2020/05/09 Javascript
微信小程序换肤功能实现代码(思路详解)
2020/08/25 Javascript
JavaScript实现切换多张图片
2021/01/27 Javascript
TensorFlow实现RNN循环神经网络
2018/02/28 Python
对Tensorflow中权值和feature map的可视化详解
2018/06/14 Python
Django Rest framework认证组件详细用法
2019/07/25 Python
销售部主管岗位职责
2013/12/18 职场文书
职员竞岗演讲稿
2014/05/14 职场文书
档案工作汇报材料
2014/08/21 职场文书
2014领导班子专题民主生活会对照检查材料思想汇报
2014/09/23 职场文书
2015年爱牙日活动总结
2015/03/23 职场文书
python实现语音常用度量方法的代码详解
2021/05/25 Python
详解Redis在SpringBoot工程中的综合应用
2021/10/16 Redis
CSS实现单选折叠菜单功能
2021/11/01 HTML / CSS
Redis 哨兵机制及配置实现
2022/03/25 Redis
springboot layui hutool Excel导入的实现
2022/03/31 Java/Android