Tag Archives: manuale matlab

Struttura switch e case in Matlab

MATLAB

La struttura switch e case in Matlab ci consente di eseguire gruppi di istruzioni basati sul valore di un variabile o di un’espressione. La keywords case e otherwise delinea i gruppi. Solamente il primo caso è eseguito. Ci deve essere sempre una parola chiave end per lo statement switch .

La logica dell’algoritmo della matrice magic square può, ad esempio, essere descritta anche con il seguente codice Matlab:

switch (rem(n,4)==0) + (rem(n,2)==0)
  case 0
    M = odd_magic(n)
  case 1
    M = single_even_magic(n)
  case 2
    M = double_even_magic(n)
  otherwise
    error('This is impossible')
end

Diversamente dal linguaggio C, lo switch di MATLAB non commette errori. Se la prima istruzione del costrutto case risulta vera, il restante case statement non è eseguito. Così, non si rendono necessari break statement.

Vediamo ora un altro esempio in cui si visualizza un altro testo condizionale, in funzione di un valore immesso al prompt dei comandi.

n = input('Inserisci un numero: ');

switch n
    case -1
        disp('negativo')
    case 0
        disp('zero')
    case 1
        disp('positivo')
    otherwise
        disp('altro valore')
end

La struttura switch e case in Matlab

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Istruzione IF in Matlab

MATLAB

L’istruzione if in Matlab valuta un’espressione logica ed esegue un gruppo di asserzioni quando l’espressione risulta vera. L’else if opzionale e altre keywords provvedono per l’esecuzione di gruppi alternati di asserzioni. Una keyword END termina l’ultimo gruppo di asserzioni. I gruppi di asserzioni sono delineati da quattro keywords non sono previste parentesi.

L’algoritmo di MATLAB per generare una magic square di ordine n coinvolge tre casi diversi:

  1. quando n è dispari,
  2. quando n è pari ma non divisibile per 4,
  3. quando n è divisibile per

Questo è quanto riportato nel costrutto seguente:

if rem(n,2) ~= 0
   M = odd_magic(n)
elseif rem(n,4) ~= 0
   M = single_even_magic(n)
else
   M = double_even_magic(n)
end

In questo esempio, i tre casi sono mutuamente esclusivi, ma se non lo fossero, la prima condizione vera sarebbe comunque eseguita. Tutto ciò è importante per capire come gli operatori relazionali e le strutture if lavorano con le matrici.

Quando si vuole controllare l’uguaglianza tra due variabile, usare:

if A == B, ….

Questo è consentito in MATLAB, e fa quello che ci si aspetta quando A e B sono scalari. Ma quando A e B sono matrici, A == B non esamina se loro sono uguali, esamina solo dove loro sono uguali; il risultato è un altra matrice di 0 e di 1 che espone l’uguaglianza elemento per elemento.

Istruzione IF in Matlab

Infatti, se A e B non sono della stessa taglia, allora l’istruzione A == B è un errore. Il modo corretto per controllare l’uguaglianza tra due variabile è quello di usare la funzione isequal:

if isequal(A,B), …

Qui c’è un altro esempio per enfatizzare questo punto. Se A e B sono scalari, il programma seguente mai arriverà alla situazione inaspettata. Ma per la maggior parte delle matrici, includendo le nostre magic square con colonne scambiate nessuna delle condizioni seguenti A> B, A< B o A == B è vero per tutti gli elementi e così l’altra clausola è eseguita.

if A > B
   ‘greater’
elseif A < B
   ‘less’
elseif A == B
   ‘equal’
else
   error(‘Unexpected situation’)
end

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Il Comando DIARY in Matlab

MATLAB

Il comando diary in Matlab crea un’agenda della sessione di MATLAB in un file immagazzinato nel disco fisso del computer. E’ possibile esplorare e compilare il file di testo con un qualsiasi word-processor. Per creare un file diary che contenga tutti i comandi basterà digitare al prompt di Matlab:

>>diary

Per salvare l’intera sessione di MATLAB in un archivio con un particolare nome, utilizzeremo la seguente notazione:

