【问题标题】:Implementing this equation in MATLAB with a for loop?用 for 循环在 MATLAB 中实现这个方程?
【发布时间】:2016-10-26 13:07:14
【问题描述】:

我希望在 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). 

【问题讨论】:

  • 我会在 Matlab 中命名您的变量以反映它们在方程式中的含义...例如,Matrix 是什么?你的方程中没有矩阵。此外,r 从外观上看应该是一个已知向量,而您将其设置为 10x10 的零矩阵。忽略它应该是一个向量的事实,这意味着无论您的输入值是什么,您的方程都会给您零。
  • 你的方程有一个无穷大的总和......这会给你一个r的-infinity索引......这肯定是不对的。
  • 我很遗憾没有澄清。所以我拥有的矩阵只是一列数据,这可以表示为 t 等于特定行,它是根据从 1 到行 t 的行的历史值计算的。其中第 t 行之前的最新值的权重为 1 的幂。另一方面,第 1 行的权重为 d 的 t 次幂。希望这更清楚。至于无穷大的和,它可以解释为在我的示例中定义为矩阵 R 的矩阵中某行 t 之前的所有先前行的总和。
  • 好吧...我不认为你需要很少的r。您可以将其替换为大 R。您所说的“历史”值是什么意思,“其中最近的值 [...] 的权重是 1 的幂”。 R 是原始值,还是您已经应用了一些权重?
  • 在这种情况下,它将是原始值。因此,我尝试将根据 d 的权重应用于 i _(d^i) 的幂,这将 d^1最近的值。因此,对于提供的示例,如果 t = 4(第 4 行),那么它将基于先前的值,将最高权重应用于该行之前的行,即由值 3 给出的第 3 行。

标签: matlab loops for-loop


【解决方案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

【讨论】:

  • 太棒了,非常感谢您的帮助。我不知道为什么我无法理解我需要在循环中包含 W(t) 的事实。我花了很多时间试图找到解决问题的方法。谢谢你。我会投票给你的答案,但我对堆栈交换的这方面仍然相对较新,但当我有足够的分数时会这样做。
猜你喜欢
  • 2022-01-23
  • 2015-01-26
  • 2018-09-21
  • 1970-01-01
  • 2014-05-16
  • 2020-03-21
  • 1970-01-01
  • 1970-01-01
  • 2019-03-07
相关资源
最近更新 更多