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调用java的Webservice示例
Mar 10 Python
Python下载指定页面上图片的方法
May 12 Python
浅谈Python基础之I/O模型
May 11 Python
python中for用来遍历range函数的方法
Jun 08 Python
Tensorflow 查看变量的值方法
Jun 14 Python
python逆序打印各位数字的方法
Jun 25 Python
判断python对象是否可调用的三种方式及其区别详解
Jan 31 Python
PYTHON如何读取和写入EXCEL里面的数据
Oct 28 Python
python绘制无向图度分布曲线示例
Nov 22 Python
为什么相对PHP黑python的更少
Jun 21 Python
python3的pip路径在哪
Jun 23 Python
python生成word合同的实例方法
Jan 12 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
CodeIgniter框架URL路由总结
2014/09/03 PHP
PHP制作3D扇形统计图以及对图片进行缩放操作实例
2014/10/23 PHP
PHP基于curl后台远程登录正方教务系统的方法
2016/10/14 PHP
php实现通过soap调用.Net的WebService asmx文件
2017/02/27 PHP
Laravel中前端js上传图片到七牛云的示例代码
2017/09/04 PHP
关于flash遮盖div浮动层的解决方法
2010/07/17 Javascript
js获取元素在浏览器中的绝对位置
2010/07/24 Javascript
密码强度检测效果实现原理与代码
2013/01/04 Javascript
Node.js异步I/O学习笔记
2014/11/04 Javascript
javascript基本包装类型介绍
2015/04/10 Javascript
js父页面中使用子页面的方法
2016/01/09 Javascript
jQuery操作dom实现弹出页面遮罩层(web端和移动端阻止遮罩层的滑动)
2016/08/25 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
2017/01/06 Javascript
jQuery实现下拉菜单的实例代码
2017/06/19 jQuery
详解Vuex管理登录状态
2017/11/13 Javascript
JavaScript基于数组实现的栈与队列操作示例
2018/12/22 Javascript
微信小程序中如何使用flyio封装网络请求
2019/07/03 Javascript
对python插入数据库和生成插入sql的示例讲解
2018/11/14 Python
利用PyCharm Profile分析异步爬虫效率详解
2019/05/08 Python
python文本数据处理学习笔记详解
2019/06/17 Python
python如何删除文件中重复的字段
2019/07/16 Python
python 消除 futureWarning问题的解决
2019/12/25 Python
Python嵌套函数,作用域与偏函数用法实例分析
2019/12/26 Python
在python里创建一个任务(Task)实例
2020/04/25 Python
pandas处理csv文件的方法步骤
2020/10/16 Python
Python通过format函数格式化显示值
2020/10/17 Python
英国网络托管和域名领导者:Web Hosting UK
2017/10/15 全球购物
Shell如何接收变量输入
2016/08/06 面试题
幼儿园大班毕业教师寄语
2014/04/03 职场文书
公司联欢会策划方案
2014/05/19 职场文书
竞选班干部演讲稿300字
2014/08/20 职场文书
2016年艾滋病宣传活动总结
2016/04/01 职场文书
原生CSS实现文字无限轮播的通用方法
2021/03/30 HTML / CSS
python process模块的使用简介
2021/05/14 Python
Python多线程 Queue 模块常见用法
2021/07/04 Python