Double checking a for loop
Mostrar comentarios más antiguos
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
Respuestas (1)
Sergey Kasyanov
el 13 de Mzo. de 2021
0 votos
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 comentarios
Sergey Kasyanov
el 13 de Mzo. de 2021
Do you need to integrate temp over the bincenters?
In that case you can use next code:
intchl(i) = nansum((temp(1:end-1) + temp(2:end))/2.*diff(bincenters'))
Jacqueline Chrabot
el 13 de Mzo. de 2021
Jacqueline Chrabot
el 13 de Mzo. de 2021
Jacqueline Chrabot
el 13 de Mzo. de 2021
Sergey Kasyanov
el 15 de Mzo. de 2021
I cant understand why error still exist. Maybe you should to use diff(bincenters) instead of diff(bincenters')?
Jacqueline Chrabot
el 15 de Mzo. de 2021
Categorías
Más información sobre Fourier Analysis and Filtering en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!