Cumulative sum with a for loop
显示 更早的评论
I need to create a program for 1^2 +2^2 +...+1000^2
Both vectorised and with for loops.
I have managed the vector one I think:
x=1:1000
xsums=cumsum(x.^2)
y=xsums(1000)
however for the the for loop version of the program I can't seem to get it, what I have made is :
x=1:1000
for n = 1:length(x)
y=sum(n.^2)
end
I'm also not even sure if that is the right idea.
any help would be great thanks
采纳的回答
更多回答(1 个)
Further solutions:
- DOT product:
v = 1:n;
s = v * v.';
This uses one temporary vector only, while sum(v .^ 2) needs to create two of them: v and v.^2 .
- Avoid the squaring: The elements of 1^2, 2^2, 3^2, ... are:
1, 4, 9, 16, 25
The difference is
3, 5, 7, 9
with an obvious pattern. Then:
s = sum(cumsum(1:2:2*n))
This is cheaper as squaring the elements. As loop:
s = 0;
c = 1;
d = 1;
for ii = 1:n
s = s + d;
c = c + 2;
d = d + c;
end
Only additions, but s = s + ii * ii is nicer and slightly faster.
- Finally remember C.F. Gauss, who provided some methods to process the results of sums efficiently:
s = n * (n+1) * (2*n+1) / 6
Nice!
类别
在 帮助中心 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!