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
Variabile globale Matlab
Moderatore:
Paolino
28 messaggi
• Pagina 1 di 3 • 1, 2, 3
1
voti
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
Boiler
0
voti
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
instead of
(Anonimo).
...'cos you know that
ain't
, right?
You won't get a sexy tan if you write
in lieu of
.
Take a log for a fireplace, but don't take
for
arithm.
instead of
(Anonimo)....'cos you know that
ain't
, right?You won't get a sexy tan if you write
in lieu of
.Take a log for a fireplace, but don't take
for
arithm.-

DirtyDeeds
55,9k 7 11 13 - G.Master EY

- Messaggi: 7012
- Iscritto il: 13 apr 2010, 16:13
- Località: Somewhere in nowhere
0
voti
No
DirtyDeeds. Il numero di righe non mi serve in un ciclo for. Mi serve per altro

Ma comunque è meglio dichiararla globale oppure calcolarla in ogni function implementata nello stesso m-file?
Grazie e buona giornata!
Ma comunque è meglio dichiararla globale oppure calcolarla in ogni function implementata nello stesso m-file?
Grazie e buona giornata!
0
voti
Come ti ha scritto
boiler, 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
instead of
(Anonimo).
...'cos you know that
ain't
, right?
You won't get a sexy tan if you write
in lieu of
.
Take a log for a fireplace, but don't take
for
arithm.
instead of
(Anonimo)....'cos you know that
ain't
, right?You won't get a sexy tan if you write
in lieu of
.Take a log for a fireplace, but don't take
for
arithm.-

DirtyDeeds
55,9k 7 11 13 - G.Master EY

- Messaggi: 7012
- Iscritto il: 13 apr 2010, 16:13
- Località: Somewhere in nowhere
0
voti
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?
5
voti
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
instead of
(Anonimo).
...'cos you know that
ain't
, right?
You won't get a sexy tan if you write
in lieu of
.
Take a log for a fireplace, but don't take
for
arithm.
instead of
(Anonimo)....'cos you know that
ain't
, right?You won't get a sexy tan if you write
in lieu of
.Take a log for a fireplace, but don't take
for
arithm.-

DirtyDeeds
55,9k 7 11 13 - G.Master EY

- Messaggi: 7012
- Iscritto il: 13 apr 2010, 16:13
- Località: Somewhere in nowhere
4
voti
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
instead of
(Anonimo).
...'cos you know that
ain't
, right?
You won't get a sexy tan if you write
in lieu of
.
Take a log for a fireplace, but don't take
for
arithm.
instead of
(Anonimo)....'cos you know that
ain't
, right?You won't get a sexy tan if you write
in lieu of
.Take a log for a fireplace, but don't take
for
arithm.-

DirtyDeeds
55,9k 7 11 13 - G.Master EY

- Messaggi: 7012
- Iscritto il: 13 apr 2010, 16:13
- Località: Somewhere in nowhere
28 messaggi
• Pagina 1 di 3 • 1, 2, 3
Torna a Firmware e programmazione
Chi c’è in linea
Visitano il forum: Nessuno e 3 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)




