Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Matlab
Cos Matlab:
strumento (e corrispondente linguaggio) per elaborazioni di calcolo numerico NB: sta per MATrix LABoratory
centrato sulle matrici (ma include generiche funzionalit matematiche)
usato nei successivi corsi di calcolo numerico MATLAB uno strumento commerciale distribuito, su licenza NON gratuita, da The MathWorks Inc
Student edition disponibile quando si al Politecnico (http://www.asi.polimi.it/software/matlab.html)
-2-
-3-
-4-
-6-
Comandi in Matlab
Matlab accetta comandi che lutente scrive di seguito al prompt: >> es. >> a = 10; Assegna alla variabile a il valore 10 Esempio di alcuni comandi (analizzeremo quelli pi importanti) Il prompt accetta i comandi del sistema operativo (DOS, UNIX)
Esempio: in ambiente dos, dir mostra il contenuto della directory corrente
help richiama la guida in linea diary pu essere utilizzato per salvare la sessione di lavoro who, whos e workspace mostrano lelenco delle variabili definite save permette di salvare in un file le variabili definite. Load le ricarica clear cancella tutte le variabili
-7-
Esempi
Input 1234/6 a=1234/6 eps Output ans = 205.67 a = 205.67 eps = 2.2204e-16 Commento calcolo di un valore scalare assegnamento alla risultato di 1234/6 variabile a del
variabile predefinita: la pi piccola differenza rappresentabile tra due numeri divisione destra divisione per zero potenza real una funzione predefinita che restituisce la parte reale di un numero complesso 1 = vero, 0 = falso, == uguale, ~= diverso (codice ASCII di ~: 126)
-8-
1+1==2 1+1~=2
ans = 1 ans = 0
essere
Notazione con () per accedere a elementi di una matrice; abs valore assoluto; NB: vettore x esteso per includere nuovo elemento; elementi non assegnati sono nulli
b=a
b = 1 2 c = 2 5 y = -1 0 2
3 4 5 8
matrice trasposta (scambiate righe e colonne) somma di matrici, elemento per elemento (sottrazione con - simile) il ; blocca loutput, ma non impedisce la valutazione
-9-
c=a+b
y=0:pi/4:pi
operatore : con passo di 0.78540 incremento e valori non interi 2.35619 (pi pigreco) valori negativi del passo e degli estremi
v=10:-4:-3 sin(y)
-2
funzioni predefinite si applicano 0.70711 ai vettori 0.70711 produce la tabella di sin(x), 0x/2
x=[0:pi/100:pi/2]'; [x sin(x)]
ans = 0.00000 0.00000 0.03142 0.03141 ...... 1.53938 0.99951 1.57080 1.00000
- 10 -
- 11 -
-1000 -10
-8
-6
-4
-2
0 ascisse
10
Un esempio di cinematica
Due treni partono da due stazioni adiacenti, che distano 15km, viaggiando a velocit di 50m/s e 30m/s in direzione opposta Costruire un grafico che mostra il loro movimento, fino a quando il pi veloce raggiunge la destinazione
Il pi veloce impiega 15000/50=300s
DistanzaTreno1=50t; DistranzaTreno2=15000-30t; (per mostrare la provenienza dalla direzione opposta)
- 12 -
Soluzione
t=0:1:300; p1=50 * t; p2=15000 30 * t; plot(t,p1); hold on %adesso possibile inserire nuove curve sul grafico plot(t,p2) hold off
- 13 -
- 14 -
Istruzioni e ;
Le istruzioni possono essere seguite da ; ma non obbligatorio Il ; blocca la visualizzazione del valore delle variabili coinvolte nellistruzione
Maggiore velocit di esecuzione
- 15 -
Commenti
Il simbolo di commento pu essere messo in qualsiasi punto della linea. MATLAB ignorer tutto quello che viene scritto alla destra del simbolo %. Per esempio: >>% This is a comment. >>x = 2+3 % So is this. x= 5
- 16 -
Array e variabili
Lunit fondamentale di dati in MATLAB larray Una variabile in MATLAB una regione di memoria che contiene un array Ha un nome definito dallutente Per i nomi valgono regole simili a quelle del C C un linguaggio a tipizzazione forte Le variabili vanno dichiarate prima delluso MATLAB un linguaggio a tipizzazione debole Le variabili vengono create assegnando ad esse dei valori Il loro tipo determinato dal tipo dei valori assegnati
- 17 -
Tipo double
Una variabile di tipo double contiene uno scalare o un array di numeri espressi in 64 bit con doppia precisione Questi numeri possono essere
Reali, es var1 = -10.7; Immaginari, es var2 = 4i; var3 = 4j; Complessi, es var3 = 10.3 + 10i;
Es: x = [-1.3 3.1+5.3j 0] Le parti reali e immaginarie possono essere positive e negative nellintervallo di valori [10-308, 10308]
- 18 -
Tipo char
Una variabile di tipo char contiene uno scalare o un array di valori a 16 bit (8 bit in Octave), ciascuno dei quali rappresenta un carattere
Es: commento = questa e` una stringa;
(NB: stringhe racchiuse tra apici singoli) whos commento; Name Size Bytes Class Attributes commento 1x21 42 char
- 19 -
- 20 -
Assegnamento
variabile = espressione Esempi
contenuto di a a = [0 7+1]; b = [a(2) 5 a]; secondo elemento di a
Risultato
a = [0 8] b = [8 5 0 8]
0 5
Operatore di trasposizione
g = d;
1 2 3
Funzioni predefinite
Esempi
a = zeros(2); b = zeros(2,3);
0 0 0 0 0 0 0 0 0 0
c = [1 2; 3 4]; d = zeros(size(c));
0 0
0 0
- 24 -
primo, quarto settimo elemento 2:2:6 il vettore [2, 4, 6]: indica secondo, quarto, sesto elemento dal terzo al terzultimo elemento
- 25 -
Il modo con cui uno scalare viene assegnato a un array dipende dalla forma dellarray che viene specificata a sinistra dellassegnamento Esempio 2 4 4 3
m(1:2, 1:2) = 4
4 3 3 4 3 3 3 3 3
- 27 -
>> a=[1 2 3 4 5]; >> length(a) ans = 5 >> a(3) ans = 3 >> a(3)=[] a = 1 2 4 >> a(3) ans = 4 >> length(a) ans = 4
Variabili predefinite
Matlab definisce un insieme di variabili predefinite (es, pi) Queste variabili spesso rappresentano importanti costanti della matematica (pi pigreco, i e j sono sqrt(-1) )
Attenzione! Il valore di queste variabili pu essere modificato, per esempio
circ1=2*pi*10; pi = 3; circ2=2*pi*10;
- 31 -
Array operation: eseguita sugli elementi corrispondenti degli array coinvolti (devono avere lo stesso numero di righe e colonne); si indica aggiungendo un punto prima delloperatore aritmetico a= 1 3 2 4 b= 2 5 3 7 a .* b= 2 6 15 28
Matrix operation: segue le regole dellalgebra lineare (esempio: prodotto righe per colonne) 1 a= 3 2 4 2 b= 5 3 7 12 17 a*b = 26 37
- 33 -
Matrix multiplication Array right division Array left division Matrix right division Matrix left division Array exponentiation
di conseguenza, x = A-1B=inversa(A)*b=A\B
- 35 -
Altre funzioni
Funzione ceil(x) floor(x) fix(x) max(x) min(x) mean(x) mod(m,n) round(x) rand(N)
Scopo approssima x allintero immediatamente maggiore approssima x allintero immediatamente minore approssima x allintero pi vicino verso lo zero se x un vettore, ritorna il valore massimo in x e, opzionalmente, la collocazione di questo valore in x; se x matrice, ritorna il vettore dei massimi delle sue colonne se x un vettore, ritorna il valore minimo nel vettore x e, opzionalmente, la collocazione di questo valore nel vettore; se x matrice, ritorna il vettore dei minimi delle sue colonne se x un vettore ritorna uno scalare uguale alla media dei valori di x; se x una matrice, ritorna il vettore contentente le medie dei vettori colonna di x; mod(m,n) m - q.*n dove q = floor(m ./ n) se n ~= 0 approssima x allintero pi vicino genera una matrice di NxN numeri casuali
- 36 -
(con un solo risultato) d il valore del minimo con due risultati d anche la posizione del minimo
>> a = [24 28 21; 32 25 27; 30 33 31; 22 29 26] a = 24 28 21 32 25 27 30 33 31 22 29 26 per una matrice d vettore dei minimi nelle colonne >> min(a) ans = 22 25 21 >> [x y]=min(a) x = 22 25 y = 4 2 >> per una matrice, con due risultati d due vettori dei valori minimi nelle colonne e della loro posizione (riga)
21 1
- 37 -
Input/output
- 39 -
- 40 -
- 42 -
Nota: si pu usare qualsiasi estensione per questi file, buona norma distinguerli dai file .mat
- 44 -
- 45 -
- 46 -
Script in MATLAB
Script (m-file)
Uno script un file di testo contenente una sequenza di comandi MATLAB
non deve contenere caratteri di formattazione (solo testo puro) viene salvato con estensione .m
I comandi allinterno di uno script sono eseguiti sequenzialmente, come se fossero scritti nella finestra dei comandi
Per eseguire il file si digita il suo nome (senza .m) I risultati appaiono nella finestra dei comandi (se non usiamo il ; )
- 48 -
Vantaggi/Svantaggi
Uno script pu
essere ri-eseguito essere facilmente modificato essere spedito a qualcuno
Uno script opera sulle variabili del workspace, che pu essere arricchito introducendone di nuove durante lesecuzione dello script stesso
- 49 -
- 50 -
Il nome del file deve cominciare con una lettera e pu contenere cifre e il carattere underscore, fino a 31 caratteri Non dare lo stesso nome al file di script e a una variabile Non chiamare uno script con lo stesso nome di un comando o funzione MATLAB. Per verificare se esiste gi qualcosa che ha un certo nome si pu utilizzare la funzione exist.
- 51 -
2. Sezione di Input: inserimento dei dati in input e/o uso di funzioni di input 3. Sezione di calcolo 4. Sezione di output: uso si funzioni per visualizzare i risultati del programma
- 52 -
- 53 -
Sezione di calcolo
Calcoli matematici Assegnamenti Strutture di controllo
Condizioni Cicli
- 54 -
Istruzioni della programmazione strutturata: if e while Hanno sintassi simile a quella di C, semantica uguale Vediamo due script che ne fanno uso
%script nel file % quadWhile.m quad=[]; k = 1; while (k <= x) quad (k) = k*k; k=k+1; end; quad %script nel file divisible,m if (mod (x, 2) == 0) fprintf ('even\n'); elseif (mod (x, 3) == 0) fprintf ('divisible by 3\n'); elseif (mod(x,5)==0) fprintf ('divisible by 5\n'); else fprintf ('prime or divisible by x>5\n'); end