首页 > 解决方案 > 实现正弦波或余弦波(有概率)

问题描述

我正在寻找根据某种概率在 R 中实现特殊波(正弦/余弦)的简单方法。例如如何对下面的函数建模:

A=  runif(500,1,3)
phi=rnorm(500, 0, 1)
C=  runif(500,0,1)
Nt= rnorm(500,0,0.05)
t=  seq(1,50,length=500)
xt1= A*cos(t+phi)+C+Nt
xt2= A*sin(t+phi)+C+Nt

我会创建一个时间序列 xt,它需要一个瞬间 $t$,要么是概率为 0.5 的余弦,要么是概率为 0.5 的正弦

编辑:下面的功能 在此处输入图像描述

标签: rtime-seriessimulation

解决方案


我认为这可以通过 if/else 的矢量化版本得到充分处理:

ifelse(runif(length(t)) < 0.5, xt1, xt2)

警告:这在大多数情况下都很有效。但是,ifelse可能有副作用。这正常工作,保持POSIXt类:

Sys.time() + ifelse(runif(3) < 0.5, 0, 100)
# [1] "2018-10-29 12:54:08 PDT" "2018-10-29 12:54:08 PDT" "2018-10-29 12:54:08 PDT"

但是,如果您正在处理已经类向量,则该类可能会丢失:

ifelse(runif(3) < 0.5, Sys.time(), Sys.time() + 100)
# [1] 1540842742 1540842842 1540842842

有一些解决方法,但有时它们被更好地归类为“黑客”。如果你没有意识到你需要寻找它们,你就不能使用它们。(如果向量只是numericintegerlogicalcharacter,这通常不是一个因素,我相信其他一些同样“好”。)


推荐阅读