Sei sulla pagina 1di 22

Introduzione a MATLAB

Enzo TONTI

21 marzo 1997

Indice
1 Cosa e MATLAB 2 Come opera 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 3 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 dallutente . . . . . . . . . . . . . . . . . . . . 12


Indirizzo dellautore: Dipartimento di Ingegneria Civile, Universit` a di Trieste, Piazzale Europa 1, 34127 Trieste, Italia. e-mail: tonti@univ.trieste.it

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 le . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 6.2 Prelevare da le . . . . . . . . . . . . . . . . . . . . . . . . . . 15 7 Graci 7.1 Graci bidimensionali semplici . . 7.2 Graci sovrapposti . . . . . . . . 7.3 Graco equazioni parametriche . 7.4 Graco completo . . . . . . . . . 7.5 Graco tridimensionalie a maglia 7.6 Graco tridimensionale lisciato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 16 17 18 19 20 21

Cosa e MATLAB

MATLAB e un programma di alte prestazioni per il calcolo tecnico e scientico. Esso e anche un linguaggio basato su espressioni che rende molto facile la programmazione. Esso include la visualizzazione fornendo gure a colori e ogni tipo di graci bi- e tridimensionali. E usato nella ricerca scientica e nella risoluzione di problemi di ingegneria. Eettua tutte le operazioni in doppia precisione (Users 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 dicolta: adeguarsi alla visione matriciale. E un programma incredibilmente duttile, facile da apprendere, facile da usare, velocissimo nei calcoli, opera con le pi` u perfezionate librerie esistenti
1

Con laggiunta del Symbolic Math Toolbox puo operare in precisione multipla.

