Sei sulla pagina 1di 106

Corso di Matlab_Simulink per

Ingegneria
Docenti: Elio USAI, Augusto MONTISCI
Corsi di Laurea: Ingegneria (Università di Cagliari)
Crediti: 2
Semestre: nel I° e II° semestre
Settore sc.-discipl.: interdisciplinare
Obiettivi: Il corso intende fornire gli strumenti di base per l’utilizzo
del software di calcolo e simulazione MATLAB-Simulink.
Valutazione: La valutazione sarà basata su test pratici alla
conclusione del corso.
Propedeuticità: Algebra lineare, equazioni differenziali.
Durata: 24 ore complessive con lezioni di quattro ore ciascuna
Testi consigliati

William J. Palm,
MATLAB 6 per l’ingegneria,
McGraw-Hill Libri Italia srl, Milano,
ISBN 88-386-0891-1

Enzo Tonti,
Introduzione a MATLAB
ftp://ftp.dic.units.it/pub/Science/dispensa-Matlab.pdf
Programma
• Operazioni fondamentali in ambiente MATLAB
• Finestre e menù di MATLAB. Utilizzo della guida in linea. Funzioni matematiche di
base. Operazioni su scalari, vettori e matrici. Definizione ed operazioni sui polinomi.
• Gestione dei file e dei dati
• File, filescript. Operazioni di input ed output dei dati. Array di celle e di strutture.
Funzioni definite dall’utente. Rappresentazione dei dati mediante grafici. Diagrammi a
due e tre variabili. Diagrammi multipli e sovrapposti. Diagrammi speciali. Funzione
mesh.
• Equazioni algebriche lineari
• Metodi elementari di risoluzione. Metodi matriciali per la soluzione di equazioni lineari.
Sistemi indeterminati e sovradeterminati: soluzioni ottime.
• Programmazione ed uso della memoria
• Operatori relazionali, logici e funzioni. Istruzioni condizionali, cicli, struttura di switch.
Funzioni per il miglioramento della gestione della memoria.
• Ambiente Simulink
• Blocchi elementari. Librerie. Rappresentazione di equazioni differenziali in forma
grafica. Soluzione di equazioni differenziali mediante Simulink. Creazione di maschere.
Collegamenti all’ambiente di MATLAB. Scambio dati con file e con variabili in
ambiente MATLAB. Visualizzazione dei risultati delle simulazioni
MATLAB è un linguaggio di programmazione e un
ambiente software che consente di utilizzare in modo
efficiente tale linguaggio

MATLAB include vari modelli software aggiuntivi, chiamati toolbox,


che sviluppano compiti specializzati .
Essi possono essere acquistati separatamente e possono essere
utilizzati solo con il programma principale Matlab. Attualmente ne
esistono più di 16.
Matlab include:
– Strutture logiche;
– Strutture relazionali,
– Strutture condizionali e cicli
che permettono di controllare il processo di elaborazione.

Matlab può quindi essere utilizzato per programmare.


• Matlab ha una interfaccia particolarmente facile da usare e
un ambiente interattivo con un gran numero di funzioni e
notevoli capacità grafiche.

• Una caratteristica di Matlab è la compattezza :


é possibile impostare la risoluzione software di un
problema con poche righe di codice.
Avviare Matlab

•Fare clic sulla icona di Matlab oppure


•avviarlo dalla directory “Programmi”
•Si aprirà la finestra dei programmi: Command window
Il prompt (>>) indica che il programma è pronto a ricevere
istruzioni.
•Prima di immettere qualunque istruzione verificare che il
cursore si trovi subito dopo il prompt (>>).
•Occorre quindi scegliere la directory dove si intende lavorare
con l’istruzione cd (change directory), per esempio:
cd c:\matlab \corso_matlab
Verificare il posizionamento nella directory scelta con
l’istruzione dir (directory)
Dalla command window sarà possibile immettere comandi ed
espressioni.
Digitare le seguenti operazioni dopo il prompt e premere
avvio ogni volta:
>> 7/15 divisione a destra o diretta (slash)*
>> 15\7 divisione a sinistra o inversa (blackslash)*
>> 8*10 moltiplicazione
>> 8+0.1 somma
>> 15-6 sottrazione
>> 4^3 potenza
Matlab visualizza il risultato con 4 cifre decimali
assegnandolo a una variabile temporanea ans. Il risultato può
essere assegnato a una variabile desiderata “a” ponendo:
a=2^3

* Il simbolo di divisore pende sempre verso il denominatore


Matlab ha la capacità di gestire grandi insiemi di numeri, chiamati
array, come se fossero una singola variabile array.
Gli array sono degli insiemi ordinati di numeri, per esempio:
>> n=[0:0.25:1]; equivale al vettore riga di componenti:
1, 0.25, 0.5, 0.75, 1
>> x=2*cos(n); equivale al vettore di uguale dimensione, dove
ogni componente è uguale a 2*cos(n), calcolato per tutti i valori
dell’array n.
Se si desidera tracciare un grafico del segnale associato a questi
vettori digitare:
>> plot(n,x), xlabel(‘x’), ylabel(‘n’) , title(‘signal: x=2*cos(n)’);

apparirà il grafico nella finestra grafica dove vengono rappresentati i


diagrammi.
Durante la sessione di lavoro di Matlab di solito si usano
tre tipi di finestre:
• Finestra dei comandi per immettere e visualizzare i risultati

• Finestra grafica dove vengono rappresentati i diagrammi e

• Finestra di editing dove vengono creati i file dei programmi.

Nella finestra dei comandi sono presenti 5 menu:

File, Edit, Options,Windows e Help.

Se si volessero memorizzare le righe di istruzioni in un file


eseguibile con estensione “.m”, occorre entrare nel menu edit
premere new e salvare il file nella directory di lavoro.
E’ consigliabile riportare in testa a ogni “file.m” di
programma l’istruzione:
clear all
che cancella tutte le grandezze dalla memoria e
close all
che cancella tutte le finestre grafiche.

In questo modo si evita di associare a delle


grandezze i valori assunti nelle elaborazioni
precedenti o associare un grafico a quello di un
ottenuto precedente, con possibili errori.

L’istruzione clc si limita a cancellare il contenuto


della finestra dei comandi ( ripulisce lo schermo).
Si consiglia di memorizzare il file eseguibile nominandolo con un
nome che ricordi all’utente il tipo di operazione che il file è in grado
di eseguire e riportando in testa al programma una linea di
commento, che spieghi in maniera sintetica ciò che il file calcola.
Le linee di commento sono precedute dal simbolo di percentuale %.

Per eseguire l’insieme di istruzioni contenute nel file:

• si seleziona la finestra dei comandi

• si digita il nome del file e

• si preme enter.
Quando un programma è stato eseguito è possibile
elencare i nomi di tutte le variabili presenti in memoria con
l’istruzione:
>> who
Se si desidera avere maggiori informazioni premere:
>> whos

appariranno :
• nomi di tutte le variabili presenti in memoria
• le dimensioni,
• l’occupazione di memoria in byte e
• il tipo di variabile.
Matlab presenta il menu Help con il quale è possibile avere
informazioni sui contenuti e sulle funzioni del software.

Se si desidera avere maggiori dettagli su una funzione di cui


si conosce esattamente il nome, é possibile usare l’help in
linea digitando:
>> help nomefunzione.

Con queste conoscenze elementari si è già in grado di


programmare del software che consenta di risolvere problemi,
dopo aver effettuato la fase di modellazione del problema.
La fase di modellazione consiste nel:

• semplificare opportunamente un problema


e
• nell’applicare i principi fondamentali
appropriati.

La descrizione matematica risultante si


chiama modello matematico o modello
Comandi per gestire una sessione di lavoro con Matlab

>> type nomefile fa apparire sul video il listato del file;

>> help nomefile fa comparire sul video le prime righe di


commento

>> clc cancella il contenuto della finestra dei comandi;

>> clear elimina le variabili dalla memoria;

>> clear v1 v2 elimina le variabili v1 e v2 dalla memoria


>> lookfor nome ricerca tra le voci della guida la parola chiave
"nome"
>> exist('nome') determina se un file o una variabile hanno il
nome del file specificato
>> quit chiude Matlab
>> who elenca le variabili che si trovano in memoria
>> whos elenca le variabili che si trovano in memoria indicando
anche le dimensioni, i byte occupati e il tipo di variabile.
: genera un vettore di elementi regolarmente intervallati
, separa le istruzioni e gli elementi di una riga di un’array
; esclude la visualizzazione del risultato di una istruzione e
separa le righe di un’array
… continua l’istruzione nella riga successiva.
Operazioni fondamentali e array

Variabili e costanti speciali


• ans: variabile temporanea che contiene il risultato
più recente;
• eps: specifica la precisione dei numeri decimali;
• i, j: unità immaginaria;
• Inf: infinito;
• NaN: risultato numerico indefinito;
• pi: indica il numero π
I menu del desktop di Matlab
I menu del desktop di Matlab

La finestra dei comandi di Matlab 6 ha sei menu:

File, Edit, View, Web, Window e Help.

Ogni opzione di un menù può essere selezionata con il menù


aperto, facendo clic con il mouse su di essa o digitando la
lettera sottolineata dell’opzione.
Menu file

New apre una finestra di dialogo che consente di creare un


nuovo file di programma, chiamato M-file, utilizzando un
editor Editor/Debugger di testi o un nuovo file Figure o
Model.
Open apre una finestra di dialogo che consente di
selezionare i file di programma da modificate.
Close command window chiude la finestra dei comandi.
Importa Data avvia Import Wizard un utility di Matlab che
permette di importare facilmente dei dati.
Save Workspace as apre una finestra di dialogo che
consente di salvare i nomi e i valori delle variabili in un
file di cui é stato selezionato il nome.
Set path apre una finestra di dialogo il percorso (path) di
ricercare dei file
Menu file (continuazione)

Perferences apre una finestra di dialogo che permette di


impostare alcuni elementi di Matlab, quali il tipo di caratteri i
colori, la spaziatura di tabulazione e così via.

Print apre una finestra di dialogo che permette di stampare tutti i


testi presenti nella finestra dei comandi.

Print Select apre una finestra di dialogo che permette di stampare


soltanto le parti selezionate nella finestra dei comandi.

File List visualizza l’elenco dei file precedentemente utilizzati in


ordine cronologico.
Exit Matlab esce da Matlab
Menu Edit

Undo annulla gli effetti dell’ultima operazione di editing.

Redo annulla gli effetti dell’ultima operazione.

Cut elimina il testo selezionato e lo registra in un’area di


memoria (clipboard o Appunti di Window); il testo potra
essere successivamente incollato in un altro punto scelto
cliccando con il mouse.

Copy copia in memoria il testo selezionato, senza cncellarlo;


il testo potra essere successivamente incollato nella
posizione corrente del cursore

Paste inserisce nella posizione corrente del cursore il testo


contenuto nel clipboard
Menu Edit (continuazione)

Paste special inserisce il testo selezionato nel clipboard nell’area di


lavoro sotto forma di una o più variabili.

