Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

3
voti

MATLAB: eval, funzione sovietica

"Io non do consigli. La gente non li segue mai." - R. A. Heinlein

Indice

Premessa

C'è un comando MATLAB chiamato eval: permette di far eseguire a MATLAB quello che vi pare passandogli una stringa. È estremamente potente, la MathWorks sconsiglia di usarlo. Questo breve articolo lo usa per lavorare sui nomi delle variabili.

Cosa fa esattamente eval

eval prende la stringa che gli avete passato e la fa eseguire a MATLAB: come se l'aveste scritta nella command window battendo poi invio.
Bisogna passare ad eval dei veri e propri comandi, che devono essere validi.

Sintassi di eval e altri costrutti utili per farlo funzionare

eval('stringa che inseriamo come ci pare, cioè un comando')

  • Unire in una sola stringa il contenuto di altre stringhe:
stringa_finale = ['stringa1', ' stringa2', 'stringa3']

Nota: la stringa risultante, senza virgolette, sarà: "stringa1 stringa2stringa3"
Attenzione agli spazi. Attenzione alle parentesi quadre.

  • Trasformare variabili numeriche in stringhe:
stringaNumeroTrasformato = num2str(variabileNumerica, precisione)

Nota: precisione all'interno di num2str indica il massimo numero di cifre significative che verranno mantenute. precisione può essere omesso, ma a rischio di tagli.

  • Unire in un'unica stringa delle variabili numeriche e delle stringhe:
    Dichiariamo un paio di variabili numeriche assegnando i valori desiderato. Poi sfruttiamo num2str
indice = 139;
indice_futuro = indice +1;
stringa_finale = ['Indice attuale: ', num2str(indice), '. Il prossimo indice sarà ',...
    ...num2str(indice_futuro)]

Nota: avremmo potuto eliminare indice_futuro e scrivere direttamente:

indice = 139;
stringa_finale = ['Indice attuale: ', num2str(indice), '. Il prossimo indice sarà ',...
    ...num2str(indice+1)]

Esempi

Creazione di una variabile

eval('fondazione_politecnico = 1906');

Creazione di 10 variabili i cui nomi sono formati anche dagli indici di un ciclo

for indice = 1 : 10
    eval(['frequenza', num2str(indice), ' = 0;']);
end

Creazione di 3 vettori riga da 365 elementi, tutti a zero. I nomi sono numerati dagli indici di un ciclo

for indice2 = 1 : 3
    eval(['giorni', num2str(indice), ' = zeros(1, 365);']);
end

Creare 7 funzioni trigonometriche e rappresentarle sullo stesso grafico

numero_funzioni = 7;
x = 0 : 1e-2 : 2;
hold on
for indice1 = 1 : numero_funzioni
    eval(['y', num2str(indice1), ' = sin(x.*', num2str(indice1), ');']);
    eval(['plot(x, y', num2str(indice1), ');']);
end
Output

Output

2

Commenti e note

Inserisci un commento

di ,

Rinnovo i miei complimenti per l'articolo. Thomas Il mio precedente commento era stato eliminato dal comitato di condotta.

Rispondi

Inserisci un commento

Per inserire commenti è necessario iscriversi ad ElectroYou. Se sei già iscritto, effettua il login.