使用for循环在MATLAB中实现这个等式?

时间:2016-01-17 10:52:49

标签: matlab loops for-loop

我希望在MATLAB中实现以下等式,因为我有一个非常大的矩阵,

enter image description here

我怎么能这样做?它并不是真正关于261,为了简单起见,我们可以假设d = 0.94,并且没有必要担心平方项或平均项,因为如果我能得到,我将能够弄明白循环概念下来。因此,例如,我将尝试计算行中具有特定权重的所有过去值的平均值。

为了澄清,我们基本上可以将i视为索引矩阵的行,因此这包括我在下面作为示例提供的整个列。忽略无穷大,我们可以将它加到句点t,但想法是对最近一行具有最大权重的行的所有先前值有一定的权重。

我在考虑使用这样的东西:

R = [1; 2; 3; 4; 5; 6; 7; 8; 9; 10];
d = 0.94;
r = zeros(10,1);
for t = 2:10
    r(t,1) = R(t,1);
    for i = 1:10
        W(i,1) = (1-d)*(d.^i)*r(t,1);
    end
end

甚至索引t = 1:10。 这些都不起作用。从本质上讲,我希望能够计算出对最近值有更大权重的平均值。例如,在第t=4行,我得到的值是:

(1-0.94)(0.94^3)*(1) + (1-0.94)(0.94^2)(2) +(1-0.94)(0.94)(3). 

enter image description here

1 个答案:

答案 0 :(得分:1)

是的,如果我理解正确的话,我认为以下内容应该有效:

R = [1 2 3 4 5 6 7 8 9 10];
d = 0.94;

W = zeros(size(R));

% at t = 1, sigma will be 0
for t = 2:length(R)
    meanR = mean(R(1:t-1));
    for i = 1:t-1
        W(t) = W(t) + 261*(1-d)*(d.^(t-i))*(R(i) - meanR)^2;
    end
end