Summation in a for loop without cumulitive

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 日

0 投票

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 日

0 投票

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)]

カテゴリ

ヘルプ センター および File ExchangeLoops and Conditional Statements についてさらに検索

タグ

質問済み:

Ot
2014 年 2 月 26 日

回答済み:

2014 年 2 月 26 日

Community Treasure Hunt

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

Start Hunting!

Translated by