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 28 Python
Python发送以整个文件夹的内容为附件的邮件的教程
May 06 Python
Python可变参数*args和**kwargs用法实例小结
Apr 27 Python
python脚本生成caffe train_list.txt的方法
Apr 27 Python
Python用5行代码写一个自定义简单二维码
Oct 21 Python
python面试题Python2.x和Python3.x的区别
May 28 Python
django中forms组件的使用与注意
Jul 08 Python
PyQt5通信机制 信号与槽详解
Aug 07 Python
python实现从wind导入数据
Dec 03 Python
Python调用Windows命令打印文件
Feb 07 Python
python代码如何实现余弦相似性计算
Feb 09 Python
python的flask框架难学吗
Jul 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
PHP安装memcached扩展笔记
2015/05/28 PHP
PHP 记录访客的浏览信息方法
2018/01/29 PHP
PHP _construct()函数讲解
2019/02/03 PHP
javascript入门基础之私有变量
2010/02/23 Javascript
js 实现复制到粘贴板的功能代码
2010/05/13 Javascript
基于jquery的给文章加入关键字链接
2010/10/26 Javascript
js open() 与showModalDialog()方法使用介绍
2013/09/10 Javascript
JavaScript实现文本框中默认显示背景图片在获得焦点后消失的方法
2015/07/01 Javascript
JQuery的Pager分页器实现代码
2016/05/03 Javascript
Nodejs全局安装和本地安装的不同之处
2016/07/04 NodeJs
如何使用headjs来管理和异步加载js
2016/11/29 Javascript
JS及JQuery对Html内容编码,Html转义
2017/02/17 Javascript
微信小程序遇到修改数据后页面不渲染的问题解决
2017/03/09 Javascript
原生JS实现左右箭头选择日期实例代码
2017/03/14 Javascript
微信小程序页面滑动屏幕加载数据效果
2020/11/16 Javascript
微信小程序倒计时功能实现代码
2017/11/09 Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
2018/09/18 Javascript
vue移动端弹框组件的实例
2018/09/25 Javascript
webpack HappyPack实战详解
2019/10/08 Javascript
用VsCode编辑TypeScript的实现方法
2020/05/07 Javascript
Pyhthon中使用compileall模块编译源文件为pyc文件
2015/04/28 Python
Python3中的列表,元组,字典,字符串相关知识小结
2017/11/10 Python
pandas dataframe添加表格框线输出的方法
2019/02/08 Python
python调用虹软2.0第三版的具体使用
2019/02/22 Python
Django接收post前端返回的json格式数据代码实现
2019/07/31 Python
Python实现鼠标自动在屏幕上随机移动功能
2020/03/14 Python
OpenCV 之按位运算举例解析
2020/06/19 Python
Django封装交互接口代码
2020/07/12 Python
纯CSS改变webkit内核浏览器的滚动条样式
2014/04/17 HTML / CSS
新闻记者个人求职的自我评价
2013/11/28 职场文书
公务员转正鉴定材料
2014/02/11 职场文书
保险公司晨会主持词
2014/03/22 职场文书
个人融资协议书范本两则
2014/10/15 职场文书
小学班主任工作总结2015
2015/04/07 职场文书
小学教师见习总结
2015/06/23 职场文书
教师教育心得体会
2016/01/19 职场文书