在R中计算函数的周期

3
有没有针对某些函数计算周期的 R 包? 我正在寻找像这样的 R 函数:
x <- seq(0, 50, by = 0.05)
y <- sin(x)
p <- calcPeriod(x, y) # result = 2pi
3个回答

5

我认为你正在寻找类似于快速傅里叶变换的东西。虽然我不是专家,但我认为你可以按照以下方式进行操作:

x <- seq(0, 50, by = 0.05)
y <- sin(x)

calcPeriod <- function(x, y){
    incr <- x[2] - x[1]
    tmp <- spectrum(y, plot=FALSE)
    p <- (1/tmp$freq*incr)[which.max(tmp$spec)] # max of spectrum
    p
}

calcPeriod(x,y) # equals 6.4

spectrum函数实际上是spec.pgramspec.ar的包装函数。请谨慎使用,因为calcPeriod函数实际上仅仅识别最大周期性。对于不均匀采样的序列,最小二乘谱分析也可以确定主导周期性(示例链接)。


1
小问题:该函数是“傅里叶变换”; FFT只是傅里叶变换的一种算法实现。 - Carl Witthoft

1

Paul H.的回答提醒我,如果您不想处理傅里叶分析,您可以运行nls(y~sin(k*x))或其增强版本。这假设您事先知道数据中只有一个频率。

我会在这里推荐Eureqa,您可以通过谷歌轻松找到它在Cornell.edu上的页面。


0

我个人不知道有这样的函数,但是你可以使用optim来优化一个以周期为参数的成本函数。 optim会调整周期直到获得最佳拟合。这并不难做,而且你可以自己将其封装成一个名为calcPeriod的函数。


1
那是用一种比较困难的方式去做啊 :-). - Carl Witthoft
1
但是,如果它很难,挑战就更大,因此满足感也更强烈;)。 - Paul Hiemstra
@PaulHiemstra:我们应该假设你也会推着你的车去上班吗?;-) - Stephan Kolassa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接