2015-08-21 48 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

谢谢你,这是非常翔实的 –