Funzioni di base di Matlab

Vettori  
Funzioni  
Grafici Ulteriori comandi grafici
Polinomi  
Matrici Ulteriori operazioni su matrici
Usare l’help di Matlab  

 

Comandi di formato Comandi generali Operatori scalari Numeri complessi

Elenco dei comandi utilizzati nel tutorial

Esercitazione 1

 

Vettori

Possiamo cominciare creando qualcosa di semplice, come un vettore. Introducete ogni elemento del vettore (separato da spazi) fra parentesi quadre, ed imponete la sua eguaglianza ad una variabile. Per esempio, per creare un vettore ‘a’, scrivete nella Matlab command window (potete copiare ed incollare dal browser in Matlab per fare prima):

» a=[1 2 3 4 5 6 9 8 7]

Matlab risponderá;

a =

1 2 3 4 5 6 9 8 7

Supponiamo di voler creare un vettore con elementi compresi fra zero e venti spaziati regolarmente con incremento pari a 2 ( questo metodo è frequentemente utilizzato per creare un vettore dei tempi):

» t=0:2:20

t =

0 2 4 6 8 10 12 14 16 18 20

Manipolare i vettori è facile come crearli. Come prima cosa supponiamo di voler sommare 2 ad ogni elemento del vettore ‘a’. Per fare ció è sufficiente digitare:

» b=a+2

b =

3 4 5 6 7 8 11 10 9

Supponiamo adesso di voler sommare fra loro due vettori: se i due vettori hanno lo stesso numero di elementi, è molto facile. Provate a farlo come mostrato di seguito:

» c=a+b

c =

4 6 8 10 12 14 20 18 16

La sottrazione di vettori con eguale lunghezza funziona esattamente allo stesso modo.

 

Funzioni

Per poter lavorare piú comodamente Matlab include molte funzioni standard. Ogni funzione è un blocco di codice che assolve ad una specifica funzione. Matlab contiene tutte le funzioni standard, come sin, cos, log, exp, sqrt (radice quadrata) e molte altre. Sono anche presenti alcune costanti di uso comune, come ‘pi’ (pi greco), e ‘i’ o ‘j’ per la radice quadrata di –1.

» sin(pi/4)

ans =

0.7071

Per vedere l’uso di una qualunque funzione, digitate nella Matlab command window:

» help [nome della funzione]

Sono comunque disponibili altri operatori scalari.

Matlab permette inoltre di definire la propria funzione con il comando function

Grafici

Supponiamo di voler creare il grafico di un’onda sinusoidale in funzione del tempo. Innanzitutto creiamo un vettore dei tempi (il puntovirgola alla fine di ogni riga dice a Matlab di non mostrare il risultato del comando appena scritto) e poi calcoliamo il valore del seno per ogni valore del tempo.

» t=0:0.25:7;

» y=sin(t);

» plot(t,y)

 

Il grafico contiene approssimativamente un periodo della funzione seno. Sono anche disponibili altri comandi grafici.

Polinomi

In Matlab un polinomio è rappresentato da un vettore. Per creare un polinomio in Matlab è sufficiente introdurre in un vettore i coefficienti del polinomio in ordine di grado decrescente. Per esempio, volendo introdurre il seguente polinomio:

s4+3s3-15s2-2s+9

è sufficiente introdurne i coefficienti in un vettore, nella seguente maniera:

» x=[1 3 -15 -2 9]

x =

1 3 -15 -2 9

Matlab è in grado di interpretare un vettore di lunghezza n+1 come un polinomio di grado n. Se nel polinomio sono assenti alcuni termini, è necessario introdurre al loro posto degli zeri. Se ad esempio vogliamo introdurre il polinomio:

s4+1

possiamo scrivere:

» y=[1 0 0 0 1]

È possibile sapere il valore di un polinomio per un dato valore della variabile con la funzione ‘polyval’. Per esempio, se vogliamo sapere il valore del polinomio precedente per s=2, possiamo scrivere:

» z=polyval([1 0 0 0 1],2)

z =

17

È anche possibile calcolare le radici di un polinomio: questo è molto utile quando abbiamo un polinomio di grado elevato, come ad esempio:

s4+3s3-15s2-2s+9

di cui risulta molto facile calcolare le radici con la funzione ‘roots’:

» roots([1 3 -15 -2 9])

ans =

-5.5745

2.5836

0.7860

-0.7951

Supponendo di voler moltiplicare tra loro due polinomi, questo puó essere fatto tramite la convoluzione dei loro coefficienti, che si effettua tramite la funzione ‘conv’:

» x=[1 2];

» y=[1 4 8];

» z=conv(x,y)

z =

1 6 16 16

Dividere fra loro 2 polinomi è altrettanto semplice, tramite la funzione ‘deconv’:

» [xx,R]=deconv(z,y)

xx =

1 2

 

R =

0 0 0 0

Come si puó vedere xx è esattamente il polinomio/vettore iniziale.

Se si vogliono sommare fra loro due polinomi dello stesso ordine, un semplice comando è sufficiente (i vettori x e y devono essere della stessa lunghezza).

» z=x+y

Nel caso piú generale si puó utilizzare la user-defined funzione ‘polyadd’. Per usare ‘polyadd’è necessario copiare la funzione in un ‘m-file’ e poi utilizzarla come una qualunque altra funzione presente nel toolbox di Matlab. Supponendo che la funzione sia stata memorizzata in un m-file e di voler sommare due polinomi x e y di diverso grado è sufficiente introdurre:

» z=polyadd(x,y)

x =

1 2

y =

1 4 8

z =

1 5 10

 

Matrici

L'introduzione delle matrici in Matlab è analogo all'inserimento dei vettori, avendo l'accortezza di separare ogni riga di elementi con un punto e virgola (;), o con un invio, nella seguente maniera:

» B=[1 2 3 4;5 6 7 8;9 10 11 12]

B =

1 2 3 4

5 6 7 8

9 10 11 12

» B=[1 2 3 4

5 6 7 8

9 10 11 12]

B =

1 2 3 4

5 6 7 8

9 10 11 12

In Matlab le matrici possono essere manipolate in molti modi: ad esempio è possibile calcolare la trasposta di una matrice introducendo un operatore apostrofo (')nella seguente maniera:

» C=B'

C =

1 5 9

2 6 10

3 7 11

4 8 12

Bisogna notare che se la matrice C fosse stata complessa, l'introduzione dell'apostrofo avrebbe fatto visualizzare la matrice trasposta della complessa coniugata; volendo ottenere la semplice trasposta bisogna utilizzare l'operatore punto-apostrofo (.') (notare che i due comandi hanno lo stesso effetto se la matrice non è complessa)

E' anche possibile moltiplicare tra loro le due matrici B e C, tenendo presente che nella moltiplicazione di matrici l'ordine delle matrici stesse non è indifferente.

» D=B*C

D =

30 70 110

70 174 278

110 278 446

» D=C*B

D =

107 122 137 152

122 140 158 176

137 158 179 200

152 176 200 224

Un'altra possibile operazione tra matrici è la moltiplicazione elemento per elemento, tramite l'uso dell'operatore punto-asterisco (.*) (per fare questo è necessario che le matrici abbiano le stesse dimensioni).

» E=[1 2;3 4]

E =

1 2

3 4

» F=[2 3;4 5]

F =

2 3

4 5

» G=E.*F

G =

2 6

12 20

Lavorando con una matrice quadrata, come la E, è anche possibile moltiplicarla per se stessa un numero di volte a piacere, tramite l'elevamento a potenza di matrici, nella maniera seguente:

» E^3

ans =

37 54

  1. 118

Volendo invece elevare a potenza i singoli elementi della matrice, ciò si può realizzare nel seguente modo:

» E.^3

ans =

1 8

  1. 64

