我想对R中的向量应用非线性滤波器,如下所示
x<-c(1,2,3,4,5)
a<- .5
b<- .5
这样
>y1 <- x[1]
>y2 <- x[2]+(a*y1)^b
>y3 <- x[3]+(a*y2)^b
>y4 <- x[4]+(a*y3)^b
>y5 <- x[5]+(a*y4)^b
将产生以下向量
y<-c(y1,y2,y3,y4,y5)
当x的长度非常大时,如何以最有效的方式实现这一目标
答案 0 :(得分:1)
我认为for循环可能与其他任何东西一样有效:
y1<- numeric(length(x)); y1[1]=1
for (n in 2:length(x) ) { y1[n] <- (a*y1[n-1]) ^b + x[n] }
当我替换过滤器的原始定义,然后注意到指数是分数时,我认为简化超出了我的范围:
> y1 <- x[1]
> y2 <- x[2]+(a*x[1])^b
> y3 <- x[3]+(a*x[2]+(a*x[1])^b)^b
> y4 <- x[4]+(a*x[3]+(a*x[2]+(a*x[1])^b)^b)^b
> y5 <- x[5]+(a*x[4]+(a*x[3]+(a*x[2]+(a*x[1])^b)^b)^b)^b