我有一个加速度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)。有人可以帮忙吗?
答案 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
的输出中获取第一个参数,因为它输出一个元组。第二个参数是数值积分误差的上限。