gpt4 book ai didi

python - 使用 scipy.integrate.nquad 的多重积分 - lambda 函数上的错误

转载 作者:行者123 更新时间:2023-12-03 08:32:27 24 4
gpt4 key购买 nike

我在下面的代码中尝试以下多重积分以获得高于 bivariate version ( n=2 ) copula 密度函数,c(u1,u2) .换句话说,n>2方面。
enter image description here

import numpy as np
from scipy import integrate

def H(theta):
c = lambda *us: ((1+theta)*np.prod(*us)**(-1-theta)) * (np.sum(*us **(-theta))-1)**(-1/theta-2)
return -integrate.nquad(
func = lambda *us : c(*us)*np.log(c(*us)),
ranges = (0,1)**n,
args = (theta,)
)[0]

theta, n = 1, 3
print(H(theta))
在哪里 *us表示 u 的任意数的我可以传入。 integrate.nquad 的第二个输入参数,即 ranges=(0,1)**n , 是积分的 [0,1] 支持,由于 n u 的尺寸的,我试图在上面的推导中解释。但是,这部分代码给出了以下错误。
  • TypeError: unsupported operand type(s) for ** or pow(): 'tuple' and 'int'

  • 如果我将此输入更改为 ranges=(0,1)通过删除指数 n正如错误所建议的那样,我得到一个不同的错误:
  • low, high = fn_range(*args)TypeError: cannot unpack non-iterable int object

  • 我真的应该如何声明 [(0,1)**n]支持 integrate.nquad 中的多重积分? documentation没有给出匹配的例子。

    最佳答案

    由于评论部分已重载,因此发布了一些评论作为答案。
    (1) 我认为是 (0, 1)**2你的意思是说乘积 (0, 1) x (0, 1),即单位平方。我认为 Python 不会理解这一点。如果您需要告诉 nquad 积分域是单位平方,我认为您需要以其他方式说。
    (2) 请发布您实际使用的函数的公式,即 c(u)。请记住,当您省略详细信息或将它们推迟到链接时,只会让其他人更难理解,因此您获得有效帮助的可能性也会降低。
    (3) 熵计算的积分域就是所谓的概率函数的支持,即概率大于零的集合。 c(u)的支持是什么?这定义了集成领域。在教科书或其他说明中习惯说域是 R 或 (-inf, +inf) 或以其他方式使其模棱两可,但对于实际计算,您需要将其缩减为支持。
    对不起,我不能提供更多帮助,这是一个有趣的问题。

    关于python - 使用 scipy.integrate.nquad 的多重积分 - lambda 函数上的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65691228/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com