我希望在MATLAB中实现以下等式,因为我有一个非常大的矩阵,
我怎么能这样做?它并不是真正关于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).
答案 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