Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Variabile globale Matlab

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[21] Re: Variabile globale Matlab

Messaggioda Foto Utentedlbp » 12 giu 2014, 16:39

Si Foto Utenteboiler, mi interessano solo gli indici dei 2 valori più grandi.
No, il massimo si può presentare una sola volta.
Avatar utente
Foto Utentedlbp
28 1 4 7
Sostenitore
Sostenitore
 
Messaggi: 566
Iscritto il: 18 lug 2011, 12:06

2
voti

[22] Re: Variabile globale Matlab

Messaggioda Foto Utenteboiler » 12 giu 2014, 22:14

Allora
Codice: Seleziona tutto
M1 = find(max(V));

Dove V è il tuo vettore. A questo punto hai il primo massimo.
Per trovare il secondo devi dapprima togliere il primo:
Codice: Seleziona tutto
V(M1) = [];

E poi ripetere l'operazione:
Codice: Seleziona tutto
M2 = find(max(V));


Concettualmente piú semplice è la situazione che hai proposto tu, anche valida, usando la funzione sort.
Sull'efficienza non me la sento di metterci la mano sul fuoco, ma direi che sort potrebbe essere un pelino piú lenta.
Ti conviene provare con un grosso vettore e le funzioni tic e toc.

Boiler
Avatar utente
Foto Utenteboiler
26,4k 5 9 13
G.Master EY
G.Master EY
 
Messaggi: 5600
Iscritto il: 9 nov 2011, 12:27

2
voti

[23] Re: Variabile globale Matlab

Messaggioda Foto UtenteRussell » 13 giu 2014, 8:53

boiler ha scritto:
M1 = find(max(V));

Dove


cosi' è un po' uno spreco computazionale pero', la 'find' per quanto ottimizzata ha un costo...

puoi fare prima scrivendo

Codice: Seleziona tutto
[valore, M1] = max(V);
Ultima modifica di Foto UtenteRussell il 13 giu 2014, 9:05, modificato 1 volta in totale.
Avatar utente
Foto UtenteRussell
3.373 3 5 9
Master
Master
 
Messaggi: 2193
Iscritto il: 4 ott 2009, 10:25

0
voti

[24] Re: Variabile globale Matlab

Messaggioda Foto Utenteboiler » 13 giu 2014, 9:04

Russell ha scritto:cosi' è un po' uno spreco computazionale pero', la 'find' per quanto ottimizzata ha un costo...


Vado dietro la lavagna e scrivo 1000 volte "Leggere il manuale delle funzioni prima di dare consigli" #-o

Grazie per la rettifica :ok:

Boiler
Avatar utente
Foto Utenteboiler
26,4k 5 9 13
G.Master EY
G.Master EY
 
Messaggi: 5600
Iscritto il: 9 nov 2011, 12:27

0
voti

[25] Re: Variabile globale Matlab

Messaggioda Foto UtenteRussell » 13 giu 2014, 9:33

il manuale? esiste un manuale? :D
queste di solito sono cose che si imparano a caso leggendo codice scritto da altri.
scherzo...

e ora, non per fare il puntiglioso... ma
ripensavo al tuo codice, in particolare quando togli l'elemento massimo con

boiler ha scritto:V(M1) = [];


tecnica interessante.... ma

non è che in questo modo il vettore V dopo l'operazione è un elemento piu' corto?

no perche'... se cosi' fosse.... il valore M2 ottenuto con la linea di codice seguente sarebbe poco affidabile:
* se M2 fosse < M1 allora nessun problema
* ma se M2 fosse > M1 allora il codice darebbe come risultato M2-1 , sbagliando di 1...
Avatar utente
Foto UtenteRussell
3.373 3 5 9
Master
Master
 
Messaggi: 2193
Iscritto il: 4 ott 2009, 10:25

0
voti

[26] Re: Variabile globale Matlab

Messaggioda Foto Utenteboiler » 13 giu 2014, 10:22

Russell ha scritto:il manuale? esiste un manuale? :D


Codice: Seleziona tutto
help max


non è che in questo modo il vettore V dopo l'operazione è un elemento piu' corto?


Sì lo è.

ma se M2 fosse > M1 allora il codice darebbe come risultato M2-1 , sbagliando di 1...


Torno dietro la lavagna :oops:
Ovviamente il caldo di questi giorni mi fornisce un'ottima scusa per gli errori che faccio :mrgreen:

Fix:
Codice: Seleziona tutto
V(M1) = min(V)


Boiler
Avatar utente
Foto Utenteboiler
26,4k 5 9 13
G.Master EY
G.Master EY
 
Messaggi: 5600
Iscritto il: 9 nov 2011, 12:27

0
voti

[27] Re: Variabile globale Matlab

Messaggioda Foto Utentedlbp » 13 giu 2014, 19:16

A questo punto dopo aver calcoltato il primo indice potrei anche porre quell'elemento uguale a zero per evitare la questione del vettore più corto di un elemento :)
Avatar utente
Foto Utentedlbp
28 1 4 7
Sostenitore
Sostenitore
 
Messaggi: 566
Iscritto il: 18 lug 2011, 12:06

0
voti

[28] Re: Variabile globale Matlab

Messaggioda Foto UtenteRussell » 13 giu 2014, 19:18

o a zero... oppure

boiler ha scritto:Fix:
V(M1) = min(V)


giustamente noi non sappiamo il range di valori del tuo array, e infatti era saltata fuori la soluzione generale.
Se mettendoci zero stai tranquillo fai pure... altrimenti pensaci un attimo.
Avatar utente
Foto UtenteRussell
3.373 3 5 9
Master
Master
 
Messaggi: 2193
Iscritto il: 4 ott 2009, 10:25

Precedente

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 11 ospiti