首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >计算积分的有效方法?

计算积分的有效方法?
EN

Stack Overflow用户
提问于 2018-05-17 07:38:55
回答 2查看 283关注 0票数 3

我知道如何用蒙特卡罗来计算积分,但我想知道是否可以用梯形规则和numpy法则相结合来得到同样的积分,我不知道哪一个是最快的,还是后者可能的?

例如,为了集成e**-x**2 > y,我可以使用蒙特卡罗方法,如下所示:

代码语言:javascript
运行
AI代码解释
复制
import numpy as np
import matplotlib.pyplot as plt

X = np.random.rand(500000,2)
X[:,0] = X[:,0]*4-2
J = np.where(X[:,1] < np.exp(-X[:,0]**2))[0]
Xp = X[:2000]
Ip = [i for i in range(len(Xp)) if i in J]
Inp = [i for i in range(len(Xp)) if i not in J]
plt.plot(Xp[Ip,0],Xp[Ip,1], 'bd', Xp[Inp,0],Xp[Inp,1], 'rd')
plt.show()

这可以很容易地计算:

代码语言:javascript
运行
AI代码解释
复制
print len(J) / 500000.0 * 4

这意味着:

代码语言:javascript
运行
AI代码解释
复制
1.767784

在这种情况下,这很容易,但是如果没有在[a,b] , n中指定间隔,并且我想要创建一个函数,那么我认为上面的方法并不是真正有效的,至少我认为是这样的。

那么,我的问题是,我能不能把像cos(x)/x这样的连续函数集成到带有梯形规则的函数中,比如[a,b]这样的确定区间?

这比我在这里用的方法好吗?

每一个建议都是受欢迎的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-17 07:57:33

只需使用scipy.integrate.quad

代码语言:javascript
运行
AI代码解释
复制
from scipy import integrate
from np import inf
from math import exp, sqrt, pi

res, errEstimate = integrate.quad(lambda x: exp(-x**2), -inf, +inf)

print(res)       #output: 1.7724538509055159
print(sqrt(pi))  #output: 1.7724538509055159

最后一行简单地检查求值积分是否确实是Pi的平方根(它是高斯积分)。

票数 1
EN

Stack Overflow用户

发布于 2018-10-12 13:44:24

你也可以使用黎曼近似。下面的代码是用Java编写的

代码语言:javascript
运行
AI代码解释
复制
package math;

import java.util.Optional;
import java.util.function.*;
import java.util.stream.IntStream;
import static java.lang.Math.*;

public class IntegralJava8
{
    public interface Riemann extends BiFunction<Function<Double, Double>, Integer, 
    BinaryOperator<Double>> { }

    public static void main(String args[])
    {
        int N=100000;
        Riemann s = (f, n) -> (a, b) -> 
        IntStream.range(0, n)
        .mapToDouble(i -> f.apply(a + i * ((b - a) / n)) * ((b - a) / n)).sum();
        Optional<Double> gaussIntegral = 
            Optional.of(s.apply(x -> exp(-pow(x, 2)), N).apply(-1000.0, 1000.0));
        gaussIntegral.ifPresent(System.out::println);
    }
}

在上述类中,它将计算从-infinity到无穷大的高斯积分,它等于PI (1.772)的平方根。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50395475

