gpt4 book ai didi

r - 过滤函数的简单示例,特别是递归选项

转载 作者:行者123 更新时间:2023-12-03 10:42:04 25 4
gpt4 key购买 nike

我正在为 filter 寻找一些简单的(即 - 没有数学符号,长格式的可重复代码)示例R中的函数
我想我对卷积方法有所了解,但我坚持概括递归选项。我已经阅读过各种文档并与之抗争过,但这些帮助对我来说有点不透明。

以下是我目前想到的例子:

# Set some values for filter components
f1 <- 1; f2 <- 1; f3 <- 1;

我们继续:
# basic convolution filter
filter(1:5,f1,method="convolution")
[1] 1 2 3 4 5

#equivalent to:
x[1] * f1
x[2] * f1
x[3] * f1
x[4] * f1
x[5] * f1

# convolution with 2 coefficients in filter
filter(1:5,c(f1,f2),method="convolution")
[1] 3 5 7 9 NA

#equivalent to:
x[1] * f2 + x[2] * f1
x[2] * f2 + x[3] * f1
x[3] * f2 + x[4] * f1
x[4] * f2 + x[5] * f1
x[5] * f2 + x[6] * f1

# convolution with 3 coefficients in filter
filter(1:5,c(f1,f2,f3),method="convolution")
[1] NA 6 9 12 NA

#equivalent to:
NA * f3 + x[1] * f2 + x[2] * f1 #x[0] = doesn't exist/NA
x[1] * f3 + x[2] * f2 + x[3] * f1
x[2] * f3 + x[3] * f2 + x[4] * f1
x[3] * f3 + x[4] * f2 + x[5] * f1
x[4] * f3 + x[5] * f2 + x[6] * f1

现在是我伤害我可怜的小脑干的时候了。
我设法在这篇文章中使用信息找出了最基本的例子: https://stackoverflow.com/a/11552765/496803
filter(1:5, f1, method="recursive")
[1] 1 3 6 10 15

#equivalent to:

x[1]
x[2] + f1*x[1]
x[3] + f1*x[2] + f1^2*x[1]
x[4] + f1*x[3] + f1^2*x[2] + f1^3*x[1]
x[5] + f1*x[4] + f1^2*x[3] + f1^3*x[2] + f1^4*x[1]

有人可以提供类似于我上面的代码,用于递归版本的卷积示例 filter = c(f1,f2)filter = c(f1,f2,f3) ?

答案应与函数的结果相匹配:
filter(1:5, c(f1,f2), method="recursive")
[1] 1 3 7 14 26

filter(1:5, c(f1,f2,f3), method="recursive")
[1] 1 3 7 15 30

编辑

使用@agstudy 的简洁答案完成:
> filter(1:5, f1, method="recursive")
Time Series:
Start = 1
End = 5
Frequency = 1
[1] 1 3 6 10 15
> y1 <- x[1]
> y2 <- x[2] + f1*y1
> y3 <- x[3] + f1*y2
> y4 <- x[4] + f1*y3
> y5 <- x[5] + f1*y4
> c(y1,y2,y3,y4,y5)
[1] 1 3 6 10 15

和...
> filter(1:5, c(f1,f2), method="recursive")
Time Series:
Start = 1
End = 5
Frequency = 1
[1] 1 3 7 14 26
> y1 <- x[1]
> y2 <- x[2] + f1*y1
> y3 <- x[3] + f1*y2 + f2*y1
> y4 <- x[4] + f1*y3 + f2*y2
> y5 <- x[5] + f1*y4 + f2*y3
> c(y1,y2,y3,y4,y5)
[1] 1 3 7 14 26

和...
> filter(1:5, c(f1,f2,f3), method="recursive")
Time Series:
Start = 1
End = 5
Frequency = 1
[1] 1 3 7 15 30
> y1 <- x[1]
> y2 <- x[2] + f1*y1
> y3 <- x[3] + f1*y2 + f2*y1
> y4 <- x[4] + f1*y3 + f2*y2 + f3*y1
> y5 <- x[5] + f1*y4 + f2*y3 + f3*y2
> c(y1,y2,y3,y4,y5)
[1] 1 3 7 15 30

最佳答案

在递归的情况下,我认为没有必要在 xi 方面扩展表达式。
“递归”的关键是根据先前的 y 来表达右 watch 达式。

我更喜欢考虑过滤器尺寸。

过滤器尺寸 =1

y1 <- x1                                            
y2 <- x2 + f1*y1
y3 <- x3 + f1*y2
y4 <- x4 + f1*y3
y5 <- x5 + f1*y4

过滤器尺寸 = 2
y1 <- x1                                            
y2 <- x2 + f1*y1
y3 <- x3 + f1*y2 + f2*y1 # apply the filter for the past value and add current input
y4 <- x4 + f1*y3 + f2*y2
y5 <- x5 + f1*y4 + f2*y3

关于r - 过滤函数的简单示例,特别是递归选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14372880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com