0

我正在编写一个 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 添加了值以显示我正在使用的简单值。再次感谢您的帮助。

4

1 回答 1

2

要计算总和:

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

请注意,该向量1:numel(x)取代了您的位置,i但采用了向量化的形式。

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

cumsum((1:numel(x)).'.*x(:).^2)
于 2013-09-24T20:47:52.330 回答