Upload
phungthien
View
227
Download
0
Embed Size (px)
Citation preview
Laboratorio di MatLab
Algebra lineare e Geometria
Alessandro Benfenati
Ph.D. StudentDepartments of Mathematics - University of Ferrara
1 / 61
Sommario
1 Organizzazione delle lezioni
2 Introduzione a MatlabNavigazioneWorkspace, Command HistoryShellEditor
3 Le variabiliVariabili numericheVettoriMatrici
4 M-filesScriptFunctions
5 Istruzioni di controllo e cicliIstruzioni di controlloCicli
6 MiscellaneaVarie ed evenutali
2 / 61
Organizzazione delle lezioni
Organizzazione
Date delle lezioni
07/04/2014 : 1 lezione
14/04/2014 : 2 lezione
28/04/2014 : 3 lezione Si prevede una grande affluenza
05/05/2014 : 4 lezione
12/05/2014 : esempio di esame
19/05/2014 : esame
Aula: Informatica GrandeOrario : 16.30-19.00Homepage del corso:http://dmi.unife.it/it/didattica/dottorandi/alessandro-benfenati
3 / 61
Introduzione a Matlab
Che cos’e Matlab?
Matlab (Matrix Laboratory) e un ambiente integrato per il calcolo scientifico,basato sul calcolo matriciale; consente di eseguire un’istruzione o comandoper volta, tali comandi permettono di definire variabili, valutare formule,disegnare grafici 2D e 3D a schermo...
E inoltre un linguaggio di programmazione intrerpretato (non compilato), dallasintassi facile ed intuitiva (anche se a prima vista puo non sembrare). Lanotazione in cui i dati vengono inseriti e le soluzioni vengono espresse e unanotazione di tipo matematico.
Matlab e un ambiente per studiare soluzioni numeriche di problemi di tipofisico, economico, statistico, ingegneristico, in molto campi delle scienzeapplicate. Per aiutare gli utenti nella soluzione di questi problemi, sono staticreati vari Toolbox, ovverossia libreria con funzioni gia implementate peraffrontare le tematiche particolari (ad esempio, lo Statistic Toolbox e statocreato per effettuare analisi statistiche di dati.)Per maggiori informazioni, visitare http:\\www.mathworks.com.
4 / 61
Introduzione a Matlab
Alternative a MatLab
Nel caso si disponesse di grosse disponibilita finanziarie, e possibile acquistareMatLab, con un costo che va dai 2000 e(versione base) ai circa 84000 e.
Aternativa
Octave e un software open source, disponibile per ambiente Windows, Linux eMac; e una valida alternativa a Matlab, compatibile al 98.3% con i codiciMatLab. E scaricabile dal sito
http://www.gnu.org/software/octave/
In ambiente linux (Ubuntu), Octave e installabile con il comando
sudo apt-get install octave3.2
Octave non e dotato di interfaccia grafica come MatLab (si utilizza in modalitatestuale, da shell di comando), ma e possibile installare il pacchetto QtOctaveche dota Octave di un aspetto simile a quello di MatLab.Altra alternativa a MatLab e SciLab:
http://www.scilab.org/
che non ha lo stesso livello di compatibilita con MatLab posseduto da Octave.
5 / 61
Introduzione a Matlab
Ambiente MatLab
Ogni finestra puo essere estratta (unlocked), integrata (locked), massimizzata,minimizzata, chiusa..
6 / 61
Introduzione a Matlab
Ambiente MatLab
Navigazionenavigazione fra le cartelle
Editor di testoscrivere m.files, functions, etc.
Mandare in esecuzione il programma
WorkspaceVariabili correnti, con info
Shell
Commandhistory
Ogni finestra puo essere estratta (unlocked), integrata (locked), massimizzata,minimizzata, chiusa..
7 / 61
Introduzione a Matlab Navigazione
Navigazione
Nel menu di navigazione e possibile controllare in quale directory si stalavorando.
Questo e importante in quanto se si vanno a caricare dati o funzioni (cheverranno spiegate a breve) non presenti nel path corrente MatLab restituisce unmessaggio di errore.
In questa finestra e possibile selezionare la cartella di lavoro, aprire m-files,caricare dati salvati mediante il doppio clic del mouse.
Alcuni comandi da utilizzare nella shell di comando per la navigazione sono iseguenti:
cd name_dir entra nella cartella name_dir;
cd .. sale di un livello;
load name_file.mat carica dati salvati nel file name_file.mat;
edit name_script.m apre nella finestra dell’editor il file name_script.m.
8 / 61
Introduzione a Matlab Workspace, Command History
Workspace & Command History
Nel Workspace viene visualizzato l’elenco delle variabili nel seguente modo:
name_var dimension,type val_min val_max
Viene visualizzato il nome della variabile, la dimensione, il tipo, il valoremassimo e il valore minimo.
Esempio
A <5x6 double> 0.23 5.5
B <1x6 double> 0 1
Cliccando due volte su di una variabile nel workspace, si apre una finestra similead un foglio elettronico contenente i valori della variabile. In questo ambiente epossibile modificare la variabile presa in esame.
Nella Command History son presenti tutti i comandi digitati. Cliccando duevolte su di un comando presente nell’elenco tale comando viene eseguito.
9 / 61
Introduzione a Matlab Shell
Shell
La Command Line o Shell e l’ambiente con cui si interagisce effettivamentecon MatLab. Sulla linea di comando si definiscono le variabili, si richiamanofunzioni, si eseguono script...
>> 3+2ans =
5>>
Si puo utilizzare MatLab come unacalcolatrice...
>> sin (3/2* pi)+log (25)- tan (2)ans =
5>>
...anche di alto livello!
Per eseguire un comando si digita tale comando sulla tastiera e poi si preme ê.Per eseguire piu comandi sulla stessa linea si separano con una virgola:
>> sin (3/2* pi), cos (-99)ans =
5>>
vengono visualizzati i risultati in ordine.
ans e la variabile temporanea in cui MatLab memorizza il risultato dell’ultimaistruzione digitata. Viene sovrascritta ogni volta!
10 / 61
Introduzione a Matlab Shell
Shell: alcuni comandi utili
>> pwd Directory di lavoro.
>> help sin Il comando help apre una breve descri-zione della funzione scritta subito do-po il comando. Digitando ad esempiohelp sin nella shell di comando appa-rira una breve descrizione della funzionesin, il suo utilizzo e alcuni esempi.
>> doc>> doc cos
Il comando doc apre il browswer con ilmanuale di MatLab. Tale manuale e informato ipertestuale, quindi di facile uti-lizzo. Digitando doc name_fun si apre lafinestra del browser direttamente alla pa-gina che spiega l’utilizzo della funzionename_fun.
>> cd CODES>> cd ..
Il comando cd (Change Directory) servea cambiare directory di lavoro da shell dicomando: cd CODES fa in modo di en-trare nella cartella CODES. Lo stesso co-mando utilizzato con .. sale di un livellonelle cartelle.
11 / 61
Introduzione a Matlab Editor
Editor
I programmi MatLab possono raggiungere facilmente le centinaia di righe dicodice, quindi e necessario poter disporre di file sorgente in cui memorizzare leistruzioni da eseguire. Nell’Editor e possibile salvare un file di testo conestensione .m in cui scrivere tutte le istruzioni necessarie per risolvere unproblema. L’editor di MatLab e un comune editor di testo con solo alcunefunzioni aggiuntive comode per poter lavorare con questo linguaggio diprogrammazione.
Nell’editor son presente utili strumenti di debug e di esecuzione del programma,utili quando sono presenti errori difficili da trovare.
Una volta scritte questa serie di istruzioni, possiamo richiamare quest’insiemedi istruzioni semplicemente digitando il nome del file nella shell: in questomodo le istruzioni scritte verranno eseguite in sequenza, una alla volta.
Per poter utilizzare un m-file, dobbiamo trovarci nella stessa directory doveesso e salvato!
12 / 61
Le variabili Variabili numeriche
Variabili Numeriche
Digitando in successione due comandi >>3+2 e >>7+3 il risultato vienememorizzato nella variabile ans, che memorizza solo il risultato dell’ultimaoperazione.Se volessimo memorizzare questi risultati dobbiamo dichiarare una variabile:
>>a= 3+2a=
5
Il risultato viene memorizzato nellavariabile a e viene anche visualizzato.
>>a= 3+2;Il risultato viene memorizzato nellavariabile a ma non viene visualizzato.
>>a= 3+2;>>a= 10+3;
In questo modo il valore assegnato ada viene sovrascritto: in questa caso ilvalore memorizzato in a e 13.
La procedura per memorizzare un valore in una variabile e la seguente:var_name = var_value ê
Il punto e virgola e facoltativo.
13 / 61
Le variabili Variabili numeriche
Variabili Numeriche
MatLab e case sensitive: la variabile M e diversa dalla variabile m. Inoltre, ilnome di una variabile non puo iniziare con una cifra. Alcuni esempi di nomivalidi di variabili sono: A_min, Err3, fun_obj4.
variabile NULL
Utilizzando la seguente istruzione:
>> x = [];
si crea una variabile vuota (NULL) che puo contenere dati di qualsiasi tipo.
14 / 61
Le variabili Variabili numeriche
Variabili Numeriche
Repetita iuvant!
ans e la variabile temporanea in cui MatLab memorizza il risultato dell’ultimaistruzione digitata. Viene sovrascritta ogni volta!
>> sin (23)ans =
-0.8462>> 5+6ans =
11>> 0ans =
0>> log (abs (asin(cos (pi ))))ans =
0.4516>> 1+1ans =
2>> ansans =
2
Scrivendo varie operazioni una di segui-to all’altra, il risultato che rimane inmemoria e l’ultimo eseguito.
15 / 61
Le variabili Vettori
Vettori: creazione
MatLab e ottimizzato per il calcolo matriciale, tutti i dati vengono visti comematrici.
I vettori sono particolari matrici.
>> v = [12 pi 0];>> v = [12, pi , 0];
Dichiarazioni di vettori riga: utilizzare ono la virgola e ininfluente.
>> w = [9; 42; pi /2];>> w = [942pi /2];
Dichiarazioni di vettori colonna: anda-re a capo con ê o utilizzare il punto evirgola e la medesima cosa.
>> w = [9; 42; pi /2];>> w(2)ans =
42
Per accedere agli elementi di un vet-tore, si digita il nome del vettore efra parentesi tonde l’indice dell’elementodesiderato.
16 / 61
Le variabili Vettori
Vettori: creazione
Alcuni comandi particolari:
>> b = 3:15;
Questo comando crea il vettore b i cuielementi sono equispaziati di 1.b � p1, 2, 3, . . . , 15qT .
>> c = 0:0.1:2;
Questo comando crea il vettore c i cuielementi sono equispaziati di passo 0.1.c � p0, 0.1, 0.2, . . . , 1.8, 1.9, 2qT .
>> d = linspace (5 ,7 ,101);
Questo comando crea il vettore d di101 elementi, il primo elemento e 5 el’ultimo e 7.d � p5, 5.02, 5.04, . . . , 6.96, 6.98, 7.00qT .Il passo viene calcolato au-tomaticamente, e dato dadi � di�1.
>> e = [17;42];>> e’ans =
17 42
L’apostrofo calcola il trasposto di un
vettore.
17 / 61
Le variabili Vettori
Vettori: Operazioni con i vettori
Somma, differenza e prodotto di vettori ricalcano le definizioni classichematematiche.
>> a = [2; 3];>> b = [4; 6];>> c = a+bc =
69
La somma (differenza) e calcolata com-ponente per componente. Prestare at-
tenzione alle dimensioni dei vettori: non
e possibile sommare vettori di dimensioni
differenti.
>> a = [2; 3];>> b = [4; 6];>> d = a’*bd =
26>> dot (a,b)ans =
26
Il prodotto scalare a, b ¡� aTb �
°
iaibi e implementato in MatLab. In
alternativa, si puo utilizzare la funzio-ne nativa dot.Anche in questo caso le
dimensioni dei vettori devono essere le
stesse.
Le operazioni di divisione, moltiplicazione ed elevemento a potenza non sonodefinite per i vettori, ma e possibile utilizzare le operazioni punto: .*, ./.
18 / 61
Le variabili Vettori
Vettori: operazioni con i vettori
Addizione e sottrazione non han bisogno del punto.
>> v = [5 ,8];>> w = [25 ,16];>> w./vans =
5 2
>> w.\vans =
0.2000 0.5000
>> w.*vans =
125 128
>> v.^2ans =
25 64
>> a = [2 3];>> v.^aans =
25 512
In questo modo viene eseguita l’opera-zione componente per componente.Nel caso dell’elevamente a potenza, ognielemento del vettore viene elevato al-l’esponente indicato: v.^2 = p52, 82q.Se si utilizza un vettore come esponen-te, quello che viene eseguito e v.^a =p52, 83q.
19 / 61
Le variabili Vettori
Vettori: funzioni sui vettori
>> v = linspace (10 ,15 ,50);>> sum (v)ans =
625
La funzione sum calcola la somma deglielementi del suo argomento.
>> prod(v)ans =
4.9307 e+54
La funzione prod calcola il prodottodegli elementi del suo argomento.
>> numel(v)ans =
50
La funzione numel calcola il numerodegli elementi del suo argomento.
>> length (v)ans =
50
La funzione length restituisce la lun-ghezza del vettore.
>> size(v)ans =
1 50
La funzione size restituisce le dimensio-ni del suo argomento. Quando verran-no utilizzate le matrici le differenze fraqueste ultime tre funzioni saranno piuchiare.
20 / 61
Le variabili Vettori
Vettori: funzioni sui vettori
>> v = rand(10 ,1);>> max (v)ans =
0.9706>> min (v)ans =
0.1419
La funzione rand(n,m) genera n�m nu-meri distribuiti uniformemente nell’inter-vallo r0, 1s La funzione max (min) resti-tuisce il massimo (minimo) del vettorein input.
>> [mx , idx ] = max (v)mx =
0.9706idx =
2>> [mn , idx ] = min (v)mn =
0.1419idx =
6
Chiamando le funzioni che cercano ilmassimo e il minimo di un vettore nelmodo indicato, si trovano contempora-neamente e memorizzati in due variabilidiverse il valore massimo (o minimo) delvettore e l’indice della posizione
>> mean(v)ans =
0.6602>> std (v)ans =
0.3308
mean calcola la media del vettore; std lasua deviazione standard.
21 / 61
Le variabili Vettori
Vettori: funzioni sui vettori & operatori di confronto
>> w = 9:0.2:15;>> find(w <10)ans =
1 2 3 4 5
La funzione find(logic_expr) resti-tuisce gli indici per cui logic_expr everificata.
Operatori di Confronto
Gli operatori di confronto in MatLab sono
== confronto
< maggiore
> minore
>= maggiore o uguale
<= minore o uguale
~= diverso (per digitare la tilde in ambiente windows: ALT+0126. Inambiente Linux: ALTGR+ı).
22 / 61
Le variabili Vettori
Vettori: vettori e costanti
>> v = [4 ,5];>> v + 2ans =
6 7>> v / 2ans =
2.0000 2.5000>> v * 2ans =
8 10
Se si eseguono operazioni fra vettori enumeri, MatLab automaticamente trat-ta il numero in questione come un vet-tore in cui ogni componente e pari allacostante digitata.
Somma
Ad esempio, il comando >>v + 2 corrisponde a digitare >>v + [2,2]. Questovale per qualsiasi operazione.
23 / 61
Le variabili Vettori
Vettori, esempio: calcolo del centro di massa
−1 0 1 2 3 4 5 6 7 8 9 10−1
0
1
2
3
4
5
6
7
8
A
B
C
Si richiede il calcolo del centro di massadei punti A,B,C. La formula per n puntie la seguente:
M �
�
1
n
n
i
xi ,1
n
n
i
yi
�
>>A = [2.0; 3.0 ];>>B = [7.0; 4.5 ];>>C = [4.9; 6.7 ];>>>> M = (A + B + C) / 3;
24 / 61
Le variabili Vettori
Vettori, esempio: calcolo del centro di massa
−1 0 1 2 3 4 5 6 7 8 9 10−1
0
1
2
3
4
5
6
7
8
A
B
C
MSi richiede il calcolo del centro di massadei punti A,B,C. La formula per n puntie la seguente:
M �
�
1
n
n
i
xi ,1
n
n
i
yi
�
>>A = [2.0; 3.0 ];>>B = [7.0; 4.5 ];>>C = [4.9; 6.7 ];>>>> M = (A + B + C) / 3;
In questo caso abbiamo sfruttato il fattoche MatLab esegue la somma di vetto-ri componente per componente e che ladivisione per come e implementata vieneeseguita componente per componente
25 / 61
Le variabili Vettori
Vettori, esempio: calcolo del centro di massa
−1 0 1 2 3 4 5 6 7 8 9 10−1
0
1
2
3
4
5
6
7
8
A
B
C
Mnew
Nel caso caso in cui i punti abbianomassa diversa (quindi pesano in mododiverso) la formula diventa
Mnew �
�
1
Mtot
n
i
mixi ,1
Mtot
n
i
miyi
�
con
Mtot �
n
i
mi
e dove mi e la massa del punto i�esimo.
>> A = [2.0; 3.0 ];>> B = [7.0; 4.5 ];>> C = [4.9; 6.7 ];>> mass = [10 3 1]; % la componente i-esima si
% riferisce all ’i-esimo punto.% Per es , mass(1) consiste nella% massa del punto A.
>> M = (mass (1)*A + mass (2)*B + mass (3)*C) / sum (mass);
26 / 61
Le variabili Vettori
Vettori: funzioni sui vettori
La norma euclidea di un vettore x � px1, x2, . . . , xnqT e definita come:
}x}2 �
g
f
f
e
n
i�1
x2i
Il comando MatLab per calcolare la norma di un vettore e
>> x = 1:0.5:5;>> norm(x)ans =
9.7980>> sqrt(sum (x.^2))ans =
9.7980
Utilizzando tale comando, viene calcolata la norma euclidea. Esistono altri tipidi norma:}x}1 �
°
i|xi |
>>norm(x,1)
}x}p ��
°
i|xi |
p�
1p
>>norm(x,p)
}x}8
� maxi |xi |
>>norm(x,Inf )
27 / 61
Le variabili Vettori
Vettori: funzioni sui vettori
In MatLab sono definite tutte le funzioni elementari: sin, cos, log, . . . Per unelenco completo, digitare nella shell di comando help elfun.
>> x = pi/3;>> sin (x)ans =
0.8660>> log (x)ans =
0.0461
>> x = 0:pi /2:3/2* pi>> max (x)ans =
4.7124>> min (x)ans =
0
Funzioni con argomenti vettoriali
Una funzione che ha come input un vettore restituisce come output un vettoredella stessa lunghezza, le cui componenti sono i valori della funzione calcolatisugli elementi del vettore di input.
>> x = 0:pi /2:3/2* pi;>> y = sin (x)y =
0 1.0000 0.0000 -1.0000
28 / 61
Le variabili Vettori
Vettori, esempio: calcolo del lavoro di una forza
Un forza ~F � 4~i � 5~j � 2~k viene applicata al corpo puntiforme A situatonell’origine degli assi. Tale forza produce uno spostamento ~s � 3~i � 10~j � 4~k .L’angolo θ fra i vettori ~F ed ~s e di 0.7669 radianti. Calcolare il lavoro dellaforza ~F .Ricordando che il lavoro W di un forza e dato dal prodotto scalare
W � F , s ¡� FTs � }F }2}s}2 cospθq
possiamo utilizzare le seguenti istruzioni:
>> F = [4;5; -2];>> s = [3; 10; 4];>> W1 = dot (F,s)W1 =
54>> W2 = F’*sW2 =
54>> W3 = norm(F)* norm(s)*cos (0.7669)
W3 =
54.0049
x
y
z
~F
~s
θ
29 / 61
Le variabili Matrici
Matrici
Come gia detto, l’oggetto principale su cui MatLab lavora e la matrice. Percreare una matrice A come la seguente si utilizza la sintassi studiata per ivettori:
A �
�
�
4 5 π
0 6 21 0 e
�
>> A = [4 5 pi; 0 6 2; 1 0 exp (1)]
A =
4.0000 5.0000 3.14160 6.0000 2.0000
1.0000 0 2.7183>> A(2,3) % Accesso all ’elemento di riga 2 colonna 3ans =
2
Carattere jolly :
I due punti : permettono di accedere a piu elementi contemporaneamente dellamatrice: permettono di selezione un’intera riga, un’intera colonna o unasottomatrice.
30 / 61
Le variabili Matrici
Matrici
A �
�
�
�
�
2 5 π 56 20 6 2 0 2π1 0 e 3 59 0 3 5 2
�
Æ
Æ
>> A(:,1) % seleziona solo la prima colonnaans =
2019
>> A(2,:) % seleziona solo la seconda rigaans =
0.0000 6.0000 2.0000 0.0000 3.1415
>> A(3:4 ,3:5) % seleziona gli elementi dalla 3aans = % alla 4a riga e dalla 3a alla 5a colonna
2.7183 3.0000 5.00003.0000 5.0000 2.0000
31 / 61
Le variabili Matrici
Matrici
A �
�
�
�
�
2 5 π 56 20 6 2 0 2π1 0 e 3 59 0 3 5 2
�
Æ
Æ
>> A(:,1) % seleziona solo la prima colonnaans =
2019
>> A(2,:) % seleziona solo la seconda rigaans =
0.0000 6.0000 2.0000 0.0000 3.1415
>> A(3:4 ,3:5) % seleziona gli elementi dalla 3aans = % alla 4a riga e dalla 3a alla 5a colonna
2.7183 3.0000 5.00003.0000 5.0000 2.0000
32 / 61
Le variabili Matrici
Matrici
A �
�
�
�
�
2 5 π 56 20 6 2 0 2π1 0 e 3 59 0 3 5 2
�
Æ
Æ
>> A(:,1) % seleziona solo la prima colonnaans =
2019
>> A(2,:) % seleziona solo la seconda rigaans =
0.0000 6.0000 2.0000 0.0000 3.1415
>> A(3:4 ,3:5) % seleziona gli elementi dalla 3aans = % alla 4a riga e dalla 3a alla 5a colonna
2.7183 3.0000 5.00003.0000 5.0000 2.0000
33 / 61
Le variabili Matrici
Matrici: creazione
Si possono creare matrici riempiendole con vettori:
>> v = [2;4];>> w = [0;1];>> t = [1;3];>> A = [v,w,t]A =
2 0 14 1 3
>> B = [v;w;t]B =
240113
Vengono creat tre vettori colonna di di-mensioni 2x1; per creare la matrice A siaffiancano i tre vettori, utilizzando il ; ,inmodo da avere una matrice 2x3. Inve-ce, utilizzando semplicemente , si met-tono uno sotto l’altro e si crea un nuovovettore di dimesione 6x1.
>> v = [2;4];>> w = [0;0;1];>> A = [v,w]Error using horzcatCAT arguments dimensions are not consistent .
Prestare attenzione alle dimensioni
dei vettori!
34 / 61
Le variabili Matrici
Matrici: creazione
Si possono creare matrici riempiendole con altre matrici:
>> A = [ 2 5 4; 6 9 0];>> B = [ 9 9 9; 2 5 4];>> C = [A;B]C =
2 5 46 9 09 9 92 5 4
La matrice C e stata creata ponendo lamatrice B sotto la matrice A: e comun-que necessario prestare attenzione alledimensioni.
Allocazione dinamica della memoria
MatLab e in grado di creare spazio (memoria) dinamicamente al momento delbisogno.
>> D = [1 5; 5 6]D =
1 55 6
>> D(1,4) = 9D =
1 5 0 95 6 0 0
La matrice D era di dimensione 2 � 2,ma inizializzando l’elemento di postop1, 4q MatLab ha creato dinamicamen-te la memoria per gli elementi mancanti,inizializzandoli a 0.
35 / 61
Le variabili Matrici
Matrici: creazione di matrici speciali
>> eye (3)ans =
1 0 00 1 00 0 1
Il comando eye(n) crea la matriceidentita di ordine n.
>> zeros (3)ans =
0 0 00 0 00 0 0
>> ones (2)ans =
1 11 1
Il comando zeros(n) (ones(n)) creauna matrice di ordine n con ognielemento inizializzato a 0 (1).
>> ones (3,7)ans =
1 1 1 1 1 1 11 1 1 1 1 1 11 1 1 1 1 1 1
36 / 61
Le variabili Matrici
Matrici: esempio
Avendo a disposizione la matrice A di dimensioni 3� 3, si vuole creare lamatrice strutturata nel seguente modo:
�
�
I3 03 �I303 A 03
�I3 03 I3
�
Si puo scrivere un unico comando Matlab per creare tale matrice:
>>[eye (3), zeros (3), -eye (3)zeros (3) A zeros (3)-eye (3) zeros (3) eye (3)];
37 / 61
Le variabili Matrici
Matrici: operazioni
>> A = [ 2 5 4; 6 9 0];>> B = [ 9 9 9; 2 5 4];>> A+Bans =
11 14 138 14 4
>> C = A-BC =
-7 -4 -54 4 -4
La somma fra matrici e definita nel solitomodo, componente per componente.
>> D = [2 6 ; 5 6; 0 0]D =
2 65 60 0
>> P = A*DP =
29 4257 90
Il prodotto e definito per matrici di di-mensioni opportune: se A P R
2�3,D P
R3�2 allora P � AD P R
2�2.
P11 � A1,D1¡
� p2, 5, 4q, p2, 5, 0q ¡
� 2 � 2� 5 � 5� 4 � 0 �
� 29
38 / 61
Le variabili Matrici
Matrici: operazioni
>> A*BError using *Inner matrix dimensions must agree.
Il prodotto deve essere fatto fra
matrici di dimensioni opportune.
>> A\Bans =
0 0 00.2222 0.5556 0.44441.9722 1.5556 1.6944
>> A/Bans =
-0.0000 1.00000.3810 0.4286
A\B � A�1B, mentre A/B� AB�1.Queste due funzioni verranno ripresequando si tratteranno i sistemi lineari.
>> A’ans =
2 65 94 0
>> P^2ans =
3235 49986783 10494
A’� At .L’operazione A^p, con A matrice e p P
N� e possibile solo quando A e quadrata.
39 / 61
Le variabili Matrici
Matrici: operazioni punto
Come per i vettori, le operazioni punto sono definite anche per le matrici.
>> A = [ 2 5 4; 6 9 0];>> B = [ 9 9 9; 2 5 4];>> E = A.*BE =
18 45 3612 45 0
E21 � A21 � B21
>> F = A./BF =
0.2222 0.5556 0.44443.0000 1.8000 0
F21 � A21{B21
>> G = A.^3G =
8 125 64216 729 0
G11 � A311
40 / 61
Le variabili Matrici
Matrici: confronto fra matrici
E possibile confrontare gli elementi di due matrici.
>> A = [ 2 5 4; 6 9 0];>> B = [ 9 9 9; 2 5 4];>> A==Bans =
0 0 00 0 0
>> A>Bans =
0 0 01 1 0
>> A~=Bans =
1 1 11 1 1
>> A<=Bans =
1 1 10 0 1
Il confronto viene fatto elemento per ele-mento.
Il risultato e una matrice i cui elementi
sono valori logici: 1 sta per TRUE e 0
per FALSE.
41 / 61
Le variabili Matrici
Matrici: matrici simmetriche ed antisimmetriche
Def.
Una matrice A si dice simmetrica quando A � At ; si dice antisimmetrica
quando A � �At .
Remark
Data una matrice A qualsiasi, la matrice 12pA� At
q risulta essere simmetrica.
La matrice 12pA� At
q risulta essere antisimmetrica.
Ad esempio:
A �
�
�
�
�
4 3 2 13 0 9 82 9 2 51 8 5 1
�
Æ
Æ
B �
�
�
�
�
0 3 2 1�3 0 9 8�2 �9 0 5�1 �8 �5 0
�
Æ
Æ
A e simmetrica, mentre B e antisimmetrica.
42 / 61
Le variabili Matrici
Matrici: matrici simmetriche ed antisimmetriche
Per creare matrici simmetriche ed antisimmetriche in codice MatLab si puoscrivere:
>> A = rand (3); % genera una matrice 3x3 con elementi% random fra 0 e 1.
>> B = 0.5*( A+A ’);>> B == B’ % verifica se la matrice e’ simmetricaans =
1 1 11 1 11 1 1
>> C = 0.5*(A-A ’);>> C == -C’ % verifica se la matrice e’ antisimmetricaans =
1 1 11 1 11 1 1
43 / 61
Le variabili Matrici
Matrici: prodotto matrice-vettore
Il prodotto matrice-vettore e definito nel solito modo, e possibile eseguirloquando le dimensioni sono opportune: se A P R
n�m e x P Rm, allora il prodotto
Ax e ben definito e Ax P Rn.
>> AA =
2 5 46 9 0
>> x = [2; 3; 0];>> b = A*xb =
1939
b1 � A1, x ¡� 2 � 2� 5 � 3� 4 � 0 � 19
>> y = [5;6];>> A*yError using *Inner matrix dimensions must agree.
Occhio alle dimensioni.
44 / 61
Le variabili Matrici
Matrici: prodotto matrice-vettore. Esempio
Siano dati la matrice A e il vettore P:
A �
�
0.7071 �0.70710.7071 0.7071
P �
�
23
−5 −4 −3 −2 −1 0 1 2 3 4 5−5
−4
−3
−2
−1
0
1
2
3
4
5
PQ Il vettore Q mostrato nella figura a lato
in rosso e dato dal prodotto di A per ilvettore P.
45 / 61
Le variabili Matrici
Matrici: prodotto matrice-vettore. Esempio
Siano dati la matrice A e il vettore P:
A �
�
0.7071 �0.70710.7071 0.7071
P �
�
23
−5 −4 −3 −2 −1 0 1 2 3 4 5−5
−4
−3
−2
−1
0
1
2
3
4
5
PQ
φ
Il vettore Q mostrato nella figura a latoin rosso e dato dal prodotto di A per ilvettore P. L’azione di A sul vettore P e
stata di una rotazione attorno all’origine
di un angolo φ �
π
4.
A �
�
cospφq � sinpφqsinpφq cospφq
46 / 61
M-files Script
Script
Supponiamo di voler disegnare il grafico di sinpxq � x nell’intervallo r0, 2πs. Icomandi sono i seguenti.
>> x = 0:0.1:2* pi;>> y = sin (x)+x;>> plot(x,y)
Inizializzo il vettore x fra 0 e 2π con pas-so 0.1, calcolo y sfruttando la sintassivettoriale di MatLab e infine con il co-mando plot creo la finestra grafica incui mi viene visualizzato il grafico.
Se invece di dover plottare il grafico nell’intervallo r0, 2πs ora si dovesseplottarlo nell’intervallo r0, 10s, allora di dovrebbe ripartire dall’inizio e scriveretutte le istruzioni
M-file
E invece no! Ci basta salvare la lista delle istruzioni in quello che vienechiamato M-file. Una volta scritta questa lista e salvato il file, possiamorichiamare questa serie di comandi semplicemente scrivendo il nome del M-filenella shell di comando.
Questo tipo di M-file prende il nome di script.
47 / 61
M-files Script
Script: directory, workspace e variabili
Alcune accortezze:
Per eseguire uno script, e necessario essere nella directory dove tale scripte salvato
uno script puo accedere a tutte le variabile del workspace corrente,modificandole. Inoltre, tutte le varibili create nello script rimarranno inmemoria.
uno script puo chiamare un altro script
48 / 61
M-files Script
Script: directory, workspace e variabili
Alcune accortezze:
per rendere effettive le modifiche fatte ad uno script, e necessario salvarle.Quando le modifiche fatte non sono state salvate, viene eseguita l’ultimaversione dello script. Si nota che non si e effettuato il salvataggio dellemodifiche perche nella finestra dell’editor accanto al nome del file appareun asterisco.
per avviare uno script, si puo digitare il nome del file nella shell oppurecliccare sul bottone a forma di play sulla barra di modifica dell’editor: inquesto modo, si salvano le modifiche e si eseguono le istruzioni contenutenello script.
Le prime tre righe del primo script che viene chiamato dovrebbe contenerele seguenti istruzioni:
clear all: pulisce il workspaceclose all: chiude tutte le finestre aperteclc: pulisce la shell di comando
49 / 61
M-files Functions
Functions
Le functions sono particolari M-files che prendono alcuni parametri in input ene restituiscono altri in output, senza modificare quelli in entrata. Ad esempio,e possibile creare una funzione che presi in input a, b, c restituisca come outputle radici dell’equazione
ax2� bx � c � 0
quando esse esistono.
function [x1 , x2] = roots_2deg (a, b, c)
Delta = b^2 - 4*a*c; % calcolo del discriminante
if Delta < 0 % se minore di 0, allora esco e non faccio niente% Comando per scrivere a schermofprintf (’Soluzione non esistente nei reali .\n’);x1 = []; % restituisce nientex2 = [];return % esco dalla funzione
else% se possibile calcolo le due soluzionix1 = (-b+sqrt(Delta ))/(2* a);x2 = (-b-sqrt(Delta ))/(2* a);
end
50 / 61
M-files Functions
Functions
In questo esempio, le variabili a,b, c non vengono modificate in alcun modo:quello che viene fatto e un passaggio per valore, non per indirizzo. Mentreviene eseguita una function, essa si crea un workspace suo in cui lavorare, e unoworkspace temporaneo.
>> gg = 2;>> r = 56;>> tr = 9;
>>[ a,b] = roots_2deg (gg ,r,tr)a =
-0.1616b =
-27.8384
Nel mio workspace, le variabili hanno inomi gg, r e tr, mentre dentro alla miafunzione hanno i nomi a, b e c. Inoltre,gli output nel mio workspace principa-le vengono chiamati a e b mentre nelworkspace della funzione sono x1 e x2.Le variabili a,b,c,x1,x2 esistono sola-
mente per il tempo di esecuzione dellafunzione. I valori di x1 e x2 vengonosalvati nelle variabili a e b.
51 / 61
Istruzioni di controllo e cicli Istruzioni di controllo
Istruzione if then else
L’istruzione if then else ha la seguente sintassi:
if condition1istructions_1
elseistructions_2
end
Se condition_1 e soddisfatta, allora laserie di istruzioni instruction_1 vie-ne eseguita, altrimenti viene eseguita lalista di istruzioni instructions_2.
if condition1istructions_1
elseif condition2istructions_2
...elseif condition_n
istructions_notherwise
istructions_oend
Se condition_1 e soddisfatta, allora laserie di istruzioni instruction_1 vie-ne eseguita, se condition_2 e sod-disfatta, allora la serie di istruzioniinstruction_2 viene eseguita e cosıvia. Se nessuna delle precedenti esoddisfatta, allora vengono eseguite leistruzioni in instructions_o.
else ed otherwise non sono sempre necessarie, e possibile anche ometterle.
52 / 61
Istruzioni di controllo e cicli Istruzioni di controllo
Istruzione switch
A volte e piu comodo utilizzare l’istruzione switch se sono presenti molti casi dacontrollare:
switch varcase number_1
instruction_1case number_2
instructions_2
otherwiseinstructions_o
end
equivale a usare elseif.
53 / 61
Istruzioni di controllo e cicli Cicli
Ciclo for
Il cilco for esegue una serie di istruzioni, sempre le stesse. Ad esempio
v = 1:10;for i = 1:10
v(i) = v(i)-i^2;end
il ciclo scritto percorre tutto il vettore v e ad ogni elemento sostituiscel’elemento stesso diminuitio di i2.
v =0 -2 -6 -12 -20 -30 -42 -56 -72 -90
Ovviamente, e comodo da utilizzare all’interno di uno script, non da linea dicomando.
SINTASSI VETTORIALE
Per eseguire calcoli fra matrici e vettori, evitare il piu possibile i cicli for:MatLab e creato per eseguire velocemente operazioni fra matrici e vettori inmaniera automatica, utilizzando i cicli for si rischia di dover aspettare i risultatimolto piu tempo del dovuto.
54 / 61
Istruzioni di controllo e cicli Cicli
Ciclo while
Il ciclo while esegue una serie di istruzioni finche una condizione e soddisfatta.
while cond_1instructions
end
E necessario sempre assicurarsi che il ciclo while possa avere termine:
a = 1;while a < 5
b = a+1;end
Il ciclo soprascritto viene eseguito all’infinito.
55 / 61
Miscellanea Varie ed evenutali
Shell
>> format short>> format short e>> format short g>> format long>> format long e>> format long g>> format rat
Il comando format cambia il modo di vi-sualizzare un numero: il formato short
visualizza meno cifre, long molte di piu.Il formato rat permette la visalizzazionedei numeri razionali come frazioni.
>> pi>> Nan>> Inf>> realmin>> realmax
Matlab possiede alcune costanti, comepi (π), i (i ,l’unita immaginaria); Nan
significa not a number, e il risultatodi operazioni come 0
0o 8
8
; Inf e unoggetto che rappresenta sul calcolatore8.
56 / 61
Miscellanea Varie ed evenutali
Visualizzazione
>> disp(x)Serve a visualizzare sullo schermo ilvalore della variaibile fra parentesi.
>> fprintf (’Messaggio che viene stampato sulla shell .\n’);>> fprintf (’Il valore di a: %f’,a)
Il comando fprintf e utilizzato quando e necessario visualzzare messaggi sullashell.E anche possibile far apparire il valore delle variabile con il comando fprintf:e necessario specificare il tipo di dato da visualizzare utilizzando il % con unalettera che identifichi il tipo di dato; dopo il messaggio che deve apparire sulloschermo, dopo la virgola si mette il nome della variabile che deve apparire.
57 / 61
Miscellanea Varie ed evenutali
Cronometro e workspace
>> tic...>> toc
Il comando tic inizializza il cronometro,toc invece lo ferma.
>> whos
Genera nella shell un elenco delle variabi-li, con le dimensioni, il tipo, lo spazio dimemoria utilizzato e altre informazioniutili.
>> exit>> quit
Comandi per uscire da MatLab.
58 / 61
Miscellanea Varie ed evenutali
Matrice ed operazioni
>> A = fix (50* rand (3))A =
5 17 3724 29 1247 11 25
>> max (A)ans =
47 29 37>> min (A)ans =
5 11 12>> sum (A)ans =
76 57 74>> sum (A,2)ans =
596583
>> size(A)ans =
3 3>> numel(A)ans =
9>> inv (A)ans =
Le operazioni di massimo e di minimosulle matrici vengono fatte sulle colon-
ne. Anche l’operazione di somma se-gue lo stesso destino, se non si specificaaltrimenti. Consultare sempre l’help diMatLab per avere maggiori informazionisull’utilizzo delle funzioni.
59 / 61
Miscellanea Varie ed evenutali
Salvataggio e caricamento
>> save dati.mat>> load dati
Il comando save salva l’intero workspa-
ce nel file dati.mat. Per caricarlo in unsecondo momento, si utilizza il comandoload.
>> x = [1, 7, 9];>> y = 500;>> save dati.mat x
Utilizzando il comando save come mo-strato, si salva nel file dati.mat solo lavariabile x.
>> help elfun Visualizza l’elenco delle funzioni elemen-tari implementate.
60 / 61
Miscellanea Varie ed evenutali
Operatori logici
Gli operatori logici in MatLab sono:
& o &&: AND
| o ||: OR
~ : NOT
61 / 61