Problems with a if statement in a for-loop
Mostra commenti meno recenti
Hi,
My plan for the code is following:
- read all rows from 1 to anzahl_runs (=number of rows)
- If there is a 1 in the row -> Divide two double vectors through each other, if there is no 1, delete the row
- Save this ratios in a new vector.
I tried it this way:
for k=1:anzahl_runs
if any (intens_RL(k,:)==1)
Ratio(k,1)=SpalteSr87(k,:)/SpalteSr86(k,:);
else
intens_RL(k,:)=[];
end
end
Ratio should be a new created vector.
But at the moment the line Ratio.... gives me following error:
Index in position 1 exceeds array bounds (must not exceed 181).
Error in TOF_Skript_SingleParticlesSrNdOs (line 96)
if any (intens_RL(k,:)==1)
I appreciate any help :-)
2 Commenti
Chunru
il 21 Apr 2022
What are sizes of SpalteSr87 and SpalteSr86?
Tatjana Mü
il 21 Apr 2022
Risposta accettata
Più risposte (1)
Dyuman Joshi
il 21 Apr 2022
Modificato: Dyuman Joshi
il 21 Apr 2022
1 voto
So, Anzahl_runs is 260 meaning the for loop will run from 1 to 260.
Suppose your condition did not find a 1 in any row, so it will delete that row from the matrix. Now your matrix doesn't have 260 rows. So when the loop variable reaches a value greater than the number of rows your matrix has, this error shows up.
So, If x number of rows do not have 1 at all, your matrix will be reduced to 260-x rows. As soon as k reaches 260-x+1 (181 in your case), this error will be displayed and your code will stop running.
You can use a while loop or get the index of the rows from for loop and delete them after the loop
1 Commento
Tatjana Mü
il 21 Apr 2022
Categorie
Scopri di più su Loops and Conditional Statements in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!