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 相关文章推荐
Linux下编译安装MySQL-Python教程
Feb 02 Python
python类中super()和__init__()的区别
Oct 18 Python
浅析使用Python操作文件
Jul 31 Python
初学python的操作难点总结(新手必看篇)
Aug 03 Python
Python3实现获取图片文字里中文的方法分析
Dec 13 Python
Python3 max()函数基础用法
Feb 19 Python
python 判断linux进程,并杀死进程的实现方法
Jul 01 Python
使用tqdm显示Python代码执行进度功能
Dec 08 Python
浅谈pytorch torch.backends.cudnn设置作用
Feb 20 Python
keras实现多种分类网络的方式
Jun 11 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
Nov 18 Python
Python OpenCV超详细讲解调整大小与图像操作的实现
Apr 02 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
Laravel 6 将新增为指定队列任务设置中间件的功能
2019/08/06 PHP
PHP预定义接口――Iterator用法示例
2020/06/05 PHP
转换json格式的日期为Javascript对象的函数
2010/07/13 Javascript
分享27款非常棒的jQuery 表单插件
2011/03/28 Javascript
node.js中的path.basename方法使用说明
2014/12/09 Javascript
JavaScript动态添加列的方法
2015/03/25 Javascript
JS动态修改iframe内嵌网页地址的方法
2015/04/01 Javascript
jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表
2015/08/26 Javascript
jQuery webuploader分片上传大文件
2016/11/07 Javascript
JS返回只包含数字类型的数组实例分析
2016/12/16 Javascript
微信小程序微信支付接入开发实例详解
2017/04/12 Javascript
JavaScript多线程运行库Nexus.js详解
2017/12/22 Javascript
Vue 仿QQ左滑删除组件功能
2018/03/12 Javascript
vue 每次渲染完页面后div的滚动条保持在最底部的方法
2018/03/17 Javascript
webpack打包react项目的实现方法
2018/06/21 Javascript
Node.js npm命令运行node.js脚本的方法
2018/10/10 Javascript
vue路由--网站导航功能详解
2019/03/29 Javascript
JavaScript 预解析的4种实现方法解析
2019/09/03 Javascript
JavaScript canvas绘制渐变颜色的矩形
2020/02/18 Javascript
Python 面向对象 成员的访问约束
2008/12/23 Python
python算法学习之计数排序实例
2013/12/18 Python
Python selenium 父子、兄弟、相邻节点定位方式详解
2016/09/15 Python
使用Python更换外网IP的方法
2018/07/09 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
2018/10/18 Python
python输入多行字符串的方法总结
2019/07/02 Python
Python列表的切片实例讲解
2019/08/20 Python
python rsync服务器之间文件夹同步脚本
2019/08/29 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
Python Sqlalchemy如何实现select for update
2020/10/12 Python
Pam & Gela官网:美国性感前卫女装品牌
2018/07/19 全球购物
EJB需直接实现它的业务接口或Home接口吗,请简述理由
2016/11/23 面试题
护理专业推荐信
2013/11/07 职场文书
展会邀请函范文
2014/01/26 职场文书
《走一步再走一步》教学反思
2014/02/15 职场文书
Python 居然可以在 Excel 中画画你知道吗
2022/02/15 Python
vue使用wavesurfer.js解决音频可视化播放问题
2022/04/04 Vue.js