Introduzione a MATLAB
Transcript
Introduzione a MATLAB
Introduzione a MATLAB Enzo TONTI ∗ 21 marzo 1997 Indice 1 Cosa e’ MATLAB 2 2 Come opera 3 3 Matrici 3.1 Come assegnare una matrice . . . . . . . . . . . 3.2 Prodotto . . . . . . . . . . . . . . . . . . . . . . 3.3 Inversa . . . . . . . . . . . . . . . . . . . . . . . 3.4 Autovalori . . . . . . . . . . . . . . . . . . . . . 3.5 Dimensioni . . . . . . . . . . . . . . . . . . . . 3.6 Trasposta . . . . . . . . . . . . . . . . . . . . . 3.7 Come MATLAB memorizza le matrici . . . . . 3.8 Analisi degli elementi di una matrice . . . . . . 3.9 Vettore con elementi in progressione aritmetica 3.10 Prodotto scalare di due vettori . . . . . . . . . . 3.11 Matrici particolari . . . . . . . . . . . . . . . . 3.12 Uso dei due punti . . . . . . . . . . . . . . . . . 3.13 Operazioni sulle matrici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 6 6 6 7 7 7 8 8 9 9 10 10 4 Funzioni 11 4.1 Funzioni di libreria . . . . . . . . . . . . . . . . . . . . . . . . 11 4.2 Funzioni create dall’utente . . . . . . . . . . . . . . . . . . . . 12 ∗ Indirizzo dell’autore: Dipartimento di Ingegneria Civile, Università di Trieste, Piazzale Europa 1, 34127 Trieste, Italia. e-mail: [email protected] 1 5 Costrutti alternativi 5.1 Istruzione ”if” . . 5.2 Istruzione ”while” 5.3 Istruzione ”for” . e ripetitivi 12 . . . . . . . . . . . . . . . . . . . . . . . . . 12 . . . . . . . . . . . . . . . . . . . . . . . . . 13 . . . . . . . . . . . . . . . . . . . . . . . . . 14 6 Archivi 14 6.1 Salvare su file . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 6.2 Prelevare da file . . . . . . . . . . . . . . . . . . . . . . . . . . 15 7 Grafici 7.1 Grafici bidimensionali semplici . . 7.2 Grafici sovrapposti . . . . . . . . 7.3 Grafico equazioni parametriche . 7.4 Grafico completo . . . . . . . . . 7.5 Grafico tridimensionalie a maglia 7.6 Grafico tridimensionale lisciato . 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 16 17 18 19 20 21 Cosa e’ MATLAB MATLAB e’ un programma di alte prestazioni per il calcolo tecnico e scientifico. Esso e’ anche un linguaggio basato su espressioni che rende molto facile la programmazione. Esso include la visualizzazione fornendo figure a colori e ogni tipo di grafici bi- e tridimensionali. E’ usato nella ricerca scientifica e nella risoluzione di problemi di ingegneria. Effettua tutte le operazioni in doppia precisione (User’s Guide, 2-11)1 . Il nome MATLAB e’ un acronimo di MATrix LABoratory. La principale caratteristica e’ infatti che esso non opera con numeri ma con matrici: i vettori e i numeri sono considerati come particolari matrici. Per chi e’ abituato alla programmazione tradizionale (BASIC, PASCAL, FORTRAN, ecc) questa e’ la principale e unica difficolta’: adeguarsi alla visione matriciale. E’ un programma incredibilmente duttile, facile da apprendere, facile da usare, velocissimo nei calcoli, opera con le più perfezionate librerie esistenti 1 Con l’aggiunta del Symbolic Math Toolbox puo’ operare in precisione multipla. 2 (LINPAK e EISPACK), fornisce immagini a colori di notevole bellezza, che si possono stampare immediatamente o salvare in formato POSTCRIPT per includerle in documenti Tex o Word o altro. Esistono versioni per tutte le piattaforme: WINDOW, Macintosh, UNIX, fino al CRAY. Esiste una Student Edition con ottimo manuale di circa 800 pagine e con i dischetti contenenti il programma. 2 E’ particolarmente consigliato per fare calcoli nelle tesi di tipo tecnicoscientifico. Per la scrittura di tesi una combinazione altamente consigliata e’: • testo e formule scritte con Latex (o con Scientific Word), • calcoli e figure prodotte da programma in MATLAB. • figure e disegni non prodotti da programma su Macintosh: Adobe Illustrator, Claris Draw; sotto Windows: Corel Draw. Associati a questa dispensa sono dei piccoli programmi esplicativi che si possono prelevare via Web all’indirizzo http://dic-08.univ.ts.it/perspage/tonti/default.htm Coloro che, nell’intento di aiutare gli altri, faranno piccoli programmi esplicativi ben commentati, potranno ottenere dallo scrivente di includerli con il loro nome in tale sito. 2 Come opera Il programma distingue le lettere maiuscole dalle minuscole: A e a sono considerate due matrici diverse. All’avvio si apre una finestra dei comandi. Si possono fare richieste dirette ed ottenere la risposta nella stessa finestra premendo il tasto di invio. Esempio 1. Digitando 7+5 viene esibito 12. 2 The Student Edition of MATLAB, versione 4, Prentice Hall, prezzo circa Lit. 120.000 (Al momento dell’ordine precisare se lo si vuole per Windows o per Macintosh). Il MATLAB professional e’ distribuito in Italia dalla Teoresi, tel. 011 248.53.32; fax 011 248.46.98; e-mail: [email protected]. Il suo costo (IVA compresa) si aggira sul milione e mezzo. Attualmente e’ presente sugli elaboratori delle sale studenti e sui calcolatori del Centro di Calcolo dell’Universita’ di Trieste. 3 Esempio 2. Digitando pi viene esibito il numero π con quattro cifre: 3.1416 (di default). Se si digita P I non viene nessuna risposta. Esempio 3. Digitando exp(1) viene esibito il numero e con quattro cifre: 2.7183. Il programma si avvale di un editor che consente di creare un programma (una lista di istruzioni). Per crearlo si va nel menù file e si sceglie new che apre una seconda finestra. Una volta creato il programma per eseguirlo occorre prima salvarlo assegnandogli un nome seguito dall’estensione .m (ad esempio prova.m). Quindi si va nella finestra comandi e si digita il nome del file omettendol’estensione ( basta digitare prova) e si preme il tasto di invio.3 Tutti i file creati devono portare l’estensione .m . Esempi: matrici.m, autovalori.m, integrazione.m. La lunghezza dell’identificatore del file e’ al massimo di 19 caratteri. L’espediente di usare il maiuscolo o il minuscolo per distingure i file su disco non funziona: i files calcolo.m, CALCOLO.M , Calcolo.m sono sovrapposti e salvati con il nome con cui e’ stato salvato la prima volta, cioe’ calcolo.m. In altre parole: mentre nell’interno del programma le maiuscole e le minuscole sono distinte, nel nome del file non lo sono. I commenti sono preceduti dal simbolo % che vale solo per una riga. Se il commento sta su più righe occorre mettere il simbolo % all’inizio di ciascuna riga. Le istruzioni contenute in un programma di regola sono seguite da un punto e virgola. Se si omette il punto e virgola, al lancio verranno mostrati i valori degli elementi man mano che vengono calcolati. Cosi’ scrivendo s = cos(pi) al lancio apparira’ il numero -1. Scrivendo invece s = cos(pi); al lancio non apparira’ nulla. Se si vogliono vedere le variabili che sono in memoria si deve digitare who nella finestra dei comandi. Per eliminare tutte le variabili in memoria si digita clear nella finestra dei comandi. Ogni file generalmente inizia con una serie di commenti che ne presentano il contenuto: e’ la parte dichiarativa del file. Se al termine della parte dichiarativa, prima dell’inizio dei comandi o istruzioni, si lascia una riga vuota (senza neanche il simbolo % all’inizio), dalla finestra dei comandi si potra’ 3 Sul Macintosh le due operazioni di salvataggio e di esecuzione si lanciano con un unico comando: posizionandosi sulla finestra del programma si digita < command > − < e > . 4 vedere il contenuto di questa parte digitando help nome essendo nome.m il nome del file. Provare digitando help rettangolo nella finestra dei comandi. Se si vuole salvare il contenuto della memoria (variabili e loro valori) digitare save nella finestra dei comandi. Si provi ora a cancellare dalla memoria tutte le variabili digitando clear . Si puo’ constatare che tutto e’ stato cancellato digitando who. Digitare ora load e quindi digitare di nuovo who. Si ritroveranno in memoria le variabili salvate con i loro valori. Attenzione che un nuovo salvataggio con save va a sostituire quello precedente che viene cosi’ perduto. 3 Matrici 3.1 Come assegnare una matrice (si veda il file matr A.m ) • PRIMO modo: gli elementi di una riga separati da spazi quelli di righe diverse separati da un punto e virgola A = [ 6 8 -3 ; -1 0 9] • SECONDO modo: gli elementi di una riga separati da virgole quelli di righe diverse separati da un punto e virgola (la virgola pero’ si rivela superflua.) B = [ -1.65 , 3.19 , -0.41 ; 2.23 , 0 , 3.23 ] • TERZO modo : gli elementi di una riga separati da spazi quelli di righe diverse scritti su righe diverse C = [ 32.782 -12.009 1.78 6.4 -0.006 15.8 -0.92 2.86 ] • QUARTO modo : gli elementi della matrice vengono letti da un file di dati (si veda il file arch 2 ) 5 Si suggerisce di usare lettere maiuscole per le matrici e lettere minuscole per vettori e numeri. Il primo metodo e’ più sbrigativo ed e’ quindi consigliato. Nessun linguaggio di programmazione in precedenza aveva un modo di assegnazione cosi’ immediato. La matrice puo’ avere un numero di righe diverso da quello delle colonne. In particolare puo’ essere un vettore. Ad esempio v=[4 -5 0.34 -1.78] . 3.2 Prodotto (Si veda il file matr B.m). E’ sufficiente mettere il simbolo * tra le due matrici A = [ -1 0 ; B = [ 3 -2 ; C = A * B 3.3 8 1 3 ] ; -1 ] ; Inversa (Si veda il file matr C.m). Data una matrice Q per fare l’inversa e’ sufficiente scrivere R = inv(Q) 3.4 Autovalori (Si veda il file matr D.m). Data una matrice quadrata A i suoi autovalori, siano essi reali o complessi, sono calcolati con rapidita’ sbalorditiva e memorizzati in un array. Indicando con f l’array contenente i suoi autovalori basta scrivere l’istruzione f = eig(A) 6 3.5 Dimensioni (Si veda il file matr E.m). Assegnata una matrice R = [ -1 3.7 0 3 -3.6 -0.45 ]; per sapere le sue dimensioni si usa l’istruzione p = size(R) Questa fornisce un vettore a due componenti: la prima componente indica il numero di righe, la seconda quello delle colonne. Il numero delle righe si puo’ leggere con a = size(R,1) o anche con p(1) mentre il numero di colonne si puo’ leggere con b = size(R,2) o anche con p(2) 3.6 Trasposta (Si veda il file matr F.m). Per valutare la trasposta di una matrice A basta scrivere A0 . 3.7 Come MATLAB memorizza le matrici (Si veda il file matr G.m). MATLAB memorizza le matrici in un array unidimensionale (=vettore) formato dalla prima colonna della matrice seguita dalla seconda, dalla terza, ecc., come indicato nella tabella seguente matematica a1,1 a1,2 a1,3 a2,1 a2,2 a2,3 a3,1 a3,2 a3,3 BASIC, FORTRAN, MATLAB a(1, 1) a(1, 2) a(2, 1) a(2, 2) a(3, 1) a(3, 2) a(1, 3) a(2, 3) a(3, 3) 7 MATLAB a(1) a(4) a(7) a(2) a(5) a(8) a(3) a(6) a(9) Quindi a(j) indica l’elemento della matrice di posto j secondo la numerazione progressiva per colonne. Questo consente di richiamare gli elementi di una matrice sia in modo tradizionale con due indici a(h, k) che con un solo indice a(j). 3.8 Analisi degli elementi di una matrice (Si veda il file matr H.m). Se si vogliono localizzare gli elementi di una matrice che soddisfano una data condizione si usa l’istruzione find . Cosi’, indicata con M una matrice, le istruzioni • f=find(M) crea un vettore f i cui elementi sono gli indici della matrice M corrispondenti agli elementi della matrice diversi da zero. • g=find(M>2) crea un vettore g i cui elementi sono gli indici della matrice M corrispondenti agli elementi della matrice maggiori di 2. • g=find(M<0) crea un vettore s i cui elementi sono gli indici della matrice M corrispondenti agli elementi negativi della matrice. 3.9 Vettore con elementi in progressione aritmetica (Si veda il file matr I.m). Per assegnare un vettore i cui elementi differiscano di una costante, ad esempio il vettore di componenti 0,1,2,3,4 si puo’ scrivere uno dei modi equivalenti u = 0 : 4 ; v = (0 : 4) ; w = [ 0 : 4] ; Se la costante e’ diversa da 1 basta scrivere in uno dei modi equivalenti. u = 0 : 0.2 : 1; v = (3 : -0.4 : 1); w = [ -1 : 0.8 : 1]; 8 Si vede come il comando ” : ” e’ un sostituto del ciclo for . Infatti nei comuni linguaggi si sarebbe dovuto scrivere nel vecchio FORTRAN K=1 X(1) = 4 34 IF (X(K) .GT. 12) GOTO 52 K=K+1 X(K) = X(1) + K ∗ 0.2 GOTO 34 52 CONTINUE in PASCAL k := 1; x[1] := 4; while (x[k] <= 12) do begin k := k + 1; x[k] := x[1] + k * 0.2; end; in MATLAB x = 4 : 0.2 : 12 Non c’e’ che dire: e’ una bella differenza! 3.10 Prodotto scalare di due vettori (Si veda il file matr J.m). Il prodotto scalare di due vettori u e v si ottiene facendo il prodotto u ∗ v 0 . 3.11 Matrici particolari (Si veda il file matr K.m). Per generare una matrice 2 x 5 i cui elementi siano tutti nulli si usa l’istruzione U = zeros (2,5); Per generare una matrice 4 x 3 i cui elementi siano tutti uguali ad uno si usa l’istruzione V = ones(4,3); Per generare una matrice unita’ 4 x 4 si usa l’istruzione W = eye(4); Per generare una matrice 3x3 con elementi a caso si usa l’istruzione T = rand(3); 9 3.12 Uso dei due punti (Si veda il file matr L.m). Il comando ” : ” e’ un sostituto del ciclo for . Abbiamo gia’ visto come esso consenta di creare semplicemente vettori con componenti che differiscono di una costante. Vediamo ora un secondo utilizzo. Data una matrice A si voglia prelevare da essa una sotto-matrice formata da alcune righe e alcune colonne. Ricordiamo che, come in matematica, negli elementi ahk di una matrice il primo indice indica la riga, il secondo la colonna. Ad esempio si voglia prelevare la sotto-matrice B formata dalla sola prima colonna di A B = A( : , 1 ) che significa: B e’ formato da tutte le righe di A (questo significano i due punti) ma solo dalla colonna 1 . Si voglia prelevare da A la sotto-matrice C formata dalle colonne 4,5,6,7. C = A( : , 4 : 7 ) Si voglia prelevare la sotto-matrice D formata dalle prime 5 righe di A D = A(1 : 5 , : ) 3.13 Operazioni sulle matrici (Si veda il file matr M.m). Per aggiungere o togliere a tutte le componenti di un vettore (o di una matrice) un numero, basta sommarre o sottrarre il numero al vettore. Dato il vettore x = [ 10 20 30 ]; con la scrittura y = x + 3 si ottiene il vettore [ 13 23 33 ] Per moltiplicare o dividere un vettore per un numero basta scrivere z = 2 * x 10 che fornisce il vettore [ 20 40 60 ] Il discorso cambia quando vogliamo fare operazioni sulle componenti di un vettore o con le componenti di due vettori. Cosi’ se vogliamo fare il cubo delle componenti di un vettore a si deve premettere un punto al simbolo di elevamento a potenza. f = x .^ 3; si ottiene il vettore [ 1000 8000 27000 ] Il punto precisa che si deve operare sulle singole componenti. Se si vuole la funzione xsin(x), essendo x un vettore, non si puo’ scrivere x ∗ sin(x) ma si deve premettere un punto al simbolo di prodotto s=x.*sin(x); si ottiene il vettore s= [-5.44021 18.2589 -29.6409] Si osservi che sin(x) e’ un vettore che ha come componenti il seno delle corrispondenti componenti del vettore x. 4 4.1 Funzioni Funzioni di libreria (Si veda il file funz 1.m). In matematica, quando si scrive y = sin(x) si intende che al numero x si fa corrispondere il numeroy. Poiche’ in MATLAB x ed y sono matrici, in particolare vettori e numeri, l’espressione y = sin(x) ha il senso seguente: ad ogni componente x(k) del vettore x viene fatta corrispondere una componente y(k) del vettore y secondo la relazione y(k) = sin(x(k)). Questo implica la scrittura x = [ 0 : 0.1 : y = sin(x) ; 4] ; Lo stesso vale per tutte le altre funzioni di libreria quali cos(x), tan(x), abs(x), sqrt(x), exp(x), log ecc. 11 4.2 Funzioni create dall’utente (Si veda il file funz 2.m). In MATLAB non vi sono subroutine come in BASIC e in FORTRAN procedure come in PASCAL moduli come in MODULA 2 ma solo funzioni , come nel linguaggio C. Vediamo come scrivere una una funzione con parametri in ingresso e parametri in uscita. Si voglia costruire una funzione che, dati i lati ”a” e ”b” di un rettangolo fornisca l’area ”A”, il perimetro ”p” e la diagonale ”d”. Indichiamo con (a, b) la lista d’ingresso (parentesi tonde) e con[A, p, d] la lista d’uscita (parentesi quadre) (si noti la virgola fra i parametri). function [ A , p , d ] = rettang ( a , b ) A = a * b; p = 2 * ( a + b ); d = sqrt ( a^2 + b^2 ); Si noti che non c’e’ confusione tra la lettera A e la a perche’ MATLAB distingue le lettere maiuscole dalle minuscole. Questa function, salvata con il nome rettang.m puo’ essere richiamata da un altro modulo o direttamente dalla finestra comandi ad esempio con il comando: [area, perim, diag] = rettang(2, 3) Quindi la sintassi e’ function ”lista d’uscita” = nome ”lista d’ingresso” 5 Costrutti alternativi e ripetitivi Il MATLAB e’ anche un linguaggio di programmazione in quanto possiede i tre tipi di costrutti: sequenziali, alternativi, ripetitivi. 5.1 Istruzione ”if” (Si veda il file c if.m). Il costrutto alternativo si effettua con l’istruzione 12 if condizione 1 azione 1 elseif condizione 2 azione 2 elseif condizione 3 azione 3 else azione 4 end Una condizione ha la forma espressione operatore di relazione espressione in cui gli operatori di relazione sono i sei seguenti: uguale minore maggiore minore uguale maggiore uguale diverso == < > <= >= ˜= in cui il simbolo di negazione = sulla tastiera italiana si fa con: su PC con < alt > + < 1 >< 2 >< 6 > su Mac con < alt > + < n ><=> 5.2 Istruzione ”while” (Si veda il file c while.m). Una istruzioni ripetitiva e’ l’istruzione while la cui sintassi e’ while condizione azione end 13 5.3 Istruzione ”for” (Si veda il file c for.m). L’altra istruzione ripetitiva e’ l’istruzione for (Si veda il file c for.m) for k = 3.0 : - 0.3 : 1.5 azione end 6 Archivi 6.1 Salvare su file (Si veda il file arch 1.m). Vediamo come salvare dei dati su un archivio di testo. Si voglia salvare la tabulazione della funzione exp(x) entro l’intervallo (1, 2) con passo 0.1. Si costruisce dapprima il vettore x = 1 : 0.1 : 2 ; e quindi si valuta una matrice M M = [ x ; exp(x) ]; Decidiamo che il nome esterno del file su cui si vuole salvare la matrice M sia luca.tx : esso dovra’ essere posto entro apici perche’ e’ una stringa. Apriamo il file in scrittura con ’w’ 4 assegnandogli il nome interno Firenze. L’istruzione e’ Firenze = fopen ( ’luca.txt’ , ’wt’); Si deposita nell’archivio Firenze la matrice M scrivendo le due colonne di numeri decimali: la prima colonna con 6 cifre di cui 2 decimali la seconda colonna 8 cifre di cui 4 decimali. Si osservi che fprintf e’ un acronimo di file print formatted 4 Su un PC occorre usare ’wt’ (per ”write text”) in quanto il ”line feed” costituito dalla coppia ”barra rovescia r” non e’ incluso nel ”new line” costituito dalla coppia ”barra rovescia n”. Sul Macintosh sarebbe sufficiente usare ’w’ ma usando ’wt’ si ottiene la stessa cosa. 14 fprintf ( Firenze , ’%6.2g Si noti che per primo si mette il nome interno: per secondo si mette il formato per terzo si mette la matrice: %8.4g\n’ , M ); Firenze M Quindi si chiude il file fclose (Firenze); Se si vuole vedere il file cosi’ creato lo si puo’ fare con un editor di testo. 6.2 Prelevare da file (Si veda il file arch 2.m). Vediamo come leggere dati da un archivio di testo. Il nome esterno del file sia ”luca.txt” che e’ generato con il programma arch 1. Il nome deve essere posto entro apici perche’ e’ una stringa. Si apre il file assegnandogli un nome interno, ad esempio Bologna, in lettura ( ’r’ che sta per ”read” ). Bologna = fopen ( ’luca.txt’ , ’r’); Si preleva dall’archivio Bologna la matrice M leggendo le due colonne di numeri in formato ”%g” M = fscanf ( Bologna , ’%g %g’ , M = M’; [2 inf] ); Si noti che per primo si mette il nome interno: (Bologna) per secondo si mette il formato (’%g%g’) per terzo si mette il numero di elementi per riga (2) e, non sapendo quante righe sono, si mette inf il tutto entro parentesi quadre per indicare la matrice da prelevare. Quindi si chiude il file fclose (Bologna); Notare le corrispondenze aprire: fopen (...) scrivere: fprintf (...) chiudere: fclose (...) leggere: fscanf (...) 15 7 7.1 Grafici Grafici bidimensionali semplici (Si veda il file graf 1.m ). Per fare un grafico puo’ essere sufficiente una sola istruzione! fplot ( ’sin(x)’ , [0 10] ); L’istruzione fplot e’ un acronimo di function plot. Il nome della funzione, sia essa una funzione di libreria (sin, cos, tan, rand , abs, ecc) o una funzione creata dall’utente, come rettang deve essere messa entro apici. Il vettore [0 10] indica l’intervallo in cui si vuole tracciare la funzione. Come in tutte le liste gli argomenti sono separati da una virgola. Quando pero’ si vuole ottenere qualche risultato più sofisticato e’ meglio ricorrere a tre istruzioni: (Si veda il file graf 2.m ) x = 0 : 0.1 : 10; y = sin(x); plot(x,y); La prima istruzione costruisce un array da 0 a 10 con passo 0.1; la seconda istruzione costruisce l’array dei valori della funzione; la terza istruzione attiva la grafica e disegna la curva. Si noti che solo dopo che sono stati calcolati tutti i valori dell’ascissa e dell’ordinata il programma procede al tracciamento del grafico. Intendiamo ora fare il grafico dello spostamento in un moto uniformemente ritardato, dato dall’equazione x = 5 + 2 ∗ t − 1.5 ∗ t ∗ t nell’intervalo [0,7]. (Si veda il file graf 3.m ) Discretizziamo l’intervallo [0,7] mediante un array con passo 0.01 t = 0 : 0.01 : 7; In questa formula ”t” non e’ più uno scalare ma un array. Questo comporta che la funzione deve essere scritta cosi’ x = 5 + 2 .* t - 3/2 .* t .* t; 16 Anche in questa formula x non e’ più uno scalare ma un vettore. La ragione del puntino ”.” che precede il simbolo ” ∗ ” e’ dovuta al fatto che non si possono fare prodotti come t∗t essendo t un vettore ma si devono moltiplicare le componenti del vettore t per ottenere le componenti del vettore x. Ora che sono stati calcolati e memorizzati i due array in t ed x si puo’ procedere al tracciamento del grafico. Esegui il grafico con linea continua in giallo ( ’y’ = yellow e ”-” = continua) plot(t,x,’y-’); Il titolo e l’indicazioni sugli assi devono essere messi dopo il tracciamento: title(’moto uniformemente ritardato’) xlabel(’tempo’); ylabel(’spostamento’); Prima di fare un grafico e’ sempre consigliabile mettere l’istruzione close che chiude la finestra precedente. 7.2 Grafici sovrapposti (Si veda il file graf 4.m). Ci proponiamo di tracciare grafici sovrapposti in diversi colori. Discretizziamo l’intervallo [-7,7] a passo 0.02 t = -7 : 0.02 : 7; Vogliamo fare i grafici sovrapposti delle tre funzioni u = sin(t) v = cos(t)/2 w = atan(t). Vogliamo disegnare la prima in celeste ( ’c.’ per ”cyan”) a puntini ( . ) la seconda in verde ( ’g-’ per ”green” ) a tratto pieno ( - ) la terza in giallo ( ’y-’ per ”yellow” ) a tratto pieno ( - ) Si puo’ usare l’istruzione unica plot(t,u,’c-’ , t, v,’g-’ , t,w,’y-’) oppure le istruzioni seguenti: 17 hold on plot( t , u , ’c-’ ) plot( t , v , ’g-’ ) plot( t , w , ’y-’ ) hold off Le dichiarazioni che seguono devono essere messe dopo il tracciamento. L’istruzione title(’seno , coseno , arcotangente’); mette un titolo sopra il grafico. E’ consigliabile mettere sempre la seguente dichiarazione degli assi. axis( [-7 7 -2 2] ); In mancanza di questa istruzione il programma mette gli assi secondo una scala sua, spesso non opportuna per la funzione che si intende rappresentare. Spesso e’ preferibile invertire il colore di fondo: a questo scopo si usa l’istruzione whitebg che e’ un acronimo di white background . che si puo’ digitare nella finestra comandi o inserire in fondo alla grafica. 5 7.3 Grafico equazioni parametriche (Si veda il file graf 6.m). Traccia una curva assegnata con equazioni parametriche x(t) ed y(t). close t = [ 0 : 0.001 : 1 ]*2*pi ; x = sin(2 .*t) ; y = cos(t); plot(x,y,’w-’); 5 Questo comando sembra non funzionare su PC. 18 7.4 Grafico completo (Si veda il file graf 7.m). Grafico ottimale: contiene tutti (?) i dati per fissare i colori delle linee e degli assi; le scritte e i colori delle scritte. Si vogliono fare i grafici sovrapposti delle funzioni y = xx e z = x sin(x). x = 0 y = x z = x clf plot( axis( : 0.001 : 6 ; .* exp(x) ; .^ x ; x , y , ’r’ , x , z , ’k’ ) [0 6 0 400 ] ) in cui il vettore [ Xmin Xmax Ymin Ymax ] contiene gli estremi dell’intervallo in x ed in y. Il gruppo di istruzioni che segue fissa i colori delle scritte. fissa il colore di fondo della figura con l’istruzione gcf (get current figure handle) set (gcf , ’Color’ , ’c’) scrivi il titolo in colore prefissato title(’FUNZIONI SOVRAPPOSTE’ , ’color’ , ’k’); scrivi una frase in posizione e colore prefissati text(4.5,300,’x exp(x)’,’color’, ’r’); text(3,300,’x elevato a x’,’color’, ’k’); metti scritte a meta’ degli assi xlabel(’ascisse’); ylabel(’ordinate’) Fissa il colore degli assi (gca =get current axis handle) set (gca,’XColor’,’b’, ’YColor’,’m’ ) Per tracciare una linea in colore nero (’k’) si deve richiamare una funzione costruita dall’utente e fatta cosi’: function linea ( x1 , y1 , x2 , y2 , g ); line ( [x1 x2] , [y1 y2] , ’color’ , g ); 19 Questa funzione, salvata come archivio col nome linea.m, e’ formata di due istruzioni: la prima da’ l’intestazione della funzione, la seconda contiene l’istruzione di libreria la cui sintassi e’ inusuale. Essa e’ stata creata da noi proprio per avere un comando più tradizionale. La chiamata della funzione linea e’ fatta con l’istruzione linea(0,180,6,180,’k’); Per la grafica occorre la mappa dei principali colori che riassumiamo nella tabella seguente: mappa dei principali colori nero ’black’ ’k’ bianco ’white’ ’w’ rosso ’red’ ’r’ giallo ’yellow’ ’y’ verde ’green’ ’g’ celeste ’cyan’ ’c’ blu ’blue ’b’ magenta ’magenta’ ’m’ 7.5 Grafico tridimensionalie a maglia (Si veda il file sup 1.m). Traccia il grafico di una funzione z=f(x,y) ”a maglia”. 20 chiudi la finestra grafica azzera la memoria prove colori di fondo % set(gcf,’Color’,’cyan’) colore di fondo celeste % set(gcf,’Color’,’blue’) colore di fondo blu set(gcf,’Color’,’black’) colore di fondo nero prove colori di tracciamento colormap(hot); colore caldi % colormap(cool) colori freddi [x,y] = meshgrid(-3:0.1:3); assegna la maglia di base z = peaks(x,y); funzione da graficare mesh(x,y,z); traccia la superfice a maglia title(’mesh(x,y,z)’); metti titolo colori degli assi set (gca,’XColor’ ,’ w’, ... asse x bianco ’YColor’ , ’w’, ... asse y bianco ’ZColor’ , ’c’ ) asse z celeste Si noti che una istruzione lunga si puo’ spezzare su piu’ righe aggiungendo tre puntini dopo ogni pezzo. close clear 7.6 Grafico tridimensionale lisciato (Si veda il file sup 2.m). Traccia il grafico di una funzione z=f(x,y) come fosse spalmato Assegna i due vettori che formano la griglia Traccia il grafico di una funzione z=f(x,y) ”a maglia”. 21 chiudi la finestra grafica azzera la memoria assegna la maglia di base funzione da graficare traccia la superfice a maglia traccia la superfice liscia con posizione della luce in gradi shading interp; ombreggiata con interpolazione view ( [ 60 , 20 ] ) fissa la posizione dell’osservatore longit. e latitud. in gradi title(’surfl (x, y, z, [ 50 , 10 ])’ ) metti titolo prove colori di fondo % set(gcf,’Color’,’cyan’) colore di fondo celeste % set(gcf,’Color’,’blue’) colore di fondo blu set(gcf,’Color’,’black’) colore di fondo nero prove colori di tracciamento colormap(gray); colori caldi colori degli assi set (gca,’XColor’ ,’ w’, ... asse x bianco ’YColor’ , ’w’, ... asse y bianco ’ZColor’ , ’c’ ) asse z celeste ========= FINE =================== close clear [x,y] = meshgrid(-3:0.1:3); z = peaks(x,y); mesh(x,y,z); surfl (x, y, z, [ 50 , 10 ]); 22