代码之家  ›  专栏  ›  技术社区  ›  seamux

与R中的pnorm()相比,atan()是否具有计算优势?

  •  4
  • seamux  · 技术社区  · 7 年前

    This article

    enter image description here

    some discussions 关于arctan函数的算法,它看起来很复杂。相比之下 source code 属于 pnorm()

    使用 atan() pnorm() 在R中,尤其是在已有大量基于正常PDF的其他数值计算的情况下,具有大数据和高参数空间?

    1 回复  |  直到 7 年前
        1
  •  3
  •   ekstroem    7 年前

    出于好奇想看它

    首先定义函数

    PNORM <- function(x) { 1/(exp(-358/23*x + 111*atan(37*x/294)) + 1) }
    

    x <- seq(-4, 4, .01)
    plot(x, pnorm(x)-PNORM(x), type="l", lwd=3, ylab="Difference")
    

    这导致了这张图

    enter image description here

    因此,差异很小,但在某些应用中可能不足以忽略。YMMV。如果我们看一下计算时间,那么它们大致等于近似值,似乎略快一些

    > microbenchmark::microbenchmark(pnorm(x), PNORM(x))
    Unit: microseconds
         expr    min      lq     mean  median      uq    max neval cld
     pnorm(x) 34.703 34.8785 36.54254 35.1820 38.3150 47.786   100   b
     PNORM(x) 24.293 24.4625 27.07660 24.8875 28.9035 59.216   100  a