Python 实现定积分与二重定积分的操作

作者:qq_33203870 时间:2023-08-05 18:22:27 

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),它也是蒙特卡洛法中的一种类型适用于不能直接抽样的情况。

来源:https://blog.csdn.net/qq_33203870/article/details/101038006

标签:Python,二重,定积分
0
投稿

猜你喜欢

  • asp fso type属性取得文件类型代码

    2009-02-04 10:09:00
  • tensorflow求导和梯度计算实例

    2023-08-09 14:07:38
  • 变量声明时命名与变量作为对象属性时命名的区别解析

    2024-06-12 19:58:32
  • wxPython之解决闪烁的问题

    2022-05-12 13:21:30
  • 基于Keras的格式化输出Loss实现方式

    2021-10-20 20:44:00
  • Django 返回json数据的实现示例

    2021-03-06 21:33:17
  • Python循环实现n的全排列功能

    2022-08-15 21:04:08
  • 表格头固定而列可滚动的效果

    2020-08-11 21:28:41
  • python实现redis三种cas事务操作

    2022-08-27 01:50:59
  • python正则过滤字母、中文、数字及特殊字符方法详解

    2022-02-20 10:14:47
  • 详解vue事件对象、冒泡、阻止默认行为

    2024-04-28 09:26:19
  • Python使用Pandas库常见操作详解

    2022-12-10 09:03:13
  • Python Pandas聚合函数的应用示例

    2022-12-13 22:39:31
  • ASP.NET MVC使用区域(Area)功能

    2024-06-05 09:25:04
  • 基于python的itchat库实现微信聊天机器人(推荐)

    2021-11-30 13:54:21
  • PHP文件上传功能实现逻辑分析

    2023-05-25 02:28:30
  • 解决django FileFIELD的编码问题

    2023-07-01 04:28:42
  • Javascript之Date对象详解

    2024-06-07 15:53:58
  • Go语言常见哈希函数的使用

    2024-02-04 16:09:23
  • VSCode 配置uni-app的方法

    2024-04-29 13:18:00
  • asp之家 网络编程 m.aspxhome.com