【问题标题】:How to Sum through Vectors elements如何通过向量元素求和
【发布时间】:2013-04-24 03:41:56
【问题描述】:

我有一个包含两个向量的变量。我想将这些数量从 i = 1 加到 n,其中 n = 100。当程序运行时,我可以单击工作空间中的变量来查看每个列位置的向量的元素值。当执行其位置的变量时,我得到相应的值,(例如,z(1) = 73.2360, z(2) = 63.3701, .... 等等)。但我似乎无法弄清楚如何为这些向量编制索引,以使总和贯穿两个向量的元素。例如在 for 循环中。我还查看了symsum(),但这只需要通用变量。我试图从 i = 1 到 100 求和 epsilon,其中 z_i 和 w_i 是感兴趣的向量。我希望 MWE 能展示更多我想要完成的事情。

MWE:

 a = 0.6;
 b = sqrt(16-a^2);
 c = 6.5;
 d = sqrt(225-c^2);
 xh = randn(1,100);
 yw = randn(1,100);
  z = a*xh + b*yw + 68;
  w = c*xh + d*yw + 160;

     n = 100;                              % # of data entries.
  zbar = ((1/n)*sum(z));                   % Height data.
  wbar = ((1/n)*sum(w));                   % Weight data.
 Zbarv = zbar*ones(1,100);                 % Height data vector.
 Wbarv = wbar*ones(1,100);                 % Weight data vector.

sz = sqrt((1/n)*((z-Zbarv)*(transpose(z)-transpose(Zbarv))));              
sw = sqrt((1/n)*((w-Wbarv)*(transpose(w)-transpose(Wbarv)))); 

czw = ((1/n)*(w-Wbarv)*(transpose(z)-transpose(Zbarv)));
rzw = czw/(sz*sw);

 b = wbar - ((czw/sz^2)*zbar);             % y-intercept
 m = czw/sz^2;                             % Slope
 epsilon = (1/(n-1))*sum((w-(m*z+b)).^2);  % Error

epsilon 应该对此求和,但应该是来自i=[1,100] 的总和。我不知道如何索引 w_iz_i 向量的值,以便总和通过它们。我尝试为它们创建一个输入变量,例如 z(i)w(i),但结果很混乱。

有什么建议吗?

【问题讨论】:

  • 所以你想计算1到100之间i的每个值的前i个元素的总和?

标签: matlab for-loop vector indexing sum


【解决方案1】:

听起来你只是想要:

epsilon = (1/(n-1))*sum((w(1:100)-(m*z(1:100)+b)).^2);

虽然你 wz 的长度只有 100 个元素,但我认为这与你所做的相同。所以我认为你的代码实际上是正确的。

例如,如果a = [1 2 3],那么sum(a)6,您实际上不必索引a 来获得总和。因此,您的代码正在查找所有 100 个元素的总和。

您应该阅读Matlab colon operator

基本思想是,在 matlab 中,1:10 之类的东西只是 [1 2 3 4 5 6 7 8 9 10] 的简写,您可以使用它来索引向量。因此,如果我们有一个向量v = rand(100,1),那么要获取v 的前10 个元素,它就是v(1:10)

【讨论】:

  • 不要认为那是 OP 想要的。 xz 已经有 100 个样本,冒号索引是多余的。
  • @EitanT 是的,我同意,我在答案中已经说了很多。我认为 OPs 代码是正确的。
  • @Dan:我也检查了代码,我认为你是对的!但也许 OP 正在寻找一种累积总和?否则这个问题对我来说听起来很神秘。
  • @Dan:谢谢。我刚刚意识到向量已经被索引,并且在进行求和时,它会自动使用sum 进行向量算术运算。感觉好烦,想了这么久怎么办。我只是习惯于在与 matlab 不同的环境中工作。感谢您的回复和验证它是正确的:)
猜你喜欢
  • 1970-01-01
  • 2021-08-21
  • 2016-08-02
  • 1970-01-01
  • 1970-01-01
  • 2022-08-03
  • 1970-01-01
  • 2013-01-22
  • 1970-01-01
相关资源
最近更新 更多