Matlab:帮助实现量化时间序列

时间:2015-02-26 05:01:22

标签: arrays matlab

由于变量s_k是逻辑0/1,我无法实现此代码。我能以什么方式实现这个陈述?

s_k是使用0/1生成的rand()的随机序列,并通过下面给出的平均值量化rand()的输出。在此之后,我不知道如何实施。请帮忙。

 N =1000;
    input = randn(N);

    s = (input>=0.5); %converting into logical 0/1;

更新

N = 3;
tmax = 5;
y(1) = 0.1;
for i =1 : tmax+N-1 %// Change here
        y(i+1) = 4*y(i)*(1-y(i));  %nonlinear model for generating the input to Autoregressive model
    end
 s = (y>=0.5);
ind = bsxfun(@plus, (0:tmax), (0:N-1).');
x = sum(s(ind+1).*(2.^(-ind+N+1)));  % The output of this conversion should be real numbers

% Autoregressive model of order 1
z(1) =0;
for j =2 : N
    z(j) =  0.195 *z(j-1) + x(j);
end

1 个答案:

答案 0 :(得分:2)

您已生成随机logical序列,这​​很棒。您还需要知道N,这是一次收集的总点数,以及时间值列表t。因为这是一个离散求和,我将假设t的值是离散的。首先需要做的是生成一个滑动窗口矩阵。此矩阵的每列表示输出的每个t值的一组时间值。这可以通过bsxfun轻松实现。假设最长时间为tmax,开始时间为0,且社区大小为N(如您的等式),我们可以这样做:

ind = bsxfun(@plus, (0:tmax), (0:N-1).');

例如,假设tmax = 5N = 3,我们得到:

ind =

     0     1     2     3     4     5
     1     2     3     4     5     6
     2     3     4     5     6     7

每列代表我们想要计算输出的时间,列中的每一行都显示我们要为所需输出计算的时间值列表。

最后,要计算输出x,您只需获取s_k向量,使其成为列向量,使用ind访问它,逐点执行将2^(-k+N+1)替换为我们从k得到的内容,然后乘以ind进行乘法运算。所以:

s = rand(max(ind(:))+1, 1) >= 0.5;
x = sum(s(ind+1).*(2.^(-ind+N+1)));

第一个语句生成一个随机向量,该向量与我们拥有的最大时间值一样长。完成后,我们使用ind索引此随机向量,以便生成logical值的滑动窗口。当MATLAB开始索引为1时,我们需要将其偏移1。