필터 지우기
필터 지우기

Cumulative sum with a for loop

조회 수: 48 (최근 30일)
Phil Whitfield
Phil Whitfield 2017년 10월 25일
댓글: Jan 2017년 10월 27일
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

채택된 답변

Andrei Bobrov
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
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
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
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!

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by