【问题标题】:Simpson rule integration,Python辛普森规则集成,Python
【发布时间】:2016-05-05 03:42:30
【问题描述】:

我写了这段代码,但我不确定它是否正确。在辛普森规则中,有一个条件是它必须有偶数个间隔。我不知道如何将这个条件印在我的代码中。

def simpson(data):
    data = np.array(data)
    a = min(range(len(data)))
    b = max(range(len(data)))
    n = len(data)
    h = (b-a)/n
    for i in range(1,n, 2):
        result += 4*data[i]*h
    for i in range(2,n-1, 2):
        result += 2*data[i]*h
    return result * h /3

【问题讨论】:

  • 积分下限
  • 您应该尝试打印 Min, range, len。其中一个似乎是 List 类型的变量而不是函数
  • 您的意思是min()?从集合中获取最小整数的内置函数?
  • 是的,你当然是对的
  • 这个a = min(range(len(data)))总是给出a = 0,这个b = max(range(len(data)))总是给出b = len(data)-1——也许你尝试做一些不同的事情。

标签: python integral simpsons-rule


【解决方案1】:

有趣的是,你可以在Wikipedia entry找到它:

from __future__ import division  # Python 2 compatibility

def simpson(f, a, b, n):
    """Approximates the definite integral of f from a to b by the
    composite Simpson's rule, using n subintervals (with n even)"""

    if n % 2:
        raise ValueError("n must be even (received n=%d)" % n)

    h = (b - a) / n
    s = f(a) + f(b)

    for i in range(1, n, 2):
        s += 4 * f(a + i * h)
    for i in range(2, n-1, 2):
        s += 2 * f(a + i * h)

    return s * h / 3

你在哪里使用它:

simpson(lambda x:x**4, 0.0, 10.0, 100000)

注意它是如何通过需要一个函数和n 来绕过奇偶校验问题的。

如果您需要它作为值列表,那么在调整代码之后(这应该很容易),我建议您也提出一个ValueError,以防它的长度不均匀。

【讨论】:

    【解决方案2】:

    由于您似乎已经在使用 numpy,您也可以考虑使用 scipy,它可以方便地提供 Simpson 的规则集成例程。

    from scipy.integrate import simps
    result=simps(data)
    

    请参阅 http://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.integrate.simps.html 以获取完整文档(他们在其中讨论偶数/奇数间隔的处理)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-08
      • 1970-01-01
      • 2016-02-16
      • 2014-12-17
      • 2018-05-19
      • 2020-01-19
      • 2015-12-15
      • 1970-01-01
      相关资源
      最近更新 更多