Double integration of x*np.log(x) in Python using scipy.integrate.dblquad

余生长醉 提交于 2021-02-10 14:33:11

问题


The code below uses double integration with scipy.integrate.dblquad to calculate the differential entropy, c*np.log(c), of a copula density function c, which has one dependence parameter, theta, usually positive. Formula can be found here.

import numpy as np
from scipy import integrate 

def copula_entropy(theta):
    c = lambda v, u: ((1+theta)*(u*v)**(-1-theta)) * (u**(-theta) 
        + v**(-theta) -1)**(-1/theta-2)
    return -integrate.dblquad(c*np.log(c), 0, 1, lambda u: 0, lambda u: 1)[0] 

Calling the function with

copula_entropy(1)

returns the error

TypeError: loop of ufunc does not support argument 0 of type function which has no callable log method

How can the function be made to work?


回答1:


The first argument must be a callable, so just wrap it in a lambda itself:

import numpy as np
from scipy import integrate 

def copula_entropy(theta):
    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] 

(Please note that I also changed the expression for c according to the formula you gave).



来源:https://stackoverflow.com/questions/65661541/double-integration-of-xnp-logx-in-python-using-scipy-integrate-dblquad

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!