Cumulative sum with a for loop
Afficher commentaires plus anciens
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
Réponse acceptée
Plus de réponses (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!
Catégories
En savoir plus sur Loops and Conditional Statements dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!