三角公式的R/Python-For循环语句

三角公式的R/Python-For循环语句,r,python-3.x,numpy,for-loop,R,Python 3.x,Numpy,For Loop,我在做一个估算模块,我们在计算季节性变化和预测。以前,我们使用固定的5阶正弦函数进行估计。公式如下 doy_seasonality = exp(z[1]*sin(2*pi*doy/365)+z[2]*cos(2*pi*doy/365) +z[3]*sin(4*pi*doy/365)+ z[4]*cos(4*pi*doy/365) +z[5]*sin(6*pi*doy/365)+ z[6]*cos(6*pi

我在做一个估算模块,我们在计算季节性变化和预测。以前,我们使用固定的5阶正弦函数进行估计。公式如下

doy_seasonality = exp(z[1]*sin(2*pi*doy/365)+z[2]*cos(2*pi*doy/365)
                       +z[3]*sin(4*pi*doy/365)+ z[4]*cos(4*pi*doy/365)
                       +z[5]*sin(6*pi*doy/365)+ z[6]*cos(6*pi*doy/365)
                       +z[7]*sin(8*pi*doy/365)+ z[8]*cos(8*pi*doy/365)
                       + z[9]*sin(10*pi*doy/365)+ z[10]*cos(10*pi*doy/365))
现在,我们在模型中尝试了一些修改。使用快速傅里叶变换,我们能够自动生成三角函数的阶

例如,在我当前的数据集上,我有以下订单数组

顺序_FFT=[2,6,10,24],这样

order_FFT[0] = 2
order_FFT[1] = 6
order_FFT[2] = 10
order_FFT[3] = 24
这里有4份订单。对于其他一些数据集,可能会有或多或少的订单数量。因此,我需要定义一个for循环,以便修改公式

使用我的当前数据集和相应的顺序\u FFT数组,for循环应执行以下公式:

doy_seasonality = exp(z[1]*sin(2*pi*doy/365)+z[2]*cos(2*pi*doy/365)
                       +z[3]*sin(6*pi*doy/365)+ z[4]*cos(6*pi*doy/365)
                       +z[5]*sin(10*pi*doy/365)+ z[6]*cos(10*pi*doy/365)
                       +z[7]*sin(24*pi*doy/365)+ z[8]*cos(24*pi*doy/365)
这基本上意味着

doy_seasonality = exp(z[1]*sin(order_FFT[0]*pi*doy/365)+z[2]*cos(order_FFT[0]*pi*doy/365)
                       +z[3]*sin(order_FFT[1]*pi*doy/365)+ z[4]*cos(order_FFT[1]*pi*doy/365)
                       +z[5]*sin(order_FFT[2]*pi*doy/365)+ z[6]*cos(order_FFT[2]*pi*doy/365)
                       +z[7]*sin(order_FFT[3]*pi*doy/365)+ z[8]*cos(order_FFT[3]*pi*doy/365)

我在试图找出这个的for循环代码时不知所措。很抱歉,我不能在这里展示我自己的努力。

我不会使用循环。下面是一个R方法:

#Some test data
set.seed(42)
z <- rnorm(8)
doy <- 1:365
order_FFT <- c(2, 6, 10, 24)

#separate coefficients for sin and cos in two rows:
z <- matrix(z, nrow = 2)
#calculate the sins and cosins:
sins <- outer(doy, order_FFT, function(x, y) sin(x * pi * y / 365))
cosins <- outer(doy, order_FFT, function(x, y) cos(x * pi * y / 365))
#use matrix products to multiply and sum
doy_seasonality2 <- c(exp(sins %*% z[1,] + cosins %*% z[2,]))

什么是z?请提供一个最小的可复制示例。z是一个值列表。对于每一阶FFT值,将有两个对应的z值,一个用于正弦部分,一个用于cos部分。什么是doy?请提供一个最小的可复制示例。doy代表一年中的某一天。doy值已经从另一个函数传递到公式。我知道缩写。我不知道这是一个单值还是一个向量。注意,如果您只是提供了一个最小的可复制示例,我可能已经回答了这个问题。
doy_seasonality = exp(z[1]*sin(2*pi*doy/365)+z[2]*cos(2*pi*doy/365)
                      +z[3]*sin(6*pi*doy/365)+ z[4]*cos(6*pi*doy/365)
                      +z[5]*sin(10*pi*doy/365)+ z[6]*cos(10*pi*doy/365)
                      +z[7]*sin(24*pi*doy/365)+ z[8]*cos(24*pi*doy/365))
all.equal(doy_seasonality, doy_seasonality2)
#[1] TRUE