Cumulative sum with a for loop
61 ビュー (過去 30 日間)
古いコメントを表示
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
0 件のコメント
採用された回答
Andrei Bobrov
2017 年 10 月 25 日
"I need to create a program for 1^2 +2^2 +...+1000^2"
sum((1:1000).^2)
or
s = 0;
for ii = 1:1000
s = s + ii^2;
end
5 件のコメント
Stephen23
2017 年 10 月 26 日
編集済み: Stephen23
2017 年 10 月 26 日
Going up to 1000 gives the wrong answer. Try something like these:
>> 1+sum((1./(3:2:999))-(1./(2:2:999)))
ans = 0.693647430559821
>> sum(1./(1:2:999))-sum(1./(2:2:999))
ans = 0.693647430559813
loop, gives same output:
>> b = 0;
>> for k=2:2:999, b=b-1/k; end
>> for k=1:2:999, b=b+1/k; end
>> b
b = 0.693647430559823
Note that these only differ at the 14th significant figure.
Jan
2017 年 10 月 27 日
@Phil:
S = 0;
for a = 1:999
S = S + (-1)^(a-1) / a;
end
Or without the expensive power operation:
S = 0;
m = 1;
for a = 1:999
S = S + m / a;
m = -m;
end
その他の回答 (1 件)
Jan
2017 年 10 月 25 日
編集済み: Jan
2017 年 10 月 25 日
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!
0 件のコメント
参考
カテゴリ
Help Center および 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!