Clear Filters
Clear Filters

How to sum vectors in a loop where it cumulatively sums with the vector created in the previous loop?

1 view (last 30 days)
I am currently trying to create a loop where the code sums up numbers from the previous total each time. I have the variable dispSum which adds the displacement vector from row 1 + row 2. Then I want to add dispSum (row1+row2) with the displacment vector from row 3. This would continue until all the displacement vectors have been used so the code is constantly adding the total value. Currently what I have is dispSum adds the previous vector with the next row vector so I am not getting a grand total. How do I change this?
rad1 = [-30.4 -30];
K = 0;
disp = [];
for j = 1:length(medXY1);
K = K+1;
disp(K,1) = medXY2(j,1)-medXY1(j,1);
disp(K,2) = medXY2(j,2)-medXY1(j,2);
end
L0 = dot(disp(1,:),rad1);
k = 1;
dispSum = [];
L = [];
strain = [];
%dispSum1 = plus(disp(1,:),disp(2,:));
for j = 1:length(disp)-1;
dispSum(j,:) = plus(disp(j,:),disp(j+1,:));
L(j,:) = dot(dispSum(j,:),rad1);
strain = (L-L0)/L0;
end

Accepted Answer

Cris LaPierre
Cris LaPierre on 5 Feb 2019
I think you want to use cumsum. Also, you should take advantage of MATLAB's ability to handle matrices.
rad1 = [-30.4 -30];
disp = medXY2-medXY1;
L0 = dot(disp(1,:),rad1);
dispSum = cumsum(disp);
L = dot(dispSum,ones(length(disp),1)*rad1,2);
strain = (L-L0)/L0;
  5 Comments
Cris LaPierre
Cris LaPierre on 5 Feb 2019
Each row is the cumulative sum of all the previous rows and itself. If I had the following array:
disp =
2 1
2 3
2 5
2 7
2 9
cumsum would produce an array of the same size where the value in the second row is the sum of the vectors on the 1st and 2nd row. The third row is the sum of the vectors on rows 1-3, etc.
cumsum(disp)
ans =
2 1
4 4
6 9
8 16
10 25
What do you mean it's not giving you the accurate value?
Cris LaPierre
Cris LaPierre on 5 Feb 2019
Ok, so if you want
dispSum(1,:) = disp(1,:)+disp(2,:)
that means dispSum is one row 'shorter' than disp. If that's what you want then do the following
dispSum = cumsum(disp);
dispSum(1,:)=[];

Sign in to comment.

More Answers (0)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Products


Release

R2018b

Community Treasure Hunt

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

Start Hunting!