R直方图打破错误

R histogram breaks Error

我必须为我的论文准备一个算法来交叉检查一个理论结果,即 N 个周期的二项式模型收敛到 N\to \infty 的对数正态分布。对于那些不熟悉这个概念的人,我必须创建一个算法,该算法采用初始值并将其与向上乘数和向下乘数相乘,并继续为 N 步的每个值这样做。该算法应该 return 一个向量,其元素的形式为 StarterValueu^id^{N-i} i=0,\dots,N 我提出的简单算法是

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 是周期数,其余只是不重要的值(u 代表向上 d 代表向下等) 为了提取我的结果,我需要制作生成的向量对数的直方图以证明它们是正态分布的。但是对于 N=100000(我需要大量的步骤来证明收敛)当我输入 hist(x) 我得到 error :(invalid number of breaks) 谁能帮忙??提前致谢。 一个例子

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

首先我修复你的功能:

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

当乘数接近 0 时,浮点精度也有类似的问题(阅读 help(".Machine"))。

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