复制
相关文章
积分上限函数_定积分的基本计算方法
设函数 f(x) 在区间 [a,b] 上可积,对任意的 x \in [a,b],做变上限积分
全栈程序员站长
2022/09/20
2.1K0
蒙特卡罗方法计算定积分
0.0 (2.666666666666667, 2.960594732333751e-14)
裴来凡
2022/05/29
3380
蒙特卡罗方法计算定积分
Python 基于积分原理计算定积分并可视化数值积分计算的动画过程
其中,numpy 用来生成点数据,path 是用来生成路径,patches 通过路径连接绘制图像。
叶庭云
2022/05/09
2.3K0
Python 基于积分原理计算定积分并可视化数值积分计算的动画过程
python 微积分计算
dsolve函数是用来解决微分方程(differential equation)的函数。
py3study
2020/01/06
9480
蒙特卡罗计算积分
通常情况下,我们不能解析地求解积分,必须借助其他方法,其中就包括蒙特卡罗积分。你可能还记得,函数的积分可以解释为函数曲线下的面积。
磐创AI
2020/11/09
7830
蒙特卡罗计算积分
计算图的微积分:反向传播
后向传播是训练深度模型在计算上易于处理的关键算法。对于现代神经网络,相对于单纯的实现,它可以使梯度下降的训练速度提高一千万倍。这相当于模型训练时间是需要一个星期还是20万年的差距。
花落花飞去
2018/02/02
1.4K0
计算图的微积分:反向传播
利用scipy计算定积分
#使用scipy模块 求定积分 from numpy import e,pi,inf,sqrt, sin, cos, tan,arctan from scipy.integrate import quad, dblquad, tplquad, nquad # 一重积分 def f(x): return x*x v, err = quad(f,-1,1) #第二个参数为积分下限,第三个参数为积分上限 # quad 返回一个元组,第一个元素为定积分的值,第二个为偏差 print(v,err) #积分上
用户6021899
2020/09/17
1.6K0
数值优化—复杂函数重积分计算方法实例演示
既然要的是数值解,为何还使用符号解?能坐车进城,就决不骑摩托车。复杂函数用数值积分函数quad(f(x),xmin,xmax)完美求解,perfect!不巧的是疑难杂症都让过冷水碰上了,在原问题的基础上需要解决这么个问题:
巴山学长
2023/03/17
9220
数值优化—复杂函数重积分计算方法实例演示
C++ 计算定积分和二重积分
C++编程求定积分和二重积分,利用分割求和算法,可传递任意可积函数进行积分的数值计算。
用户6021899
2021/04/30
4.5K0
C++ 计算定积分和二重积分
数值计算方法 Chapter2. 数值微分和数值积分
不过,如果离散点不够密集,那么使用上述方式进行的微分估计事实上会带来比较大的误差,因此,我们需要对其进行一下调整,此时一种比较直接的方式就是我们先用一个插值函数来对曲线进行拟合,然后再求取插值函数的微分结果作为目标函数的微分结果。
codename_cys
2022/05/16
3.7K0
计算机模拟定积分的定义
黎曼(Riemann)对定积分的定义是:积分区间划分为无数子区间,子区间内任意一点的函数值乘以子区间的长度得到一个矩形面积,然后将这些矩形面积累加起来可以得到积分值。
fem178
2020/07/09
8150
计算机模拟定积分的定义
函数式编程计算数值积分
以函数式编程方式,计算数值积分。 定积分的定义点击这里:定积分的精确定义 下面以定积分 为例,展示过程。 如图所示,将积分区间6等分,每一个子区间长度为0.5,则数值积分值为 最终结果与精确值的误差为 python代码 steps = 6 #积分区间六等分 a = 0.0 b = 3.0 dx = (b-a)/steps #每个子区间长度 f = lambda x: x**3 - 6*x #积分函数 #构造{0,1,2,3,4,5} r = range(steps) #{0,1,
fem178
2021/09/15
1.2K0
函数式编程计算数值积分
DEDECMS织梦添加会员积分的方法
不需要插件实现织梦会员增加签到积分/金币方法,因为很多插件我们大家可能都不了解,有些也可以增加了脚本,所以自己手动添加的比较安全,现在把方法分享给大家。
米米素材网
2022/08/06
4.7K0
DEDECMS织梦添加会员积分的方法
数值分析 有效数字计算
设数x是数x的近似值,如果x的绝对误差限是它的某一数位的半个单位,并且从x左起第一个非零数字到该数位共有n位,则称这n个数字为x的有效数字,也称用x近似x时具有n位有效数字。 —《数值分析(第2版)》张铁 阎家斌 冶金工业出版社
圆号本昊
2021/09/24
1.2K0
数值分析 有效数字计算
COMSOL 中空间与时间积分的方法介绍
积分是数学模型中最重要的功能之一,特别是对数值仿真而言。例如,偏微分方程组 (PDEs) 就是由积分平衡方程派生而来。当需要对偏微分方程进行数值求解时,积分也将发挥非常重要的作用。本文介绍了 COMSOL 软件中可用的积分方法以及如何使用。
技术客
2022/05/24
6.6K0
有效防止softmax计算时上溢出(overflow)和下溢出(underflow)的方法
《Deep Learning》(Ian Goodfellow & Yoshua Bengio & Aaron Courville)第四章「数值计算」中,谈到了上溢出(overflow)和下溢出(underflow)对数值计算的影响,并以softmax函数和log softmax函数为例进行了讲解。这里我再详细地把它总结一下。 『1』什么是下溢出(underflow)和上溢出(overflow)   实数在计算机内用二进制表示,所以不是一个精确值,当数值过小的时候,被四舍五入为0,这就是下溢出。此时如果
10JQKA
2018/07/05
1.5K0
有效防止softmax计算时上溢出(overflow)和下溢出(underflow)的方法
《Deep Learning》(Ian Goodfellow & Yoshua Bengio & Aaron Courville)第四章「数值计算」中,谈到了上溢出(overflow)和下溢出(underflow)对数值计算的影响,并以softmax函数和log softmax函数为例进行了讲解。这里我再详细地把它总结一下。 『1』什么是下溢出(underflow)和上溢出(overflow)   实数在计算机内用二进制表示,所以不是一个精确值,当数值过小的时候,被四舍五入为0,这就是下溢出。此时如果
10JQKA
2018/05/09
2.8K0
有效防止softmax计算时上溢出(overflow)和下溢出(underflow)的方法
如何学习 React - 有效的方法
React 是一个免费的开源前端 JavaScript 库,用于通过将您的应用程序划分为更小的组件来构建复杂的用户界面。它由 Facebook 和开发者社区维护。
玖柒的小窝
2021/09/14
5.4K0
数值积分|高斯积分
如图a所示。这样当然会造成很大的误差。如果在区间内部找两个点,且通过这两个点的直线与区间端点构成的梯形面积最大限度地接近精确值,即图b中A1+A2=A3,这就是高斯积分的思路。
fem178
2020/05/08
5.8K0
数值积分|高斯积分
数值计算——MATLAB数值积分原理详讲
显然这是一个简单的数值积分问题,但是过冷水会给大家分享简单问题吗?其必有玄妙,且听我道来。
巴山学长
2020/03/25
3.9K0
数值计算——MATLAB数值积分原理详讲

相似问题

有效计算双积分

24

有效计算正态分布乘积的积分

14

对图像进行积分的有效方法

15

用MC方法计算积分

23

在Java中计算输入函数的积分/导数的最有效的方法?

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档