>>diary filename

Per bloccare la registrazione della sessione corrente, invece digiteremo:

>>diary off

La funzione diary quindi crea un elenco degli input da tastiera e registra il testo risultante in un file, con alcune eccezioni. Il file ottenuto con il comando diary è un file ASCII, adatto per la ricerca in, la stampa, l’inserimento nella maggior parte delle relazioni e altri documenti. Se non si specifica il nome del file, il software MATLAB crea un file chiamato diary nella cartella corrente.

Il Comando DIARY in Matlab

Il comando diary (‘filename’) scrive una copia di tutti gli input da tastiera successivi al comando nel file chiamato appunto nomefile, dove nomefile è il percorso completo o il nome del file si trova nella cartella MATLAB corrente. Se il file esiste già, l’output viene aggiunto alla fine del file. Non è possibile utilizzare un nome di file chiamato o disattivarlo. Per visualizzare il nome del file diary corrente, utilizzare il comando:

>>get (0, ‘DiaryFile’)

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Il comando dir in Matlab

MATLABAnalizziamo il comando dir in Matlab che elenca i file e le cartelle presenti nella cartella corrente di MATLAB. I risultati vengono visualizzati in un ordine che dipende dal sistema operativo.

Il comando seguente:

> dir nome

elenca i file e le cartelle che corrispondono al nome fornito sottoforma di stringa. Quando il nome è una cartella, dir elenca il contenuto della cartella. Specificare il nome usando i nomi di percorso assoluti o relativi. È possibile utilizzare i caratteri jolly (*). Il comando:

lista = dir (nome)

restituisce gli attributi relativi a nome.

il comando dir in matlab

Vediamo alcuni esempi di applicazione del comando dir in Matlab, per visualizzare il contenuto della cartella matlab/audiovideo scriveremo, che si trova nella cartella corrente di Matlab:

dir(fullfile(matlabroot, ‘toolbox/matlab/acustica’))

Vediamo invece come ricercare delle informazioni ed ottenere i risultati in una forma strutturata: ad esempio se volessimo immagazzinare nella variabile files tutti i file contenuti in una specifica cartella con esetensione .m scriveremo

files = dir(fullfile(matlabroot, ‘toolbox/matlab/acustica/*.m’))

MATLAB fornisce le informazioni in un structure array del tipo:

files =
25×1 struct array with fields:
name
date
bytes
isdir
datenum

Per accedere ad uno specifico item invece scriveremo:

files(3).name
ans =
acustica.m

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Il comando path in Matlab

MATLAB
Il comando path in Matlab ci permette di visualizzare il percorso di ricerca all’interno dell’ambiente Matlab. Infatti MATLAB utilizza un percorso di ricerca, come un elenco ordinato di directory per determinare come eseguire le funzioni chiamate.

Quando cioè si chiama una funzione standard, MATLAB esegue la prima funzione contenuta
nel primo M-file con quel nome che troverà sul percorso di ricerca di default. Per visualizzare il percorso di ricerca impostato, possiamo utilizzare il seguente comando:

path

che mostra appunto il percorso di ricerca su qualsiasi piattaforma. Per modificare il percorso di ricerca impostato, possiamo utilizzare il seguente comando:

path(‘nuovopath’)

cambia il percorso di ricerca in nuovopath, dove nuovopath è un string array contenente tutte le cartelle che fanno aprte del percorso di ricerca.

matlab

Il comando:

path (path, ‘nuovopath’)

aggiunge la cartella nuovopath alla fine del percorso di ricerca. Se nuovopath è già nel percorso di ricerca, esso viene spostato alla fine del percorso di ricerca. Il comando:

path (‘nuovopath’, path)

aggiunge la cartella nuovopath nella parte superiore del percorso di ricerca. Se nuovopath è già nel percorso di ricerca, esso viene spostato nella parte superiore del percorso di ricerca. Per aggiungere più cartelle in una sola dichiarazione, é possibile utilizzare il comando addpath. Il comando:

a = path

attribuisce il percorso di ricerca alla variabile di tipo stringa a.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO: