Utilizzando le proprietà di indexing di MatLab, puoi estrarre i valori con una sola istruzione e senza l'utilizzo della matrice temporanea "U"
fU=V(V(:,3) > 30 & V(:,3) < 235,2)
L'espressione
V(:,3) > 30 & V(:,3) < 235
ritorna un vettore di valori di tipo "logical" i valori del quale sono settati a "1" quando la condizione è verificata.
Puoi usare questi valori come indice per identificare le righe della colonna "2" che vuoi estrarre.
Puoi ottenere lo stesso risultato utilizzando un ciclo "for"; in questo caso devi definire un contatore che userai come indice per scrivere i valori nel vettore di output.
Se, come opportunamente hai fatto, inizializzi il vettore di output creandolo con un numero di elementi pari al numero delle righe della matrice di input, dovrai, al termine, eliminare i valori in eccesso (ammesso che ce ne siano).
Per identificarli facilmente, conviene inizializzare il vettore con valori "NaN" utilizzando la funzione "NaN".
Per rendere il codice un po' più flessibile, pupi definire due variabili che rappresentino i valori minimo e massimo della condizione da verificare.
Di seguito una possibile implementazione (la matrice di input "V" è stata creata con numeri random)
I commenti nel codice dovrebbero chiarire i vari passaggi
clear all
% Define a dummy input data set
V=randi([0 360],13,3)
% Define the limits
min_val=30
max_val=235
% Extract the values
fU=V(V(:,3) > min_val & V(:,3) < max_val,2)
% Get the number of rows
n=size(V,1)
% Initialize the output array
fU1=NaN(n,1)
% Iniitalize the counter
cnt=0
% Loop over the input matrix
for i=1:n
% If the condition is verified
if(V(i,3) > min_val & V(i,3) < max_val)
% Increment the counter
cnt=cnt+1
% Assigne the value to the output array
fU1(cnt)=V(i,2)
end
end
% Delete the un-necessary elementof of the output array
fU1(isnan(fU1))=[]
% Just to check ...
fU-fU1