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 实现将txt文件多行合并为一行并将中间的空格去掉方法
Dec 20 Python
pyqt5 删除layout中的所有widget方法
Jun 25 Python
flask框架路由常用定义方式总结
Jul 23 Python
python爬虫selenium和phantomJs使用方法解析
Aug 08 Python
python中web框架的自定义创建
Sep 08 Python
Python中低维数组填充高维数组的实现
Dec 02 Python
Python编写一个验证码图片数据标注GUI程序附源码
Dec 09 Python
Windows 下python3.8环境安装教程图文详解
Mar 11 Python
PyCharm中Matplotlib绘图不能显示UI效果的问题解决
Mar 12 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
Apr 17 Python
Pytorch 使用CNN图像分类的实现
Jun 16 Python
Python包资源下载路径报404解决方案
Nov 05 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.MVC的模板标签系统(三)
2006/09/05 PHP
PHP文件去掉PHP注释空格的函数分析(PHP代码压缩)
2013/07/02 PHP
php数组合并array_merge()函数使用注意事项
2014/06/19 PHP
php 的反射详解及示例代码
2016/08/25 PHP
Thinkphp实现短信验证注册功能
2016/10/18 PHP
PHP大文件分块上传功能实例详解
2019/07/22 PHP
js中符号转意问题示例探讨
2013/08/19 Javascript
鼠标滑在标题上显示图片的JS代码
2013/11/19 Javascript
JS事件在IE与FF中的区别详细解析
2013/11/20 Javascript
FireBug 调试JS入门教程 如何调试JS
2013/12/23 Javascript
javascript 回到顶部效果的实现代码
2014/02/17 Javascript
jQuery实现表单提交时判断的方法
2014/12/13 Javascript
浅谈javascript的分号的使用
2015/05/12 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
2015/09/01 Javascript
清除浏览器缓存的几种方法总结(必看)
2016/12/09 Javascript
详解vue.js全局组件和局部组件
2017/04/10 Javascript
详解vue2.0 transition 多个元素嵌套使用过渡
2017/06/19 Javascript
基于daterangepicker日历插件使用参数注意的问题
2017/08/10 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
2017/12/08 Javascript
使用命令行工具npm新创建一个vue项目的方法
2017/12/27 Javascript
Vue组件之单向数据流的解决方法
2018/11/10 Javascript
使用kbone解决Vue项目同时支持小程序问题
2019/11/08 Javascript
不刷新网页就能链接新的js文件方法总结
2020/03/01 Javascript
JS实现按比例缩小图片宽高
2020/08/24 Javascript
python3 re返回形式总结
2020/11/20 Python
Django使用django-simple-captcha做验证码的实现示例
2021/01/07 Python
一些常用的HTML5模式(pattern) 总结
2015/07/14 HTML / CSS
美国摄影爱好者购物网站:Focus Camera
2016/10/21 全球购物
TheFork葡萄牙:欧洲领先的在线餐厅预订平台
2019/05/27 全球购物
大三自我鉴定范文
2013/10/05 职场文书
平面设计师工作职责范文
2013/12/03 职场文书
酒店前厅员工辞职信
2014/01/08 职场文书
年度献血先进个人事迹材料
2014/02/14 职场文书
党员批评与自我批评发言稿
2014/10/14 职场文书
2014最新自愿离婚协议书范本
2014/11/19 职场文书
2015迎新晚会开场白
2015/07/17 职场文书