Calculation of summation with filtering positive and negative values
    11 views (last 30 days)
  
       Show older comments
    
Hi
I have one matrix with u(i,j,t).
I need calculate sum of the variable like this in each time step.i,j have not folloed an approprate pattern for example the same i or j
sum(t)= u(167,148,t)+u(167,139,t)+u(167,165,t)+u(167,164,t)+u(167,163,t)+..
But,I need an algorithm to seperate positive and negative values.
for example in each time step check the u: if u is positive: sumpositive(t)=u(167,158,t)+u(167,159,t)+u(167,160,t)+u(167,161,t)+u(167,162,t)
if u is negative : sumnegative(t)=iu(167,158,t)+u(167,159,t)+u(167,160,t)+u(167,161,t)+u(167,162,t)
Thanks
0 Comments
Answers (1)
  the cyclist
      
      
 on 24 Apr 2023
        % Set seed for reproducibility
rng default
% Some pretend data
u = randn(4,4,3);
% Identify positive u
uIsPos = u >= 0;
% Sum the positive u
sumpositive = sum(u.*uIsPos,3)
% Sum the negative u
sumnegative = sum(u.*~uIsPos,3)
4 Comments
  the cyclist
      
      
 on 25 Apr 2023
				for t = 1:length(time)
    sumpositive(t) = (u(167,158,t).*(u(167,158,t)>0)) + (u(167,159,t).*(u(167,159,t)>0)) + (u(167,160,t).*(u(167,160,t)>0)); 
    sumnegative(t) = (u(167,158,t).*(u(167,158,t)<0)) + (u(167,159,t).*(u(167,159,t)<0)) + (u(167,160,t).*(u(167,160,t)<0)); 
end
which can be simplified to
for t = 1:length(time)
    sumpositive(t) = sum(u(167,158:160,t).*(u(167,158:160,t)>0));
    sumnegative(t) = sum(u(167,158:160,t).*(u(167,158:160,t)<0));
end
See Also
Categories
				Find more on Surface and Mesh Plots 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!
