Double checking a for loop

4 ビュー (過去 30 日間)
Jacqueline Chrabot
Jacqueline Chrabot 2021 年 3 月 13 日
コメント済み: Jacqueline Chrabot 2021 年 3 月 15 日
Can someone just double check my for loop. Specifically the bolded line. I wanted to calculate the integrated chlorophyll and then use it to find the relative amount by dividing temp by the intchl. Technically speaking, if I add up all my relative chlorophyll values for each column they should equal 1. However, they are coming out totalling a little over one so I think I messed up.
for i=1:length(databin)
temp=databin{i};
temp=temp(:,Varnum);
VARfield(1:length(temp),i)=temp;
intchl(i) = nansum(0.5.*(temp(1:end -1) + temp(2:end))); %MARKED
%integrated chlorophyll should just be one number for each cast
relchl = temp/intchl(i);
VARfieldrel(1:length(relchl),i)=relchl;
end

回答 (1 件)

Sergey Kasyanov
Sergey Kasyanov 2021 年 3 月 13 日
Hello,
sum(temp/intchl) -> sum(temp)/intchl means that you divide sum of all values by sum of mean values. Lets write it in detail:
sum(temp) = x1 + x2 + x3 + ... + x(n-1) + x(n)
intchl = (x1+x2)/2 + (x2 + x3)/2 + ... + (x(n-2) + x(n-1)/2 + (x(n-1) + xn)/2 = x1/2 + x2 + x3 + .... + x(n-1) + xn/2 = sum(temp) - (temp(1) + temp(end))/2
It means that intchl is lower than sum(temp).
I think you should to calculate intchl as sum(temp).
  6 件のコメント
Sergey Kasyanov
Sergey Kasyanov 2021 年 3 月 15 日
I cant understand why error still exist. Maybe you should to use diff(bincenters) instead of diff(bincenters')?
Jacqueline Chrabot
Jacqueline Chrabot 2021 年 3 月 15 日
databin= cell(length(datafi),1)
for i = 1:length(datafi);
%for i =1;
temp=datafi{i};
minval = 0;
maxval = max(temp.Var7);
step = 0.25; %increase to 25, was at 0.10
bins = minval:step:maxval;
bincenters = bins + step/2;
bincenters = bincenters(1:length(bincenters)-1);
DATAavg_input = ones(length(bincenters),size(temp,2)).*NaN;
for xx = 2:length(bins);
nn = find(temp.Var7 >= bins(xx-1) & temp.Var7 < bins(xx));
DATAavg_input(xx-1,3:end) = nanmean(table2array(temp(nn,3:end)),1);
end
DATAavg_input(:,1)= datenum(datetime(temp.Var1(1), 'InputFormat', 'MM/dd/yyyy', 'Format', 'MM-dd-yyyy hh:mm:ss.SSSS') + temp.Var2(1));
%make sure to convert it back for contour using datetime
databin{i}=DATAavg_input;
end
DataBin = DATAavg_input;
Sergey, for the time being do you know how to convert back the time from the bolded line?? I tried using xticks later on in my script and realized all the date and times were the same so xtick was saying 00:00 for everything??

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by