Vettori | |
Funzioni | |
Grafici | Ulteriori comandi grafici |
Polinomi | |
Matrici | Ulteriori operazioni su matrici |
Usare lhelp di Matlab |
Elenco dei comandi utilizzati nel tutorial
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.
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 luso 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
Supponiamo di voler creare il grafico di unonda 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.
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
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
Volendo invece elevare a potenza i singoli elementi della matrice, ciò si può realizzare nel seguente modo:
» E.^3
ans =
1 8
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
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.
Tutti i calcoli effettuati in Matlab sono eseguiti in doppia precisione, ma si possono visualizzare in formato diverso usando i comandi:
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'.
Gli operatori disponibili sono:
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 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:
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: limpostazione 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 (sullasse x) in funzione di quella immaginaria (sullasse y).
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 dellesempio 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.
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 lM-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 laltra: bisogna peró ricordare che è necessario di volta in volta selezionare la finestra attiva, altrimenti il grafico nuovo viene sostituito a quello precedente.
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.
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 allinterno 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).