CUDA的beta pdf函数

CUDA的beta pdf函数,cuda,statistics,Cuda,Statistics,我需要像CUDA中的betapdf(x,a,b)()函数这样的东西?CUDA是否有此函数,或者我应该自己实现它?我不知道beta函数,但CUDA中有两种不同的gamma函数,请参阅:了解更多详细信息。我不知道beta函数,但CUDA中有两种不同的gamma函数,请参阅:了解更多详细信息。这是一个可以在主机和设备上使用的函数。在主机上,您需要包含math.h __host__ __device__ double betapdf(double x, double a, double b) {

我需要像CUDA中的betapdf(x,a,b)()函数这样的东西?CUDA是否有此函数,或者我应该自己实现它?

我不知道beta函数,但CUDA中有两种不同的gamma函数,请参阅:了解更多详细信息。

我不知道beta函数,但CUDA中有两种不同的gamma函数,请参阅:了解更多详细信息。

这是一个可以在主机和设备上使用的函数。在主机上,您需要包含math.h

__host__ __device__ 
double betapdf(double x, double a, double b)
{
   //if (x < 0 || x > 1) return 0;
   double tmp = pow((1 - x), (b - 1)) * pow(x, (a - 1));
   double iB = tgamma(a + b) / (tgamma(a) * tgamma(b));  // 1/B
   return tmp * iB;
}

这是一个可以在主机和设备上使用的函数。在主机上,您需要包含math.h

__host__ __device__ 
double betapdf(double x, double a, double b)
{
   //if (x < 0 || x > 1) return 0;
   double tmp = pow((1 - x), (b - 1)) * pow(x, (a - 1));
   double iB = tgamma(a + b) / (tgamma(a) * tgamma(b));  // 1/B
   return tmp * iB;
}


与问题相同?@GeorgeAprilis不完全beta函数不同于OP所问的betapdf。与问题相同?@GeorgeAprilis不完全beta函数不同于OP所问的betapdf。这与问题有关吗?是的,它们彼此之间有关系,允许使用gamma函数而不是beta函数@SorooshBateni~>那么我如何使用你提到的函数计算betapdf(x,a,b)?根据betapdf的计算结果,你必须用(我使用G作为伽马):G(a)*G(b)/(G(a+b)替换b(a,b)我找不到一个公开的C++或C++中的BETAPDF函数源代码,如果你有一个,请在你的问题中张贴。这和问题有什么关系吗?嗯,是的,它们之间有关系,允许使用伽马函数而不是beta函数。@ SooSoBATEnii~~~所以我如何计算BETAPDF?(x,a,b)使用你提到的函数?根据betapdf的定义,你必须用(我使用G作为伽马)替换b(a,b):G(a)*G(b)/(G(a+b)好的,我找不到C++或C++中公开的BETAPDF函数的源代码,如果你有一个,请把它放在你的问题中。根据代码的范围> A<代码> >代码> B >代码>计算β函数<代码>β(a,b)=tGAMMA(a)*tGAMMA(b)/tGAMMA(a+b)可能会出现中间溢出,即使最终结果是可表示的。在这种情况下,您可以使用
beta(a,b)=exp(lgama(a)+lgama(b)-lgama(a+b))
取而代之。@njuffa谢谢我会添加它!统计函数不在我的专业范围内,但你确定代码应该乘以beta函数而不是除以它吗?我看到的公式是:betapdf(x,a,b)=x**(a-1)*(1-x)**(b-1)/beta(a,b)。我不知道哪个版本是正确的。你能再检查一下吗?@njuffa哎呀。你说得对。我早上很匆忙,错过了那一点。取决于
a
b
的范围,beta函数的计算
beta(a,b)=tgamma(a)*tgamma(b)/tgamma(a+b)
可能会出现中间溢出,即使最终结果是可表示的。在这种情况下,您可以使用
beta(a,b)=exp(lgama(a)+lgama(b)-lgama(a+b))
取而代之。@njuffa谢谢我会添加它!统计函数不在我的专业范围内,但你确定代码应该乘以beta函数而不是除以它吗?我看到的公式是:betapdf(x,a,b)=x**(a-1)*(1-x)**(b-1)/beta(a,b).我不知道哪个版本是正确的。你能再检查一下吗?@njuffa哎呀。你就在那里。我早上很匆忙,错过了那一点。