Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在一次pnorm调用中访问正常CDF的两个尾部_C++_R - Fatal编程技术网

C++ 在一次pnorm调用中访问正常CDF的两个尾部

C++ 在一次pnorm调用中访问正常CDF的两个尾部,c++,r,C++,R,我正在编写一个R包,其中我需要对一个非常大的矩阵a(例如,5000 x 20000)的每个条目多次计算正常CDFPhi(.),并对两个尾部进行精确计算,即log(Phi(a))和log(1-Phi(a)) 到目前为止,我已经使用R函数pnorm两次了 logphiA <- pnorm(A, log.p = TRUE) log1_phiA <- pnorm(A, log.p = TRUE, lower.tail = FALSE) 因为在我的案例中,这会导致稳定性问题 我查阅了 Pri

我正在编写一个R包,其中我需要对一个非常大的矩阵
a
(例如,5000 x 20000)的每个条目多次计算正常CDF
Phi(.)
,并对两个尾部进行精确计算,即
log(Phi(a))
log(1-Phi(a))

到目前为止,我已经使用R函数
pnorm
两次了

logphiA <- pnorm(A, log.p = TRUE)
log1_phiA <- pnorm(A, log.p = TRUE, lower.tail = FALSE)
因为在我的案例中,这会导致稳定性问题

我查阅了 Prime>代码>的C++实现,我看到它调用了一个空函数<代码> pNoMy.< /Cord>,它可以同时计算两个尾,并在函数<代码> pNAM5中使用,参见例如。所以我想知道,如果我能在R代码中调用它,这对我来说是否是一个更便宜的选择。你知道这是否是一种选择吗?还是应该复制C++源并相应修改<代码> pQualue<函数?< /P> 或者,在不放弃计算精度的情况下,您会有另一种更快地评估正常CDF的想法吗


谢谢

精确计算尾部的算法很昂贵。我怀疑开销是问题所在,所以重新实现或更改C代码可能不会有帮助。我怀疑如果你牺牲准确性,你只能提高速度(在一般情况下)。不过,也许
log1_phiA_1非常感谢您的回复罗兰。好的,我将使用
expm1
运行一些测试,并查看算法的行为。
log1_phiA <- log(1-exp(logphiA))