problem with coding cumsum statement

1 visualización (últimos 30 días)
D.J
D.J el 31 de Ag. de 2018
Comentada: D.J el 31 de Ag. de 2018
Hi all, I am really stuck with this one ! I am trying to tell matlab to calculate at which day the cumulative rainfall reaches 8mm I should only use vectorisation for this code. 2 issues here:
1- I keep getting this error: "CUMSUM supports only numerical or logical inputs." If I create the arrays manually cumsum seems to work, but if I call it from a table, it give me the above error. Does this mean, I need to create the arrays manually?
2- If if I manage to get it to work, how on Earth do I tell matlab to keep adding the rainfall values until it reaches 8mm then exit and display on which day the goal was reached without using loop ?? I have attached the file and a draft of my code below: Any help would be highly appreciated !
Many thanks in advance !
RF_tbl=readtable('Test_data1.csv');
date=[1:31]; % I tried first to call the date column from the table but that caused a problem.
RF_V= RF_tbl(6:36,5); %This calls the rainfall column from the table, which I need to calculate
if cumsum(RF_V)<=8
'continue'
else
'exit and display the date on which the goal reached' % This is not the code, this is just to explain what I need to achieve.
end

Respuesta aceptada

Dennis
Dennis el 31 de Ag. de 2018
Your data are stored as cells, not as matrix. Your values are also strings and need to be cast to numbers first. This code might work for you (it will throw an error if the 8mm rainfall are not reached within the month):
data=readtable('Test_data1.csv');
mysum=cumsum(str2double(data{6:end,5}));
idx=find(mysum>=8,1);
date=data{idx+6,2}
  1 comentario
D.J
D.J el 31 de Ag. de 2018
Thanks a million Dennis. That solved the problem, and thanks heaps for explaining where did I go wrong ! Much appreciated.

Iniciar sesión para comentar.

Más respuestas (1)

Paolo
Paolo el 31 de Ag. de 2018
Editada: Paolo el 31 de Ag. de 2018
A few things here. First of all, you can't apply cumsum because, as MATLAB is telling you, the data is not numeric. When you are reading data from the table, it is converted to char data type. You can either specify the type of variable when using readtable, or convert it afterwards. In my solution below, I convert it afterwards to show you one way of doing it.
I also think that what you do not want to use cumsum here, but rather a simple sum in a while loop until your exit condition is met:
RF_tbl=readtable('Test_data1.csv');
date=[1:31]; % I tried first to call the date column from the table but that caused a problem.
RF_V= str2double(RF_tbl(6:36,5).Var5);
indx=1;
tmpsum=0;
while(tmpsum<=8)
tmpsum=tmpsum+RF_V(indx);
indx=indx+1;
end
fprintf('Reached on day:%d\n',indx-1)
Prints:
Reached on day:8
  1 comentario
D.J
D.J el 31 de Ag. de 2018
Many thanks Paolo, but I am not supposed to use while or for loops. Problem has been solved in another code. All good now. Many thanks!

Iniciar sesión para comentar.

Categorías

Más información sobre Logical en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by