Selct All seleziona tutti i testi presenti nella finestra dei comandi.

Delete cancella la variabile selezionata nella finestra del


Workspace browser.

Clear command Window cancella tutti i testi lla finestra dei


comandi

Clear command history cancela tutti i testi della finestra


Command Hystory

Clear Workspace cancella i valori di tutte le variabili dell’area


di lavoro.
Menu View
Il menu VIEW viene utilizzato per:
•controllare la configuarazione del desktop di Matlab;
•accedere alla directory (o cartella corrente);
•consultare la guida HELP per visualizzare Workspace
browser (questa utility permette di esaminare le variabili
utilizzate da Matlab;
•Accedere al sito The MathWorks, che ontiene informzioni
sui nuovi prodotti e sugli aggiornamenti del software,
fornendo anche un supporto tecnico

Menu Window
Contiene una o più opzioni a seconda delle operazioni che
sono state svolte durante la sessione di lavoro di Matlab.
Può essere usato per spostarsi da una finestra all’altra tra
quelle create nella sessione di lavoro (si può ottenere lo stesso
risultato pemendo Alt Tab).
Menu Help

Fornisce un utile ausilio all’utente attraverso una ricerca per


argomenti o per indice.
L’opzione about Matlab consente di visualizzare tutte le
specifiche della versione corrente di Matlab.

Barra degli strumenti

La barra degli strumenti é posta sotto la barra dei menù


contiene alcune “icone” o “pulsanti” che permettono di
accedere ad alcune funzionalità dei menu di uso più
frequente.
New M_file, Open File, Cut, Copy, Paste, Undo, Redo,
Simulink, Help, Current Directory.
Array

Per creare un vettore riga in Matlab basta digitare gli elementi


all’interno di una coppia di parentesi quadre, separandoli con uno
spazio o una viergola. Es:
a= [ 2 6 4] oppure a= [ 2, 6, 4], oppure a= [ 2, 6, 4]

Per creare un vettore colonna basta separare gli elementi con un


punto e virgola
b= [ 2; 6; 4]
oppure fare la trasposta del vettore creato come vettore riga,
utilizzando il simbolo di trasposizione(‘) che trasforma un vettore
riga in un vettore colonna e viceversa
a= [ 2, 6, 4]
b=a’
Array (continuazione)

Un terzo metodo consiste nel premere invio dopo aver digitato


ciascun elemento:
b=[2
4
8]

Infine, se gli elementi sono regolarmente intervallati


l’operatore (:) consente di generare un vettore riga:
a=[p:step:u] es: a=[3:.3:9]

p primo elemento
step incremento (<0 se u<p) es: a=[8:-2:-12])
u ultimo elemento
Array( continuazione)

linspace (x1,x2,n) consente di creare un vettore riga con


un numero predefinitto n di elementi
linearmente intervallati
nell’intervallo[x1,x2]
es: a= linspace (5,8,31) equivale a=[5:.1:8]

logspace(a,b,n) crea un array di elementi intervallati


logaritmicamente, dove n é il numero
dei punti fra 10a e 10b
es: x = logspace (-1,1,4)
se n viene omesso, vengono generati 50 elementi
Array( continuazione)

Per creare una matrice si possono digitare gli elementi uno per
volta
separando gli elementi di ogni riga con uno spazio (blank) o
virgola(,) e le righe con un punto e virgola(;) , il tutto tra parentesi
quadre.
A=[ 1 2 3;4 5 6 ; 7 8 9]

A=[ 1, 2 ,3;4 ,5, 6 ; 7, 8, 9]


Una matrice può essere creata anche accorpando più matrici che
devono avere ugual numero di righe:
C=[ A B]
o di colonne
D=[A;B]
Array( continuazione)

Gli indici di una Array sono i numeri di riga e di colonna


che identificano i vari elementi dell’array.

A(n,m) identifica l’elemento che occupa la riga n e la


colonna m

Questa notazione consente di correggere uno o più


elementi di una array senza digitare nuovamente tutti gli
elementi
Array( continuazione)
L’operatore (:) seleziona i singoli elementi, righe, colonne o
“sottoarray”.
In particolare con i vettori:
•v(:) rappresenta tutti gli elementi del vettore;
• v(n1:n2) rappresenta tutti gli elementi del vettore
compresi tra n1-esimo elemento e n2-esimo
elemento;
e con le matrici:
•A(:,n) identifica tutti gli elementi della ennesima colonna A
•A(:,n1:n2) identifica tutti gli elementi della enne1-esima
colonna alla enne2-esima di A
•A(3:5,1:6) identifica tutti gli elementi dalla 3° alla 5°
che si trovano tra la 1° e la 6° colonna di A
Array( continuazione)
Operazioni con le array (elemento per elemento)
+ somma array-scalare A+b
- sottrazione array-scalare A-b
+ somma di array A+B
- sottrazione di array A-B
.* moltiplicazione di array A.*B
./ divisione a destra o diretta di array A./B
.\ divisione a sinistra o inversa di array A.\B
.^ elevazione a potenza di un’array A.^B

Le operazioni con le array elemento per elemento, vengono svolte tra gli
elementi che occupano posizioni corrispondenti.
Verificare che C é diverso da D se: C=A*B e D=A.*B e
che E diverso da F se: E=A.\B e F=A./B
Comandi per gli array
cat(n,A,B,C,…) crea un nuovo array di dimensione n
concatenando gli array A,B,C ,..

find(v) genera un array che contiene gli indici


degli elementi non nulli dell’array vettore v

[u,v,w]=find(A) crea gli array u e v che contengono gli


