Summation in a for loop without cumulitive

1 次查看(过去 30 天)
I have a very simple question.
I want to summate the variable A for a certain interval + and - B.
for i=(b+1):length((a)-b)
C(i) = sum(a(i-b):(i+b));
end
This loop works, however the output that I get is a cumulative sum of all the previous. So I get an exponential increase. However I would like to just have the sum over the interval -b:b for all values of i. So no cummulation.

采纳的回答

Iain
Iain 2014-2-26
C(i) = sum( a([i-b]:[i+b]) )
That puts into C(i), the sum of the (i-b)th index of a, to the (i+b)th index of a.
What you had, put into C(i), the sum of the (i-b)th index of a to (i+b)
  2 个评论
Ot
Ot 2014-2-26
Based on your remark I changed it to:
for i=(b+1):length((a)-b)
C(i) = sum(a([i-b]:[i+b]))
end
However now I get an error: ??? Index exceeds matrix dimensions.
Iain
Iain 2014-2-26
If i+b is bigger than the length of a, you'll get that error.
length((a)-b) should be (length(a)-b)

请先登录,再进行评论。

更多回答(1 个)

Jos (10584)
Jos (10584) 2014-2-26
Another solution:
% hide the for-loop
% A is the array, B is a scalar
A = randperm(10)
B = 2
C1 = arrayfun(@(x) sum(A(x-B:x+B)), B+1:numel(A)-B)
% and yet another solution
cumA = cumsum(A)
C2 = cumA(2*B+1:end) - [0 cumA(1:end-2*B)]

类别

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