Passa al tema normale
Discussioni su argomenti di Informatica

Regole del forum

Consulta il nostro regolamento e la guida per scrivere le formule
Rispondi al messaggio

[MatLab] Valori delle componenti positive?

24/08/2019, 07: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, 14:45, modificato 1 volta in totale.

Re: [MatLab] Valori delle componenti positive?

24/08/2019, 14: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.

Re: [MatLab] Valori delle componenti positive?

24/08/2019, 21: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

Re: [MatLab] Valori delle componenti positive?

04/09/2019, 08:08

Grazie mille per la risposta :). Sono agli inizi con matlab :)
Rispondi al messaggio


Skuola.net News è una testata giornalistica iscritta al Registro degli Operatori della Comunicazione.
Registrazione: n° 20792 del 23/12/2010.
©2000— Skuola Network s.r.l. Tutti i diritti riservati. — P.I. 10404470014.