数值计算具有非常数极限的三重积分。
我想用数值方法计算一个二元函数f(x,y)
的三重积分,其中x和y都有积分极限[a+t0-t,b+t0-t],第三个积分在t上有积分极限[t0,t0+a]。我已经试过使用scipy.integrate中的tplquad或nquad来跟踪几个例子,但似乎都不起作用。这是我以前的尝试:
from scipy.integrate import quad, dblquad, tplquad, nquad
def f(x, y):
# Define your function f(x, y) here
return x + y # Example function: x + y
def integrate_function(a, b, t0):
# Define the limits of integration
x_lower = lambda t: a + t0 - t
x_upper = lambda t: b + t0 - t
y_lower = lambda x, t: a + t0 - t
y_upper = lambda x, t: b + t0 - t
t_lower = t0
t_upper = t0 + a
# Perform the triple integration
result, _ = tplquad(f, t_lower, t_upper, y_lower, y_upper, x_lower, x_upper)
return result
# Example usage
a = 1
b = 2
c = 3
t0 = 0
result = integrate_function(a, b, t0)
这会产生错误:
TypeError: integrate_function.<locals>.<lambda>() missing 1 required positional argument: 't'
我目前的尝试是能够使用nquad计算二重积分:
def f(x, y):
return x*y
def bounds_y(t0, a):
return [t0, t0+a]
def bounds_x(y,a,b,t0):
return [a+t0-y, b+t0-y]
def integrate(a,b,t0):
return nquad(f, [lambda y: bounds_x(y,a,b,t0), bounds_y(t0,a)])
integrate(2,5,0)
当我尝试实现第三个积分时:
def f(x, y, t):
return 1
def bounds_t(t0, a):
return [t0, t0+a]
def bounds_x(y,a,b,t0):
return [a+t0-y, b+t0-y]
def integrate(a,b,t0):
return nquad(f, [lambda t: bounds_x(t,a,b,t0), lambda t: bounds_x(t,a,b,t0), bounds_t(t0,a)])
integrate(2,5,0)
它给出错误TypeError: integrate.<locals>.<lambda>() takes 1 positional argument but 2 were given
2条答案
按热度按时间h4cxqtbf1#
显然,这是一个诀窍:
4szc88ey2#
要正确使用
nquad
和tplquad
,确实需要仔细阅读文档。以下是通过nquad
和tplquad
解决集成问题的方案:当我在我的机器上运行上面的代码时,我得到:
请注意,正确的参数顺序非常重要,更糟糕的是,
tplquad
和nquad
的约定是相反的。如果你不小心把y
和t
在x
的边界中颠倒过来,你会得到一个错误的答案:如果使用
nquad
,也可以直接将a
、b
和t0
作为参数传递给被积函数和绑定函数,而不必使用上面的闭包。这就是它的样子:我的机器上的结果: