Corso di Matlab Simulink per - diee.unica.it · Testi consigliati William J. Palm, MATLAB 6 per...

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

Transcript of Corso di Matlab Simulink per - diee.unica.it · Testi consigliati William J. Palm, MATLAB 6 per...

Corso di Matlab_Simulink per Ingegneria

Docenti: Elio USAI, Augusto MONTISCICorsi di Laurea: Ingegneria (Università di Cagliari)Crediti: 2 Semestre: nel I° e II° semestreSettore sc.-discipl.: interdisciplinareObiettivi: 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 windowIl 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_matlabVerificare 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 potenzaMatlab visualizza il risultato con 4 cifre decimaliassegnandolo 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 usanotre 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 editpremere new e salvare il file nella directory di lavoro.

E’ consigliabile riportare in testa a ogni “file.m” di programma l’istruzione:

clear allche cancella tutte le grandezze dalla memoria e

close allche 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:>> whoSe 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 problemae

• 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 potraessere successivamente incollato in un altro punto sceltocliccando 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 delWorkspace browser.

Clear command Window cancella tutti i testi lla finestra dei comandi

Clear command history cancela tutti i testi della finestraCommand Hystory

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

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

Menu WindowContiene 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 virgolab= [ 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 viceversaa= [ 2, 6, 4]b=a’

Array (continuazione)

Un terzo metodo consiste nel premere invio dopo aver digitatociascun elemento:b=[24 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 elementostep 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 intervallatilogaritmicamente, 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 colonneD=[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 arraycat(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 vsize(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 autovaloridella matrice A

Comandi per gli array (continuazione)

Autovalori e autovettoriA=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 eL matrice di dimensione nxn otenuta come permutazione di una matrice triangolare inferiore che ha gli elementi sulla diagonanleoriginale 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 eL matrice di dimensione nxn otenuta come permutazione di una matrice triangolare inferiore P matrice di permutazioneLa 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 polinomiconv(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 dellepotenze.

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/outputdisp(A) visualizza il contenuto, non il nome, dell’array Adisp(‘testo’) visualizza la stringa di testo racchiusa tra due apiciformat controlla il formato di visualizzazione dell’output

sullo schermofprintf controlla il formato dell’output sullo schermo e su

filex=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 Matlabin 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 shortformat short formato a virgola fissa con 5 cifreformat long formato a virgola fissa con 15 cifreformat short e formato a virgola mobile con 5 cifreformat long e formato a virgola mobile con 15 cifreformat 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 esadecimaleformat + 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 decimaliformat rat approssimazione razionaleformat hex formato esadecimaleformat compact elimina i caratteri extra di nuova riga (line-feed)

per una visualizzazione più compattaformat 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 sinistranumero1 specifica la larghezza minima del camponumero2 specifica il numero di cifre decimaliC contiene i codici di controllo e di formattazione

Formati di scrittura su file (continuazione)

C codici di controllo e di formattazioneCodici 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 baseTipiche funzioni matematiche di base

F. Esponzialiexp(x) calcola ex

sqrt(x) calcola la radice quadrata di x

F. Logaritmichelog(x) calcola il logaritmo naturale di xlog10(x) calcola il logaritmo decimale (in base 10)

Funzioni matematiche di baseTipiche funzioni matematiche di base

F. Complesseabs(x) calcola il valore assoluto di xangle(x) calcola la fase di un numero complessoconj(x) calcola il numero complesso-coniugato

di ximag(x) rende la parte immaginaria di un

numero complesso xreal(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 > 00 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 xasec(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 xatan2(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 dellafunzione.

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 suonome 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 funzioneOccorre 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 funzioneSi 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 controllofor 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 alternativeelseif esegue un blocco di istruzioni se è soddisfatta

una condizione alternativaend termina le istruzioni if, for e while

Istruzioni di controllo (continuazione)

break termina l’esecuzione di un ciclo for o whileswitch 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 logicheMatlab ha 4 operatori logici o booleani e una serie di funzioni logicheOperatori 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 eslcusivol’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 logicheany(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 contieneoppure 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 logichefind(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 logicheisempty(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 diariodiary on attiva la registrazione del file diario corrente

path visualizza il percorso di ricerca delle directorypwd 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 diMatlab. 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 inizialiheader ( 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 ilcomando 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 correntedir 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 filenomefile.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 memoriaHelp 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 celleMatlab ha introdotto una nuova classe di array: l’array di cellanella 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 celleC=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 aF=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 bidimensionaliNei 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 MatlabInoltre 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 linea2. grafici tridimensionali a superficie3. grafici tridimensionali a contorno