Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Variabile globale Matlab

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Variabile globale Matlab

Messaggioda Foto Utentedlbp » 4 giu 2014, 23:47

Buonasera a tutti.
Sto scrivendo del codice Matlab. In uno stesso file function ho una funzione che richiama altre funzioni a seconda di un parametro di ingresso. C'è una variabile che viene usata da tutte le funzioni ed è il numero di righe di una matrice.
Mi conviene calcolarla nella "funzione principale" e metterla globale (e quindi usarla anche nelle altre funzioni) oppure mi conviene calcolarla ogni volta? Voglio un consiglio dal punto di visto prestazionale (tempo/spazio) e dal punto di vista degli accessi in memoria.

Grazie a tutti in anticipo
Grazie
Avatar utente
Foto Utentedlbp
28 1 4 7
Sostenitore
Sostenitore
 
Messaggi: 566
Iscritto il: 18 lug 2011, 12:06

1
voti

[2] Re: Variabile globale Matlab

Messaggioda Foto Utenteboiler » 5 giu 2014, 0:45

Se ti riferisci alla funzione size o length, credo che siano proprietà così dirette di una variabile che il chiamarle non richieda praticamente nessun overhead. Se però vuoi otimizzare fino all'impossibile, io al tuo posto scriverei un piccolo script di test. Se ricordo bene ci sono i comandi tic e toc che potrebbero tornare utili.

Boiler
Avatar utente
Foto Utenteboiler
14,7k 4 7 13
G.Master EY
G.Master EY
 
Messaggi: 2522
Iscritto il: 9 nov 2011, 12:27

0
voti

[3] Re: Variabile globale Matlab

Messaggioda Foto UtenteDirtyDeeds » 5 giu 2014, 7:17

Il fatto che tu abbia bisogno del numero di righe di una matrice fa sospettare che tu voglia scrivere un ciclo for, e in Matlab usare i cicli for è quasi sempre un errore ;-)
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,7k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7013
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

0
voti

[4] Re: Variabile globale Matlab

Messaggioda Foto Utentedlbp » 5 giu 2014, 10:54

No Foto UtenteDirtyDeeds. Il numero di righe non mi serve in un ciclo for. Mi serve per altro :D :D

Ma comunque è meglio dichiararla globale oppure calcolarla in ogni function implementata nello stesso m-file?

Grazie e buona giornata!
Avatar utente
Foto Utentedlbp
28 1 4 7
Sostenitore
Sostenitore
 
Messaggi: 566
Iscritto il: 18 lug 2011, 12:06

0
voti

[5] Re: Variabile globale Matlab

Messaggioda Foto UtenteDirtyDeeds » 5 giu 2014, 11:56

Come ti ha scritto Foto Utenteboiler, l'overhead di quella funzione è praticamente nullo, per cui, per chiarezza, conviene chiamarla localmente in ogni funzione. Se il codice è ben progettato non dovresti vedere differenze significative nel tempo di esecuzione.
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,7k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7013
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

0
voti

[6] Re: Variabile globale Matlab

Messaggioda Foto Utentedlbp » 5 giu 2014, 16:01

Ok. Allora vorrà dire che la calcolo.
Hai ragione te: per leggibilità del codice meglio fare così!!!
Ciao e grazie a tutti!!! :)
Avatar utente
Foto Utentedlbp
28 1 4 7
Sostenitore
Sostenitore
 
Messaggi: 566
Iscritto il: 18 lug 2011, 12:06

0
voti

[7] Re: Variabile globale Matlab

Messaggioda Foto Utentedursino » 7 giu 2014, 18:33

DirtyDeeds ha scritto:Il fatto che tu abbia bisogno del numero di righe di una matrice fa sospettare che tu voglia scrivere un ciclo for, e in Matlab usare i cicli for è quasi sempre un errore ;-)

Non centra nulla con il Topic però sembra interessante!
Hai voglia di scrivere un paio di righe circa quello?
Avatar utente
Foto Utentedursino
255 1 5 5
Expert
Expert
 
Messaggi: 522
Iscritto il: 8 mar 2009, 13:24

5
voti

[8] Re: Variabile globale Matlab

Messaggioda Foto UtenteDirtyDeeds » 7 giu 2014, 20:42

dursino ha scritto:Hai voglia di scrivere un paio di righe circa quello?


I cicli for in Matlab sono lenti e non vanno usati a meno che non sia assolutamente indispensabile. In Matlab bisogna sempre cercare di vettorizzare il problema.

Confronta i tempi di esecuzione di questi script:

1. Ciclo for

Codice: Seleziona tutto
>> X = rand(1,100000000);
Y = zeros(size(X));
tic;
for i = 1:length(X),
Y(i) = X(i)^2;
end
toc
Elapsed time is 10.601016 seconds.


2. Vettorizzazione

Codice: Seleziona tutto
>> X = rand(1,100000000);
tic;
Y = X.^2;
toc
Elapsed time is 0.459374 seconds.


Ci sarebbero anche delle funzioni di iterazione come arrayfun, ma sono, in molti casi, più lente del ciclo for (nell'esempio sopra i tempi si dilaterebbero in modo intollerabile).
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,7k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7013
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

0
voti

[9] Re: Variabile globale Matlab

Messaggioda Foto Utentedursino » 7 giu 2014, 21:21

Ah ok.. quindi dici di lavorare sui vettori.
Però non sempre si può fare, dipende un po' dalle situazioni.

In ogni caso, grazie della spiegazione. O_/
Avatar utente
Foto Utentedursino
255 1 5 5
Expert
Expert
 
Messaggi: 522
Iscritto il: 8 mar 2009, 13:24

4
voti

[10] Re: Variabile globale Matlab

Messaggioda Foto UtenteDirtyDeeds » 7 giu 2014, 21:29

dursino ha scritto:Però non sempre si può fare, dipende un po' dalle situazioni.


Non sempre la vettorizzazione è evidente ed immediata come quella degli esempi sopra, e spesso gli utilizzatori di Matlab pensano che il problema non sia vettorizzabile semplicemente perché non ci pensano su abbastanza. A volte la vettorizzazione di un problema può richiedere un lavoro preparatorio non banale. In altre parole: non sempre si può fare, è vero, ma molte volte non viene fatta neanche quando si potrebbe.
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,7k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7013
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti