Laboratorio di MATLAB - Dipartimento di Ingegneria dell
Transcript
DII – Università di Siena Laboratorio di MATLAB Nicola Ceccarelli Dipartimento di Ingegneria dell’Informazione, Università di Siena, Italy [email protected] www.dii.unisi.it/∼control/teaching Luglio 2005 Programma Lab. Matlab Lun 04/07 ore 11-13 MATLAB di base: start up, funzioni di base Mer 06/07 ore 14-18 MATLAB di base: M-files,grafica Ven 08/07 ore 14-18 MATLAB di base: strutture, Functions Lun 11/07 ore 14-18 toolbox: Symbolic, Esercitazione Mer 13/07 ore 14-18 Simulink Ven 15/07 ore 14-18 Esercitazione Lun 25/07 ore 14-16 16-18 Idoneità Contents 1 Start up 1.1 Vettori & Matrici 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2 OPS: Operatori e caratteri speciali . . . . . . . . . . . . . . . . . . 6 1.2.1 operatori aritmetici . . . . . . . . . . . . . . . . . . . . . . 6 1.2.2 operatori relazionali . . . . . . . . . . . . . . . . . . . . . . 7 1.2.3 operatori logici . . . . . . . . . . . . . . . . . . . . . . . . 8 1.3 Funzioni matriciali . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.3.1 matrici elementari . . . . . . . . . . . . . . . . . . . . . . . 9 1.3.2 informazioni sulle matrici . . . . . . . . . . . . . . . . . . . 10 1.3.3 manipolazione di matrici . . . . . . . . . . . . . . . . . . . . 11 1.3.4 variabili speciali . . . . . . . . . . . . . . . . . . . . . . . . 14 1.4 funzioni elementari . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.4.1 funzioni trigonometriche . . . . . . . . . . . . . . . . . . . . 15 1.4.2 funzioni esponenziali . . . . . . . . . . . . . . . . . . . . . 16 1.4.3 funzioni varie . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.5 Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1.6 Esercizio1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.7 tipi di dato multidimensionali . . . . . . . . . . . . . . . . . . . . . 20 1.7.1 cellarray . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 1.7.2 strutture . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 1.8 M-files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 1.8.1 script file . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 1.8.2 gestione M-files . . . . . . . . . . . . . . . . . . . . . . . . 26 1.8.3 String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 1.9 Esercizio2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2 Grafica 32 2.1 Grafica 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 2.1.1 funzioni correlate . . . . . . . . . . . . . . . . . . . . . . . 34 2.1.2 Traiettorie in R3 . . . . . . . . . . . . . . . . . . . . . . . . 39 2.1.3 Superfici . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 2.1.4 Esercizio3 . . . . . . . . . . . . . . . . . . . . . . . . . . 43 2.1.5 Esercizio4 . . . . . . . . . . . . . . . . . . . . . . . . . . 44 3 Istruzioni di controllo di flusso 45 3.1 for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 3.2 while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 3.3 if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3.4 case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 3.5 Esercizio 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4 function 55 4.1 Esercizio 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 4.2 Esercizio 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 5 Symbolic toolbox 59 5.1 Start-up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 5.2 calcolo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 5.2.1 derivate . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 5.2.2 integrali . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 5.2.3 limiti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 5.3 algebra lineare . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 5.3.1 inversa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 5.3.2 determinante . . . . . . . . . . . . . . . . . . . . . . . . . 70 5.3.3 autovalori . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 5.4 semplificazione di espressioni algebriche . . . . . . . . . . . . . . . 73 5.5 soluzioni di equazioni . . . . . . . . . . . . . . . . . . . . . . . . . 75 5.6 grafica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 5.6.1 ezplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 5.6.2 ezsurf,ezmesh . . . . . . . . . . . . . . . . . . . . . . . . 78 5.6.3 ezplot3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 5.7 Esercizio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 6 Simulink 81 6.1 start up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 6.2 blocchi standard . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 6.2.1 Sources . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 6.2.2 Sinks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 6.2.3 Continuous . . . . . . . . . . . . . . . . . . . . . . . . . . 86 6.2.4 Discrete . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 6.2.5 Math Operation . . . . . . . . . . . . . . . . . . . . . . . . 88 6.2.6 Signal Routing . . . . . . . . . . . . . . . . . . . . . . . . 89 6.2.7 User Defined . . . . . . . . . . . . . . . . . . . . . . . . . 90 6.2.8 Subsystems . . . . . . . . . . . . . . . . . . . . . . . . . 90 6.3 Esercizio1 Simulink . . . . . . . . . . . . . . . . . . . . . . . . . 91 6.4 Esercizio2 Simulink . . . . . . . . . . . . . . . . . . . . . . . . . 92 7 Introduzione al Control toolbox 93 7.1 functions principali . . . . . . . . . . . . . . . . . . . . . . . . . . 93 7.1.1 tf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 7.1.2 zpk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 7.1.3 pole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 7.1.4 zero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 7.1.5 dcgain . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 7.1.6 impulse . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 7.1.7 step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 7.1.8 ltiview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 DII 1 Start up MATLAB = Matrix Laboratory • aprire e chiudere Matlab • interfaccia grafica • directory path: >>cd >>cd .. >>cd percorso_directory >>cd(’percorso_directory’) oppure usare current directory browser. Laboratorio MATLAB DII 2 • assegnazione di uno scalare >> a=3; >> a=3 a = 3 • work space visualizzazione delle variabili nel workspace: >>who visualizza tutte le variabili >>whos visualizza tutte le variabili con descrizione di struttura eliminazione delle variabili dal workspace: >>clear >>clear a; oppure usare workspace browser. • ans: ans è il nome della risposta più recente (most recent answer), è quindi una variabile che vive nel work space. Laboratorio MATLAB DII 3 • richiamo comandi: ↑ richiama ultimo comando ”s” +↑ richiama l’ultimo comando che inizia con la stringa ”s”. oppure usare command history browser. • salvataggio dati: save filename var1 var2 ... crea il file filename.mat contente i dati relativi alle variabili var1 var2 ... (filename deve essere una stringa). • caricamento dati: load ’file_dati.mat’ carica nel workspace tutti i dati contenuti in file_dati.mat. Laboratorio MATLAB DII 4 Vettori & Matrici >>v=[1 2 3]; vettore riga v = 1 2 3 >>v=[1;2;3]; vettore colonna v = 1 2 3 Laboratorio MATLAB DII 5 >>A=[1 2 3;4 5 6;7 8 9]; matrice oppure >>A=[1 2 3; ←4 5 6; ←7 8 9]; A = 1 4 7 2 5 8 3 6 9 Attenzione: nomi delle variabili case sensitive, si distingue tra maiuscole e minuscole!! Provare a generare matrici vettori scalari ... Laboratorio MATLAB DII 6 OPS: Operatori e caratteri speciali operatori aritmetici operatore scalare matrice + a+b (A + B)ij = Aij + Bij − a−b (A − B)ij = Aij − Bij ∗ a∗b / a/b = \ a\b = a b b a .∗ non interessante ./ non interessante .\ non interessante A∗B A/B = A ∗ B −1 A\B = A−1 ∗ B (A. ∗ B)ij = Aij ∗ Bij (A./B)ij = (A.\B)ij = Aij Bij Bij Aij Attenzione: prodotti matriciali righe per colonne dimensioni concordi!!! Laboratorio MATLAB DII 7 operatori relazionali • non esistono variabili booleane • 0:falso • tutto cioc̀he è 6= 0 è vero operatori significato == uguale ∼= 6= > < >= <= - - - - • ogni operatore restituisce 1 se è vera la relazione 0 se è falsa. • tra matrici necessarie dimensioni concordi, (AopB)ij = Aij opBij . • matrici e scalari, (Aopb)ij = Aij opb Laboratorio MATLAB DII 8 operatori logici simbolo significato & and | or ∼ not • aopb restituisce 1 se è vero 0 se è falso • tra matrici necessarie dimensioni concordi, (AopB)ij = Aij opBij . • matrici e scalari, (Aopb)ij = Aij opb questi sono solo alcuni operatori, ce ne sono molti di più digitare al prompt help ops provare ad utilizzare gli operatori ... Laboratorio MATLAB DII 9 Funzioni matriciali matrici elementari • A=zeros(m,n) matrice di 0 con m righe e n colonne • A=ones(m,n) matrice di 1 con m righe e n colonne • A=eye(n) matrice identità di dimensione nxn Laboratorio MATLAB DII 10 informazioni sulle matrici • [m,n]=size(A) ritorna le dimensioni m,n della matrice A • M=length(A) ritorna la dimensione massima di A • isequal(A,B) ritorna 1 se A=B, 0 altrimenti Laboratorio MATLAB DII 11 manipolazione di matrici • A=diag(v); A= • a=min:passo:max v1 0 0 v2 .. . .. . 0 0 questa notazione definisce un vettore di n x(1)=min ··· 0 .. .. . ··· . ··· = 0 vn max−min passo + 1 elementi con x(n)=max. • sottomatrici A(v_row,v_col) seleziona la sotto matrice corrispondente agli indici di riga e di colonna definiti rispettivamente nei vettori v_row e v_col. A(1:4,2:3) seleziona la sottomatrice 4 × 2 che ha elementi nelle righe 1 : 4 e colonne 2 : 3 Laboratorio MATLAB DII 12 • B=A’ assegna a B il trasposto di A (B = AT ) • concatenazione orizzontale: A=[B1,B2,...,Bn] oppure A=[B1 B2 ... Bn] assegna alla matrice A la concatenazione orizzontale delle matrici B1,B2,...,Bn. • concatenazione verticale: A=[B1;B2;...;Bn] assegna alla matrice A la concatenazione verticale delle matrici B1,B2,...,Bn. • esempio: >>B1=[1 2 3]; >>B2=[3 2 1]; >>A1=[B1 B2] A1= 1 2 3 3 2 1 Laboratorio MATLAB DII 13 >>A2=[B1;B2] A2= 1 2 3 3 2 1 • sotto-assegnazione: >>A2(1,:)=[1 1 1] A2= 1 1 1 3 2 1 Laboratorio MATLAB DII 14 variabili speciali variabile valore ans risposta più recente pi π i unità immaginaria inf infinito NaN not a number, per operazioni indefinite (tipicamente 00 ) molto di più... (help elmat) provare ... Laboratorio MATLAB DII 15 funzioni elementari funzioni trigonometriche sin(x) asin(y) cos(x) acos(y) tan(x) atan(y) atan2(y, x) attenzione: x deve essere espresso in radianti!!! Laboratorio MATLAB DII 16 funzioni esponenziali istruzione valore exp(x) ex log(x) log(x) log10(x) log10 (x) log2(x) log2 (x) √ x sqrt(x) xey xˆy x ∗ 10y xy Laboratorio MATLAB DII 17 funzioni varie molto di più (vedere help istruzione valore abs(x) |x| imag(x) Im(x) real(x) Re(x) sign(x) segno(x) elfun) provare.... Laboratorio MATLAB DII 18 Help • >>help • >>help \"nome toolbox" • >>help ops • >>help elmat • >>help elfun • >>help "nome function" ritorna la sintassi esatta • help html con browser. Laboratorio MATLAB DII 19 Esercizio1 1. Definire una matrice A 3x5 di zeri (utilizzando la function zeros), definire ora un vettore a di dimensioni 1x5 e assegnarlo alla prima riga di A. Definire una matrice B come la trasposta di A ed estrarne quindi la sottomatrice C 3x3 composta dalla 2,3,4 riga di B. 2. Siano A,B quelle definite al punto 1), Definire una nuova matrice D 5x3 diversa dalla matrice nulla. Effettuare le tre moltiplicazioni : M1=D*A M2=A*D M3=moltiplicazione elemento per elemento tra D e B verificare con la function predefinita (size) che le dimensioni siano: M1 ⇒ 5x5; M2 ⇒ 3x3; M3 ⇒ 5x3 salvare il workspace con le sole matrici A,B,C,M1,M2,M3 Laboratorio MATLAB DII 20 tipi di dato multidimensionali cellarray • sono matrici i cui elementi sono array, ogni elemento puo’ avere dimensioni diverse. • definizione di un cell array: C={A1 A2;B1 B2} assegna alla variabile C un cellarray di 2 × 2 elementi corrispondenti alle matrici A1,A2,B1,B2 • indicizazzione: D=C{i,j} assegna alla variabile D l’elemento i,j di C quindi un array • concatenazione orizzontale: D=[C {A3;B3}] assegna alla variabile D la concatenazione orizzontale di C con il cellarray {A3;B3} • concatenazione verticale: Laboratorio MATLAB DII 21 D=[C;{A3 B3}] assegna alla variabile D la concatenazione verticale di C con il cellarray {A3 B3} Laboratorio MATLAB DII 22 strutture • matrici i cui elementi sono accessibili attraverso campi testuali, ogni campo puo’ essere di tipo diverso con dimensioni diverse • definizione di una struttura vuota (non obbligatorio): S=struct(’nome’,{},’cognome’,{},’matricola’,{}); assegna alla variabile S una struttura vuota caratterizzata dai tre campi nome cognome matricola • assegnazione di valori ai campi: >>S.nome=’mario’; >>S.cognome=’rossi’; >>S.matricola=652; >>S S = nome: ’mario’ Laboratorio MATLAB DII 23 cognome: ’rossi’ matricola: 652 • restituzione valori: la notazione Struttura.campo restituisce il valore della struttura per il campo specificato >>a=S.matricola a= 652 Laboratorio MATLAB DII 24 M-files - Matlab può eseguire sequenze di comandi da file. Questi file sono chiamati M-file perché hanno estensione ”.m”. - La maggior parte del codice che produrrete sarà creato e gestito tramite M-files. - due tipi di M-files: script files e function files Laboratorio MATLAB DII 25 script file - Uno script file consiste di una sequenza di comandi Matlab. - Se creo un file prova.m, e lo eseguo come un comando al prompt invocando: >>prova (il nome del file senza l’estensione) saranno eseguite tutte le istruzioni contenute nel file prova.m. - Le variabili generate da uno script file sono globali e quindi andranno a finire direttamente nel workspace della corrente sessione di Matlab con le naturali conseguenze. - Un M-files può richiamare un’altro M-files, oppure può richiamare se stesso in modo ricorsivo. Laboratorio MATLAB DII 26 gestione M-files stringhe: s=’hello world’; quello che sta tra gli apici definisce la stringa che viene assegnata ad s. >>s s= hello world disp: i comandi disp(’hello world’); e disp(s); producono lo stesso risultato: hello world cioè fanno il display di una stringa. error: il comando error(s); non solo fa il display della stringa s ma inoltre interrompe l’esecuzione dello M-file. input: il comando c=input(s); fa il display della stringa s ed inoltre aspetta la Laboratorio MATLAB DII 27 digitazione di un valore fino a che non viene premuto il tasto invio ←-. Tale valore viene assegnato alla variabile c. Laboratorio MATLAB DII 28 String - S=’sequenza di caratteri’ definisce un vettore di caratteri assegnato alla variabile S. - funzioni correlate: * S=char(X); ritorna una stringa di caratteri associati ai valori di X, in codifica ASCII * X=double(S); ritorna i valori numerici associati alla stringa S, in codifica ASCII * S=[S1 S2 ... Sn]; concatenazione orizzontale di n stringhe Laboratorio MATLAB DII 29 * S=strcat(S1,S2,...,Sn); concatenazione orizzontale di n stringhe * S=strvcat(S1,S2,...,Sn); concatenazione verticale di n stringhe * S={S1 S2 ... Sn}; crea un vettore le cui componenti sono n stringhe * ischar(S); restituisce 1 se S è una stringa, 0 altrimenti * iscellstr(S); restituisce 1 se S è un vettore di stringhe, 0 altrimenti Laboratorio MATLAB DII 30 * S=sprintf(format,A); genera stringhe con il comando C-style sprintf(). >> s=sprintf(’sono passate %g ore ...’,2) s = sono passate 2 ore ... Laboratorio MATLAB DII 31 Esercizio2 Creare uno scriptfile eseguibile in ambiente matlab, che richiede: 1. digitazione in ingresso nome e cognome (usare la function input) 2. concatenare nome e cognome verticalmente orizzontalmente nelle quattro combinazioni possibili assegnandole a quattro diverse variabili 3. generare i vettori dei codici ascii relativi alle lettere del nome e cognome 4. utilizzando la function predefinita flipdim(v,2) (help flipdim) rigirare questi ultimi e utilizzando char calcolarne le stringhe associate s1 s2. 5. In uscita il file deve fare il display di due frasi... il mio nome è s1 il mio cognome è s2 6. fare in oltre la media dei codici dei caratteri nome e cognome e generare la stringa s3 che contiene il carattere relativo Laboratorio MATLAB DII 32 Grafica - Grafica 2D - Traiettorie in R3 - Superfici Laboratorio MATLAB DII 33 Grafica 2D si rappresentano funzioni del tipo y ex. due funzioni c(t) = f (x) = cos(t) e s(t) = sin(t) definizione di un vettore temporale t: >>t=0:0.2:4*pi; generazione delle due funzioni calcolate su t: >>c=cos(t); >>s=sin(t); grafica: 1 >>figure; >>plot(t,c); >>figure; >>plot(t,s); 0.8 0.6 0.4 0.2 0 −0.2 −0.4 −0.6 −0.8 −1 0 1 2 3 4 5 6 7 Laboratorio MATLAB DII 34 funzioni correlate - h=figure genera una nuova istanza dell’oggetto figura, ed assegna alla variabile h un handle a tale figura. - close all chiude tutte le figure aperte - plot(x,y) plotta su grafico xy tutte le coppie(xi , yi ) congiungendo i punti successivi con linea. - plot(x,y,’tratto|simbolo|colore’) definisce il tipo di tratto che congiunge punti successivi, il simbolo associato ad ogni punto, il colore. Laboratorio MATLAB DII 35 carattere colore carattere simbolo r rosso carattere tratto + crocetta g verde - linea o cerchietto b blue – trattini * asterisco c celeste : puntini x x m magenta -. tratto punto d rombo y giallo s quadrato k nero w bianco molto di più help plot Laboratorio MATLAB DII 36 - hold on abilita la sovrapposizione di più grafici all’interno della stessa figura - hold off disabilita la sovrapposizione di più grafici all’interno della stessa figura (una nuova istanza di plot elimina tutto quello che era stato tracciato precedentemente sulla figura di riferimento). - legend(S1,S2,...) aggiunge la legenda in base al numero di tracce, ad ogni traccia associa la stringa Si corrispondente - title(Stitle) associa la stringa Stitle al titolo della figura - xlabel(Sx) associa una stringa Sx all’asse x - ylabel(Sy) associa una stringa Sy all’asse y Laboratorio MATLAB DII 37 - axis([xmin xmax ymin ymax]) setta i limiti sugli assi - axis equal setta le stesse unità di misura e gli stessi ”aspect ratio” - axis square rende la regione di rappresentazione quadrata - grid on aggiunge la griglia alla figura - subplot(m,n,p) crea m×n finestre nella stessa figura e attiva la p-esima da sinistra in alto Laboratorio MATLAB DII 38 sin(x) axis equal cos(x) axis square 1 4 0.5 2 0 0 −2 −0.5 −4 5 −1 10 tan(x) con uso di axis 0 5 10 15 sin(x) tan(x) cos(x) con legenda 5 4 sin cos tan 3 asse y 0 2 1 0 −1 −2 0 5 asse x 10 Laboratorio MATLAB DII 39 Traiettorie in R3 si rappresenta funzioni f (t) : R → R3 >>t=0:0.01:4*pi; plot3(fx,fy,fz) visualizza le terne (fx i , fy i , fz i ) nel sistema di riferimento >>fx=sin(5*t); >>fy=cos(5*t); xyz >>fz=t; >>plot3(fx,fy,fz); 15 10 5 0 1 0.8 0.6 1 0.4 0.2 Attenzione: le dimensioni sempre 0.5 0 −0.2 −0.4 −0.6 −0.8 0 −0.5 −1 −1 concordi! Laboratorio MATLAB DII 40 Superfici si rappresenta z = f (x, y) : R2 → R surf(X,Y,Z) genera superfici mesh(X,Y,Z) genera griglie superficiali osservazione: z deve essere definito per ogni coppia possibile (x, y) ∈ D(f ) Laboratorio MATLAB DII 41 si definiscano due vettori: x=0:0.2:2*pi; y=0:0.2:4*pi; una funzione generale z = f (x, y) assume valori su tutte le possibili coppie (x, y) da cui è evidente che dim(z) = dim(x) × dim(y) [X,Y]=meshgrid(x,y); genera le matrici: X contiene copie per righe di x tante volte quanto è la dimensione di y Y contiene copie per colonne di y tante volte quanto è la dimensione di x a questo punto è possibile definire Z: Z = f (X, Y ); (senza nessun problema di dimensioni, prodotto cartesiano di x ed y !) Laboratorio MATLAB DII 42 ex. >>Z=sin(X+Y); >>surf(X,Y,Z); >>mesh(X,Y,Z); colormap definisce la colorazione del surf o del mesh. nelle demo ampia descrizione dei comandi di grafica 3D. Laboratorio MATLAB DII 43 Esercizio3 1. definire e plottare la seguente funzione f (t) = t2 per t ≤ 1, 1/t per t > 1. 2. calcolare le derivate sia numericamente che in forma analitica, plottarne quindi i valori 3. utilizzando subplot plottare nella stessa, la differenza tra le due derivate precedentemente calcolate insieme ai tre precedenti grafici. Si utilizzino colori e tratti diversi per ognuno. Laboratorio MATLAB DII 44 Esercizio4 Calcolare la funzione f (x, y) : R2 → R definita come il quadrato della distanza della posizione x, y dalla circonferenza centrata in un generico Xc di raggio r . Utilizzando surf e mesh tracciarne l’andamento grafico. Laboratorio MATLAB DII 45 Istruzioni di controllo di flusso for while if case Laboratorio MATLAB DII 46 for sintassi: ··· for variabile=espressione istruzioni end ··· Laboratorio MATLAB DII 47 ex. 1 n=10; x=[]; for i=1:n x=[x,iˆ2]; end ex. 2 passo=0.1 t=0.1:passo:100; f=log(t); plot(t,f,’-m’); for i=2:length(t) dfdt(i-1)=(f(i)-f(i-1))/passo; end hold on plot(t(1:length(t)-1),dfdt,’:b’); Laboratorio MATLAB DII 48 while sintassi: ··· while relazione istruzioni end ··· Laboratorio MATLAB DII 49 ex. 3 n=0; a=6; while (n<exp(a)) n=n+1; end ex. 4 n=6; A=magic(n); B=zeros(n); C=[]; k=6; while (k>0) B(6-k+1,:)=A(k,:); C=[C A(:,k)]; k=k-1; end Laboratorio MATLAB DII 50 if sintassi: ··· if relazione1 istruzioni1 elseif relazione2 istruzioni2 else istruzioni3 end ··· Laboratorio MATLAB DII 51 ex. 5 k=input(’dammi un numero maggiore di cento :’); str=ischar(k); if k>100 & ˜str disp(’bravo!’); delta=100-k elseif k>50 & ˜str disp(’ci sei quasi!’) delta=100-k elseif k>0 & ˜str disp(’mica tanto vicino!’); delta=100-k elseif str disp(’ho detto NUMEROOOOO’); else disp(’allora sei duro!’); delta=100-k end Laboratorio MATLAB DII 52 case sintassi: ··· switch espressione di switch case case valore istruzioni case {case valore1,case valore2,case valore3,...} istruzioni otherwise istruzioni end ··· Laboratorio MATLAB DII 53 ex. 6 k=input(’dammi un numero da 1 a 3 :’); switch k case 1 disp(’bravo!’); delta=100-k case {2,3} disp(’esagerato!’) delta=100-k otherwise disp(’allora sei duro!’); delta=100-k end Laboratorio MATLAB DII 54 Esercizio 5 1. Generare una matrice random di 100×100 utilizzando il comando rand (help rand) 2. estrarne la diagonale principale utilizzando un doppio ciclo for, assegnarla ad un vettore v1 3. estrarne la contro diagonale utilizzando while, assegnarla ad un vettore v2 4. plottare i due vettori sulla stessa figura. Laboratorio MATLAB DII 55 function sono script file con dichiarazione di funzione prendono parametri in ingresso e restituiscono parametri in uscita: %help funzione pippo function [A,E,O,...]=nomefunction(B,C,D,...); ... istruzioni ... al nome del file viene associato un comando Matlab Attenzione: discrepanza tra nome file e nome function!! Laboratorio MATLAB DII 56 ex. 5 %z=somma(x,y) fa la somma di due scalari x,y function [s,d]=sommadiff(x,y); s=x+y; d=x-y; se il file viene salvato come sommadiff.m, posso utilizzare la function sommadiff: >>[a,b]=sommadiff(3,5) >>a=8 >>b=-2 Attenzione: perchè matlab riconosca il nome di una function come comando è necessario che il file sia nella current directory Laboratorio MATLAB DII 57 Esercizio 6 creare una function che dato in ingresso un numero x produce il fattoriale x!. Laboratorio MATLAB DII 58 Esercizio 7 Scrivere una funzione che prende in ingresso una matrice M quadrata e restituisce l’inversa di M (naturalmente la funzione Matlab inv può essere utilizzata solo per controllare i risultati). La seguente formula indica come calcolare ogni elemento della matrice inversa: M −1 1 (−1)i+j det(Mji ) (i, j) = det(M ) dove Mji la matrice M decurtata della j -esima riga e della i-esima colonna. Laboratorio MATLAB DII 59 Symbolic toolbox Symbolic toolbox fornisce gli strumenti per gestire il calcolo simbolico in ambiente MatLab Calcolo: - derivate - integrali - limiti Algebra Lineare: - inversa - determinante - autovalori Laboratorio MATLAB DII 60 Semplificazioni di espressioni algebriche Soluzioni di equazioni Grafica Laboratorio MATLAB DII 61 Start-up • dichiarazione di variabili simboliche: >>syms x y z genera nel workspace le variabili simboliche x y z • passaggio da double a variabili simboliche: utilizzando il comando sym(nome_variabile_senza_apici) si trasforma un double in una variabile simbolica (istanza di un oggetto simbolico). >>A=zeros(4); >>B=sym(A) B= [ 0, 0, 0, 0] [ 0, 0, 0, 0] [ 0, 0, 0, 0] [ 0, 0, 0, 0] Laboratorio MATLAB DII 62 • passaggio da variabile simbolica a double: se l’oggetto simbolico è composto solo da numeri si utilizza il comando double >>C=double(B) C = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Laboratorio MATLAB DII 63 • funzioni: >>syms x y z >>f=1/exp(sin(xˆ2+yˆ2)) la variabile f è ora un oggetto simbolico che rappresenta f (x) = 1 esin(x2 +y2 ) Laboratorio MATLAB DII 64 calcolo derivate si utilizza il comando: diff(var_fun,var_di_der,nth_der): ex1. >>syms x a >>s=sin(a*x); >>dsdx=diff(s,x,1) ans = cos(a*x)*a >>dsdx=diff(s) ans = cos(a*x)*a Laboratorio MATLAB DII 65 ex2. >> diff(f,x,4) ans = 16/exp(sin(xˆ2+yˆ2))*cos(xˆ2+yˆ2)ˆ4*xˆ4+96/ exp(sin(xˆ2+yˆ2))*cos(xˆ2+yˆ2)ˆ2*xˆ4*sin(xˆ2+yˆ2) -48/exp(sin(xˆ2+yˆ2))*cos(xˆ2+yˆ2)ˆ3*xˆ2+48/ exp(sin(xˆ2+yˆ2))*sin(xˆ2+yˆ2)ˆ2*xˆ4144/exp(sin(xˆ2+yˆ2))*cos(xˆ2+yˆ2)*xˆ2*sin(xˆ2+yˆ2) -64/exp(sin(xˆ2+yˆ2))*cos(xˆ2+yˆ2)ˆ2*xˆ4+12/ exp(sin(xˆ2+yˆ2))*cos(xˆ2+yˆ2)ˆ2-16/ exp(sin(xˆ2+yˆ2))*sin(xˆ2+yˆ2)*xˆ4+48/ exp(sin(xˆ2+yˆ2))*cos(xˆ2+yˆ2)*xˆ2+12/ exp(sin(xˆ2+yˆ2))*sin(xˆ2+yˆ2) Laboratorio MATLAB DII 66 integrali R I(x) = f (x)dx si utilizza il comando: fint=int(var_fun,var); cerca di trovare quella variabile fint t.c diff(fint,x) produce var_fun Rb c = a f (x)dx si utilizza il comando: c=int(var_fun,var,a,b); calcola l’integrale definito. ex1. >>syms x a >>s=sin(a*x); >> int(s,x,0,2*pi/a) ans = 0 Laboratorio MATLAB DII 67 ex2. >>syms x a >>s=sin(a*x); >> int(s,x) ans = -1/a*cos(a*x) Laboratorio MATLAB DII 68 limiti limx→x+/− f (x) si utilizza il comando: 0 k=limit(var_fun,var,val,r_or_l); calcola il limite della funzione varfun per la variabile var che tende al valore val tendendo da destra se r_or_l=’right’ da sinistra se r_or_l=’left’ ex.1 >>syms x >> f2=abs(x); >> limit(diff(f2),x,0,’left’) ans = -1 >> limit(diff(f2),x,0,’right’) ans = 1 Laboratorio MATLAB DII 69 algebra lineare inversa data una matrice simbolica A quadrata, voglio determinare B = A−1 : B=inv(A_symb); ex.1 >> syms a b c d >> A=[a b;c d] A = [ a, b] [ c, d] >> B=inv(A) B = [ d/(a*d-b*c), -b/(a*d-b*c)] [ -c/(a*d-b*c), a/(a*d-b*c)] Laboratorio MATLAB DII 70 determinante data una matrice simbolica A quadrata ne voglio calcolare il determinante: d=det(A); ex1. >>syms a b c d e f g h i >>A=[a b c;d e f; g h i] A = [ a, b, c] [ d, e, f] [ g, h, i] >> det(A) ans = i*a*e-a*f*h-i*d*b+d*c*h+g*b*f-g*c*e Laboratorio MATLAB DII 71 autovalori data una matrice simbolica A quadrata, ne voglio calcolare gli autovalori: eig(A) ritorna il vettore le cui componenti sono gli autovalori di A ex1. >> syms >> A=[a A = [ a, b, [ c, d, [ 0, 0, a b c d b 0;c d 0;0 0 3] 0] 0] 3] >> v=eig(A) Laboratorio MATLAB DII 72 v = [ 3] [1/2*a+1/2*d+1/2*(aˆ2-2*a*d+dˆ2+4*b*c)ˆ(1/2)] [1/2*a+1/2*d-1/2*(aˆ2-2*a*d+dˆ2+4*b*c)ˆ(1/2)] Laboratorio MATLAB DII 73 semplificazione di espressioni algebriche • f=simple(var_fun): cerca tra tutte le tecniche di semplificazione quella che produce la stringa più corta. • f=simplify(var_fun): semplificazione standard e non solo. • f=subs(var_fun,{var1 var2 ...},{val1 val2 ...}) sostituisce alle variabili var1,var2,... i valori corrispondenti val1,val2,... ex1. >> syms >> A=[a A = [ a, b, [ c, d, [ 0, 0, a b c d b 0;c d 0;0 0 3] 0] 0] 3] Laboratorio MATLAB DII 74 >>v=subs(eig(A),{b,c},{0,0}) v = [ 3] [1/2*a+1/2*d+1/2*(aˆ2-2*a*d+dˆ2)ˆ(1/2)] [1/2*a+1/2*d-1/2*(aˆ2-2*a*d+dˆ2)ˆ(1/2)] >>simple(v) ans = [ 3] [ a] [ d] Laboratorio MATLAB DII 75 soluzioni di equazioni f (x) = 0, data una funzione in forma di variabile simbolica var_fun se ne può determinare gli zeri: z=solve(var_fun,var) che ne determina le soluzioni rispetto alla variabile var ex.1 >> syms x a b c >> f=a*xˆ2+b*x+c f = a*xˆ2+b*x+c >> solve(f,x) ans = [ 1/2/a*(-b+(bˆ2-4*c*a)ˆ(1/2))] [ 1/2/a*(-b-(bˆ2-4*c*a)ˆ(1/2))] Laboratorio MATLAB DII 76 ex.2 >> syms x a >> f2=log(x)-1/5*xˆ2-a f2 = log(x)-1/5*xˆ2-a >> solve(f2,x) ans = 1/2*(-2*lambertw(-2/5*exp(2*a)))ˆ(1/2)*5ˆ(1/2) Laboratorio MATLAB DII 77 grafica ezplot ezplot: traccia le funzioni f (x) : R :→ R ezplot(var_fun,[min_val max_val]) traccia la funzione var_fun nel dominio [min_val max_val] ex.1 >>syms x >> f=5*sin(x)ˆ2+xˆ2; >> ezplot(f,[-pi pi]) Laboratorio MATLAB DII 78 ezsurf,ezmesh ezsurf(var_fun,[xv_min xv_max yv_min yv_max]) traccia superfici per funzioni f (x, y) : R2 → R sul dominio [xv_min xv_max yv_min yv_max] ezmesh(var_fun,[xv_min xv_max yv_min yv_max]) traccia griglie superficiali per funzioni f (x, y) : R2 → R sul dominio [xv_min xv_max yv_min yv_max] ex.1 >>syms x y >>ezsurf(sin(x+y),[-2*pi 2*pi -2*pi 2*pi]) >>ezmesh(sin(x+y)) Laboratorio MATLAB DII 79 ezplot3 ezplot3(var_x,var_y,var_z,[t_min t_max]) traccia traiettorie f (t) : R → R3 ex.1 >> syms t >> ezplot3(sin(t),t,cos(t),[-5*pi 5*pi]) Laboratorio MATLAB DII 80 Esercizio 1. definire la funzione f (x, y, z) = exp(sin(x + y)) + z 2 come oggetto simbolico 2. a partire da f (x) costruirne Gradiente ed Hessiano 3. plottare f (x, y) = f (x, y, z)|z=3 4. plottare f (y, z) = f (x, y, z)|x=2y 5. plottare f (x, y) = f (x, y, z)|x=y2 ;z=√(x) Laboratorio MATLAB DII 81 Simulink Simulink è un pacchetto software che permette di simulare ed analizzare sistemi le cui uscite variano in funzione del tempo. Simulink si basa su una procedura in due passi: • Creazione di un modello grafico del sistema tramite utilizzo dell’editor di modelli Simulink. In questa fase l’utente specifica le relazioni matematiche, che intercorrono tra gli ingressi e le uscite del sistema. • Utilizzo di Simulink per la simulazione delle propretà del sistema in un particolare intervallo temporale. Laboratorio MATLAB DII 82 start up - creare un nuovo modello - aggiungere i blocchi necessari (drag & drop) - linkare i blocchi (drag & drop) - settare il tempo di simulazione - salvare il modello - lanciare la simulazione Laboratorio MATLAB DII 83 blocchi standard • Sources • Sinks • Continuous • Discrete • Math Operation • Signal Routing • User Defined • Subsystems Laboratorio MATLAB DII 84 Sources Constant: genera un segnale costante con valore regolabile. Ramp: genera il segnale rampa con pendenza regolabile. Random Num.: genera un segnale random con distribuzione normale e varianza regolabile. Sine: genera il segnale A · sin(ω · t + φ) con ampiezza seno e frequenza regolabili. Step: genera il segnale gradino con valore iniziale finale e istante di attivazione regolabili. Clock: genera in uscita come segnale il tempo di simulazione. From Worksp.: genera in uscita un segnale a partire da una variabile definita nel workspace var_in=[sig_time signal], dove sig_time e signal sono due vettori colonna rappresentanti il tempo di simulazione e il segnale. >>t=1:0.01:10; >>var_in=[t’ sin(t)’]; Laboratorio MATLAB DII 85 Sinks Scope: visualizza l’andamento temporale del segnale in ingresso. To File: dato un segnale in ingresso genera un file “*.mat” che contiene una variabile costituita da due righe, rispettivamente per il tempo di simulazione e per il segnale. To Workspace: dato un segnale in ingresso genera una variabile di tipo struttura od array in uscita, contenente il segnale ed eventualmente il tempo di simulazione. XY Graph: dati due segnali in ingresso rappresentanti il segnale delle ascisse e delle ordinate, genera la traiettoria in R2 che questi rappresentano. Laboratorio MATLAB DII 86 Continuous Derivative: genera la derivata del segnale di ingresso. Integrator: genera l’integrale del segnale di ingresso. Transfer Fcn: blocco che simula il sistema specificato tramite funzione di trasferimento f (s) = N (s) D(s) . Zero-Pole: blocco che simula il sistema specificato tramite funzione di trasferimento definita a partire da poli e zeri. State-Space: blocco che simula il sistema specificato tramite la sua rappresentazione di stato. Laboratorio MATLAB DII 87 Discrete Unit delay: ritarda il segnale tempo-discreto in ingresso di un istante di campionamento. Discrete Int: genera l’integrale tempo-discreto del segnale di ingresso. Discrete T. Fcn: blocco che simula il sistema tempo-discreto specificato tramite funzione di trasferimento f (z) = N (z) D(z) . Discrete Z-P: blocco che simula il sistema tempo-discreto specificato tramite funzione di trasferimento definita a partire da poli e zeri. Discrete S-S: blocco che simula il sistema tempo-discreto specificato tramite la sua rappresentazione di stato. Laboratorio MATLAB DII 88 Math Operation Abs: genera come segnale di uscita il valore assoluto di quello di ingresso. Gain: genera come segnale di uscita il segnale di ingresso moltiplicato per un parametro k regolabile. Sum: genera come segnale di uscita la somma degli ingressi, con numero di ingressi e segni regolabili. Trigonometric: genera come segnale di uscita la funzione trigonometrica specificata, del segnale di ingresso. Math fun.: genera in uscita una delle function elementari predefinite in Matlab, calcolata sul segnale di ingresso. Matrix Concat.: genera in uscita la concatenazione di più segnali in ingresso. Matrix Gain: genera in uscita il segnale in ingresso moltiplicato per una data matrice. Laboratorio MATLAB DII 89 Signal Routing Mux: genera in uscita un unico segnale multiplo (bus), costituito dall’unione di più segnali di ingresso. Demux: genera pi segnali in uscita a partire da un unico segnale multiplo (bus) in ingresso. Laboratorio MATLAB DII 90 User Defined Fcn: permette di specificare un segnale di uscita a partire da una qualsiasi funzione del segnale di ingresso (u), scritta in linguaggio Matlab. Matlab Fcn: permette di specificare un segnale di uscita a partire da una qualsiasi funzione Matlab predefinita del segnale di ingresso (u). Subsystems Subsystem: permette all’utente di costruire sotto blocchi simulink. Laboratorio MATLAB DII 91 Esercizio1 Simulink 1. Creare uno schema a blocchi che: • genera una rampa di pendenza 5, con display • alla rampa somma uno scalare k2 variabile nel workspace, e ne fa display congiuntamente con la precedente 2. Generare uno schema a blocchi che: • genera il segnale y(t) = sin(2t) su un orizzonte t ∈ [0, 4π] • riproduce il segnale z1 (t) = d dt y(t) y(t + π2 ) • riproduce il segnale z3 (t) = R • riproduce il segnale z2 (t) = y(t)dt Laboratorio MATLAB DII 92 Esercizio2 Simulink Si consideri un’asticella rotante alla cui estremità è posta una massa m = 2Kg. La lunghezza dell’asticella è soggetta alla seguente dinamica: ¨l = − k l + k l0 . m m con l0 = 2m e k = 3N/m. ˙ = 0 e l(0) = 1m. Con condizioni iniziali l(0) L’asticella ruota con frequenza ω = 2.5rad/sec. È richiesto di: • costruire un modello simulink di tale sistema in cui venga fatto il display dell’andamento temporale della lunghezza dell’asticella, della coordinata x ed y della massa. • dare rappresentazione grafica della traiettoria xy relativa alla posizione della massa. Laboratorio MATLAB DII 93 Introduzione al Control toolbox functions principali tf sintassi: sys=tf(num,den) output: sys un Transfer Function object input: num vettore contente i coefficienti del numeratore ordinati in modo decrescente rispetto alla potenza di s a cui sono relativi input: den vettore contente i coefficienti del denominatore ordinati in modo decrescente rispetto alla potenza di s a cui sono relativi 2s − 2 S= 2 s + 4s + 3 >>S=tf([2 -2],[1 4 3]); Laboratorio MATLAB DII 94 sys.num{1}=numeratore sys.den{1}=denominatore Laboratorio MATLAB DII 95 zpk sintassi: sys=zpk(z,p,k) output: sys un Transfer Function object input: z vettore contente gli zeri della funzione di trasferimento input: p vettore contenente i poli della funzione di trasferimento input: k guadagno della funzione di trasferimento S=k (s − z1 ) · · · (s − znz ) (s − p1 ) · · · (s − pnp ) Laboratorio MATLAB DII 96 >>S=zpk(1,[-3 -1],2); sys.z{1}=zeri sys.p{1}=poli sys.k{1}=guadagno Laboratorio MATLAB DII 97 pole sintassi: p=pole(sys) input: output: sys un Transfer Function object p vettore contenente i poli della funzione di trasferimento >> pole(S) ans = -3 -1 Laboratorio MATLAB DII 98 zero sintassi: z=zero(sys) sintassi: [z,k]=zero(sys) input: sys un Transfer Function object output: z vettore contenente gli zeri della funzione di trasferimento output: k guadagno >> [z,k]=zero(S) z = 1 k = 2 Laboratorio MATLAB DII 99 dcgain sintassi: dc=dcgain(sys) input: output: sys un Transfer Function object dc guadagno in continua (dc = S(0)) >> dc=dcgain(S) dc = 0.6667 Laboratorio MATLAB DII 100 impulse sintassi: impulse(sys) sintassi: impulse(sys,t) input: sys un Transfer Function object input: t vettore che specifica l’orizzonte temporale display: viene visualizzato l’andamento temporale della risposta impulsiva sistema W (s) u(t) = δ(t) U (s) = 1 y(t) = L−1 (W (s)) Y (s) = W (s)U (s) >> impulse(S,0:0.05:10) nota:la risposta impulsiva è l’antitrasformata della funzione di trasferimento Laboratorio MATLAB DII 101 step sintassi: step(sys) sintassi: step(sys,t) input: sys un Transfer Function object input: t vettore che specifica l’orizzonte temporale display: viene visualizzato l’andamento temporale della risposta impulsiva sistema 0 t<0 u(t) = 1 t≥0 y(t) = L−1 ( Ws(s) ) W (s) U (s) = 1 s Y (s) = W (s)U (s) >> impulse(S,0:0.05:10) Laboratorio MATLAB DII 102 ltiview sintassi: >>ltiview GUI Graphical User Interface per l’analisi di sistemi Laboratorio MATLAB
Documenti analoghi
Introduzione a Matlab e Simulink
lineare per l’asse y
semilogy grafico con scala logaritmica per l’asse y e
lineare per l’asse x
La struttura dei comandi è plot(x1,y1,x2,y2,…)
E’ possibile specificare il colore e il tipo di linea ...
Mini Manuale Matlab
Facendo precedere l'operatore “^” da un punto in pratica eleviamo a potenza n-esima i
singoli elementi aij della matrice A. La matrice risultato è posta in B:
Il sistema MATLAB
produce il messaggio di errore
??? error using = = > +Matrix dimension must agree
>>x*y
produce il messaggio di errore
??? error using = = > *Inner matrix dimension must agree
Si può infatti effett...
Introduzione a MATLAB
da quel momento appare sulla linea di comando
• what:
what elenco di tutte le funzioni MATLAB nell’area
di lavoro (estensione .m) e dei file di dati che sono
stati salvati (estensione .mat)
Version...