indici delle righe e delle colonne degli elementi non nulli della
matrice A. L’array w contiene i valori degli elementi non
nulli.

length(v) calcola in numero degli elementi del vettore v


size(A) restituisce un vettore riga [m n] che contiene le
dimensioni della matrice m*n
Comandi per gli array (continuazione)

min(A) restituisce un vettore riga contenente gli elementi


minimi di ogni colonna di A

max(A) restituisce un vettore riga contenente gli elementi


massimi di ogni colonna di A

sort(A) dispone le colonne dell’array A in ordine crescente e


restituisce un array della stessa dimensione di A

sum(A) somma gli elementi di ogni colonna dell’array A e


restituisce un vettore riga che contiene le somme
risultanti.
Comandi per gli array (continuazione)

Autovalori e autovettori

Data la matrice A nxn , esistono due matrici V nxn e D nxn tali che:

AV=VD

• con V costituita dagli autovettori normalizzati della matrice A e


• con D matrice diagonale che presenta sulla diagonale gli autovalori
della matrice A
Comandi per gli array (continuazione)
Autovalori e autovettori
A=eig(A) restituisce il vettore colonna a di dimensioni
nx1 costituito dagli autovalori della matrice A
nxn

[V,D] =eig(A) restituisce la matrice V nxn costituita dagli


autovettori normalizzati della matrice A e la
matrice diagonale D nxn che presenta gli
autovalori della matrice A

[V,D] =eig(A,B) restituisce la matrice V nxn e la matrice


diagonale D nxn che rappresentano la soluzione
dell’equazione matriciale: AV=BVD con A e B
matrici quadrate
Comandi per gli array (continuazione)
Fattorizzazione triangolare (triangular factorization)

Data la matrice quadrata A di dimensione nxn l’istruzione:

[L,U]=lu(A)
con :
U matrice triangolare nxn superiore di dimensione e
L matrice di dimensione nxn otenuta come permutazione di una
matrice triangolare inferiore che ha gli elementi sulla diagonanle
originale pari a 1.
La fattorizzazione è tale che A=LU
Comandi per gli array (continuazione)

Fattorizzazione triangolare
(triangular factorization , LU factorizatio or LR factorization)

Data la matrice quadrata A di dimensione nxn l’istruzione


[L,U,P]=lu(A)
con :
U matrice triangolare nxn superiore di dimensione e
L matrice di dimensione nxn otenuta come permutazione di una
matrice triangolare inferiore
P matrice di permutazione
La fattorizzazione è tale che PA=LU
Comandi per gli array (continuazione)

Singular Value Decomposition

Data la matrice quadrata A di dimensione nxm l’istruzione:

[U,S,V]=svd(A)
con U matrice nxn ,e V matrice di dimensione mxn ortogonali e S di
dimensioni nxm con i valori singolari della matrice A sulla
diagonale principale.
La decomposizione è tale che A=USVT

svd(A) restituisce il vettore colonna di dimensioni


min(m,n)x1 contenente i valori singolari di A
Matrici speciali

eye(n) crea una matrice identità (n*n)


eye(size(A)) crea una matrice identità con la stessa
dimensione della matrice A

ones(n) crea una matrice (n*n) i cui elementi


sono pari a 1
ones(m,n) crea una array (m*n) i cui elementi
sono pari a 1
ones(size(A)) crea una matrice di elementi pari a 1 avente la
stessa dimensione della matrice A
Matrici speciali

zeros(n) crea una matrice identità (n*n)i cui


elementi sono pari a 0

zeros (m,n) crea una array (m*n)i cui elementi


sono pari a 0

zeros(size(A)) crea una matrice di elementi pari a 0


avente la stessa dimensione della
matrice A
Matrici speciali

rand(n) crea una matrice (n*n) di elementi casuali


compresi tra [0,1]

rand (m,n) crea una matrice (m*n) di elementi casuali


compresi tra [0,1]

magic(n) crea una matrice (n*n) di numeri naturali


compresi tra [1,n2] con righe, colonne e
diagonale che presentano tutte la stessa
somma
Prodotti speciali

cross(A,B) calcola un array (3,n) le cui colonne sono i


prodotti vettoriali delle corrispondenti colonne
negli array (3*n) A e B. Se A e B sono i vettori
di tre elementi, fornisce un vettore i cui elementi
rappresentano le tre componenti del prodotto
vettoriale.
Esempio: il momento M rispetto a un punto di riferimento O
dovuto alla forza F è dato da M=r x F , dove r è il vettore
posizione del punto O al punto di applicazione della forza F.
Per trovare il momento basta digitare:
M=coss(r,F)
Prodotti speciali

dot(A,B) calcola un vettore riga di dimensione n, i cui


elementi sono i prodotti scalari delle
corrispondenti colonne negli array (n*m) A e B.

Esempio: per calcolare la componente della forza F lungo la


direzione data del vettore r; Fr basta digitare:
Fr=dot(F,r)
Per poter eseguire delle operazioni tra polinomi,
occorre che gli array associati abbiano uguali
dimensioni.

Quindi per eseguire operazioni con polinomi di


grado diverso occorre associare il valore 0 ai
coefficienti del polinomio di grado inferiore
mancanti
Comandi per i polinomi
conv(a,b) calcola il prodotto di due polinomi rappresentati
dagli array dei coefficienti a e b. I due polinomi non devono
essere dello stesso ordine. Il risultato è l’array dei coefficienti del
polinomio prodotto.

[q,r]=deconv(num,den) calcola la divisione fra un polinomio,


rappresentato dall’array dei coefficienti num, e un altro
polinomio rappresentato dall’array dei coefficienti den; il
polinomio quoziente è rappresentato dal’array dei coefficienti q;
il polinomio resto è rappresentato dall’array dei coefficienti r.