Si può anche calcolare l'inversa di una matrice:

» X=inv(E)

X =

-2.0000 1.0000

1.5000 -0.5000

oppure i suoi autovalori:

» eig(E)

ans =

-0.3723

5.3723

Esiste anche una funzione che permette di calcolare i coefficienti del polinomio caratteristico di una matrice: la funzione 'poli' crea proprio un vettore che contiene questi coefficienti in ordine di grado discendente.

» p=poly(E)

p =

1.0000 -5.0000 -2.0000

E' bene ricordare che gli autovalori di una matrice e le radici del suo polinomio caratteristico sono la stessa cosa:

» roots(p)

ans =

5.3723

-0.3723

 

Usare l’help di Matlab

Matlab ha un ottimo help in linea; è sufficiente digitare

» help nomecomando

per ottenere delle informazioni su qualunque comando, di cui è però necessario conoscere preventivamente il nome.

Comando format

Tutti i calcoli effettuati in Matlab sono eseguiti in doppia precisione, ma si possono visualizzare in formato diverso usando i comandi:

 

Comandi di uso generale

E' possibile visualizzare il valore di una variabile in qualsiasi momento, semplicemente digitandone il nome; é anche possibile inserire più di un comando su ogni linea, purché separati da un punto e virgola (;) o da una virgola.

Si deve notare che se non viene assegnato un nome di variabile al risultato di una data operazione, questo viene memorizzato nella variabile temporanea chiamata 'ans'.

Operatori scalari

Gli operatori disponibili sono:

 

Numeri complessi

L'unità complessa è 'i' o 'j' ed è predefinita per cui non bisogna utilizzare queste lettere come variabili o indici nei cicli; un numero complesso si scrive nella forma a+jb:

Es.: z=2+j*3

Gli operatori che sono applicabili ai numeri complessi sono:

 

Altre operazioni su matrici

Altre operazioni che operano sulle matrici sono:

La funzione eig opera su matrici quadrate nel seguente modo: il comando

y=eig(A)

produce un vettore y contenente gli autovalori della matrice A; il comando

[U,D]=eig(A)

produce una matrice U avente per colonne gli autovettori della matrice A, ed una matrice D diagonale avente sulla stessa gli autovalori della matrice A.

N.B.: tutte le funzioni che operano su matrici hanno dei vincoli sugli operandi introdotti. Ad esempio non si può invertire un matrice non quadrata; per ulteriori informazioni sulla sintassi delle funzioni utilizzare il comando help.

Esistono poi varie funzioni predefinite per la creazione di matrici:

 

Altri comandi grafici

Estetica dei grafici

Subplot

Modifica degli assi

Commenti alle figure

Il modo piú semplice di creare grafici in Matlab è inserire nella finestra di comando o in un M-file questa riga di istruzione:

» plot(x,y)

Questo comando creerá un grafico in cui gli elementi del vettore x sono posti sulle ascisse e quelli del vettore y sulle ordinate: l’impostazione di default prevede che ogni volta che viene creato un grafico esso venga sostituito a quello precedente, che viene perció cancellato; è tuttavia possibile, come vedremo in seguito, cambiare questa impostazione. Per vedere un esempio supponiamo di voler plottare la semplice funzione:

y=3x

Per fare questo possiamo creare un M-file con queste righe di istruzioni:

x = 0:0.1:100;

y = 3*x;

plot(x,y)

É bene ricordare quando si usa il comando plot che i vettori x e y devono essere della stessa lunghezza, mentre le altre dimensioni possono variare; il comando puó anche essere usato specificando un solo vettore in ingresso; in questo caso gli elementi del vettore saranno plottati in funzione del loro indice di posizione nel vettore. Se il vettore di ingresso contiene dei numeri complessi Matlab plotterá la parte reale di ogni elemento (sull’asse x) in funzione di quella immaginaria (sull’asse y).

Estetica dei grafici

