【问题标题】:Large array returned from scipy integrate quad从 scipy 集成四边形返回的大数组
【发布时间】:2015-03-18 15:27:15
【问题描述】:

每个人。我试图使用 scipy.quad 以数值方式计算积分。但是,它返回一个非常大的数组,没有其他错误。任何人都可以看到问题吗?该代码使用简单的积分可以很好地工作,例如 四边形(λ 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

【问题讨论】:

  • 您忘记发布一些代码了吗?请发布显示问题和确切回溯/输出的确切代码。

标签: python scipy integrate


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-07-30
    • 2013-05-23
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 2022-07-01
    • 1970-01-01
    • 2012-08-11
    相关资源
    最近更新 更多