【问题标题】:Non-linear filter with recursion in RR中递归的非线性滤波器
【发布时间】:2015-02-18 05:54:38
【问题描述】:

我想对 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 的长度很大时,如何以最有效的方式实现这一点

【问题讨论】:

  • 目前有没有尝试过的方法或包?
  • 我使用了来自统计数据的过滤器,但它只允许线性过滤。我尝试对它进行矢量化,但是我还没有制定一个广义矢量
  • 您的问题可能与stackoverflow.com/questions/5135977/… 重复,但我不确定。您的过滤器可能比该解决方案更复杂。试试看!
  • 我之前检查过这个例子。这个问题似乎没有递归:他需要的方程是 x[n]*x[n]-x[n-1]*x[n+1]。但是我需要的过滤器有递归问题

标签: r


【解决方案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

【讨论】:

    猜你喜欢
    • 2011-07-05
    • 2011-10-14
    • 1970-01-01
    • 2015-01-02
    • 2014-04-26
    • 1970-01-01
    • 2014-12-30
    • 1970-01-01
    • 2014-12-28
    相关资源
    最近更新 更多