Introduzione a MATLAB - dse.univr.itdse.univr.it/cea/docs/matlab_introduzione.pdf · Si suggerisce...

22
Introduzione a MATLAB Enzo TONTI * 21 marzo 1997 Indice 1 Cosa e’ MATLAB 2 2 Come opera 3 3 Matrici 5 3.1 Come assegnare una matrice ................... 5 3.2 Prodotto .............................. 6 3.3 Inversa ............................... 6 3.4 Autovalori ............................. 6 3.5 Dimensioni ............................ 7 3.6 Trasposta ............................. 7 3.7 Come MATLAB memorizza le matrici ............. 7 3.8 Analisi degli elementi di una matrice .............. 8 3.9 Vettore con elementi in progressione aritmetica ........ 8 3.10 Prodotto scalare di due vettori .................. 9 3.11 Matrici particolari ........................ 9 3.12 Uso dei due punti ......................... 10 3.13 Operazioni sulle matrici ..................... 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` a di Trieste, Piazzale Europa 1, 34127 Trieste, Italia. e-mail: [email protected] 1

Transcript of Introduzione a MATLAB - dse.univr.itdse.univr.it/cea/docs/matlab_introduzione.pdf · Si suggerisce...

Introduzione a MATLAB

Enzo TONTI ∗

21 marzo 1997

Indice

1 Cosa e’ MATLAB 2

2 Come opera 3

3 Matrici 53.1 Come assegnare una matrice . . . . . . . . . . . . . . . . . . . 53.2 Prodotto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.3 Inversa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.4 Autovalori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.5 Dimensioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73.6 Trasposta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73.7 Come MATLAB memorizza le matrici . . . . . . . . . . . . . 73.8 Analisi degli elementi di una matrice . . . . . . . . . . . . . . 83.9 Vettore con elementi in progressione aritmetica . . . . . . . . 83.10 Prodotto scalare di due vettori . . . . . . . . . . . . . . . . . . 93.11 Matrici particolari . . . . . . . . . . . . . . . . . . . . . . . . 93.12 Uso dei due punti . . . . . . . . . . . . . . . . . . . . . . . . . 103.13 Operazioni sulle matrici . . . . . . . . . . . . . . . . . . . . . 10

4 Funzioni 114.1 Funzioni di libreria . . . . . . . . . . . . . . . . . . . . . . . . 114.2 Funzioni create dall’utente . . . . . . . . . . . . . . . . . . . . 12

∗Indirizzo dell’autore: Dipartimento di Ingegneria Civile, Universita di Trieste, PiazzaleEuropa 1, 34127 Trieste, Italia. e-mail: [email protected]

1

5 Costrutti alternativi e ripetitivi 125.1 Istruzione ”if” . . . . . . . . . . . . . . . . . . . . . . . . . . . 125.2 Istruzione ”while” . . . . . . . . . . . . . . . . . . . . . . . . . 135.3 Istruzione ”for” . . . . . . . . . . . . . . . . . . . . . . . . . . 14

6 Archivi 146.1 Salvare su file . . . . . . . . . . . . . . . . . . . . . . . . . . . 146.2 Prelevare da file . . . . . . . . . . . . . . . . . . . . . . . . . . 15

7 Grafici 167.1 Grafici bidimensionali semplici . . . . . . . . . . . . . . . . . . 167.2 Grafici sovrapposti . . . . . . . . . . . . . . . . . . . . . . . . 177.3 Grafico equazioni parametriche . . . . . . . . . . . . . . . . . 187.4 Grafico completo . . . . . . . . . . . . . . . . . . . . . . . . . 197.5 Grafico tridimensionalie a maglia . . . . . . . . . . . . . . . . 207.6 Grafico tridimensionale lisciato . . . . . . . . . . . . . . . . . 21

1 Cosa e’ MATLAB

MATLAB e’ un programma di alte prestazioni per il calcolo tecnico e scien-tifico.

Esso e’ anche un linguaggio basato su espressioni che rende molto facilela programmazione.

Esso include la visualizzazione fornendo figure a colori e ogni tipo di graficibi- e tridimensionali.

E’ usato nella ricerca scientifica e nella risoluzione di problemi di inge-gneria.

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 matri-ci. Per chi e’ abituato alla programmazione tradizionale (BASIC, PASCAL,FORTRAN, ecc) questa e’ la principale e unica difficolta’: adeguarsi allavisione matriciale.

E’ un programma incredibilmente duttile, facile da apprendere, facile dausare, velocissimo nei calcoli, opera con le piu 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, chesi possono stampare immediatamente o salvare in formato POSTCRIPT perincluderle 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 800pagine e con i dischetti contenenti il programma. 2

E’ particolarmente consigliato per fare calcoli nelle tesi di tipo tecnico-scientifico. Per la scrittura di tesi una combinazione altamente consigliatae’:

• 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: AdobeIllustrator, Claris Draw; sotto Windows: Corel Draw.

Associati a questa dispensa sono dei piccoli programmi esplicativi che sipossono 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 espli-cativi ben commentati, potranno ottenere dallo scrivente di includerli con illoro nome in tale sito.

2 Come opera

Il programma distingue le lettere maiuscole dalle minuscole: A e asono considerate due matrici diverse.

All’avvio si apre una finestra dei comandi. Si possono fare richiestedirette 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). IlMATLAB professional e’ distribuito in Italia dalla Teoresi, tel. 011 248.53.32; fax 011248.46.98; e-mail: [email protected]. Il suo costo (IVA compresa) si aggira sul milione emezzo. Attualmente e’ presente sugli elaboratori delle sale studenti e sui calcolatori delCentro 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 PI 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 menu file e si sceglie new cheapre una seconda finestra.

Una volta creato il programma per eseguirlo occorre prima salvarlo asse-gnandogli un nome seguito dall’estensione .m (ad esempio prova.m). Quindisi 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’ almassimo di 19 caratteri.

L’espediente di usare il maiuscolo o il minuscolo per distingure i file sudisco non funziona: i files calcolo.m, CALCOLO.M , Calcolo.m sono sovrap-posti 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 ele minuscole sono distinte, nel nome del file non lo sono.

I commenti sono preceduti dal simbolo % che vale solo per una riga. Se ilcommento sta su piu righe occorre mettere il simbolo % all’inizio di ciascunariga.

Le istruzioni contenute in un programma di regola sono seguite da unpunto e virgola. Se si omette il punto e virgola, al lancio verranno mostratii valori degli elementi man mano che vengono calcolati. Cosi’ scrivendos = cos(pi) al lancio apparira’ il numero -1. Scrivendo invece s = cos(pi); allancio non apparira’ nulla.

Se si vogliono vedere le variabili che sono in memoria si deve digitarewho nella finestra dei comandi. Per eliminare tutte le variabili in memoria sidigita clear nella finestra dei comandi.

Ogni file generalmente inizia con una serie di commenti che ne presentanoil contenuto: e’ la parte dichiarativa del file. Se al termine della parte di-chiarativa, 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 unicocomando: posizionandosi sulla finestra del programma si digita < command > − < e > .

4

vedere il contenuto di questa parte digitando help nome essendo nome.m ilnome del file.

Provare digitando help rettangolo nella finestra dei comandi.Se si vuole salvare il contenuto della memoria (variabili e loro valori) digi-

tare save nella finestra dei comandi. Si provi ora a cancellare dalla memoriatutte le variabili digitando clear . Si puo’ constatare che tutto e’ stato can-cellato digitando who. Digitare ora load e quindi digitare di nuovo who. Siritroveranno in memoria le variabili salvate con i loro valori.

Attenzione che un nuovo salvataggio con save va a sostituire quello pre-cedente 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 righediverse separati da un punto e virgola

A = [ 6 8 -3 ; -1 0 9]

• SECONDO modo: gli elementi di una riga separati da virgole quelli dirighe diverse separati da un punto e virgola (la virgola pero’ si rivelasuperflua.)

B = [ -1.65 , 3.19 , -0.41 ; 2.23 , 0 , 3.23 ]

• TERZO modo : gli elementi di una riga separati da spazi quelli di righediverse 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 didati (si veda il file arch 2 )

5

Si suggerisce di usare lettere maiuscole per le matrici e lettere minuscoleper vettori e numeri.

Il primo metodo e’ piu sbrigativo ed e’ quindi consigliato. Nessun lin-guaggio di programmazione in precedenza aveva un modo di assegnazionecosi’ 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 duematrici

A = [ -1 0 ; 8 3 ] ;

B = [ 3 -2 ; 1 -1 ] ;

C = A * B

3.3 Inversa

(Si veda il file matr C.m). Data una matrice Q per fare l’inversa e’ sufficientescrivere

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 memo-rizzati in un array. Indicando con f l’array contenente i suoi autovalori bastascrivere l’istruzione

f = eig(A)

6

3.5 Dimensioni

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

R = [ -1 0 -3.6

3.7 3 -0.45 ];

per sapere le sue dimensioni si usa l’istruzione

p = size(R)

Questa fornisce un vettore a due componenti: la prima componente indicail numero di righe, la seconda quello delle colonne. Il numero delle righe sipuo’ 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 bastascrivere A′.

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

matematicaa1,1 a1,2 a1,3

a2,1 a2,2 a2,3

a3,1 a3,2 a3,3

BASIC, FORTRAN, MATLABa(1, 1) a(1, 2) a(1, 3)a(2, 1) a(2, 2) a(2, 3)a(3, 1) a(3, 2) a(3, 3)

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

7

Quindi a(j) indica l’elemento della matrice di posto j secondo la numera-zione progressiva per colonne. Questo consente di richiamare gli elementidi una matrice sia in modo tradizionale con due indici a(h, k) che con un soloindice a(j).

3.8 Analisi degli elementi di una matrice

(Si veda il file matr H.m). Se si vogliono localizzare gli elementi di unamatrice 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 matriceM corrispondenti agli elementi della matrice diversi da zero.

• g=find(M>2) crea un vettore g i cui elementi sono gli indici dellamatrice M corrispondenti agli elementi della matrice maggiori di 2.

• g=find(M<0) crea un vettore s i cui elementi sono gli indici dellamatrice 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 differiscanodi una costante, ad esempio il vettore di componenti 0,1,2,3,4 si puo’ scrivereuno 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 neicomuni linguaggi si sarebbe dovuto scrivere

in PASCALk := 1;x[1] := 4;while (x[k] <= 12) do begin

k := k + 1;x[k] := x[1] + k * 0.2;

end;

nel vecchio FORTRANK = 1X(1) = 4

34 IF (X(K) .GT. 12) GOTO 52K = K + 1X(K) = X(1) + K ∗ 0.2

GOTO 3452 CONTINUE

in MATLABx = 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 ottienefacendo il prodotto u ∗ v′.

3.11 Matrici particolari

(Si veda il file matr K.m). Per generare una matrice 2 x 5 i cui elementisiano 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 usal’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 concomponenti che differiscono di una costante. Vediamo ora un secondo utiliz-zo.

Data una matrice A si voglia prelevare da essa una sotto-matrice formatada alcune righe e alcune colonne. Ricordiamo che, come in matematica,negli elementi ahk di una matrice il primo indice indica la riga, il secondo lacolonna. Ad esempio si voglia prelevare la sotto-matrice B formata dalla solaprima colonna di A

B = A( : , 1 )

che significa: B e’ formato da tutte le righe di A (questo significano i duepunti) 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 componentidi un vettore (o di una matrice) un numero, basta sommarre o sottrarre ilnumero 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 diun vettore o con le componenti di due vettori. Cosi’ se vogliamo fare il cubodelle componenti di un vettore a si deve premettere un punto al simbolo dielevamento a potenza.

f = x .^ 3;

si ottiene il vettore

[ 1000 8000 27000 ]

Il punto precisa che si deve operare sulle singole componenti. Se si vuolela funzione xsin(x), essendo x un vettore, non si puo’ scrivere x ∗ sin(x) masi 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 dellecorrispondenti componenti del vettore x.

4 Funzioni

4.1 Funzioni di libreria

(Si veda il file funz 1.m). In matematica, quando si scrive y = sin(x) siintende che al numero x si fa corrispondere il numeroy. Poiche’ in MATLABx 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 fattacorrispondere una componente y(k) del vettore y secondo la relazione y(k) =sin(x(k)).

Questo implica la scrittura

x = [ 0 : 0.1 : 4] ;

y = sin(x) ;

Lo stesso vale per tutte le altre funzioni di libreria quali cos(x), tan(x), abs(x), sqrt(x), exp(x), logecc.

11

4.2 Funzioni create dall’utente

(Si veda il file funz 2.m). In MATLAB non vi sono subroutine come in BASICe in FORTRAN procedure come in PASCAL moduli come in MODULA 2 masolo funzioni , come nel linguaggio C.

Vediamo come scrivere una una funzione con parametri in ingresso eparametri in uscita.

Si voglia costruire una funzione che, dati i lati ”a” e ”b” di un rettangolofornisca 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] lalista 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’ MATLABdistingue le lettere maiuscole dalle minuscole. Questa function, salvata conil nome rettang.m puo’ essere richiamata da un altro modulo o direttamentedalla 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 itre 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 1azione 1

elseif condizione 2azione 2

elseif condizione 3azione 3

elseazione 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 condizioneazione

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.5azione

end

6 Archivi

6.1 Salvare su file

(Si veda il file arch 1.m). Vediamo come salvare dei dati su un archivio ditesto.

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 sialuca.tx : esso dovra’ essere posto entro apici perche’ e’ una stringa. Apriamo ilfile in scrittura con ’w’ 4 assegnandogli il nome interno Firenze. L’istruzionee’

Firenze = fopen ( ’luca.txt’ , ’wt’);

Si deposita nell’archivio Firenze la matrice M scrivendo le due colonne dinumeri decimali:

la prima colonna con 6 cifre di cui 2 decimalila 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” costituitodalla coppia ”barra rovescia r” non e’ incluso nel ”new line” costituito dalla coppia ”barrarovescia n”. Sul Macintosh sarebbe sufficiente usare ’w’ ma usando ’wt’ si ottiene la stessacosa.

14

fprintf ( Firenze , ’%6.2g %8.4g\n’ , M );

Si noti cheper primo si mette il nome interno: Firenzeper secondo si mette il formatoper terzo si mette la matrice: 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 apreil file assegnandogli un nome interno, ad esempio Bologna, in lettura ( ’r’ chesta per ”read” ).

Bologna = fopen ( ’luca.txt’ , ’r’);

Si preleva dall’archivio Bologna la matrice M leggendo le due colonne dinumeri in formato ”%g”

M = fscanf ( Bologna , ’%g %g’ , [2 inf] );

M = M’;

Si noti che per primo si mette il nome interno: (Bologna) per secondo simette 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 parentesiquadre per indicare la matrice da prelevare. Quindi si chiude il file

fclose (Bologna);

Notare le corrispondenzeaprire: fopen (...) chiudere: fclose (...)scrivere: fprintf (...) leggere: fscanf (...)

15

7 Grafici

7.1 Grafici bidimensionali semplici

(Si veda il file graf 1.m ). Per fare un grafico puo’ essere sufficiente una solaistruzione!

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 funzionecreata dall’utente, come rettang deve essere messa entro apici. Il vettore [010] indica l’intervallo in cui si vuole tracciare la funzione. Come in tutte leliste gli argomenti sono separati da una virgola.

Quando pero’ si vuole ottenere qualche risultato piu sofisticato e’ meglioricorrere 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 edell’ordinata il programma procede al tracciamento del grafico.

Intendiamo ora fare il grafico dello spostamento in un moto uniforme-mente 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’ piu uno scalare ma un array. Questo comportache la funzione deve essere scritta cosi’

x = 5 + 2 .* t - 3/2 .* t .* t;

16

Anche in questa formula x non e’ piu uno scalare ma un vettore. La ragionedel puntino ”.” che precede il simbolo ” ∗ ” e’ dovuta al fatto che non sipossono fare prodotti come t∗t essendo t un vettore ma si devono moltiplicarele 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 ingiallo ( ’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 indiversi 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)/2w = 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’i-struzione

title(’seno , coseno , arcotangente’);

mette un titolo sopra il grafico. E’ consigliabile mettere sempre la seguentedichiarazione degli assi.

axis( [-7 7 -2 2] );

In mancanza di questa istruzione il programma mette gli assi secondo unascala sua, spesso non opportuna per la funzione che si intende rappresentare.

Spesso e’ preferibile invertire il colore di fondo: a questo scopo si usal’istruzione

whitebg

che e’ un acronimo di white background . che si puo’ digitare nella finestracomandi 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 para-metriche 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 fissarei colori delle linee e degli assi; le scritte e i colori delle scritte. Si voglionofare i grafici sovrapposti delle funzioni y = xx e z = x sin(x).

x = 0 : 0.001 : 6 ;

y = x .* exp(x) ;

z = x .^ x ;

clf

plot( x , y , ’r’ , x , z , ’k’ )

axis( [0 6 0 400 ] )

in cui il vettore [ Xmin Xmax Ymin Ymax ] contiene gli estremi dell’intervalloin x ed in y . Il gruppo di istruzioni che segue fissa i colori delle scritte. fissail 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 funzionecostruita 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 dueistruzioni: la prima da’ l’intestazione della funzione, la seconda contienel’istruzione di libreria la cui sintassi e’ inusuale. Essa e’ stata creata da noiproprio per avere un comando piu 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 nellatabella seguente:

mappa dei principali colorinero ’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) ”amaglia”.

20

close chiudi la finestra graficaclear azzera la memoria

prove colori di fondo% set(gcf,’Color’,’cyan’) colore di fondo celeste% set(gcf,’Color’,’blue’) colore di fondo bluset(gcf,’Color’,’black’) colore di fondo nero

prove colori di tracciamentocolormap(hot); colore caldi% colormap(cool) colori freddi[x,y] = meshgrid(-3:0.1:3); assegna la maglia di basez = peaks(x,y); funzione da graficaremesh(x,y,z); traccia la superfice a magliatitle(’mesh(x,y,z)’); metti titolo

colori degli assiset (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 aggiungendotre puntini dopo ogni pezzo.

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

close chiudi la finestra graficaclear azzera la memoria[x,y] = meshgrid(-3:0.1:3); assegna la maglia di basez = peaks(x,y); funzione da graficaremesh(x,y,z); traccia la superfice a magliasurfl (x, y, z, [ 50 , 10 ]); traccia la superfice liscia

con posizione della luce in gradishading interp; ombreggiata con interpolazioneview ( [ 60 , 20 ] ) fissa la posizione dell’osservatore

longit. e latitud. in gradititle(’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 bluset(gcf,’Color’,’black’) colore di fondo nero

prove colori di tracciamentocolormap(gray); colori caldi

colori degli assiset (gca,’XColor’ ,’ w’, ... asse x bianco

’YColor’ , ’w’, ... asse y bianco’ZColor’ , ’c’ ) asse z celeste

========= FINE ===================

22