Category Archives: Matlab

Grafici multipli in Matlab

MATLAB

Per tracciare grafici multipli in Matlab è possibile indicare diverse coppie di x-y con una singola chiamata. MATLAB allora in modo del tutto automatico traccia i diversi grafici attraverso un predefinito (ma settabile dall’utente) elenco di colori che permette di distinguere ciascuna collezione di dati.

Per esempio, i seguenti comandi tracciano quattro funzioni di t, ciascuna curva in un colore diverso:

y2 = sin(t – .40);

y3 = sin(t – .8);

y4 = sin(t – 1.2);

plot(t,y,t,y2,t,y3,t,y4)

E’ possibile specificare colore, stile della linea, e marcatori, con segnali positivi o cerchi, attraverso il seguente comando:

plot(x,y, ‘marcatore-stile-colore’)

dove il marcatore-stile-colore è costiutito da una sequenza di 1 , 2 , o 3 caratteri (separati da virgolette)che rappresentano un colore, uno stile di linea , ed un tipo di marcatore; tipi di colore sono:

 ’c’, ’m’, ’y’, ’r’, ’g’, ’b’, ’w’, e ’k’

Questi corrispondono a cyan, magenta, giallo, rosso, verde, azzurro, bianco, e nero.

matlab

Stringhe che ci permettono di stabilire lo stile con cui viene tracciata la linea sono:

  •  ’-’ per la linea continua
  • ’- -’ per la linea tratteggiata
  • ’:’ per una linea a puntini
  • ’-.’ per una linea a puntini e tratteggio
  • ’none’ senza linea.

 Tipi di marcatore comuni sono:

 ’+’, ’o’, ’*’, ’x’

 Per esempio, il comando:

 plot(x,y, ‘ y:+ ‘)

traccia in giallo una linea a puntini e pone un marcatore + a ciascun dato. Se si specifica un tipo di marcatore ma non uno stile di linea, MATLAB disegna solamente il marcatore.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Tracciare un diagramma in Matlab

MATLAB

Per poter tracciare un diagramma in Matlab possiamo utilizzare la funzione PLOT che ha forme diverse, dipendendo dagli argomenti di entrata. In particolare se y è un vettore, plot(y) produce un grafico lineare degli elementi di y contro l’indice degli elementi di y. Se nella funzione si specificano due vettori come argomenti, ad esempio plot(x,y) si produce un grafico di y contro x.

Per esempio, per diagrammare il valore della funzione seno da 0 a 2 pi greco, utilizzeremo la seguente notazione:

t = 0:pi/100:2*pi;

y = sin(t);

plot(t,y)

Ottenendo in questo il seguente tracciato:

matlab

Il diagramma così tracciato può essere completato attraverso una serie di comandi utili che ci permettono di formattare il grafico. Di seguito un breve elenco di quelli più utilizzati:

xlabel (‘etichetta’) genera i titoli o etichette dell’asse x
ylabel (‘etichetta’) genera i titoli o etichette dell’asse y
title (‘etichetta’) genera il titolo del grafico
grid on aggiunge una griglia al diagramma
grid off elimina la griglia dal diagramma
axis ([xmin xmax ymin ymax]) imposta i valori dei limiti degli assi
axis square seleziona automaticamente i limiti degli assi in modo da ottenere un diagramma quadrato
axis equal imposta una spaziatura identica per gli assi
axis auto imposta automaticamente limiti automatici per una corretta visualizzazione

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

I grafici in Matlab

MATLAB

MATLAB possiede estesioni facilitate per esporre a video vettori e matrici attraverso grafici di qualità professionale, così da poter annotare e stampare questi grafici. Questa sezione descrive alcune delle funzioni grafiche più importanti e contiene esempi di alcuni applicazioni tipiche per imparare a tracciare in modo corretto i grafici in Matlab.

I grafici sono diffusamente utilizzati per rappresentare funzioni del tipo y = f (x), dove la variabile indipendente (x) è rappresentata lungo l’asse orizzontale e la variabile dipendente (y) viene descritta lungo l’asse verticale.

Un grafico di questo tipo, detto bidimensionale, può essere ottenuto da dati sperimentali o da un’espressione matematica.