Poly (r) calcola i coefficienti del polinomio le cui radici sono


specificate dal vettore r. Il risultato è un vettore riga che contiene
i coefficienti del polinomio ordinati in senso decrescente delle
potenze.
Comandi per i polinomi (continuazione)

polyval(a,x) calcola il polinomio per determinati valori della


sua variabile indipendente x, che può essere una
matrice o un vettore. I coefficienti del polinomio
delle potenze decrescenti vengono registrati
nell’array a. Il risultato ha la stessa dimensione di
x.

roots(a) calcola le radici di un polinomio rappresentato


dall’array dei coefficienti a. Il risultato è un
vettore colonna che contiene le radici del
polinomio.
Sviluppo in fratti semplici

[R,P,K] = RESIDUE(B,A)

determina i residui R(i) e i poli P(i) per poter esprimere il


rapporto di due polinomi B(s)/A(s) con una espansione ( o
sviluppo ) in fratti semplici che ( se non sono presenti poli
multipli è del tipo:

B(s) R(1) R(2) R(n)


---- = -------- + -------- + ... + -------- + K(s)
A(s) s - P(1) s - P(2) s - P(n)

I vettori B and A sono i coefficienti dei polinomi a


numeratore e a denominatore in ordine di potenza
decrescente.
R è il vettore dei residui

P è il vettore dei poli

K è il vettore dei coefficienti del polinomio resto

Il numero dei poli è n = length(A)-1 = length(R) = length(P). il


vettore dei coefficienti del polinomio resto è:
vuoto se if length(B) < length(A),
altrimenti length(K) = length(B)-length(A)+1.
I comandi input output permettono di ottenere l’input
degli utenti e formattare i dati di output.

Si tratta di comandi di formattazione e visualizzazione


Comandi input/output
disp(A) visualizza il contenuto, non il nome, dell’array A
disp(‘testo’) visualizza la stringa di testo racchiusa tra due apici
format controlla il formato di visualizzazione dell’output
sullo schermo
fprintf controlla il formato dell’output sullo schermo e su
file
x=input(‘testo’) visualizza il testo specificato, attende ’input’
dall’utente dalla tastiera e registra il valore
della variabile x
x=input(‘testo’,’s’) visualizza il testo specificato, attende l’input
dall’utente dalla tastiera e lo registra come
stringa nella variabile x
Formati di visualizzazione
Tutti i calcoli vengono eseguiti in Matlab
in doppia precisione
format consente di impostare il formato con il quale vengono visualizzati i
valori numerici.
Tale istruzione consente di selezionare i seguenti formati:
format default equivale al formato short
format short formato a virgola fissa con 5 cifre
format long formato a virgola fissa con 15 cifre
format short e formato a virgola mobile con 5 cifre
format long e formato a virgola mobile con 15 cifre
format short g formato migliore tra quello a virgola fissa e mobile con 5
cifre
format long g formato migliore tra quello a virgola fissa e mobile con con
15 cifre
Formati di visualizzazione ( continuazione)

format hex formato esadecimale


format + formato compatto. I simboli +,- e blank sono usati per
valori positivi negativi e nulli. Le parti immaginarie
sono ignorate
format bank formato fisso con due cifre decimali
format rat approssimazione razionale
format hex formato esadecimale
format compact elimina i caratteri extra di nuova riga (line-feed)
per una visualizzazione più compatta
format loose annulla l’effetto di format compact
Formati di scrittura su file

fprinf(‘format’,A,…) scrive gli elementi della array A e tutti


gli argomenti aggiunti dell’array,secondo il formato specificato
nella stringa ‘formato’

Struttura di format % [-][numero1.numero2]C

[-] specifica l’allineamento a sinistra


numero1 specifica la larghezza minima del campo
numero2 specifica il numero di cifre decimali
C contiene i codici di controllo e di formattazione
Formati di scrittura su file (continuazione)
C codici di controllo e di formattazione
Codici di controllo
\n avvia una nova riga (linefeed)
\r inizio di una nuova riga (carriage return)
\b spazio bianco (blackspace)
\t tabulatore (tab)
‘’ apice o apostrofo
\\ carattere backslash \
%% carattere percentuale %
Codici di formattazione
%e notazione scientifica con e minuscola
%E notazione scientifica con E maiuscola
%f formato decimale
%g formato più corto fra %e e %f.
Funzioni

Matlab possiede molte funzioni già disponibili in


files con estensione.m :
Funzioni matematiche di base

ma l’utente può crearne altre utilizzando M-files:


Funzioni definite dall’utente

In generale una funzione prevede delle variabili


in ingresso e delle variabili in uscita
Funzioni matematiche di base
Tipiche funzioni matematiche di base

F. Esponziali
exp(x) calcola ex
sqrt(x) calcola la radice quadrata di x

F. Logaritmiche
log(x) calcola il logaritmo naturale di x
log10(x) calcola il logaritmo decimale (in base 10)
Funzioni matematiche di base
Tipiche funzioni matematiche di base

F. Complesse
abs(x) calcola il valore assoluto di x
angle(x) calcola la fase di un numero complesso
conj(x) calcola il numero complesso-coniugato
di x
imag(x) rende la parte immaginaria di un
numero complesso x
real(x) rende la parte reale di un numero
complesso x
F. Numeriche

ceil(x) approssima x al numero intero più vicino verso


infinito
fix(x) approssima x al numero intero più vicino verso
lo zero
floor(x) approssima x al numero intero più vicino verso
- infinito
round(x) approssima x al numero intero più vicino

sign(x) calcola il segno di x e rende :


+1 se x > 0
0 se x = 0
-1 se x < 0
Funzioni trigonometriche

cos(x), sin(x), tan(x) e cot(x) coseno, seno, tangente e


cotangente di x

acos(x), asin(x), atan(x) e acot(x) arcocoseno, arcoseno, arcotangente,


arcocotangente di x

sec(x) e csc(x) secante e cosecante di x

cosh(x), sinh(x), tanh(x) e coth(x) coseno iperbolico, seno iperbolico,


sech(x) tangente iperbolica e cotangente iperbolica
e secante iperbolica di x
asec(x) e acsc(x) arcosecante e arcocosecante di x

aosh(x), sinh(x), tanh(x) e coth(x) arcocoseno iperbolico, arcoseno iperbolico,


csech(x) arcotangente iperbolica e arcocotangente
iperbolica e cosecante di x
atan2(y,x) arcotangente nei quattro quadranti (+pi:-pi)
Funzioni definite dall’utente

Vengono definite attraverso M-file, detti file di funzione.

Nei file di funzione tutte le variabili sono locali: ossia i


loro valori sono disponibili solo all’interno della
funzione.

Essi sono particolarmente utili quando occorre ripetere


una serie di comandi più volte.
Funzioni definite dall’utente

Definizione della funzione

La prima riga di un file di funzione deve iniziare con la


definizione della funzione con la quale:

•si distingue il file come file di funzione dai file script*

•si nomina la funzione e

•si definisce l’elenco dei parametri di input e di output

* Un script-script viene eseguito semplicemente digitando il suo


nome senza l’estensione m.
Funzioni definite dall’utente

Le variabili di input specificate nella riga di definizione


della funzione sono locali per quella funzione, questo:

• consente di usare altri nomi di variabili quando viene


chiamata la funzione e

•fa si che tutte le variabili all’interno della funzione


vengono cancellate dopo che la funzione è stata eseguita,
tranne le variabili che figurano nell’elenco della
variabili di output utilizzate nella chiamata di funzione
Sintassi della riga di definizione della funzione

function [var. di output]=nome_funzione(var. di input)

•Le variabili di output devono essere racchiuse tra


parentesi quadre

•Le variabili di input devono essere racchiuse tra


parentesi tonde

•Il nome della funzione deve essere uguale al nome del


file con estensione m, in cui sarà salvata la funzione.
Sintassi della riga di richiamo della funzione
Occorre digitarla nel file principale in corrispondenza della
riga di programma nella quale si vuole richiamare la function

[var. di output]=nome_funzione(var. di input)

•Le variabili di output devono essere racchiuse tra parentesi


quadre

•Le variabili di input devono essere racchiuse tra parentesi tonde

•Il nome della funzione deve essere uguale al nome del file con
estensione m, in cui sarà salvata la funzione.
Comandi per trovare punti singolari di una funzione

Determinazione degli zeri di una funzione


•Per le funzioni polinomiali si usa roots
•Per tutte le altre funzioni si usa fzero

Detrminazione del minimo di una funzione


Si usa fmin e fmins
Sintassi dei comandi per trovare minimi e zeri di una
funzione

fmin(‘funzione’,x1,x2) rende il valore x nell’intervallo


[x1,x2] che corrisponde a un mini o della funzione di
una variabile descritta dalla stringa ‘funzione’

fmins(‘funzione’,x0) usa il vettore iniziale x0 per


trovare un minimo della funzione di più variabili
descritta dalla stringa ‘funzione’

fzero(‘funzione’,x0) usa il vettore iniziale x0 per


trovare uno zero della funzione di una variabile descritta
dalla stringa ‘funzione’
I comandi fzero, fmin e fmins hanno forme
sintatiche alternative che consentono di
specificare la precisione richiesta per la
soluzione o il numero di passaggi da effettuare
prima di interrompere la routine dei comandi.

Per ulteriori dettagli utilizzare in modalità


‘command window’ il comando Help .

Tali funzioni possono essere utili per risolvere


problemi semplici di ottimizzazione
Istruzioni di controllo
for ripetizione di un insieme di istruzioni per un
numero predeterminato di interazioni ( deve
terminare con end)
while ripetizione di un insieme di istruzioni finchè una
determinata condizione rimane vera (deve
terminare con end)
if istruzione condizionale (deve terminare con end)
può utilizzare else e elseif
else identifica un blocco di istruzioni alternative
elseif esegue un blocco di istruzioni se è soddisfatta
una condizione alternativa
end termina le istruzioni if, for e while
Istruzioni di controllo (continuazione)

break termina l’esecuzione di un ciclo for o while


switch indirizza il controllo di un programma
confrontando l’espressione di input con le
espressioni associate alle clausole case
case utilizzato con switch per controllare
l’esecuzione di un programma
findstr(‘s1’,’s2’) date le stringhe di caratteri s1 e s2,
trova gli indici iniziali di qualsiasi
ricorrenza della stringa più corta
all’interno della stringa più lunga
Operatori relazionali
< minore
<= minore o uguale
> maggiore
>= maggiore o uguale
== uguale
~= diverso*

* Il simbolo ~ si digita tenendo premuto alt e digitando 126


sul tastierino numerico
Operatori logici e funzioni logiche
Matlab ha 4 operatori logici o booleani e una serie di
funzioni logiche
Operatori logici
~ NOT l’istruzione ~ A rende una array delle
stesse dimensioni di A; con elementi
pari a 1 se quelli corrispondenti di A
sono nulli altrimenti sono pari a 0
& AND l’istruzione A & B restituisce un
array delle stesse dimensioni di A e B;
gli elementi del nuovo array sono pari
a 1 se i corrispondenti elementi di A e
B sono entrambi diversi da 0
altrimenti sono pari a 0.
| OR l’istruzione A | B rende una array
delle stesse dimensioni di A e B; con
elementi pari a 1 se almeno 1 dei due
elementi corrispondenti di A e B è
diverso da 0; e pari a 0 se entrambi
gli elementi di A e B sono nulli.
xor(A,B) OR eslcusivo
l’istruzione di xor(A,B)
restituisce un array delle stesse dimensioni
di A e B; gli elementi del nuovo array sono
pari a 1 se uno solo dei due elementi
corrispondenti di A e B è diverso da 0 (non
entrambi); sono pari a 0 se entrambi gli
elementi di A e B sono nulli o diversi da 0.
Funzioni logiche
any(x) restituisce uno scalare , che è pari a 1 se
almeno uno degli elementi del vettore x è
diverso da zero, 0 negli altri casi
any(A) restituisce un vettore riga che ha lo stesso
numero di colonne della matrice A e che
contiene 1 e 0 in funzione del fatto che la
corrispondente colonna di A contiene
oppure no almeno un elemento diverso da 0.
all(x) restituisce uno scalare, che è pari a 1 se tutti
gli elementi del vettore x sono diversi da 0, 0
negli altri casi
Funzioni logiche
find(x) crea un array che contiene gli indici
degli elementi non nulli degli array x
[u,v,w]= find(A) crea gli array u e v che contengono
gli indici delle righe e delle colonne
degli elementi non nulli della matrice
A, e l’array w che contiene i valori
degli elementi non nulli. L’array w
può essere omesso.
finite(A) restituisce un array della stessa
dimensione di A i cui elementi sono
pari a 1 se i corrispondenti elementi
di A sono valori finiti, 0 negli altri
casi.
Funzioni logiche

isnan(A) restituisce un array della stessa


dimensione di A i cui elementi sono
pari a 1 se i corrispondenti elementi di
A sono pari a “NAN”(Not a Number, numero
non definibile), 0 negli altri casi

isinf(A) restituisce un array della stessa dimensione di


A i cui elementi sono pari a 1 se i
corrispondenti elementi di A sono pari a
“INF”, 0 negli altri casi
Funzioni logiche
isempty(A) restituisce 1 se A è una matrice vuota, 0 negli
altri casi.

isreal(A) restituisce 1 se A non contiene elementi con


parti immaginarie, 0 negli altri casi
Comandi di sistema

cd nomedir cambia la directory corrente in nomedir


date visualizza la data come stringa nel formato
gg-mm-aa

diary registra l’attività della sessione nel file diario


di nome diary. Disattiva la registrazione se
attivata e viceversa.
diary nomefile registra l’attività della sessione nel file diario
di nomefile
diary off disattiva la registrazione del file diario
diary on attiva la registrazione del file diario corrente

path visualizza il percorso di ricerca delle directory


pwd visualizza la directory corrente
Tipi di file
Esistono di tre tipi di file:

M-file con estensione .m per i programmi e le function.


Sono file ASCII (American Standard Code for
Information Interchange)

Mat-file con estensione .mat per salvare nomi e i valori delle


variabili create durante una sessione di lavoro di
Matlab. Sono file binari e possono essere letti solo
dal software che li ha creati e non da un word
professor

file dati file usati per memorizzare dati in formato ASCII,


possono contenere una più righe di testo iniziali
header ( intestazione o titolo di file)
I file vengono registrati in directory ( o cartelle) aventi
ciascuno il suo nome.

Quando si digita un nome qualsiasi ( Es: “vita”per richiamare un


file, Matlab fa una serie di indagini secondo il seguente ordine:
•Verifica se il nome digitato “vita”è una variabile, se si ne
visualizza il valore altrimenti;
•Verifica se il nome “vita” è un comando interno, se si esegue il
comando altrimenti;
•Ricerca il file con il nome “vita” in C:\matlab, se lo trova lo
esegue altrimenti;
•Esegue la ricerca nella directory specificata dal percorso di
ricerca(search path)e se lo trova lo esegue.
Comandi per i file

delete nome file cancella il file nome file

dir elenca tutti i file della directory corrente


dir nomedir elenca tutti i file della directory nomedir

load carica tutte le variabili operative dal file


matlab .mat
load nome file carica tutte le variabili operative dal file
nomefile.mat
load nome file.est legge i dati registrati nel file ASCII
nomefile.est e li registra nella matrice
nomefile
Comandi per i file (continuazione)

save salva tutte le variabili operative nel file


binario matlab.mat
save nomefile salva tutte le variabili operative nel file
binario nomefile.mat
save nomefile variabili salva le variabili elencate nel
file binario nomefile.mat

Per caricare queste var.li operative occorre digitare load nomefile


save nomefile parola chiave salva le variabili nel file ASCII
nomefile.mat, applicando le
caratteristiche specificate dalla
parola chiave che può essere:
-ascii per la singola precisione(8 cifre);
-double per la doppia precisione(16 cifre) e/o
-tabs per separare i dati con un carattere di
tabulazione.
Comandi per i file (continuazione)

type nomefile visualizza i contenuti del file nomefile senza


aprirlo con un editor
what elenca tutti i file di matlab che si trovano
nella directory corrente

what nomedir elenca tutti i file di matlab che si trovano


nella directory nomedir

M=wk1read(‘nomedir’) legge un file con estensione


wk1 (generato da alcuni programmi
per spreadsheet) e ne registra i dati
nella matrice M.
Gestione della memoria
Help online fa comparire sul display l’elenco dei argomenti e dei
comandi disponibili in linea.
Per avere informazioni sulla gestione della memoria digitare

Help memory

Si sottolinea che il messaggio Out of memory avverte che Matlab


non è riuscito a trovare sufficiente spazio in memoria per le
variabili richieste.

pack compatta le aree di memoria utilizzate registrando su disco


tutte le variabili in uso, liberando completamente la memoria
(clear) e ricavando da disco le variabili registrate.

Per le linee di codice da usare vedere Help pack


Array di celle
Matlab ha introdotto una nuova classe di array: l’array di cella
nella quale è possibile registrare un insieme di dati correlati ma con
dimensioni e caratteristiche diverse. Ossia ad ogni elemento della
cella si fa corrispondere un array di dimensioni qualsiasi e con
contenuto numerico o alfanumerico.

Per accedere ai dati contenuti in un elemento della cella si


utilizzano gli indici come per le array normali.

L’assegnazione dei dati alle celle è possibile attraverso:


•l’indicizzazione delle celle o
•l’indicizzazione dei contenuti
Array di celle (continuazione)

L’indicizzazione si effettua racchiudendo fra parentesi tonde gli


indici delle celle nel lato sinistro dell’istruzione di assegnazione,
(notazione standard degli indici degli array).

I contenuti delle celle devono essere racchiusi fra parentesi graffe


nel lato dell’istruzione di assegnazione
Funzioni per le array di celle
C=cell(n) crea un array C di nxn celle di
matrici vuote (inizializzazione della
cella nxn)

C=cell(n,m) crea un array C di nxm celle di


matrici vuote (inizializzazione della
cella nxm)

celldisp(C) visualizza i contenuti delle array di


celle C

cellplot(C) visualizza una rappresentazione


grafica delle array di celle C
Funzioni per le array di celle (continuazione)

[X,Y, …]=deal(A,B, …) mette in corrispondenza le


variabili di input e output
equivale a X=A, Y=B, …

[X,Y, …]=deal(A) mette in corrispondenza le


variabili di input e output
equivale a X=A.

iscell (C) restituisce 1 se C è un array di


celle, altrimenti restituisce 0
Array di struttura

Gli array di struttura sono formati da strutture .

Essi consentono di registrare array di natura diversa


come con le array di cella, ma si differenziano da
queste perché si può accedere agli elementi delle
strutture usando i nomi dei campi.

Ogni tipo di dati è un campo e il suo nome è il nome del


campo
Funzioni per gli array di struttura

names=fieldnames(S) registra nell’array di celle


names i nomi dei campi
assocciati alle array di
struttura S

F = getfield(S, ’field’) restituisce il contenuto del


campo ‘field’ dell’array di
strutture S, ed equivale a
F=S.field

isfield(S,’field’) restituisce 1 se ‘field’ è il nome di


un campo del’array di struttura S;
altrimenti fornisce il valore 0
Funzioni per gli array di struttura (continuazione)

isstruct(S) restituisce 1 se S è un array di


strutture , 0 se non lo è.

S=rmfield(S,’field’) elimina il campo ‘field’ del’array di


strutture S

S=setfield(S,’field’,V) assegna il valore V al campo ‘field’


dall’array di struttre S

S=struct(‘f1’,’v1’,’f2’, ‘v2’, …) crea un array di strutture S


con i campi ‘f1’,’f2’, … che
hanno rispettivamente i valori
’v1’, ‘v2’, ….
Grafici bidimensionali
Nei grafici bidimensionali rappresentano una funzione del tipo
y=f(x) dove:
• i valori di x ( var. indipendente) sono rappresentati sull’asse delle
ascisse
• i valori di y ( var.dipendente) sono rappresentati sull’asse delle
ordinate

La scala nei due assi fa riferimento all’intervallo e alla spaziatura


dei numeri rappresentati e può essere
•lineare o
•logaritmica
Grafici bidimensionali ( continuazione)

Le scale presentano :
• segni di graduazione (tick mark) e
• etichette dei segni di graduazione (tick mark label)

Ogni asse deve avere una etichetta o titolo dell’asse che


assegna il nome all’asse e descrive la quantità
rappresentatta lungo l’asse (xlabel, ylabel ).

Il diagramma presenta un titolo che ne descrive il


contenuto (title)
Grafici bidimensionali ( continuazione)

I dati vengono rappresentati sul diagramma da un


simbolo o marcatore. *
I dati possono essere interpolati con linee di diverso tipo,
oppure no.*
I grafici possono essere rappresentati con diversi colori.*

Quando si vuole rappresentare più insiemi di dati su uno


stesso grafico, questi possono essere facilmente distinti
mediante l’uso di una leggenda.

* ( per la modalità di selezione digitare help plot)


Grafici bidimensionali ( continuazione)
Matlab consente:
• di creare un grafico che contiene più diagrammi distinti con
l’istruzione subplot o
•di rappresentare più curve o serie di dati nello stesso diagramma
con l’istruzione plot e hold, ottenendo un diagramma sovrapposto
(overlap plot)

Esistono dei diagrammi speciali per esempio:


•diagrammi logaritmici,
•curve di risposta in frequenza
•diagrammi a steli
•diagrammi a gradini e
•diagrammi a barre
Grafici realizzati con Matlab
Inoltre Matlab consente
• di trovare la funzione che meglio descrive un
insieme di dati e
• di tracciare grafici tridimensionali che rappresentano
una funzione z=f(x,y) del tipo:
1. grafici tridimensionali a linea
2. grafici tridimensionali a superficie
3. grafici tridimensionali a contorno