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实现360的字符显示界面
Feb 21 Python
python对url格式解析的方法
May 13 Python
Python简单生成8位随机密码的方法
May 24 Python
python编程测试电脑开启最大线程数实例代码
Feb 09 Python
python分布式编程实现过程解析
Nov 08 Python
python中dict()的高级用法实现
Nov 13 Python
Python selenium 自动化脚本打包成一个exe文件(推荐)
Jan 14 Python
jupyter note 实现将数据保存为word
Apr 14 Python
keras实现基于孪生网络的图片相似度计算方式
Jun 11 Python
python 基于selenium实现鼠标拖拽功能
Dec 24 Python
Python初学者必备的文件读写指南
Jun 23 Python
Python+Pillow+Pytesseract实现验证码识别
May 11 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 上传文件类型判断函数(避免上传漏洞 )
2010/06/08 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
2014/12/26 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
2016/03/17 PHP
如何使用PHP给图片加水印
2016/10/12 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
不用AJAX和IFRAME,说说真正意义上的ASP+JS无刷新技术
2008/09/25 Javascript
EditPlus注册码生成器(js代码实现)
2013/03/25 Javascript
Extjs 3.3切换tab隐藏相应工具栏出现空白解决
2013/04/02 Javascript
浅析JavaScript中的类型和对象
2013/11/29 Javascript
jQuery选择器基础入门教程
2016/05/10 Javascript
JavaScript中的this使用详解
2016/07/27 Javascript
把json格式的字符串转换成javascript对象或数组的方法总结
2016/11/03 Javascript
详解Web使用webpack构建前端项目
2017/09/23 Javascript
JS运动改变单物体透明度的方法分析
2018/01/23 Javascript
7个好用的JavaScript技巧分享(译)
2019/05/07 Javascript
vscode中eslint插件的配置(prettier配置无效)
2019/09/10 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
React+Redux实现简单的待办事项列表ToDoList
2019/09/29 Javascript
Vue中的this.$options.data()和this.$data用法说明
2020/07/26 Javascript
python3图片转换二进制存入mysql
2013/12/06 Python
python操作mongodb根据_id查询数据的实现方法
2015/05/20 Python
Django框架创建mysql连接与使用示例
2019/07/29 Python
Python实现Word表格转成Excel表格的示例代码
2020/04/16 Python
Django限制API访问频率常用方法解析
2020/10/12 Python
美国第二大团购网站:LivingSocial
2016/07/24 全球购物
英国最大的宝石首饰超市:QP Jewellers
2018/09/23 全球购物
工作自荐信
2013/12/11 职场文书
妇产医师自荐信
2014/01/29 职场文书
教育学习自我评价
2014/02/03 职场文书
2014学校庆三八妇女节活动总结
2014/03/01 职场文书
艾滋病宣传活动总结
2014/05/08 职场文书
推荐信模板
2014/05/09 职场文书
2014年学校教学工作总结
2014/12/06 职场文书
最感人的道歉情书
2015/05/12 职场文书
残联2016年全国助残日活动总结
2016/04/01 职场文书