matlab

 Per tracciare in modo corretto un grafico è necessario applicare una serie di regole:

  1.  è necessario innanzitutto che ogni asse abbia un titolo o etichetta con il nome di ciò che rappresenta e l’unità di misura adottata.
  2.  inoltre è consigliabile che ogni asse abbia dei segni di graduazione regolarmente distanziati.
  3.  poi se il grafico visualizza più curve bisogna adottare una legenda per caratterizzarle
  4.  invece se il grafico visualizza diversi insiemi di dati sperimentali è conveniente adottare dei simboli diversi come marcatore del dato.

Utilizzando le indicazioni appena descritte impareremo facilmente a tracciare i grafici in Matlab.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

La funzione disp in matlab

MATLAB

La funzione disp (X) in Matlab, mostra un array, senza stampare il suo nome. Se X contiene una stringa di testo, la stringa viene visualizzata. Un altro modo in matlab per visualizzare una matrice sullo schermo è quello di digitare il suo nome, ma questa stampa un leader “X =”, che non è sempre auspicabile. Si noti che disp non visualizza un array vuoto.

Esempio

Un utilizzo della funzione disp con l’ausilio di un M-file è quello di visualizzare una matrice con le etichette di colonna:

disp( ‘ uno due tre)
disp (rand (5,3))

che si traduce in

uno due tre
0,2113 0,8474 0,2749
0,0820 0,4524 0,8807
0,7599 0,8075 0,6538
0,0087 0,4832 0,4899
0,8096 0,6135 0,7741

matlab

È inoltre possibile utilizzare il comando disp per visualizzare un collegamento ipertestuale nella finestra di comando. Includere la stringa completa dell’ipertesto su una sola riga come input per disp:

disp ( ‘ Il sito di Giuseppe Ciaburro‘)

che genera questo collegamento ipertestuale nella finestra di comando:

Il sito di Giuseppe Ciaburro

Cliccare sul link per visualizzare la home page del sito di Giuseppe Ciaburro in un browser web.

Per la concatenazione è possibile utilizzare disp per visualizzare gli elementi multipli. Ad esempio:

x = [1 2 3];
disp ([ ‘I valori di X sono:’, num2str (x)])

visualizza

I valori di X sono: 1 2 3

Se si desidera visualizzare il testo senza carattere di nuova riga finale, è necessario utilizzare la funzione fprintf. Per esempio,

fprintf ( ‘% s% d% d% d’, ‘I valori di X sono:’, x (:));

visualizza il testo simile al precedente, ma non include un ritorno a capo.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Salvare una sessione in Matlab

MATLAB

MATLAB rappresenta un linguaggio di programmazione interpretato, nel senso che le espressioni che vengono digitate nell’ambiente di lavoro di Matlab sono interpretate e quindi valutate. Quando si inizia una nuova sessione in ambiente MATLAB le dichiarazioni sono inserite nel prompt nella forma:

variabile = espressione

o semplicemente

espressione

Tali espressioni possono essere composte da operatori, funzioni e nomi di variabili. Fato questo il comando passa all’interprete Matlab che valuta l’espressione producendo una matrice, la quale sarà poi visualizzata sullo schermo ed assegnata ad una variabile per poterla poi utilizzare nei successivi calcoli.

Se nella dichiarazione della variabile vengono omessi il nome ed il segno =, viene creata automaticamente una variabile ans le viene assegnato il risultato del calcolo.

matlab

Quando si scrivono più espressioni allora per separare un comando da un altro basta utilizzare un ritorno a capo. Ma nel caso volessimo, per ridurre la lunghezza del codice, inserire più di una dichiarazione sulla stessa riga basterà separarli con un punto e virgola.

Per evitare di visualizzare il risultato di ogni operazione sul prompt di Matlab basterà inserire un punto e virgola alla fine dell’espressione, in modo che la stampa sia soppressa, ma l’assegnazione venga effettuata.

Ricordiamo ancora una volta che MATLAB è case-sensitive nei nomi di comandi, funzioni e variabili. Ad esempio, la funzione MIAFUNZIONE non è la stessa della funzione miafunzione.

