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