代码之家  ›  专栏  ›  技术社区  ›  kilojoules

使用scipy。整合simps或类似工具,用于集成三个向量

  •  0
  • kilojoules  · 技术社区  · 7 年前

    我想近似一个我没有实际解析表达式的函数。我知道我想计算这个积分: integral a * b * c dx . 假装我得到了 a , b c 这些数据来自观测数据。如何计算此积分?可以 scipy 这样做?是 scipy.integrate.simps 正确的方法?

    import numpy as np
    from scipy.integrate import simps
    
    a = np.random.random(10)
    b = np.random.uniform(0, 10, 10)
    c = np.random.normal(2, .8, 10)
    x = np.linspace(0, 1, 10)
    dx = x[1] - x[0]
    
    print 'Is the integral of a * b * dx is ', simps(a * b, c, dx), ', ', simps(b * a, c, dx), ',', simps(a, b * c, dx), ', ', simps(a, c * b, dx), ', or something else?'
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   user6655984 user6655984    7 年前

    通过设置,正确的集成方法是

    simps(a*b*c, x)   # function values, argument values
    

    simps(a*b*c, dx=dx)   # function values, uniform spacing between x-values
    

    两者产生相同的结果。对 simps 是集成采样数据的非常好的选择。大多数情况下,它比 trapz .

    如果数据来自一个平滑函数(即使你不知道该函数),并且你可以通过某种方式将点数设为1,而不是2的幂,那么 Romberg integration 会更好。我比较了 梯形公式 vs公司 simps vs公司 quad 在里面 this post .