Salvare  una sessione in Matlab
Quando ci si disconnette o si esce dall’ambiente MATLAB tutte le variabili utilizzate nella corrente sessione risulteranno perse. Per evitare di perederre tutto il lavoro effettuato fino a quel momento possiamo invocare il comando save prima di uscire dalla sessione. In questo modo tutte le operazioni effettuate nelle sessione corrente e le variabili utilizzate saranno scritte in un file con nome matlab.mat.

>>save

Quando si avviaerà una nuova sessione MATLAB, attraverso l’utilizzo del comando load potremo ripristinare l’area di lavoro al suo stato precedente.

>> load
Loading from: matlab.mat

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

La funzione fopen in Matlab

MATLAB

La funzione fopen in Matlab, apre un flusso di comunicazione con il file il cui nome viene specificato all’interno delle parentesi tonde, tale nome può contenere il percorso nell’albero delle directory, nel caso venga omesso si assume che il file si trovi nella directory di lavoro la cosiddetta work.

La sintassi del comando è la seguente:

[fid, msg] = fopen(nome file, modalità di apertura)

dove fid e la variabile che identi ca il fi le, legge tutti i dati contenuti nel fi le identi cato da fid, convertendoli in base al formato speci cato. Si possono specificare anche percorsi relativi rispetto alla directory di lavoro. Se il file non esiste ed esso viene aperto in modalità “w” allora il file viene creato.

Nel caso il flusso di comunicazione non venga aperto allora Matlab restituisce il valore -1 ed un messaggio di errore che ci comunica che qualcosa è andato storto; in tal caso si potrà verificare che:

il file che deve essere aperto in lettura non esiste

si  è verificato un errore nell’interazione con il supporto di memorizzazione su cui il file risiede

L’istruzione segunete:

fopen(‘all’)

restituisce un vettore riga che contiene gli ID di tutti i file aperti dal programma.

Vediamo infine il significato di una serie di parametri che possono essere utilizzati con la funzione fopen in Matlab:

  • “r”: apre un file esistente in lettura
  • “w”: apre un file esistente (con distruzione di quanto in esso già presente) o crea un nuovo file in scrittura
  • “a”: apre un file esistente o crea un nuovo file in scrittura con posizionamento alla fine del file. Quanto già presente nel file viene mantenuto
  • “rt”: come “r” ma in modalità testuale
  • “wt”: come “w” ma in modalità testuale
  • “at”: come “a” ma in modalità testuale
  • “r+” e ”rt+”: come “r”/”rt” ma si può anche scrivere nel file
  • “w+” e “wt+”: come “w”/”wt” ma si può anche leggere dal file
  • “a+” e “at+”: come “a”/”at” ma si può anche leggere dal file

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Come caricare un file in Matlab

MATLAB

In questa lezione impareremo come caricare un file in Matlab. Vediamo allora come leggere dati da un archivio di testo. Il nome esterno del file sia ”file.txt” che risulta generato con un programma esterno.

Il nome in Matlab deve essere posto entro apici perchè si tratta di una stringa. Per iniziare si apre il file assegnandogli un nome interno, ad esempio nomefile, in lettura ( ’r’ che sta per ”read” ).

nomefile = fopen ( ’file.txt’ , ’r’);

Si preleva dall’archivio nomefile la matrice A leggendo le due colonne di numeri in formato ”%g”.

A = fscanf ( nomefile , ’%g %g’ , [2 inf] );
A = A’;

Si noti che per primo si mette il nome interno: (nomefile) per secondo si mette il formato (’%g%g’) per terzo si mette il numero di elementi per riga(2) e, non sapendo quante righe sono, si mette inf il tutto entro parentesi quadre per indicare la matrice da prelevare. Per ultimo si chiude il file:

fclose (nomefile);

matlab

Ricapitoliamo i comandi utilizzati per caricare un file in Matlab:

  • aprire =) fopen (…)
  • chiudere =) fclose (…)
  • scrivere =) fprintf (…)
  • leggere =) fscanf (…)

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Come salvare un file in Matlab

MATLAB

In questa lezione impareremo come salvare un file in Matlab. Vediamo allora come salvare dei dati in un filedi testo. Si voglia, ad esempio,  salvare i risultati della funzione exp(x) entro l’intervallo (1; 2) con passo 0.1. Si costruisca dapprima il vettore seguente:

