[MatLab] Valori delle componenti positive?

Messaggioda MaxScalin » 24/08/2019, 08:31

Buongiorno a tutti,
devo creare una funzione che ricevendo in input 3 vettori a 4 componenti (come X1=1, 2, 3, 4) sia in grado di fornire in output un vettore T le cui componenti siano i valori medi delle sole componenti positive.

L'ho fatta creando un indice che tramite un for cambia valore in base alla posizione nel vettore. All'interno ho scritto un if che controlla se il valore in quella posizione è maggiore di zero.

C'è un modo per far svolgere il controllo if su tutte le variabili che iniziano con la stessa porzione di nome come input* e contatore* ?
Ho chiamato le variabili input1, input2, input3, input4, contatore1, contatore2, contatore3, contatore4.
Ultima modifica di MaxScalin il 24/08/2019, 15:45, modificato 1 volta in totale.
MaxScalin
Starting Member
Starting Member
 
Messaggio: 1 di 2
Iscritto il: 21/07/2019, 17:11

Re: [MatLab] Valori delle componenti positive?

Messaggioda gugo82 » 24/08/2019, 15:39

Beh, ragionaci un po’.
Quasi sicuramente (ma non troppo, visto che non tocco MatLab da un decennio circa), è già implementata una funzione che ti restituisce la parte positiva di un vettore. Vedi se c’è ed usala.
Se non c’è, creala: non ci vuole niente.
Sono sempre stato, e mi ritengo ancora un dilettante. Cioè una persona che si diletta, che cerca sempre di provare piacere e di regalare il piacere agli altri, che scopre ogni volta quello che fa come se fosse la prima volta. (Freak Antoni)
Avatar utente
gugo82
Moderatore globale
Moderatore globale
 
Messaggio: 22163 di 22399
Iscritto il: 13/10/2007, 00:58
Località: Napoli

Re: [MatLab] Valori delle componenti positive?

Messaggioda apatriarca » 24/08/2019, 22:44

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
apatriarca
Moderatore
Moderatore
 
Messaggio: 5287 di 5297
Iscritto il: 08/12/2008, 21:37
Località: Londra

Re: [MatLab] Valori delle componenti positive?

Messaggioda MaxScalin » 04/09/2019, 09:08

Grazie mille per la risposta :). Sono agli inizi con matlab :)
MaxScalin
Starting Member
Starting Member
 
Messaggio: 2 di 2
Iscritto il: 21/07/2019, 17:11


Torna a Informatica

Chi c’è in linea

Visitano il forum: Raptorista e 10 ospiti