MatlabPresentazioneQuesta pagina riassume alcuni comandi matlab attraverso alcuni esempi pratici. Alcune informazioni contenute in questa guida sono state tratte da altre guide che ho avuto modo di vedere in passato, molte altre dall'esperienza fatta con l'uso diretto di matlab, nonché dall'help che esso fornisce. Naturalmente per una spiegazione più dettagliata dei comandi e dei vari parametri che essi accettano, si rimanda all'help di Matlab. Struttura della guidaQuesta guida è strutturata in paragrafi. Se non conoscete ancora niente di questo programma è consigliabile che leggiate questa guida nell'ordine con cui viene presentata, almeno per i paragrafi introduttivi dove vengono spiegate le basi; dopodichè potrete saltare alle sezioni di vostro interesse. I paragrafi sono:
IntroduzioneMatlab è l'abbreviazione di Matrix Laboratory. Si tratta di un programma di simulazione che permette di effettuare calcoli anche molto complessi. La sua prima versione risale agli anni '80 e quindi vanta di un'estesa libreria di funzioni, le quali sono perciò molto collaudate. E' basato sul calcolo matriciale di dati e quindi è ottimizzato per effettuare calcoli su matrici. L'interfaccia, specie nelle ultime versioni, risulta essere molto intuitiva, infatti presenta una serie di finestre dalle quali si posso impartire comandi, visualizzare le variabili che sono state generate, stampare grafici e così via. Inoltre l'utente ha la possibilità di definire delle funzioni proprie, raccogliere più comandi all'interno di un unico file in modo da poterli richiamare tutti assieme con un'unico comando, eccetera. Matlab fornisce la guida in linea relativa ai suoi comandi, la quale è spesso utile per capire il loro reale comportamento. L'utente Matlab, per eseguire i comandi, ha a disposizione una finestra denominata "Command Window". Questa stessa finestra viene impiegata da Matlab per restituire alcuni risultati, perciò, per indicare che Matlab non è occupato ed è in attesa di istruzioni dall'utente, mostra un cosiddetto prompt costituito dal carattere "»". L'aspetto tipico della Command Window all'avvio del programma è del tipo:
To get started, select "MATLAB Help" from the Help menu.
» |
Comandi basePer poter lavorare efficacemente su Matlab è necessario conoscere perlomeno alcuni comandi base. Di estrema importanza risultano essere gli strumenti per la ricerca di aiuto in linea. Essi sono:
Altri comandi utili sono quelli che permettono di fare "pulizia" nell'ambiente di lavoro. Ad esempio:
Faccio notare che esiste un comando apposta per chi di Matlab non conosce ancora nulla e vuole avere un'idea delle sue potenzialità. Trattasi di Matlab inoltre tiene traccia di tutti i comandi che vengono editati nella Command Window e rende accessibile all'utente la lista dei comandi in un'altra finestra denominata "Command History". Se si clicka due volte su un comando nella Command History, esso viene rieseguito, come se lo avessimo rieditato nella Command Window. Le variabiliNell'ambiente Matlab l'assegnazione di un dato valore ad una variabile si effettua utilizzando l'operatore "=". Ad esempio per assegnare il valore numerico "3" alla variabile "A" è sufficente scrivere: » A=3e premere il tasto "Invio" (che d'ora in avanti verrà abbreviato con il simbolo "<--"), ottenendo il risultato seguente: » A=3 A = 3 »In questo modo abbiamo creato una variabile di nome "A", le abbiamo assegnato il valore numerico "3" e abbiamo stampato sulla Command Window il suo valore. Se, infatti, al termine del comando avessimo aggiunto un ";", avremo generato la stessa variabile, ma non avremo stampato a video il suo valore. L'utilità di questa possibilità stà nella comodità di non vedersi riempire di dati la Command Window quando vengono eseguiti degli script o quando si lavora con matrici di dati molto estese. Questo concetto risulterà più chiaro in seguito. Per i nomi delle variabili è possibile utilizzare una combinazione di al massimo 19 caratteri alfanumerici. Matlab distingue le maiuscole dalle minuscole, pertanto la variabile "A" è diversa dalla variabile "a". È possibile scegliere qualsiasi combinazione di caratteri, pertanto potremo definire ad esempio una variabile di nome "exp". In questo modo, però, non ci sarà più possibile richiamare la funzione esponenziale definita da Matlab, che si chiama appunto "exp"; per questo che si sconsiglia questa pratica, a meno che non si intenda proprio ottenere tale risultato o ridefinire la funzione. Tra le finestre di Matlab ce n'è una denominata "Workspace". È quì che Matlab visualizza tutte le variabili tuttora esistenti che abbiamo creato in precedenza. Dopo aver generato la variabile "A", in questa fiestra è comparsa una riga dove viene visualizzato il nome della variabile, la sua dimensione ed altri parametri che la riguardano. Con un doppio click sulla variabile "A" viene aperta una nuova finestra dove viene visualizzato il valore contenuto nella variabile. Esistono alcune funzioni di utilità nella gestione delle variabili, quali:
Matlab, inoltre, possiede al suo interno delle variabili predefinite che non vengono visualizzate nel Workspace ma che possono essere usate in ogni momento, come, ad esempio:
Le matriciCome già accennato in precedenza, Matlab è un programma di calcolo matriciale. Infatti esso lavora trattando i dati come fossero matrici. Esse sono vettori bidimensionali formate da m righe e n colonne di elementi. Visivamente una matrice di 2 righe e 3 colonne può essere vista così:
Una matrice viene creata in quattro occasioni:
L'assegnazione diretta di una matrice, ad esempio quella indicata nella tabella sopra, viene effettuata digitando l'istruzione seguente: » a=[56, -12, 2+3i; sqrt(2), 9.4, exp(4)] <-- a = 56.0000 -12.0000 2.0000 + 3.0000i 1.4142 9.4000 54.5982 »Lo stesso effeto si può ottenere con la scrittura: » a=[56 -12 2+3i <-- sqrt(2) 9.4 exp(4)] <-- a = 56.0000 -12.0000 2.0000 + 3.0000i 1.4142 9.4000 54.5982 »Naturalmente la virgola indica la separazione tra le colonne (e può essere omessa, separando gli elementi semplicemente con spazi), il punto e virgola la separazione tra le righe e il punto è il separatore decimale. Di default i numeri vengono visualizzati con quattro cifre decimali in virgola fissa. È comunque possibile modificare le preferenze di visualizzazione tramite la funzione format .
Analogamente una matrice può essere generata, come accennato sopra, da uno script Matlab. Per farlo dovremo creare un file testo contenente le seguenti righe di codice: a=[56 -12 2+3i; sqrt(2) 9.4 exp(4)]e salvarlo con il nome " matrice_a.m ". Digitando poi sulla Command Window la riga:
» matrice_a <-- a = 56.0000 -12.0000 2.0000 + 3.0000i 1.4142 9.4000 54.5982 »avremo eseguito il codice contenuto nello script appena editato, creando così la matrice. Se dopo il nome del file avessimo inserito un punto e virgola, avremo generato la matrice senza però vedere il suo contenuto sulla Command Window. Sarà comunque sempre possibile, dopo aver creato la matrice, visualizzare il suo contenuto semplicemente scrivendo: » a <-- a = 56.0000 -12.0000 2.0000 + 3.0000i 1.4142 9.4000 54.5982 »Anche per i nomi dei file valgono le stesse regole elencate per il nome delle variabili.
È possibile salvare le variabili in un file attraverso l'istruzione: save nome_file variabile1 variabile2 ... per poi poterle richiamare all'occorrenza attraverso l'istruzione: load nome_file Il file che viene generato assume automaticamente estensione .mat ed il formato di salvataggio può essere scelto (per maggiori informazioni si consulti l'help save ).
Naturalmente gli elementi di una matrice possono essere sia numeri che espressioni qualsiasi. Ad esempio: » a = [-56.3 13e-9 2^8 sin(2*pi*5.3)] <-- a = -56.3000 0.0000 256.0000 0.9511 »La matrice appena creata può anche essere vista come un vettore riga. Ogni elemento di una matrice è accessibile direttamente indicando le coordinate di riga (prima coordinata) e colonna (seconda coordinata) di tale elemento. Volendo accedere al terzo elemento della matrice appena creata potremo scrivere: » a(1,3) <-- ans = 256 »o equivalentemente a(3) .
Avrete certamente notato che in questo caso è stata creata una nuova variabile denominata » a = [1 2 3] <-- a = 1 2 3 » a(6) = 5 <-- a = 1 2 3 0 0 5 » a(3,3) = 3 <-- a = 1 2 3 0 0 5 0 0 0 0 0 0 0 0 3 0 0 0 »Alla prima assegnazione è stata creata una matrice 1×3; con la seconda assegnazione è stato dichiarato l'elemento nella sesta colonna, ottenendo una matrice 1×6, dove gli elementi non specificati sono stati posti per default a zero; infine, con la terza assegnazione è stato specificato l'elemeto della terza riga e terza colonna, ottenendo una matrice 3×6. Alcuni comandi che possono risultare utili sono:
Un altro modo per definire matrici è accostando più matrici (o vettori) uno di seguito all'altro (oppure uno sopra l'altro) nel modo seguente: » a = [1 2 3; 4 5 6] <-- a = 1 2 3 4 5 6 » b = [7 8 9] <-- b = 7 8 9 » c = [a;b] <-- c = 1 2 3 4 5 6 7 8 9 »Per farlo è necessario che le matrici siano compatibili, cioè se si vuole mettere una matrice sotto l'altra esse devono avere lo stesso numero di colonne, mentre se si vuole metterle una accanto all'altra dovranno avere lo stesso numero di righe. Analogamente si può estrarre una sottomatrice da una matrice più grande: » d = c([1 2],[2 3]) <-- d = 2 3 5 6 »dove si è estratta la matrice costituita dagli elementi delle righe 1 e 2 e colonne 2 e 3.
Se si ha l'esigenza di estrarre una serie di colonne dalla matrice » t = 1:10 <-- t = 1 2 3 4 5 6 7 8 9 10 » t = 2:2:10 <-- t = 2 4 6 8 10 »Se infatti sono presenti due coefficienti, viene generata una sequenza che parte dal primo valore e arriva al secondo con passi di una unità. Se invece sono presenti tre coefficienti la sequenza va dal primo al terzo valore con passi di ampiezza specificata dal secondo valore.
È utile dire che è possibile generare anche matrici vuote col comando » a (:) <-- ans = 1 4 2 5 3 6 » Operazioni fra matriciLe operazioni ammesse fra matrici sono:
L'addizione e la sottrazione possono essere effettuate tra matrici della stessa dimensione, oppure tra una matrice ed uno scalare (matrice 1×1).
La moltiplicazione e la divisione possono essere effettuate tra due matrici, tra una matrice ed un vettore o tra una matrice ed uno scalare, naturalmente rispettando le dimensioni. Se si desiderasse effettuare operazioni "elemento per elemento", sarà sufficiente anteporre all'operatore il simbolo "
L'elevamento a potenza viene effettuato tra una matrice quadrata
L'operatore " » A = [1 2 3]; <-- » A' <-- ans = 1 2 3 »Nel caso la matrice fosse complessa il risultato prodotto è invece la matrice coniugata trasposta. Per ottenere solo la matrice trasposta di A si dovrà scrivere conj(A') :
» A = [1+2i 4; 4i 2+i] <-- A = 1.0000 + 2.0000i 4.0000 0 + 4.0000i 2.0000 + 1.0000i » A' <-- ans = 1.0000 - 2.0000i 0 - 4.0000i 4.0000 2.0000 - 1.0000i » conj(A') <-- ans = 1.0000 + 2.0000i 0 + 4.0000i 4.0000 2.0000 + 1.0000i » Le funzioni di Matlab possono operare sui singoli elementi delle matrici oppure sulle matrici nella loro interezza. A titolo di esempio vediamo questo comportamento rispetto alla radice quadrata: » A = [1 2; 4 8]; <-- » sqrt(A) <-- ans = 1.0000 1.4142 2.0000 2.8284 » sqrtm(A) <-- ans = 0.3333 0.6667 1.3333 2.6667 » Operatori relazionali e logiciIn Matlab sono definiti i seguenti operatori relazionali:
== " e il simbolo di assegnazione "= ".
Analogamente agli operatori relazionali, in Matlab sono definiti anche i seguenti operatori logici:
Strutture di controlloCome per i tradizionali linguaggi di programmazione, anche in Matlab sono definite delle strutture di controllo. Esse sono:
Per capire meglio come essi funzionano riportiamo alcuni esempi. Il primo si serve della struttura if x > 0 y = 1; elseif x == 0 y = 0; else y = -1; endIl secondo fa uso della struttura for per creare una matrice che rappresenta la tavola pitagorica:
for r = 1:10 for c = 1:10 T(r,c) = r*c; end endIl terzo invece inpiega la struttura while per creare un vettore delle potenze di due che hanno un valore inferiore al milione:
i = 1; while i < 1e6 i(length(i)+1) = i(length(i))*2; endNel caso si avesse la necessità di uscire da un ciclo senza attendere la normale uscita dovuta alla non verificata condizione, è possibile utilizzare il comando break .
Creazione di grafici
MATLAB è in grado di produrre facilmente grafici sia monodimensionali, sia a più dimensioni. Il comando fondamentale per creare grafici bidimensionali è » t = 0:0.01:2*pi; » plot(t,sin(t))Se scrivessimo semplicemente plot(x) otterremo il grafco di x in funzione dei suoi indici, a meno che x non sia complesso, nel qual caso si avrebbe l'equivalente di plot(real(x),imag(x)) . plot(t, [x1;x2]) disegna sullo stesso grafico x1 e x2 in funzione di t , mentre plot(t1,x1,t2,x2) disegna sullo stesso grafico x1 in funzione di t1 e x2 in funzione di t2 . Si possono anche impostare i colori e il tipo di linea visualizzata con plot(t,x,'+b') .
Comandi utili sono:
hold on ; per aprire una nuova finestra grafica si dovrà digitare figure mentre per chiuderlo il comando è close . Per creare più grafici separati ma sulla stessa finestra è utile il comando subplot . Nel caso si debbano graficare funzioni a valori discreti si usi stem , mentre per ottenere un'interpolazione a gradini dei punti si usi stairs .
Naturalmente è possibile scegliere il tipo di scala da impiegare, logaritmica (
Per la stampa il comando principale è Input/Output interattivo
Funzioni varieFunzioni Matlab di tipico impiego sono:
Altre funzioni utili sono:
Script
Gli script sono sequenze di istruzioni MATLAB raggruppate in un file esterno avente estensione Funzioni
All'utente viene data la possibilità di definire delle proprie funzioni. Il codice che le costituisce deve essere contenuto ancora una volta in un file con estensione % RETT calcola il perimetro e l'area di % un rettangolo dati la base e l'altezza. function [p,a] = rett(b,h) p = 2*(b+h); % perimetro a = b*h; % areaOra, per calcolare il perimetro e l'area di un rettangolo di base 4 e altezza 6 basterà scrivere [perim,area] = rett(4,6) . È importante dire che i parametri vengono passati per valore, quindi non verranno modificati. Eventuali variabili interne alla funzione verranno distrutte al termine della sua esecuzione e in ogni caso non interferiscono con eventuali altre variabili esterne aventi lo stesso nome.
All'interno del file contenente la funzione che intendiamo creare, è possibile creare altre funzioni, le quali però non saranno visibili dall'esterno e possono essere invocare solamente all'interno di quel file.
Per forzare l'uscita da una funzione (prima della fine dei comandi contenuti nel file) è possibile utilizzare la parola chiave Nel caso le prime righe del file siano dei commenti, essi vengono considerati da MATLAB come facenti parte del manuale per l'utilizzo di quella stessa funzione. Tali informazioni possono essere richiamate attraverso il comando Signal Processing
|