For loop skipping with if statement
Afficher commentaires plus anciens
I have a 'for loop' designed to go through graph data (col1 = time, col2 = y), with an 'if statement' so if it finds a value equal to 0 in col2 it will calculate an average between the values in col2 before and after the 0 at 'a' (the time in col1):
for a = 2:length(pk)-1
if pk(a,2) == 0
m = (pk(a+1,2) - pk(a-1,2))/(pk(a+1,1) - pk(a-1,1)); % calculate gradient of values before an after 'a'
pk(a,2) = pk(a+1,2) - m*(pk(a+1,1)-pk(a,1)); % calculate value at 'a' [there are no 0's in col1]
else
end
end
However in col2 of the data I have found consecutive runs of 0's which means I cannot apply the code above. How can I alter the code so as to skip over the runs of 0 to create average values for them also?
3 commentaires
Torsten
le 11 Oct 2022
if it finds a value equal to 0 in col2 it will calculate an average between the values in col2 before and after the 0 at 'a'
And why do you do that ?
Sam Hurrell
le 11 Oct 2022
Sam Hurrell
le 11 Oct 2022
Modifié(e) : Sam Hurrell
le 11 Oct 2022
Réponses (2)
This is a linear interpolation. This is implemented without a loop already:
pk = [1, 2; 3, 0; 4, 0; 5, 3; 7, 2; 10, 0; 13, 5];
plot(pk(:, 1), pk(:,2), 'bo');
hold('on');
miss = (pk(:, 2) == 0);
pk(miss, 2) = interp1(pk(~miss, 1), pk(~miss, 2), pk(miss, 1));
plot(pk(:, 1), pk(:, 2), 'r-');
plot(pk(miss, 1), pk(miss, 2), 'ro');
2 commentaires
Sam Hurrell
le 11 Oct 2022
Jan
le 12 Oct 2022
Yes, and this is what I have posted already. The zeros are not ignored, but the average using the surrounding non-zero values is used. If there is one zero, the result is the same as with your code, but the interp1 approach allows a sequence of zeros also.
I've added red circles in the diagram to show the replaced zero values.
Torsten
le 11 Oct 2022
The usual average would be
pk(a,2) = ( pk(a-1,2)*(pk(a,1)-pk(a-1,1)) + pk(a+1,2)*(pk(a+1,1)-pk(a,1)) )/(pk(a+1,1)-pk(a-1,1))
But I think this will result in the same problem you already have.
To compare two graphs, use interp1 to find values for the union of the time points of graph 1 and graph 2.
Catégories
En savoir plus sur Logical dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
