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中函数的参数
Apr 27 Python
举例讲解Python中装饰器的用法
Apr 27 Python
Python冒泡排序注意要点实例详解
Sep 09 Python
Python数据结构与算法之完全树与最小堆实例
Dec 13 Python
使用Python实现windows下的抓包与解析
Jan 15 Python
Python模块WSGI使用详解
Feb 02 Python
Python集成开发工具Pycharm的安装和使用详解
Mar 18 Python
python爬虫中的url下载器用法详解
Nov 30 Python
pytest进阶教程之fixture函数详解
Mar 29 Python
Django一小时写出账号密码管理系统
Apr 29 Python
Python利用folium实现地图可视化
May 23 Python
Python 中面向接口编程
May 20 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
ThinkPHP3.1.3版本新特性概述
2014/06/19 PHP
PHP中返回引用类型的方法
2015/04/03 PHP
jQuery学习2 选择器的使用说明
2010/02/07 Javascript
JavaScript中的noscript元素属性位置及作用介绍
2013/04/11 Javascript
屏蔽IE弹出&quot;您查看的网页正在试图关闭窗口,是否关闭此窗口&quot;的方法
2013/12/31 Javascript
Firefox中使用outerHTML的2种解决方法
2014/06/07 Javascript
javascript框架设计读书笔记之种子模块
2014/12/02 Javascript
2014年50个程序员最适用的免费JQuery插件
2014/12/15 Javascript
基于jQuery实现响应式圆形图片轮播特效
2015/11/25 Javascript
原生js页面滚动延迟加载图片
2015/12/20 Javascript
bootstrapfileinput实现文件自动上传
2016/11/08 Javascript
vue 如何添加全局函数或全局变量以及单页面的title设置总结
2017/06/01 Javascript
vue实现codemirror代码编辑器中的SQL代码格式化功能
2019/08/27 Javascript
d3.js实现图形缩放平移
2019/12/19 Javascript
node.JS事件机制与events事件模块的使用方法详解
2020/02/06 Javascript
centos系统升级python 2.7.3
2014/07/03 Python
Python中的进程分支fork和exec详解
2015/04/11 Python
使用Pyrex来扩展和加速Python程序的教程
2015/04/13 Python
利用Python脚本生成sitemap.xml的实现方法
2017/01/31 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
2018/02/03 Python
Python反射的用法实例分析
2018/02/11 Python
使用python和pygame绘制繁花曲线的方法
2018/02/24 Python
python中嵌套函数的实操步骤
2019/02/27 Python
Python如何访问字符串中的值
2020/02/09 Python
python梯度下降算法的实现
2020/02/24 Python
利用HTML5+CSS3实现3D转换效果实例详解
2017/05/02 HTML / CSS
Ruby中的保护方法和私有方法与一般面向对象程序设计语言的一样吗
2013/05/01 面试题
考试违纪检讨书
2014/02/02 职场文书
劳动竞赛活动方案
2014/02/20 职场文书
活动倡议书范文
2014/05/13 职场文书
商场促销活动策划方案
2014/08/18 职场文书
2014年信息中心工作总结
2014/12/17 职场文书
教师年终个人总结
2015/02/11 职场文书
于丹讲座视频观后感
2015/06/15 职场文书
奠基仪式致辞
2015/07/30 职场文书
Python进度条的使用
2021/05/17 Python