problem with coding cumsum statement

5 次查看(过去 30 天)
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

采纳的回答

Dennis
Dennis 2018-8-31
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 个评论
D.J
D.J 2018-8-31
Thanks a million Dennis. That solved the problem, and thanks heaps for explaining where did I go wrong ! Much appreciated.

请先登录,再进行评论。

更多回答(1 个)

Paolo
Paolo 2018-8-31
编辑:Paolo 2018-8-31
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 个评论
D.J
D.J 2018-8-31
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!

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by