x = 1 : 0.1 : 2 ;

e quindi si valuta una matrice A nel modo seguente:

A = [ x ;exp(x) ];

Decidiamo che il nome esterno del file su cui si vuole salvare la matrice A sia file.txt ; esso dovrà essere posto all’interno di apici perchè si tratta di una stringa. Apriamo il file in scrittura con il parametro ’wt’ assegnandogli il nome interno nomefile. L’istruzione è la seguente:

nomefile = fopen ( ’file.txt’ , ’wt’);

In questo modo si deposita nel file nomefile la matrice A, scrivendo le due colonne di numeri decimali:

  1. la prima colonna con 6 cifre di cui 2 decimali
  2. la seconda colonna 8 cifre di cui 4 decimali.

matlab

Attraverso il comando  fprintf, che rappresenta un acronimo di file print formatted, saremo in grado di stampare a video quanto contenuto nel file appena creato.

fprintf ( nomefile , ’%6.2g %8.4g\n’ , A);

Si noti che per primo si mette il nome interno nomefile, per secondo si mette il formato per terzo si mette la matrice A.

Quindi si chiude il file con il comando:

fclose (nomefile);

Se si vuole analizzare il file così creato lo si può fare con un editor di testo qualsiasi, in questo modo potremo verificare che l’operazioen attraverso la quale abbiamo salvato un file in Matlab è riuscita correttamente.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Editing da linea di comando in Matlab

MATLAB

Le varie frecce e chiavi di controllo presenti sulla tastiera permettono di richiamare, compilare, e correggere comandi digitati in precedenza in ambiente Matlab. Per esempio, si supponga di digitare per sbaglio la seguente riga:

rho = (1 + sqt(5)) /2

In essa risulta sbagliata l’ortografia della funzione sqrt. MATLAB risponde allora con il seguente codice:

??? Undefined function or method ‘sqt’ for input arguments of type ‘double’.

Allora invece di riscrivere l’intera linea, basterà semplicemente cliccare sul tasto freccia su; in questo modo l’ultimo comando digitato comparirà sul prompt di Matlab e potremo correggerlo prima di mandarlo in esecuzione.

Per l’editing della linea di comando potremo utilizzare le frecce dx e sx per spostare il cursore sulla t ed inserire in questo modo la r mancante . L’uso ripetuto della freccia su richiama le linee digitate in precedenza, digitando un carattere e poi il tasto freccia su si cerca la linea di codice digitata precedente che inizia con quel carattere.

L’elenco dei comandi di linea disponibili è di seguito riportato:

  • freccia su oppure ctrl-p -Richiamano linea precedente
  • freccia giu oppure ctrl-n -Richiamano linea seguente
  • freccia sx oppure ctrl-b -Trasportano indietro di un carattere
  • freccia dx oppure ctrl-f -Trasportano in avanti di un carattere
  • ctrl+freccia dx oppure ctrl-r -Trasportano alla destra della parola
  • ctrl+freccia sx oppure ctrl-l -Trasportano alla sinistra della parola
  • home oppure ctrl-a -Porta all’inizio della linea
  • end oppure ctrl-e -Porta alla fine della linea
  • esc oppure ctrl-u -Ripulisce la linea
  • del oppure ctrl-d -Cancellano il carattere sul cursore
  • backspace oppure ctrl-h -Cancellano carattere dopo il cursore
  • ctrl-k -Cancella fino alla fine della linea.

Se un’espressione risulta essere troppo lunga e non rientra in una sola riga è possibile utilizzare l’operatore tre punti,…, seguito dal tasto  Return o Enter per indicare che l’espressione continua sulla prossima riga.

Ad esempio potremo scrivere:

s = 1 -1/2 + 1/3 -1/4 + 1/5 – 1/6 + 1/7…
– 1/8 + 1/9 – 1/10 + 1/11 – 1/12;

Gli spazi vuoti prima e dopo i seguenti operatori =, +, e – sono opzionali, ma migliorano la leggibilità del codice.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Eliminazione dell’output a video in Matlab

MATLAB

