从scipy整合quad返回的大数组

时间:2015-03-18 15:27:16

标签: python scipy integrate

大家。我试图使用scipy.quad以数字方式计算积分。但是,它返回一个非常庞大的数组而没有其他错误。有谁能看到这个问题?代码工作非常精细,简单的积分就像 四(lambda x:x ** 2,0,4) 但是对于下面的代码 尝试a = 20,b = 20,c = 20,j = 1你得到一个非常庞大的结果列表,重复数字

def Lj(a,b,c,j):
    R1=a
    R2=b
    R3=c
    if j==1:
        Rj=a
    elif j==2:
        Rj=b
    elif j==3:
        Rj=c
    else:
        raise ValueError('j needs to be an integer between 1 and 3')

    result = (R1*R2*R3)*quad(lambda s: 1/((s+Rj**2)*sqrt(((s+R1**2)*(s+R2**2)*(s+R3**2))))/2, 0, inf)
    return result

enter image description here

1 个答案:

答案 0 :(得分:3)

quad返回一个包含积分和误差估计的元组。您将此元组乘以R1*R2*R3,这会复制元组R1*R2*R3次。

要解决此问题,请仅使用quad返回的第一个值。也就是说,替换这个:

result = (R1*R2*R3)*quad(lambda s: 1/((s+Rj**2)*sqrt(((s+R1**2)*(s+R2**2)*(s+R3**2))))/2, 0, inf)

有这样的事情:

intgrl, err = quad(lambda s: 1/((s+Rj**2)*sqrt(((s+R1**2)*(s+R2**2)*(s+R3**2))))/2, 0, inf)
result = (R1*R2*R3)*intgrl