(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, no 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 tecnicoscientico. Per la scrittura di tesi una combinazione altamente consigliata e: testo e formule scritte con Latex (o con Scientic Word), calcoli e gure prodotte da programma in MATLAB. gure 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 allindirizzo http://dic-08.univ.ts.it/perspage/tonti/default.htm Coloro che, nellintento di aiutare gli altri, faranno piccoli programmi esplicativi ben commentati, potranno ottenere dallo scrivente di includerli con il loro nome in tale sito.

Come opera

Il programma distingue le lettere maiuscole dalle minuscole: A e a sono considerate due matrici diverse. Allavvio si apre una nestra dei comandi. Si possono fare richieste dirette ed ottenere la risposta nella stessa nestra premendo il tasto di invio.
Esempio 1. Digitando 7+5 viene esibito 12.
The Student Edition of MATLAB, versione 4, Prentice Hall, prezzo circa Lit. 120.000 (Al momento dellordine 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: info@teoresi.it. 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 dellUniversita di Trieste.
2

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` u le e si sceglie new che apre una seconda nestra. Una volta creato il programma per eseguirlo occorre prima salvarlo assegnandogli un nome seguito dallestensione .m (ad esempio prova.m ). Quindi si va nella nestra comandi e si digita il nome del le omettendolestensione ( basta digitare prova ) e si preme il tasto di invio.3 Tutti i le creati devono portare lestensione .m . Esempi: matrici.m , autovalori.m , integrazione.m . La lunghezza dellidenticatore del le e al massimo di 19 caratteri. Lespediente di usare il maiuscolo o il minuscolo per distingure i le su disco non funziona: i les 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 nellinterno del programma le maiuscole e le minuscole sono distinte, nel nome del le non lo sono. I commenti sono preceduti dal simbolo % che vale solo per una riga. Se il commento sta su pi` u righe occorre mettere il simbolo % allinizio 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 nestra dei comandi. Per eliminare tutte le variabili in memoria si digita clear nella nestra dei comandi. Ogni le generalmente inizia con una serie di commenti che ne presentano il contenuto: e la parte dichiarativa del le. Se al termine della parte dichiarativa, prima dellinizio dei comandi o istruzioni, si lascia una riga vuota (senza neanche il simbolo % allinizio), dalla nestra dei comandi si potra
3 Sul Macintosh le due operazioni di salvataggio e di esecuzione si lanciano con un unico comando: posizionandosi sulla nestra del programma si digita < command > < e > .

vedere il contenuto di questa parte digitando help nome essendo nome.m il nome del le. Provare digitando help rettangolo nella nestra dei comandi. Se si vuole salvare il contenuto della memoria (variabili e loro valori) digitare save nella nestra 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
3.1

Matrici
Come assegnare una matrice

(si veda il le 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 superua.) 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 le di dati (si veda il le arch 2 ) 5

Si suggerisce di usare lettere maiuscole per le matrici e lettere minuscole per vettori e numeri. Il primo metodo e pi` u 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 le matr B.m ). E suciente mettere il simbolo * tra le due matrici A = [ -1 0 ; B = [ 3 -2 ; C = A * B 8 1 3 ] ; -1 ] ;

3.3

Inversa

(Si veda il le matr C.m ). Data una matrice Q per fare linversa e suciente scrivere R = inv(Q)

3.4

Autovalori

(Si veda il le 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 larray contenente i suoi autovalori basta scrivere listruzione f = eig(A)

3.5

Dimensioni
R = [ -1 3.7 0 3 -3.6 -0.45 ];

(Si veda il le matr E.m ). Assegnata una matrice

per sapere le sue dimensioni si usa listruzione 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 le matr F.m ). Per valutare la trasposta di una matrice A basta scrivere A .

3.7

Come MATLAB memorizza le matrici

(Si veda il le 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 BASIC, FORTRAN, MATLAB MATLAB

a1,1 a1,2 a1,3 a2,1 a2,2 a2,3 a3,1 a3,2 a3,3

a(1, 1) a(1, 2) a(2, 1) a(2, 2) a(3, 1) a(3, 2) 7

a(1, 3) a(2, 3) a(3, 3)

a(1) a(4) a(7) a(2) a(5) a(8) a(3) a(6) a(9)

Quindi a(j ) indica lelemento 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 le matr H.m ). Se si vogliono localizzare gli elementi di una matrice che soddisfano una data condizione si usa listruzione nd . Cosi, indicata con M una matrice, le istruzioni f=nd(M) crea un vettore f i cui elementi sono gli indici della matrice M corrispondenti agli elementi della matrice diversi da zero. g=nd(M>2) crea un vettore g i cui elementi sono gli indici della matrice M corrispondenti agli elementi della matrice maggiori di 2. g=nd(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 le matr I.m ). Per assegnare un vettore i cui elementi dieriscano 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];

Si vede come il comando : e un sostituto del ciclo for . Infatti nei comuni linguaggi si sarebbe dovuto scrivere in PASCAL k := 1; x[1] := 4; while (x[k] <= 12) do begin k := k + 1; x[k] := x[1] + k * 0.2; end;
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 MATLAB x = 4 : 0.2 : 12 Non ce che dire: e una bella dierenza!

3.10

Prodotto scalare di due vettori

(Si veda il le matr J.m ). Il prodotto scalare di due vettori u e v si ottiene facendo il prodotto u v .

3.11

Matrici particolari

(Si veda il le matr K.m ). Per generare una matrice 2 x 5 i cui elementi siano tutti nulli si usa listruzione U = zeros (2,5); Per generare una matrice 4 x 3 i cui elementi siano tutti uguali ad uno si usa listruzione V = ones(4,3); Per generare una matrice unita 4 x 4 si usa listruzione W = eye(4); Per generare una matrice 3x3 con elementi a caso si usa listruzione T = rand(3); 9

3.12

Uso dei due punti

(Si veda il le matr L.m ). Il comando : e un sostituto del ciclo for . Abbiamo gia visto come esso consenta di creare semplicemente vettori con componenti che dieriscono 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 signica: B e formato da tutte le righe di A (questo signicano 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 le 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 le funz 1.m ). In matematica, quando si scrive y = sin(x) si intende che al numero x si fa corrispondere il numero y . Poiche in MATLAB x ed y sono matrici, in particolare vettori e numeri, lespressione 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 dallutente

(Si veda il le 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 larea A, il perimetro p e la diagonale d. Indichiamo con (a, b) la lista dingresso (parentesi tonde) e con[A, p, d] la lista duscita (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 ce 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 nestra comandi ad esempio con il comando: [area, perim, diag ] = rettang (2, 3) Quindi la sintassi e function lista duscita = nome lista dingresso

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 le c if.m ). Il costrutto alternativo si eettua con listruzione

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 le c while.m ). Una istruzioni ripetitiva e listruzione while la cui sintassi e while condizione azione end

13

5.3

Istruzione for

(Si veda il le c for.m ). Laltra istruzione ripetitiva e listruzione for (Si veda il le c for.m ) for k = 3.0 : - 0.3 : 1.5 azione end

6
6.1

Archivi
Salvare su le

(Si veda il le arch 1.m ). Vediamo come salvare dei dati su un archivio di testo. Si voglia salvare la tabulazione della funzione exp(x) entro lintervallo (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 le su cui si vuole salvare la matrice M sia luca.tx : esso dovra essere posto entro apici perche e una stringa. Apriamo il le in scrittura con w 4 assegnandogli il nome interno Firenze . Listruzione e Firenze = fopen ( luca.txt , wt); Si deposita nellarchivio 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
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 suciente usare w ma usando wt si ottiene la stessa cosa.
4

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: Quindi si chiude il le fclose (Firenze);

%8.4g\n ,

M );

Firenze M

Se si vuole vedere il le cosi creato lo si puo fare con un editor di testo.

6.2

Prelevare da le

(Si veda il le arch 2.m ). Vediamo come leggere dati da un archivio di testo. Il nome esterno del le 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 le assegnandogli un nome interno, ad esempio Bologna , in lettura ( r che sta per read ). Bologna = fopen ( luca.txt , r); Si preleva dallarchivio 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 le fclose (Bologna); Notare le corrispondenze aprire: fopen (...) scrivere: fprintf (...) chiudere: fclose (...) leggere: fscanf (...)

15

7
7.1

Graci
Graci bidimensionali semplici

(Si veda il le graf 1.m ). Per fare un graco puo essere suciente una sola istruzione! fplot ( sin(x) , [0 10] );

Listruzione 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 dallutente, come rettang deve essere messa entro apici. Il vettore [0 10] indica lintervallo 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` u sosticato e meglio ricorrere a tre istruzioni: (Si veda il le 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 larray dei valori della funzione; la terza istruzione attiva la graca e disegna la curva. Si noti che solo dopo che sono stati calcolati tutti i valori dellascissa e dellordinata il programma procede al tracciamento del graco. Intendiamo ora fare il graco dello spostamento in un moto uniformemente ritardato, dato dallequazione x = 5 + 2 t 1.5 t t nellintervalo [0,7]. (Si veda il le graf 3.m ) Discretizziamo lintervallo [0,7] mediante un array con passo 0.01 t = 0 : 0.01 : 7; In questa formula t non e pi` u 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` u 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 graco. Esegui il graco con linea continua in giallo ( y = yellow e - = continua) plot(t,x,y-); Il titolo e lindicazioni sugli assi devono essere messi dopo il tracciamento: title(moto uniformemente ritardato) xlabel(tempo); ylabel(spostamento); Prima di fare un graco e sempre consigliabile mettere listruzione close che chiude la nestra precedente.

7.2

Graci sovrapposti

(Si veda il le graf 4.m ). Ci proponiamo di tracciare graci sovrapposti in diversi colori. Discretizziamo lintervallo [-7,7] a passo 0.02 t = -7 : 0.02 : 7;

Vogliamo fare i graci 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 listruzione 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. Listruzione title(seno , coseno , arcotangente); mette un titolo sopra il graco. 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 listruzione whitebg che e un acronimo di white background . che si puo digitare nella nestra comandi o inserire in fondo alla graca. 5

7.3

Graco equazioni parametriche

(Si veda il le 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

Graco completo

(Si veda il le graf 7.m ). Graco ottimale: contiene tutti (?) i dati per ssare i colori delle linee e degli assi; le scritte e i colori delle scritte. Si vogliono fare i graci 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 dellintervallo in x ed in y . Il gruppo di istruzioni che segue ssa i colori delle scritte. ssa il colore di fondo della gura con listruzione gcf (get current figure handle) set (gcf , Color , c) scrivi il titolo in colore pressato title(FUNZIONI SOVRAPPOSTE , color , scrivi una frase in posizione e colore pressati 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 dallutente e fatta cosi: function linea ( x1 , y1 , x2 , y2 , g ); line ( [x1 x2] , [y1 y2] , color , g ); 19 k);

Questa funzione, salvata come archivio col nome linea.m , e formata di due istruzioni: la prima da lintestazione della funzione, la seconda contiene listruzione di libreria la cui sintassi e inusuale. Essa e stata creata da noi proprio per avere un comando pi` u tradizionale. La chiamata della funzione linea e fatta con listruzione linea(0,180,6,180,k); Per la graca 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

Graco tridimensionalie a maglia

(Si veda il le sup 1.m ). Traccia il graco di una funzione z=f(x,y) a maglia.

20

chiudi la nestra graca 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 gracare mesh(x,y,z); traccia la superce 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

Graco tridimensionale lisciato

(Si veda il le sup 2.m ). Traccia il graco di una funzione z=f(x,y) come fosse spalmato Assegna i due vettori che formano la griglia Traccia il graco di una funzione z=f(x,y) a maglia.

21

chiudi la nestra graca azzera la memoria assegna la maglia di base funzione da gracare traccia la superce a maglia traccia la superce liscia con posizione della luce in gradi shading interp; ombreggiata con interpolazione view ( [ 60 , 20 ] ) ssa la posizione dellosservatore 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