R 归纳过程的递归
我是自学习的R,我正在与任意随机过程的代码查找停止时间(kns,ks)作斗争,其定义如下: 基:k0=inf{u>=0:max\u0,u]-min\u0,u]=H} 如果X(k0)=max_0[0,k0]X,那么k0s=inf{u在[0,k0]:X(u)=min_0[0,k0]X} 如果X(k0)=最小值[0,k0]X,那么k0s=inf{u在[0,k0]:X(u)=最大值[0,k0]}X} 步骤n到n+1:R 归纳过程的递归,r,recursion,R,Recursion,我是自学习的R,我正在与任意随机过程的代码查找停止时间(kns,ks)作斗争,其定义如下: 基:k0=inf{u>=0:max\u0,u]-min\u0,u]=H} 如果X(k0)=max_0[0,k0]X,那么k0s=inf{u在[0,k0]:X(u)=min_0[0,k0]X} 如果X(k0)=最小值[0,k0]X,那么k0s=inf{u在[0,k0]:X(u)=最大值[0,k0]}X} 步骤n到n+1: 如果$X(kn)-X(ksn)=H,则: k(n+1)=inf{t>=kn:max_
- 如果$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_ukn[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_ukn[kn,k(n+1)]X}
SO上不支持
stepLaTeX语法。请修复您的问题格式。但是,一般来说,R不擅长递归。最好使用循环。不过乍一看,您可以使用cummin
和cummax
而不是来处理循环。谢谢@Roland的建议
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<-rnorm(300)