使用sum函数代替for循环在Matlab中使用向量

时间:2013-09-24 20:45:11

标签: matlab vector

我正在编写一个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的新手。非常感谢任何帮助。

我已尝试过以下代码。     value = sum((1:numel(x))。* x。^ 2);

但是我收到以下错误,“使用错误。* Matrix尺寸必须同意。”我已将值添加到x以显示我正在使用的简单值。再次感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

计算总和:

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

请注意,向量1:numel(x)取代了i,但是采用了矢量化形式。

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

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