How to get Cumulative sum of elements based on negative sign

4 views (last 30 days)
I have 2 vectors >> z=1:9; >> l=[1 2 -3 4 -5 6 7-8 9 10] starting from last element of l i.e 10 9....1 check for 1st negative element i.e. l=-8 if l=-8 add z8+z9 check for next negative element i.e l=-5 if l=-5 add z5+z6+z7 (elements between two negative numbers -5 and -8) check for next negative element i.e l=-3 add z3+z4 and add z1+z2 finally i should get new vector w=[z1+z2, z3+z4,z5+z6+z7,z8+z9]

Accepted Answer

Guillaume
Guillaume on 12 Feb 2015
Your array l has one more element than z. why? Anyway,
z = 1:9;
l = [1 2 -3 4 -5 6 7 -8 9];
negposition = find(l < 0);
w = arrayfun(@(s, e) sum(z(s:e)), [1 negposition], [negposition-1 numel(z)])
  9 Comments
Guillaume
Guillaume on 19 Feb 2015
I don't see how you differentiate between your laterals and feeders in L.
In any case, I would suggest you start a new question. You'll get more people looking at it as when a question has an accepted answer, people don't look at them anymore.
Raghavendra Reddy P
Raghavendra Reddy P on 23 Feb 2015
You rightly pointed out. Yes sir, we cannot differentiate main feeder and laterals based on the values of Vector L. We can differentiate by looking at vector Z. This how my actual Z vector looks like %% LINE NO FROM TO Real Imaginary Z= [1 1 2 0.0058 0.0029 2 2 3 0.0308 0.0157 3 3 4 0.0228 0.0116 4 4 5 0.0238 0.0121 5 5 6 0.0511 0.0441 6 6 7 0.0117 0.0386 7 7 8 0.1068 0.0771 8 8 9 0.0643 0.0462 9 9 10 0.0651 0.0462 10 3 11 0.0123 0.0041 11 11 12 0.0234 0.0077 12 12 13 0.0916 0.0721 13 6 14 0.0338 0.0445 14 14 15 0.0369 0.0328 15 15 16 0.0466 0.0340 16 16 17 0.0804 0.1074 17 17 18 0.0457 0.0358 18 8 19 0.0102 0.0098 19 19 20 0.0939 0.0846 20 20 21 0.0255 0.0298
In above Z vector, 1st column indicates line no(or branch no.), 2nd and 3rd column indicates from where to where line connected, 3rd and 4th column indicates actual real n img values to be summed based on sign of vector L.
Red marking indicates laterals starting point i.e for ex: line no 10, connected between node 3 and 11. Node 3 already connected to main feeder node 4 i.e. 3-4-5……-10 Also node 3 connected to lateral i.e 3-11-12-13(end point)
Similarly, Node 6 has lateral 6-14-15-16-17-18 and node 8 has lateral 8-19-20-21. We can differentiate main feeder n lateral by looking at From n To column of Z.
My vector L looks like %%% Real Imag L = [ 0.0000 0.0000 0.0100 0.0060 -0.0090 0.0040 0.0120 0.0080 0.0060 0.0030 0.0060 -0.0020 -0.0200 0.0100 0.0200 -0.0100 0.0060 0.0020 0.0060 0.0020 0.0045 0.0030 0.0060 0.0035 0.0060 0.0035 0.0120 0.0080 -0.0060 0.0010 0.0060 0.0020 0.0060 0.0020 0.0090 0.0040 0.0090 0.0040 0.0090 -0.0040 0.0090 0.0040]
As per your suggestion, I will create fresh question with all necessary details. Thank you sir.

Sign in to comment.

More Answers (0)

Categories

Find more on Mathematics in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!