【发布时间】:2021-04-18 06:49:08
【问题描述】:
下面代码中的第一个函数使用与scipy.integrate.dblquad的双重积分来计算copula密度函数c的微分熵c*np.log(c),它有一个依赖参数@ 987654326@,通常为正数。
下面代码中的第二个函数尝试解决与上面相同的问题,但使用了多重积分求解器scipy.integrate.nquad
from scipy import integrate
import numpy as np
def dblquad_(theta):
"Double integration"
c = lambda v, u: ((1+theta)*(u*v)**(-1-theta)) * (u**(-theta)+v**(-theta)-1)**(-1/theta-2)
return -integrate.dblquad(
lambda u,v: c(v,u)*np.log(c(v,u)),
0, 1, lambda u: 0, lambda u: 1
)[0]
def nquad_(n,theta):
"Multiple integration"
c = lambda *us: ((1+theta)*np.prod(us)**(-1-theta)) * (np.sum(np.power(us,-theta))-1)**(-1/theta-2)
return -integrate.nquad(
func = lambda *us : c(*us)*np.log(c(*us)),
ranges = [(0,1) for i in range(n)],
args = (theta,)
)[0]
n=2
theta = 1
print(dblquad_(theta))
print(nquad_(n,theta))
基于dblquad 的函数给出-0.7127 的答案,而nquad 给出-0.5823 并且明显需要更长的时间。为什么即使我都设置为解决n=2 维问题,解决方案却不同?
【问题讨论】:
标签: python math scipy integral mismatch