我想定義以下非常簡單的函式:

在哪里:

我的作業到目前為止
prob <- function(x, n) {
quan <- qgamma(0.95, n, 1)
temp <- quan / (x)^2
first_term <- exp(-temp)
second_term <- temp^(0:(n - 1)) / factorial(0:(n - 1))
second_term <- sum(second_term)
first_term * second_term
}
這里的問題是,在大 n 的總和(第二項)中,我們正在處理非常大的數字,因此 R 將它們視為無窮大。
例如:
prob(0.5, n = 1000)
[1] NaN
因為 n = 1000 的分位數等于 1052.577,所以在分母中我們必須計算 1052.577^999 和 999 的分母階乘。 R 將這兩個數字理解為無窮大:
> factorial(999)
[1] Inf
> 1052.577^999
[1] Inf
所以當它試圖將它們分開時NaN就會產生。然而,這個函式的輸出總是在區間 (0, 1) 中,因為它是一個概率。在這一點上有沒有可能計算這個函式的值?
uj5u.com熱心網友回復:
您的prob函式只是具有lambda = temp和的累積泊松k = n - 1。使用ppois:
prob <- function(x, n) {
return(ppois(n - 1, qgamma(0.95, n, 1)/x^2))
}
prob(0.5, n = 1000)
# [1] 0
prob(0.5, n = 1000) = 0因為n - 1 = 999離平均值太遠了 (lambda = qgamma(0.95, 1000, 1)/0.5^2 = 4210.308)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/363907.html
上一篇:C中的全域二維陣列