Il colore ed i marcatori del grafico possono essere cambiati aggiungendo un parametro (scritto fra apici) nella sintassi del comando: ad esempio per plottare un grafico con linea rossa tratteggiata, possiamo digitare:

» x = 0:0.1:100;

» y = 3*x;

» plot(x,y,'r:')

Questo terzo parametro è dato da tre caratteri (non necessariamente tutti presenti) che indicano il tipo di linea e di marcatore da utilizzare nel grafico, secondo quanto specificato nella seguente tabella:

 

     y     yellow        .     point
     m     magenta       o     circle
     c     cyan          x     x-mark
     r     red           +     plus
     g     green         -     solid
     b     blue          *     star
     w     white         :     dotted
     k     black         -.    dashdot
                         --    dashed

E’ anche possibile plottare un numero qualsiasi di grafici contemporaneamente nella stessa figura, specificando eventualmente per ognuno colori e marcatori diversi; ad esempio volendo plottare in sieme i grafici di seno e coseno con linee e colori diversi possiamo scrivere questo M-file:

x = linspace(0,2*pi,50);
y = sin(x);
z = cos(x);
plot(x,y,'r', x,z,'gx')

Lo stesso effetto si puó ottenere utilizzando il comando:

» hold on

che permette di sovrapporre il grafico che si sta per generare a quelli generati precedentemente: il grafico dell’esempio precedente ad esempio si poteva anche ottenere tramite queste linee di istruzioni:

» x = linspace(0,2*pi,50);
» y = sin(x);
» plot(x,y,'r')
» z = cos(x);
» hold on
» plot(x,z,'gx')
» hold off

Il comando

» hold off

permette invece di ritornare alla modalitá normale, in cui il nuovo grafico sostuituisce il precedente.

Subplot

E’ anche possibile plottare dei grafici separati ma tutti inclusi nella stessa finestra grafica: ad esempio con il comando

» subplot(m,n,p)

la finestra grafica viene divisa in una matrice di m*n grafici, di cui il p-esimo viene reso attivo per il plottaggio: volendo ad esempio plottare nella stessa finestra grafica, ma in tre grafici separati le funzioni seno, coseno e tangente, si puó iintrodurre l’M-file:

x = linspace(0,2*pi,50);
y = sin(x);
z = cos(x);
w = tan(x);
subplot(2,2,1)
plot(x,y)
subplot(2,2,2)
plot(x,z)
subplot(2,2,3)
plot(x,w)

Come si vede da questo esempio non è necessario utilizzare per forza tutte le finestre generate e queste vengono numerate da sinistra a destra, una riga dopo l’altra: bisogna peró ricordare che è necessario di volta in volta selezionare la finestra attiva, altrimenti il grafico nuovo viene sostituito a quello precedente.

Modifica degli assi

Anche gli assi dei grafici possono essere impostati a piacere, imponendo dei valori minimi e massimi per le ascisse e le ordinate, nel seguente modo:

» axis([xmin, xmax, ymin, ymax])

e ricordando di inserire questa riga di comando dopo il comando plot; quando si utilizza il comando subplot è possibile modificare gil assi di ciascun grafico singolarmente, specificando il comando axis prima di effettuare il subplot successivo.

Commenti alle figure

Per finire è possibile introdurre per ogni grafico un titolo e delle etichette degli assi, introducendo dopo il plottaggio i seguenti comandi:

» title('title string')
» xlabel('x-axis string')
» ylabel('y-axis string').

È anche possibile introdurre del testo all’interno del grafico, con i comandi:

» text(xcor,ycor,'textstring')
» gtext('textstring')

Nel primo caso è necessario sapere preventivamente le coordinate in cui inserire il testo, nel secondo è possibile selezionare la posizione con il mouse direttamente nel grafico.

Altri comandi che possono essere associati al comando plot sono:

Il comando figure crea una nuova finestra grafica in cui far comparire il disegno; per spostarsi sulla n-esima finestra grafica basta digitare figure(n).