In matlab (e in praticamente qualsiasi altro linguaggio) il modo migliore di fare la stessa operazione su più oggetti è quella di inserire tale oggetti in un vettore (o lista o altro). Puoi quindi per esempio scrivere:
- Codice:
inputs = [input1; input2; input3; input4];
A questo punto la prima componente di ogni vettore sarà
inputs(:, 1)
e il primo vettore sarà
inputs(1, : )
.
A questo punto in Matlab esistono soluzioni migliori all'uso di un ciclo. Per prima cosa è possibile accedere a tutti gli elementi di una matrice che rispettano una condizione scrivendo per esempio
inputs(inputs > 0)
per ottenere tutti gli elementi positivi del tuo vettore. Dopodiché funzioni come
mean
che restituiscono la media di un vettore, funzionano anche su matrici e array multidimensionali. Il seguente codice dovrebbe quindi restituire il vettore T:
- Codice:
inputs = [input1; input2; input3; input4];
T = sum(inputs .* (inputs>0))./sum(inputs>0);
EDITS:
inputs(inputs > 0)
restituisce un vettore monodimensionale con gli elementi e non una matrice. In effetti la versione corretta consiste nel moltiplicare
inputs
e
inputs>0
in questo caso. Questo secondo vettore contiene infatti 1 nelle posizioni in cui la condizione è verificata e 0 altrimenti per cui moltiplicando insieme (component-wise..) le due matrici ottieni una matrice con zero nelle posizioni in cui l'elemento era negativo e il valore altrimenti. In modo simile non puoi usare mean perché considererebbe gli zero nella media, per cui è necessario implementarlo direttamente con
sum