归纳过程的递归

时间:2014-07-13 08:18:32

标签: r recursion

我是自学R,我正在努力寻找任意随机过程的停止时间(kns,ks),可以定义如下:

基础:k0 = inf {u> = 0:max_ [0,u] - min_ [0,u] = H}

如果X(k0)= max_ [0,k0] X,那么k0s = inf {u in [0,k0]:X(u)= min_ [0,k0] X}

如果X(k0)= min_ [0,k0] X,那么k0s = inf {u in [0,k0]:X(u)= max_ [0,k0]} X}

步骤n到n + 1

  • 如果$ X(kn)-X(ksn)= H,那么:

    k(n + 1)= inf {t> = kn:max_ [kn,t]} X-X(t)= H}

    ks(n + 1)= inf {t in [kn,k(n + 1)]:X(t)= max_ [kn,k(n + 1)] X}

  • 如果X(kn)-X(ksn)= - H,则:

    k(n + 1)= inf {t> = n:X(t)-min {[kn,t] X = H}

    k(n + 1)= inf {t in [kn,k(n + 1)]:X(t)= min_ [kn,k(n + 1)] X}

我的以下代码能够找到基础(k0s,ks)和接下来的两对(ks1,k1),(ks2,k2)。

    step<-function(v){
     z=numeric(300)
     for(i in 1:300){z[i]=max(v[1:i])-min(v[1:i])}
     k0<-min(which(z>=0.0005))
     k0s<-if (v[k0]==max(v[1:k0])) min(which(v==min(v[1:k0]))) else if (v[k0]==min(v[1:k0])) min(which(v==max(v[1:k0])))
     x=numeric(300)
     if (v[k0]-v[k0s]>=0.0005) {
     for (i in k0:300){x[i]=max(v[k0:i])-v[i]}
     k1<-min(which(x>=0.0005))
     k1s<-min(which(v==max(v[k0:k1])))
     }
     if (v[k0]-v[k0s]<=-0.0005) {
     for (i in k0:300) {x[i]=-min(v[k0:i])+v[i]}
     k1<-min(which(x>=0.0005))
     k1s<-min(which(v==min(v[k0:k1])))
     }
     y=numeric(300)
     if (v[k1]-v[k1s]>=0.0005) {
     for (i in k1:300){y[i]=max(v[k1:i])-v[i]}
     k2<-min(which(y>=0.0005))
     k2s<-min(which(v==max(v[k1:k2])))
     }
     if (v[k1]-v[k1s]<=-0.0005) {
     for (i in k1:300) {y[i]=-min(v[k1:i])+v[i]}
     k2<-min(which(y>=0.0005))
     k2s<-min(which(v==min(v[k1:k2])))
      }
     return(c(k0s,k0,k1s,k1,k2s,k2))
     }

v这是一个向量,我用过:

     v<-rnorm(300) 

测试我的代码。

但是,我想概括我的代码来找到(ksn,kn)(不仅是整个过程的前三个停止时间)。由于查找(kns,ks)的方式取决于{k(n-1)s,k(n-1)},我正在考虑编写递归函数;但我的代码中的循环有问题,不知道如何将其转换为递归。任何人都可以建议/指出一些我可以改进我的代码的来源吗?

由于英语不是我的第一语言,请原谅任何打字错误。

非常感谢你,我真的很感激任何帮助。

0 个答案:

没有答案