2013-06-25 10 views
7

In Matlab, sto eseguendo calcoli durante un ciclo for, ma sto cercando di trovare un modo per saltare le iterazioni durante il ciclo for se sono soddisfatti determinati criteri. Ho scritto un breve esempio per illustrare la mia domanda.In MATLAB, come posso saltare un numero predeterminato di iterazioni di loop se sono soddisfatti determinati criteri?

Nel codice seguente, il ciclo for passerà attraverso le iterazioni 1 e 2 e verrà emesso come previsto in r. r (1) sarà 1, e r (2) sarà 2. Una volta che il ciclo for attraversa l'iterazione 3, il valore di 20 sarà posizionato in r (3). Dopo che questo ha avuto luogo, allora voglio che il ciclo for salti le prossime 5 iterazioni e vada dritto all'iterazione 8 del ciclo for.

for i=1:1:10 
    if i==3 
     r(i)=20; 
     i = i+5; 
    else 
     r(i) = i; 
    end 
end 

Il risultato effettivo per r è la seguente:

r = 

1  2 20  4  5  6  7  8  9 10 

Tuttavia, vorrei per il risultato di apparire simile alla seguente. (NOTA che non sto cercando di riempire il r desiderata (4):. R (7) con 0, ma piuttosto cercando di saltare per iterazioni del ciclo da 4 a 7 del tutto)

r = 

1  2 20  0  0  0  0  8  9 10 

Se qualcuno ha consigli , questo sarà molto apprezzato Grazie!

risposta

7

usare un ciclo, invece di un ciclo forwhile per incrementare manualmente:

i=1; // index for loop 
k=1; // index for r 
r = zeros(1,10) // pre-allocate/cut is faster 
while i <= 10 
    if i == 3 
    r(i)=20; 
    i = i+5; // skip multiple iterations 
    else 
    r(k)=i; 
    i=i+1; // loop increment 
    k=k+1; // vector increment 
    end 
end 
r(k+1:end) = []; // Remove unused portion of the array 
+0

Grazie per le informazioni incluso l'addizionale sulla pre-assegnazione! – Aaron

+0

Nessun problema, di solito lavoro con vettori di grandi dimensioni, ma non è una cattiva abitudine da sviluppare! :) –

+3

BTW, il motivo per cui il tuo codice non funziona è che MATLAB memorizza effettivamente il proprio "riferimento" all'i utilizzato nel ciclo for, quindi mentre puoi ottenere i, non puoi modificare il valore. Ho dimenticato esattamente come funziona, ma ricordo che quando ero nuovo alla programmazione, l'ho cercato, un po 'interessante haha ​​ – Shaun314

2

L'implementazione più semplice è quella di omettere quelle dal loop.

for i= [1:3 8:10] 
    if i==3 
     r(i)=20; 
    else 
     r(i) = i; 
    end 
end 

Tuttavia, che non può soddisfare le vostre esigenze, se si ha realmente bisogno di fare la determinazione dinamica degli indici di loop. In tal caso, utilizzare un ciclo while, in questo modo:

i = 1; 
while i <= 10 
    if i==3 
     r(i)=20; 
     i = i+5; 
    else 
     r(i) = i; 
     i = i+1 
    end 

fine

Come avete visto, ci sono problemi quando si cerca di modificare la variabile indicizzazione wihtin un ciclo for.

+0

Grazie per la risposta! – Aaron

0

Se sai dove saltare si potrebbe fare qualcosa di simile

ind = [1:2,8:10] 
r(ind) = ind 
r(3) = 20 

In questo modo si evita anche per il ciclo . Se non riesci a determinare quanti loop fai prima di saltare usa due diversi loop e usa interrompi la parola chiave per interrompere la prima iterazione.

+0

Grazie per la risposta, ma le iterazioni da saltare sono sconosciute. – Aaron

Problemi correlati