SciPy 中的 nquad 集成

计算科学 scipy 一体化
2021-12-02 01:58:56

我正在尝试自学 SciPy 并使用以下四重积分来评估scipy.integrate.nquad

01010101x(w+y)dzdydxdw

我写了以下代码:

from scipy import integrate

def f(z, y, x, w):
    return w + y

def bounds(z):
    return [0, 1-z]



I = integrate.nquad(f, [bounds, [0,1], [0,1], [0,1]])

                    
print(I)

但是,它给出了以下错误:

bounds() takes 1 positional argument but 3 were given

非常感谢解决这个四重积分的任何帮助。

1个回答

假设它是w具有范围的变量[0,1x]

from  scipy.integrate import nquad

def func(w,x,y,z):
    return w+y

def range_z():
    return [0,1]

def range_y(z):
    return [0,1]

def range_x(y, z):
    return [0,1]

def range_w(x, y, z):
    return (0,1-x)

res=nquad(func, [range_w, range_x, range_y, range_z])
print(res)

运行它会产生 0.41666666666666674,它与分析答案 5/12 匹配。

假设它是z具有范围的变量[0,1x],

from  scipy.integrate import nquad

def func(z,y,x,w):
    return w+y

def range_w():
    return [0,1]

def range_x(w):
    return [0,1]

def range_y(x,w):
    return [0,1]

def range_z(y,x,w):
    return (0,1-x)

res=nquad(func, [range_z, range_y, range_x, range_w])
print(res)

在这种情况下,代码的答案是 0.5,与分析答案 1/2 匹配。