【问题标题】:Using sum function instead of for loop to work with vectors in Matlab在 Matlab 中使用 sum 函数而不是 for 循环来处理向量
【发布时间】:2013-09-30 06:20:57
【问题描述】:

我正在编写一个 Matlab 函数,它将向量平方的第 i 个元素乘以第 i 个值。我可以让函数工作,但我不想使用 for 循环。我想使用不带 for 循环的 sum matlab 函数。

%x is the vector
x = [3; 3; 3; 1; 1];


%value = sum(.x^2);     I tried this but this wouldn't work as I can't figure out how to get the ith value.
sumvalue = 0;
for i=1:length(x)
  fprintf('The j is %d, the value is %d.\n',i, x(i));
  sumvalue = sumvalue + (i * x(i)^2);
  fprintf('The sumvalue is %d.\n',sumvalue);
end

我尝试了其他一些方法,但我似乎无法找到或弄清楚如何在不使用 for 循环的情况下获取第 i 个值。我正在考虑在向量 (.x) 上使用点表示法,但我不确定如何使用它,然后我又回到了没有第 i 个值的问题。我对编程并不陌生,但我对使用 Matlab 很陌生。非常感谢任何帮助。

我已经尝试了下面的代码。 值 = sum((1:numel(x)).*x.^2);

但我收到以下错误,“使用错误。* 矩阵尺寸必须一致。”。我为 x 添加了值以显示我正在使用的简单值。再次感谢您的帮助。

【问题讨论】:

  • 点符号用于运算符(.*.^ 等),不适用于向量

标签: matlab vector


【解决方案1】:

计算总和:

sum((1:numel(x)).'.*x(:).^2)

请注意,矢量 1:numel(x) 代替了您的 i,但采用矢量化形式。

如果你想要所有的部分和:

cumsum((1:numel(x)).'.*x(:).^2)

【讨论】:

  • 我试过这个答案,但它不起作用请更新问题。再次感谢您的帮助。
  • 是的,尺寸有问题。查看更新的答案;现在可以了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-05
  • 1970-01-01
  • 2016-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多