使用Scipy与单个变量进行多次集成

时间:2017-10-25 19:23:53

标签: python scipy

我有一个加速度a(t)的函数,我知道如果我相对于t积分两次,我可以找到位置x(t)。我想在t = 10秒找到位置。

由于a(t)不是多变量的,因此我无法使用Scipy dblquad函数来计算我需要的双积分。请看看我到目前为止:

  def a(t):
      return (2.5 / (1 + math.exp((t-8)/0.8)))

  def upperbound():
       return 10

  def lowerbound():
      return 0

  x = dblquad(a,0,10,lowerbound,upperbound)

这不起作用,因为我可以收集dblquad需要多变量a(t)。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:4)

您可以使用scipy的单变量集成两次来完成此操作

import math
from scipy.integrate import quad

def a(t):
    return (2.5 / (1 + math.exp((t-8)/0.8)))

lb, ub = 0, 10

integral = quad(lambda t: quad(a, 0, t)[0], lb, ub)[0]
print(integral)
# 86.28470375472537

这是必要的,因为你想要实现的不是集成两个变量的函数,而是将两个变量的函数集成两次。在上面的积分语句中,内部quad将函数集成一次,但将积分保持为t的函数。外部quad第二次将函数集成到定义的限制之上。

请注意,必须从quad的输出中获取第一个参数,因为它输出一个元组。第二个参数是数值积分误差的上限。