2015-08-21 67 views
0

我必須爲我的論文準備一個算法來檢查一個理論結果,即N個週期的二項式模型收斂於N \ \ \ infty的對數正態分佈。對於那些不熟悉這個概念的人,我必須創建一個算法,該算法需要一個起始值並將其乘以一個上乘和下乘,並繼續爲N步的每個值執行此操作。該算法應該返回其元素是在StarterValue u的形式的矢量^ I d^{鎳} I = 0,\點,N 簡單算法我提出是R直方圖中斷錯誤

rata<-function(N,r,u,d,S){ 

    length(x)<-N 
    for(i in 0:N){ 
    x[i]<-S*u^{i}*d^{N-i} 
    } 
    return(x) 
} 

N是數字的期間,其餘的只是非重要的價值觀(你是上升的下降等) 爲了提取我的結果,我需要做一個生成的向量的對數直方圖來證明它們是正態分佈的。然而,對於一個N = 100000(我需要大量的步驟來證明收斂)當我輸入​​我得到error :(invalid number of breaks) 任何人都可以幫忙?提前致謝。 一個例子

taf<-rata(100000,1,1.1,0.9,1) 
taf1<-log(taf) 
hist(taf1,xlim=c(-400,400)) 
+2

請提供一個可重複的示例,即調用此函數並生成直方圖(導致此錯誤)的代碼。另外,模擬不能「證明收斂」。 – Roland

+0

是的,你是正確的算法在那裏作爲另一個收斂展示實際證明發生在那之前。至於示例我更新了問題,但我不知道爲什麼我不能讓它在代碼格式 –

+1

您的示例錯誤,因爲結果向量'taf1'只包含-Inf,Inf和NaN。所以沒有實際的數字來製作直方圖。 – Heroka

回答

3

首先我解決您的功能:

rata<-function(N,r,u,d,S){ 
    x <- numeric(N+1) 
    for(i in 0:N){ 
    x[i]<-S*u^{i}*d^{N-i} 
    } 
    return(x) 
} 

或依賴量化:

rata<-function(N,r,u,d,S){ 
    x<-S*u^{0:N}*d^{N-(0:N)} 
    return(x) 
} 

taf<-rata(100000,1,1.1,0.9,1) 

綜觀結果,我們注意到它包含NaN值:

taf[7440 + 7:8] 
#[1] 0 NaN 

發生了什麼事?顯然,乘法變成了NaN

1.1^7448*0.9^(1e5-7448) 
#[1] NaN 

1.1^7448 
#[1] Inf 

0.9^(1e5-7448) 
#[1] 0 

Inf * 0 
#[1] NaN 

爲什麼一個Inf值發生?嗯,因爲雙溢出(讀help("double")):

1.1^(7440 + 7:8) 
#[1] 1.783719e+308   Inf 

您有浮點精度類似的問題時,multiplicant得到接近0(讀help(".Machine"))。

您可能需要使用任意精度數字。

+0

謝謝你,這是非常翔實的 –