introduzione a matlab® bozza...
TRANSCRIPT
21
Matlab sta per Matrix Laboratory ed è un ambiente interattivo e un linguaggio di calcolo tecnico di alto livello per lo sviluppo di algoritmi, la rappresentazione grafica dei dati, l'analisi dei dati e il calcolo numerico.
Matlab include vari moduli aggiuntivi, chiamati Toolbox, per applicazioni specifiche. (Signal Processing Toolbox, Image Processing Toolbox, etc…)
Il linguaggio MATLAB supporta operazioni su vettori e matrici.
Con il linguaggio MATLAB, è possibile programmare e sviluppare algoritmi più rapidamente rispetto ai linguaggi tradizionali, in quanto non è necessario eseguire attività di gestione codice a basso livello come la dichiarazione di variabili, la specificazione dei tipi di dati e l'assegnazione della memoria. In molti casi MATLAB elimina la necessità di utilizzare loop.
Introduzione a MATLAB® BOZZA BOZZA BOZZA
di Fabio Bozzoli
22
Funzioni principali
Linguaggio di alto livello per il calcolo tecnico Ambiente di sviluppo per la gestione di codice, file e dati Funzioni matematiche per l'algebra lineare, la statistica, l'analisi di Fourier, il filtraggio, l'ottimizzazione e l'integrazione numerica Funzioni grafiche in 2D e 3D per la rappresentazione grafica deidati Strumenti per la creazione di interfacce grafiche personalizzateFunzioni per integrare gli algoritmi basati su MATLAB con linguaggi e applicazioni esterni come C/C++, Fortran, etc…
IntroduzioneBOZZA BOZZA BOZZA
di Fabio Bozzoli
23
Analisi dei datiMATLAB supporta l'intero processo di analisi dei dati, dall'acquisizione da database e periferiche esterni fino alla pre-elaborazione, visualizzazione, analisi numerica e produzione dei risultati in un formato adatto a presentazioni. (Interpolazione e decimazione , estrazione di sezioni di dati, scalatura e calcolo della media, correlazione, analisi di Fourier e filtraggio, funzioni statistiche di base e curve fitting)
Accesso ai datiMATLAB è un'efficace piattaforma per accedere ai dati da file, altre applicazioni, database e periferiche esterne. È possibile leggere i dati dai formati di file più diffusi, ad esempio Microsoft Excel, testi in formato ASCII o file binari, file video, audio e immagini. È’ possibile acquisire dati dalle periferiche hardware, ad esempio dalla scheda audio o dalla porta seriale di un computer. (Data Acquisition Toolbox, Instrument Control Toolbox)
IntroduzioneBOZZA BOZZA BOZZA
di Fabio Bozzoli
24
Introduzione
Visualizzazione dei dati• In MATLAB sono disponibili
tutte le funzioni grafiche necessarie per visualizzare i dati tecnico-scientifici. Sono inclusi: funzioni grafiche in 2-D e 3-D, funzioni per la rappresentazione volumetrica 3-D, strumenti per la creazione interattiva dei diagrammi e la possibilità di esportare i risultati in tutti i formati grafici più diffusi.
Creazione ed editinginterattivo dei grafici
BOZZA BOZZA BOZZA
di Fabio Bozzoli
25
IntroduzioneCalcolo numerico
MATLAB comprende le funzioni matematiche, statistiche e tecniche per supportare tutte le operazioni più comuni di naturascientifica e tecnica. Tali funzioni costituiscono la base del linguaggio MATLAB. Le funzioni matematiche principali utilizzanole librerie di algebra lineare LAPACK e BLAS e la libreria dellaTrasformata Discreta di Fourier FFT.
Manipolazione delle matrici e algebra lineare Polinomi e interpolazioni Analisi di Fourier e filtraggio Analisi dei dati e funzioni statistiche Ottimizzazione e integrazione numerica Equazioni differenziali ordinarie (ODE) Equazioni differenziali parziali (PDE) Operazioni su matrici
BOZZA BOZZA BOZZA
di Fabio Bozzoli
26
Introduzione
MATLAB offre agli utenti una serie di funzioni per documentare econdividere il proprio lavoro. Il codice MATLAB può essere integrato con altri linguaggi e altre applicazioni, consentendo così di utilizzare le applicazioni e gli algoritmi MATLAB come programmi standalone o come moduli software. MATLAB presenta funzioni per integrare con le proprie applicazioni il codice C e C++, il codice FortranRilascio di applicazioniÈ possibile creare un algoritmo in MATLAB e distribuirlo ad altri utenti MATLAB sotto forma di codice M. Con il MATLAB Compiler (disponibile separatamente), l'algoritmo creato dall'utente può essere rilasciato come applicazione standalone oppure come modulo software da inserire nel progetto destinato agli utenti che non dispongono di MATLAB.
BOZZA BOZZA BOZZA
di Fabio Bozzoli
27
Avviare una sessione di lavoroAvviando Matlab si apre una sessione di lavoro e il prompt >> indica che il programma è pronto a ricevere istruzioni.
Es. Digitando 7/10 e INVIO si ottiene» 7/10
ans =0.7000
Matlab assegna la risposta ad una variabile temporanea (ans).E’ possibile memorizzare il risultato anche in un’altra variabileEs. r=7/10
r =0.7000
Non e’ necessario né dimensionare né dichiarare il tipo di variabileIl segno = è l’operatore di assegnazione o sostituzione, da non confondere con l’operatore di uguaglianza (==)I nomi delle variabili devono iniziare con una lettera e non possono essere più lunghi di 31 caratteri. Possono contenere numeri e il carattere “underscore”. Matlab è case sensitive.
BOZZA BOZZA BOZZA
di Fabio Bozzoli
28
Matlab conserva l’ultimo valore di una variabile finchè non chiudete la sessione di lavoro o non cancellate espressamente il valore della variabile.Alcuni comandi per gestire una sessione di lavoro:
who elenca le variabili che si trovano in memoria.whos elenca le variabili, le loro dimensioni e indica se possiedono parti immaginarie non nulle.pwd visualizza il percorso della directory corrente.dir visualizza il contenuto della directory corrente.cd consente di cambiare directory.clear elimina tutte le variabili dalla memoria.Il punto e vigola al termine dell’istruzione consente di non visualizzare il risultato dell’operazione.
Avviare una sessione di lavoroBOZZA BOZZA BOZZA
di Fabio Bozzoli
29
Array e variabiliMATLAB utilizza la rappresentazione in virgola mobile in singola (32 bits) o doppia precisione (64 bits), in accordo a lo standard IEEE 754 . Il default è la doppia precisione, ma è possibile convertire un double in singola precisione.Uno dei punti di forza di Matlab è la capacità di raccogliere molti numeriin strutture chiamate array (o matrici) come se fossero una solavariabile. Un array numerico è una raccolta ordinata di numeri. Vettore: array monodimensionaleMatrice: array a due o più dimensioni. Per inseririe un vettore riga:r=[2,4,10]
Per inseririe un vettore colonna:s=[2;4;6]
BOZZA BOZZA BOZZA
di Fabio Bozzoli
30
Array e variabiliPer inserire una matrice 3x3 digitate:Es. A=[1 2 3;4 5 6;7 8 9]A =1 2 34 5 67 8 9Per riferirsi agli elementi di un array si usano le parentesi rotonde e gliindici di riga e di colonna separati da virgole.A(1,2) è l’elemento a1,2
Per riferirsi ad intere righe o colonne si usano i due punti.A(:,2) indentifica tutti gli elementi nella 2° colonna di A
Per unire vettori a matriciA=[1,2,3;4,5,6;7,8,9];V=[10,11,12];A=[A;v];
Operazioni importanti: trasposta, rotazione, ribaltamento
BOZZA BOZZA BOZZA
di Fabio Bozzoli
31
EsercizioPartendo dalle matrici .
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡=
987654321
A[ ]121110=B
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡=
151413
C [ ]000=D
BOZZA BOZZA BOZZA
di Fabio Bozzoli
32
EsercizioOttenete le matrici .
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡=
151296314118521310741
1R ⎥⎦
⎤⎢⎣
⎡=
121198
2R
⎥⎦
⎤⎢⎣
⎡=
8754
3R⎥⎦
⎤⎢⎣
⎡=
5487
4R
BOZZA BOZZA BOZZA
di Fabio Bozzoli
33
File .m
In Matlab è possibile operare in due modi differenti:In modalità interattivaEseguire un programma di matlab registrato in un file di tipo m o m-file.
Esistono due categorie di M-file: file script e file di funzione.Con il comando edit si apre l’editor di Matlab.
BOZZA BOZZA BOZZA
di Fabio Bozzoli
34
Stringhe Un testo in Matlab viene interpretato come un vettore di caratteri. Le stringhe di caratteri vanno racchiuse tra apici
A=‘stringa di testo’Le stringhe di testo possono essere visualizzate con il comando dispIn un m-file l’introduzione interattiva di dati può ottenersi con la funzione
inputN=input(‘Numero di discretizzazioni ….’)
nome=input(‘ Come ti chiami?’,’s’)
Altre funzioni per la gestione delle stringhe di testo:Int2str, str2num, strncmp…..
BOZZA BOZZA BOZZA
di Fabio Bozzoli
35
Altri tipi di datiCelle (Cell array)Strutture
CelleLe celle sono array che possono contenere elementi di tipo diverso tra
loro. Possono essere create direttamente per assegnamento o utilizzando il comando cell. L’indicizzazione ad una cella avviene tramite le parentesi graffe.
Es. A=rand(2,2) c={A, det(A), inv(A)}
L’uso principale previsto è quello relativo alla gestione delle stringhe.
BOZZA BOZZA BOZZA
di Fabio Bozzoli
36
StruttureSono arrays multidimensionali a cui si accede tramite la definizioni di
campi.Es. studente.nome=‘Marco’studente.cognome=‘Bianchi’studente.ccl=‘Meccanica’studente.anno=‘quinto’Un intero elemento può essere aggiunto con studente(2)=struct(‘nome’,’Paolo’,’cognome’,’Verdi’,’ccl’,’Elettronica’,’anno’,
’quarto’)……………
Altri tipi di datiBOZZA BOZZA BOZZA
di Fabio Bozzoli
37
Operazioni con le matriciGli elementi sono separati da spazi o virgole, le righe dal punto e virgola entro parentesi quadre.
Matlab consente di effettuare operazioni su matrici in modo moltosemplice.
Es. B= A’ calcola la trasposta della matrice A e memorizza il risultato nella matrice B.
» B=A'B =1 4 72 5 83 6 9
BOZZA BOZZA BOZZA
di Fabio Bozzoli
38
Operatori matematici
Osservate il risultato delle seguenti operazioni:A+2, A-2, A*2, A/2C=A+B, D=A*B, E=A/B, F=A.*B, G=A./B, H=A.^2
Operazioni aritmetiche scalari^ Elevazione a potenza* Moltiplicazione/ Divisione a destra\ Divisione a sinistra+ Addizione- Sottrazione
OrdineOrdine di di precedenzaprecedenza standard standard delladella programmazioneprogrammazione
BOZZA BOZZA BOZZA
di Fabio Bozzoli
39
Operazioni con le matrici (elemento per elemento)+ Somma array scalare- Sottrazione array scalare+ Somma di matrici- Sottrazione di matrici.* Moltiplicazione di matrici elemento per elemento./ Divisione destra di matrici elemento per elemento.\ Divisione sinistra di matrici elemento per elemento.^ Elevamento a potenza elemento per elemento* Moltiplicazione di matrici riga per colonna/ Divisione destra\ Divisione sinistra o inversa
Operatori matematiciBOZZA BOZZA BOZZA
di Fabio Bozzoli
40
Divisione matricialeSe A è una matrice quadrata invertibile e B è un vettore
X=A\B è la soluzione di AX=BX=B/A è la soluzione di XA=B
Quindi B/A=(A’\B’)’Se la matrice è mxn vi sono 2 casim>n sistema sovradeterminato (soluzione ai minimi quadrati)m<n sistema sottodeterminato (soluzione fondamentale con al più m componenti non nulle)
BOZZA BOZZA BOZZA
di Fabio Bozzoli
41
Divisione matriciale
[ ] [ ]1935326
21 −=⎥⎦
⎤⎢⎣
⎡xx
Metodo matriciale2x1+9x2=53x1-4x2=7Ax=bx=A\b (DIVISIONE SINISTRA)
Se il sistema è scritto nella forma Xc=Dx=D/c (DIVISIONE DESTRA)
⎥⎦
⎤⎢⎣
⎡=⎥
⎦
⎤⎢⎣
⎡⎥⎦
⎤⎢⎣
⎡− 7
543
92
2
1
xx
BOZZA BOZZA BOZZA
di Fabio Bozzoli
42
Operatori relazionali= Assegnazione== Uguaglianza< > <= >= Minore, maggiore minore o uguale, maggiore o uguale& AND logico| OR logico∼ NOT logicoXor OR esclusivo
BOZZA BOZZA BOZZA
di Fabio Bozzoli
43
Istruzioni condizionali e cicli
if else, sintassi: if, condizione sulle variabili, istruzioni, else o elseif, condizione sulle variabili, istruzioni,... end
Es. x=10;if x>=0y=sqrt(x)end
While, sintassi: while, condizione sulle variabili, istruzioni end.A=zeros(4,4);k=1;while k<=4
A(k,k)=1,k=k+1;
endFor, sintassi: for, variabile=espressione, istruzioni, end.
A=zeros(4,4);for k=1:4
A(k,k)=1,end
BOZZA BOZZA BOZZA
di Fabio Bozzoli
44
Switch case, sintassi: switch(condizione) case ‘valore’istruzione otherwise endswitch (value)
case {1,3,5,7,9}disp(‘Il valore è dispari')case {2,4,6,8,10}disp(‘Il valore è pari')otherwise
disp(‘Il valore è al di fuoridell‘intervallo.)
end
Istruzioni condizionali e cicliBOZZA BOZZA BOZZA
di Fabio Bozzoli
45
Esercizio
Data l’equazione di secondo grado
ax^2+bx+c=0
Utilizzando la struttura if elseif end creare un programma al fine di individuare, noti i coefficienti a,b e c, le caratteristiche dellesoluzioni x1 e x2. Visualizzare su schermo se le soluzionidell’equazione saranno reali, reali coincidenti o complesse. Creare un programma analogo utilizzando la struttura switch case end.Riscrivere il programma utilizzando la struttura while end
BOZZA BOZZA BOZZA
di Fabio Bozzoli
46
Soluzione: if% Programma per la risoluzione di un equazione di II grado complete del tipo ax^2+bx+c=0delta=(b^2-4*a*c);d=sqrt(delta);x1=(-b+d)/(2*a);x2=(-b-d)/(2*a);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%IF%%%%%%%%%%%%%%%%if delta<0
disp('le soluzioni sono complesse coniugate')disp(['x1=',num2str(x1)]);disp(['x2=',num2str(x2)]);
elseif delta==0disp('le soluzioni reali coincidenti')
disp(['x1=',num2str(x1)]);disp(['x2=',num2str(x2)]);
elsedisp('le soluzioni reali distinte')
disp(['x1=',num2str(x1)]);disp(['x2=',num2str(x2)]);
end
BOZZA BOZZA BOZZA
di Fabio Bozzoli
47
Soluzione: Switch%%%%%%%%%%%%%%SWITCH%%%%%%%%%%%%%%%%%%%%%%switch sign(delta)
case{-1}disp('le soluzioni sono complesse coniugate')disp(['x1=',num2str(x1)]);disp(['x2=',num2str(x2)]);case {0}disp('le soluzioni reali coincidenti')disp(['x1=',num2str(x1)]);disp(['x2=',num2str(x2)]);case{1}disp('le soluzioni reali distinte')disp(['x1=',num2str(x1)]);disp(['x2=',num2str(x2)]);
end
BOZZA BOZZA BOZZA
di Fabio Bozzoli
48
Soluzione: While%%%%%%%%%%%%%%%%%%%WHILE%%%%%%%%% while delta<0disp('le soluzioni sono complesse coniugate')
disp(['x1=',num2str(x1)]);disp(['x2=',num2str(x2)]);break
endwhile delta==0disp('le soluzioni reali coincidenti')
disp(['x1=',num2str(x1)]);disp(['x2=',num2str(x2)]);break
endwhile delta>0disp('le soluzioni reali distinte')
disp(['x1=',num2str(x1)]);disp(['x2=',num2str(x2)]);break
end
BOZZA BOZZA BOZZA
di Fabio Bozzoli
49
Esercizio
Creare un programma che, dopo aver “pensato” a un numero compreso tra 0 e 100, chieda all’utente di indovinarlo fino a quando non ci riesce. Il programmadarà un aiuto dicendo ogni volta se il numerointrodotto è maggiore o minore di quello daindovinare.Utilizzare la struttura while
Aiuto: utilizzare rand(1) e round(X) e if dentro awhile
BOZZA BOZZA BOZZA
di Fabio Bozzoli
50
Soluzionex= rand(1)*100;x= round(x);y=input('introduci un numero');
while not(x==y) if x>ydisp('più alto')
elsedisp('più basso')end
y=input('introduci un numero');end
disp('hai indovinato')
BOZZA BOZZA BOZZA
di Fabio Bozzoli