Introduzione a Matlab
Upcoming SlideShare
Loading in...5
×
 

Introduzione a Matlab

on

  • 574 views

 

Statistics

Views

Total Views
574
Views on SlideShare
574
Embed Views
0

Actions

Likes
0
Downloads
2
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Introduzione a Matlab Introduzione a Matlab Presentation Transcript

  • Matlab (MATrix LABoratory) è un programma interattivo di calcolo scientifico e ingegneristico. È un linguaggio di programmazione ad alto livello per la soluzione numerica di problemi ed il tracciamento di grafici, ed è basato sull’utilizzo di dati di tipo matriciale (scalari, vettori, matrici a due o più dimensioni). Esso interpreta istruzioni interne (built-in) ed include diversi toolbox, ossia collezioni di file speciali detti M-file o file con estensone .m, che estendono le funzionalità del programma di base o nucleo. la finestra principale di Matlab (MATLAB Command Window) è caratterizzata da un “prompt” (») che indica che il sistema è in attesa di comandi che possa interpretare. I comandi previsti da Matlab sono accompagnati da una guida esaustiva (help nome_del_comando) e assumono la seguente sintassi: [x, y, …, z, …] = nome_del_comando (a, b, … , c, …) ©MS Dott. Marco Suma ComputerScienceEngineer smumrc@gmail.com 1
  • L’elemento fondamentale di MATLAB è la matrice: uno scalare è infatti una matrice 1x1, mentre un vettore una matrice 1xn (vettore riga) o nx1 (vettore colonna); banalmente una matrice sarà dimensionalmente di tipo nxm, con n>1 e m>1 generici. Le matrici possono essere inserite in quattro modi diversi: 1. da tastiera 2. caricate da file esterni 3. generate da funzioni interne 4. generate da M-file creati dall’utente Vediamo i modi 1) e 2), giacchè per 3) e 4) è sufficiente richiamare la funzione per ottenere come risultato la matrice stessa. ©MS Dott. Marco Suma ComputerScienceEngineer smumrc@gmail.com 2
  • Una variabile che abbia un valore scalare viene definita utilizzando l’operatore ‘=‘. >> M = 2; L’utilizzo del ; alla fine della linea di comando è opzionale: se inserito indica a MATLAB di non proporre a video il risultato dell’operazione (proviamo a togliere il ; e vediamo che succede). Allo stesso modo possiamo inserire un vettore riga utilizzando come delimitatori ‘[‘ e ‘]’. >> M = [1 2 3 4] ; oppure >> M = [1, 2, 3, 4]; nell’inserzione delle matrici è opzionale l’uso dell’operatore di concatenamento ‘,’ . Per inserire più righe (e quindi definire una matrice) dobbiamo utilizzare il ‘;’ (in questo caso non ha più il significato che abbiamo visto all’inizio). >> M = [1 2 3 4;5 6 7 8] ©MS Dott. Marco Suma ComputerScienceEngineer smumrc@gmail.com 3
  • In MATLAB è possibile memorizzare e richiamare dati, utilizzando i comandi load e save. La sintassi del comando save è la seguente: >> save nomeFile nomevar1 nomevar2 nomevar3 … Il comando save salva le variabile nomevar1, nomevar2, nomevar3, … in un file nomeFile.MAT in formato proprietario. E’ possibile richiamarle in memoria utilizzando il comando load. >> load nomeFile in questo caso vengono ripristinate in memoria le variabili nomevar1, nomevar2, nomevar3, … E’ possibile anche salvare i dati in formato ASCII usando l’opzione –ascii. >> save nomeFile.Estensione nomevar1 nomevar2 nomevar3 –ascii ©MS Dott. Marco Suma ComputerScienceEngineer smumrc@gmail.com 4
  • L’accesso ad elementi di una matrice si ottiene tramite indici; per prelevare l’elemento sulla riga i e sulla colonna j della matrice M e memorizzarlo nella variabile m si usa il comando >> m = M(i,j) caratteristica di MATLAB è di non richiedere il dimensionamento delle matrici a priori e quindi possono essere dinamicamente ridimensionate. Per esempio: >> M = [1 2 3 4] Possiamo accrescerla di un elemento con il comando >> M(5) = 5 Che fornisce >> M = [1 2 3 4 5]; per rappresentare un intervallo possiamo usare l’operatore :. La sintassi è la seguente: >> x = xmin:step:xmax per step unitari è possibile usare la seguente sintassi : >> x = xmin:xmax ©MS Dott. Marco Suma ComputerScienceEngineer smumrc@gmail.com 5
  • • • • • • • • • • • eye = matrice identità zeros = matrice nulla ones = matrice di 1 diag = matrice diagonale compan = matrice compagna tril = parte triangolare bassa triu = parte triangolare alta rand = matrice casuale (distribuzione uniforme) randn = matrice casuale (distribuzione normale) hankel = matrice di hankel • • • • • • • • hilb = matrice di Hilbert invhilb = matrice di Hilbert inversa hadamard = matrice di Hadamard magic = “quadrato magico” toeplitz = matrice di Toeplitz vander = matrice di Vandermonde wilkinson = matrice di Wilkinson pascal = matrice di Pascal Ricordiamoci sempre della possibilità di utilizzare il comando help per Poterci ricordare la sintassi della funzione da chiamare ©MS Dott. Marco Suma ComputerScienceEngineer smumrc@gmail.com 6
  • In Matlab sono definiti gli operatori aritmetici classici; da notare che ogni singolo operatore è definito per operare su matrici: «*» Prodotto | «-» sottrazione | «+» somma | «/» divisione | «^» elevazione a potenza | Sqrt() radice quadrata | «» divisione a destra (in altre parole 32 fornisce 2/3) [Per matrici X =AB esegue X = A-1B. ] Per tutte le operazioni viene definita anche la corrispondente operazione elemento per elemento, ottenuta facendo precedere ad ogni operatore l’operatore punto . • .* prodotto elemento per elemento (cij = aij × bij) • .- sottrazione • .+ somma • ./ divisione • .^ elevamento a potenza ©MS Dott. Marco Suma ComputerScienceEngineer smumrc@gmail.com 7
  • «‘» trasposizione: In realtà l’operatore «‘» fornisce la coniugata trasposta per cui ad esempio [1+j,1-2*j]’ fornisce [1-j; 1+2*j]. Per evitare questo si usa l’operatore .’ Nel file «FUNZIONI_UTILI_IN_MATLAB.pdf» ci sono molte altre funzioni di indiscutibile importanza già messe a disposizione da Matlab. …Facciamo qualche esempio e facciamo pratica con l’interfaccia grafica… ©MS Dott. Marco Suma ComputerScienceEngineer smumrc@gmail.com 8
  • Nome Sintassi Funzione determinazione dei coefficienti delle potenze decrescenti nel poly(r) polinomio le cui radici sono date dal vettore r. Poly determinazione degli n+1 coefficienti del polinomio poly(A) caratteristico della matrice A di ordine n. determinazione delle radici del polinomio nella variabile s i cui Roots roots(p) coefficienti, in ordine decrescente delle potenze di s, sono contenuti nel vettore p. prodotto di convoluzione tra i due polinomi associati ai vettori Conv conv(p1, p2) p1 e p2, non necessariamente di uguale dimensione Deconv deconv(p1, p2) divisione di convoluzione tra i polinomi associati a p1 e p2 ©MS Dott. Marco Suma ComputerScienceEngineer smumrc@gmail.com 9
  • Il risultato dell’espressione/funzione viene automaticamente attribuito da Matlab alla variabile ausiliaria ans (da “answer”, risposta) se non è assegnato ad alcuna variabile. I nomi delle variabili (e delle funzioni) devono iniziare con una lettera e proseguono con un numero arbitrario di lettere e cifre (massimo 19 caratteri). Di default, Matlab è “case sensitive”, quindi le variabili scritte in maiuscolo e quelle scritte in minuscolo non sono uguali. Il comando casesen rende Matlab insensibile a questa differenza. Matlab ha alcune funzioni predefinite che restituiscono valori di uso comune, quali pi (pari al valore numerico pi greco), Inf (pari al risultato di 1/0), NaN (“Not a number”, risultato di operazioni non definite come 0/0), l’unità immaginaria i o j (pari a radq(- 1)). Le variabili predefinite possono essere riscritte anche se non è consigliabile, quindi i può essere utilizzato come indice in un ciclo di programmazione. Con i comandi who e whos si ricavano informazioni sulle variabili che il sistema conserva in memoria nel suo spazio di lavoro (o “workspace”). Il comando clear serve ad eliminare una o tutte le variabili in memoria (tranne quelle predefinite). ©MS Dott. Marco Suma ComputerScienceEngineer smumrc@gmail.com 10
  • I grafici giocano un ruolo importante nell’analisi e sintesi dei sistemi di controllo. Ogni comando di grafica apre una finestra grafica che mostra quanto ottenuto. Il principale è plot(x,y), dove x e y sono, in genere, vettori. Digitando » help plot Accediamo ad una guida esauriente sul funzionamento di questo importante comando. Vediamo di seguito due esempi della procedura grafica di plot. » x=[0:0.1:1]' » y=x.*sin(x); % grafico a sinistra nella figura inferiore » plot(x,y), grid » xlabel('x'), ylabel('y'), title('Grafico di xsin(x) rispetto a x') E » x=[0:0.1:1]'; » y1=x.*sin(x);y2=sin(x); % grafico a destra nella figura superiore » plot(x,y1,'--',x,y2,'-.') » xlabel('x'),ylabel('y1 e y2'), grid » text(0.1,0.85,'y1=xsin(x) ---'), text(0.1,0.8,'y2=sin(x) .-.-') ©MS Dott. Marco Suma ComputerScienceEngineer smumrc@gmail.com 11
  • ©MS Dott. Marco Suma ComputerScienceEngineer smumrc@gmail.com 12
  • I modi di interagire con Matlab fino a questo punto illustrati sfruttano tutti il prompt, ossia la cosiddetta finestra di comando. Se i comandi devono però essere ripetuti più volte o a distanza di tempo, è utile realizzare degli script, ossia sequenze di istruzioni e operazioni più o meno lunghe salvate in un file con estensione .m. Gli script sono file di testo in formato ASCII creati e modificati con un editor di testo, che può anche essere quello fornito con lo stesso Matlab. I nomi attribuiti a questi file di comando devono essere scritti in minuscolo. Quando lo script è invocato, senza estensione, dalla linea di comando di Matlab, esso viene eseguito e opera sullo spazio di lavoro, quindi sulle variabili in esso già eventualmente presenti. Tutte le variabili utilizzate dallo script restano disponibili al termine dell’esecuzione. I commenti negli scripts sono preceduti dal simbolo %. ©MS Dott. Marco Suma ComputerScienceEngineer smumrc@gmail.com 13
  • Un altro tipo di file è quello di funzione (function). Serve a racchiudere convenientemente in un file una serie di calcoli di utilizzo frequente, in modo da poter eseguire tale nuova funzione senza preoccuparsi di come vengano eseguite le singole operazioni. A differenza di uno script, la funzione ha un nome che segue la parola function all’inizio del file: tale nome deve coincidere con quello attribuito al file. Pertanto, la sintassi della riga iniziale di comando nel file nome.m è: function[x,y,...,z] = nome_funzione(a,b,...,z) Le istruzioni contenute nel file operano su variabili locali e non su quelle dello spazio di lavoro, per cui le variabili locali devono essere passate alla funzione come argomenti di ingresso. Le variabili che devono essere accessibili al termine dell’esecuzione vanno specificate come argomenti di uscita. ©MS Dott. Marco Suma ComputerScienceEngineer smumrc@gmail.com 14
  • MATLAB ha cinque strutture di controllo di flusso: – if statements – switch statements (non lo vediamo) – for loops – while loops – break statements (non lo vediamo) Analizzamole singolarmente in modo dettagliato. ©MS Dott. Marco Suma ComputerScienceEngineer smumrc@gmail.com 15
  • if condizione istruzioni elseif condizione istruzioni else condizione istruzioni end switch variabile case valore1 istruzioni case valore2 istruzioni otherwise istruzioni End for variabile=start:step:end istruzioni end while condizione istruzioni end ©MS Dott. Marco Suma ComputerScienceEngineer smumrc@gmail.com 16
  • La struttura if valuta un’espressione logica (condizione) ed esegue un gruppo di asserzioni (istruzioni) quando l’espressione è vera. L’else if opzionale e altre keywords provvedono per l’esecuzione di gruppi alternati di asserzioni (istruzioni). Una keyword end termina l’ultimo gruppo di asserzioni. I gruppi di asserzioni sono delineati da quattro keywords e non sono previste parentesi. if condizione istruzioni elseif condizione istruzioni else condizione istruzioni end ©MS Dott. Marco Suma ComputerScienceEngineer smumrc@gmail.com 17
  • Quando si vuole controllare l’uguaglianza tra due variabili, si può usare: if A == B, .... Questo è legale in MATLAB, e fa quello che ci si aspetta quando A e B sono scalari. Ma quando A e B sono matrici, A == B non esamina se loro sono uguali, esamina solo dove loro sono uguali; il risultato è un altra matrice di 0 e di 1 che espone l’uguaglianza elemento per elemento. Infatti, se A e B non sono della stessa taglia, allora A == B è un errore. Il modo corretto per controllare l’uguaglianza tra due variabili è quello di usare la funzione isequal: if isequal(A,B), ... Molte funzioni sono utili per ridurre i risultati di paragoni tra matrici e condizioni scalari attraverso l’uso dell’if, includendo le seguenti: isequal isempty all any <,>,>=,<=,… ©MS Dott. Marco Suma ComputerScienceEngineer smumrc@gmail.com 18
  • Il loop for ripete un gruppo di asserzioni un numero fisso di volte . Un end statement termina le Asserzioni (istruzioni). >>for n = 3:32 >> r(n) = rank(rand(4)); >> end >> r Il punto e virgola che termina l’asserzione sopprime la stampa ripetuta, e il termine r dopo il loop espone il risultato finale. Oppure: >>for i = 1:m >> for j = 1:n >> H(i,j) = 1/(i+j); >> end >> end ©MS Dott. Marco Suma ComputerScienceEngineer smumrc@gmail.com 19
  • Il ciclo while ripete un gruppo di asserzioni un numero indefinito di volte attraverso il controllo di una condizione logica. Un end delinea le asserzioni. Di seguito è riportato un programma completo, illustrando while, if, else, e end, il quale programma utilizza il metodo della bisezione per trovare uno zero di un polinomio. >> a = 0; fa = -Inf; >> b = 3; fb = Inf; >> while b-a > eps*b >> x = (a+b)/2; >> fx = x^3-2*x-5; >> if sign(fx) == sign(fa) >> a = x; fa = fx; >> else >> b = x; fb = fx; >> end >> end >>x Il risultato è la radice del polinomio 𝑥 3 + 2𝑥 + 5, vale a dire: x = 2.09455148154233 ©MS Dott. Marco Suma ComputerScienceEngineer smumrc@gmail.com 20