Se si digita semplicemente uno statement e poi si digita RETURN o Enter, MATLAB automaticamente mostre i risultati sullo schermo. Per evitare di mostrare a video ogni calcolo che Matlab effettua è possibile terminare la linea con un punto e virgola, MATLAB in tal caso effettua il calcolo ma non espone alcun output a viseo.

Questa operazione si manifesta particolarmente utile nel caso dell’utilizzo di script che presentano una grossa mole di calcoli; in tal caso la visualizzazione dei calcoli intermedi determinerebbe un inutile rallentam,ento del processore che andrebbe a discapito delle nostre operazioni.

Tale accorgimento risulta particolarmente utile quando si generano matrici di grandi dimensioni. Per esempio se volessimo generare una matrice magica 14×14 scriveremo:

>> A = magic(14)

A =

   177   186   195     1    10    19    28   128   137   146    99   108    68    77
   185   194   154     9    18    27    29   136   145   105   107   116    76    78
   193   153   155    17    26    35    37   144   104   106   115   124    84    86
     5   161   163   172    34    36    45   103   112   114   123   132    85    94
   160   162   171    33    42    44     4   111   113   122   131   140    93    53
   168   170   179    41    43     3    12   119   121   130   139   141    52    61
   169   178   187    49     2    11    20   120   129   138   147   100    60    69
    30    39    48   148   157   166   175    79    88    97    50    59   117   126
    38    47     7   156   165   174   176    87    96    56    58    67   125   127
    46     6     8   164   173   182   184    95    55    57    66    75   133   135
   152    14    16    25   181   183   192    54    63    65    74    83   134   143
    13    15    24   180   189   191   151    62    64    73    82    91   142   102
    21    23    32   188   190   150   159    70    72    81    90    92   101   110
    22    31    40   196   149   158   167    71    80    89    98    51   109   118

invece per non mostrare a video la matrice A basterà aggiungere un putno e virgola  a fine riga:

>> A = magic(14);
>>

in questo caso la matrice è stata generata ma non stampata a video. Si pensi al risparmio di memoria nel caso di una matrice 100×100 o di dimensioni ancora maggiori.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Il Comando FORMAT in Matlab

MATLAB

Il comando format, in ambiente Matlab, controlla la configurazione numerica dei valori esposta a video da MATLAB. Il comando regola in via esclusiva la visualizzazione dei numeri, non come MATLAB li calcola o li salva.

Di seguito sono indicati diversi formati, insieme con l’output che ne deriva, prodotto da un vettore x con componenti di dimensioni diverse.

x = [4/3 1.2345e-6]

format short
1.3333 0.0000 1.3333 0.0000

format short e
1.3333e+000 1.2345e-006

format short g
1.3333 1.2345e-006

format long
1.33333333333333 0.00000123450000

format long e
1.333333333333333e+000 1.234500000000000e-006

format long g
1.33333333333333 1.2345e-006

format bank
1.33 0.00

format rat
4/3 1/810045

format hex 3ff5555555555555 3eb4b6231abfd271 .

Se il più grande elemento di una matrice risulta maggiore di 10^3 o più piccolo di 10^-3, MATLAB applica un fattore di scala comune per i format short e long. Inoltre, sopprime molte delle linee bianche che appaiono nell’output. Tutto questo ci consente di vedere più informazioni sullo schermo.

Se si vuole più controllo sull’output, bisogna utilizzare le funzioni sprintf e fprintf. Ad esempio:

fprintf (‘formato’, variabili)

tale comando stampa a video il valore delle variabili indicate, utilizzando il formato defi nito nella stringa ‘formato’ attraverso l’uso di indicatori che riporto di seguito. Tali codici di formati sono abitualmente seguiti da due interi separati da un punto, il primo numero indica quante colonne si desiderano impegnare in uscita ed il secondo il numero di cifre della parte frazionaria. In questo caso dovremo tulizzare i seguenti descrittori:

  • %s formato stringa
  • %d formato decimale
  • %g seleziona il formato per numeri interi, xed point o esponenziali
  • %f formato xed point del numero
  • %e formato esponenziale del numero
  • \n inserisce carattere di ritorno a capo
  • \t inserisce carattere di tabulazione

LINK DI APPROFONDIMENTO PER L’ARGOMENTO: