...

Diapositiva 1 - Dipartimento di Matematica

by user

on
Category: Documents
19

views

Report

Comments

Transcript

Diapositiva 1 - Dipartimento di Matematica
COSTANTI PREDEFINITE
Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano
durante l’elaborazione, anche se si cerca di forzarne l’alterazione del valore.
>> computer
tipo di computer in uso
PCWIN
>>pi
3.1416
>>eps
pigreco
precisione di macchina; in genere MATLAB usa per la rappresentazione dei
numeri floating point la doppia precisione con 16 cifre decimali significative
•2.2204e-016
>>realmax
massimo numero floating point rappresentabile
1.7977e+308
>>realmin
minimo numero floating point positivo e non nullo rappresentabile
2.2251e-308
>>i
oppure j rappresentano l’unità immaginaria nell’insieme dei numeri complessi
0.+1.0000i
>>inf
infinito; è il risultato di una espressione che ha al denominatore 0
>>NaN Not –a-Number; è il risultato di una espressione che risulta 0/0 o inf/inf
>>version
Versione di MATLAB
Come assegnare una matrice
• PRIMO modo: gli elementi di una riga separati da spazi,
quelli di righe diverse separati da un punto e virgola
A = [5 7 2.5 ; -3.2 4.8 1.5];
• SECONDO modo: gli elementi di una riga separati da
virgole quelli di righe diverse separati da un punto e
virgola (la virgola però si rivela superflua.)
• A = [5 , 7 , 2.5 ; -3.2 , 4.8 , 1.5];
• TERZO modo: gli elementi di una riga separati da spazi
quelli di righe diverse scritti su righe diverse
A = [ 5 7 2.5
-3.2 4.8 1.5];
• QUARTO modo: Una matrice può essere creata anche accorpando
più matrici che devono avere ugual numero di righe:
C=[ A B]
o di colonne
D=[A;B]
Come MATLAB memorizza le matrici
• MATLAB memorizza le matrici in un array
unidimensionale (=vettore) formato dalla prima
colonna della matrice seguita dalla seconda,
dalla terza, ecc.
• 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).
A righe m=2
colonne n=4
A(h,k)  A(j)
j=(k-1)*m+h
Analisi degli elementi di una matrice
• Se si vogliono localizzare gli elementi di una matrice che
soddisfano una data condizione si usa l’istruzione find.
Così, 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.
Matrici particolari
•
•
Per generare una matrice m x n i cui elementi siano tutti nulli si usa
l’istruzione
P = zeros (m,n);
Per generare una matrice di elementi tutti nulli avente la stessa dimensione
della matrice A, già definita dll’utente, si usa l’istruzione
T=zeros(size(A));
Per generare una matrice m×n i cui elementi siano tutti uguali ad uno si usa
l’istruzione
Q = ones(m,n);
Per generare una matrice identità n×n si usa l’istruzione
R = eye(n);
Per generare una matrice n×n con elementi a caso compresi tra zero ed 1 si
usa l’istruzione
S = rand(n)
DIMENSIONAMENTO AUTOMATICO
•
In MATLAB le variabili non sono dichiarate preventivamente al loro uso
dall'utente, ma sono create quando sono necessarie da un gestore della
memoria che alloca lo spazio necessario per una matrice dinamicamente,
mediante il cosiddetto DIMENSIONAMENTO AUTOMATICO.
• Se ad esempio si esegue
>>C(2,3)=1
C= 0 0 0
0 0 1
automaticamente viene allocato lo spazio per una matrice 2x3, ossia C diventa 2x3.
Se ora si esegue:
>>C(3,3)=2
C= 0 0 0
0 0 1
0 0 2
• MATLAB aumenta le dimensioni di C a 3x3 per trovare spazio per l’elemento
aggiunto C(3,3); la dimensione di C diventa 3x3.
• Si osservi che quando in una istruzione si cambia anche un solo elemento di una
matrice e l'istruzione non ha il punto e virgola finale, Matlab visualizza tutta la
matrice.
•
•
•
•
•
•
•
Se, dati a,h,n, si vuole fare un’operazione del tipo
x(1)=a
for i=1:n
x(i)=x(i-1)+h;
end;
Al primo passo viene definito un vettore x di lunghezza 1, al secondo x diventa di lunghezza 2, al
terzo di lunghezza 3 e così via fino a che al termine del ciclo ha lunghezza 21.
Il vettore viene considerato per convenzione, così come ogni vettore generato
dinamicamente, un vettore riga.
E’ possibile allocare a priori il vettore x, inizializzandolo a zero, usando la funzione zeros:
x=zeros(1,n)
for i=1:n
x(i)=x(i-1)+h;
end;
Questa soluzione è più efficiente per due motivi:
si ha il controllo dell'orientamento dei vettori, senza sottindere nulla, e si evitano errori di
compatibilità di dimensionamento nelle operazioni vettoriali;
si evita l'uso intensivo del gestore della memoria risparmiando tempo.
Se si vuol definire x come vettore colonna, basta usare x=zeros(n,1).
Vettore con elementi in progressione aritmetica
Se gli elementi di un vettore sono regolarmente intervallati
l’operatore (:) consente di generare un vettore riga:
a=[p:step:u]
es: a=[0:1:4] produce il vettore riga 0,1,2,3,4.
p primo elemento
step incremento (<0 se u<p) es: a=[8:-2:-12])
u ultimo elemento
Se step=1 può essere omesso
linspace (p,u,n) consente di creare un vettore riga con un numero
predefinito n di elementi linearmente intervallati nell’intervallo[p,u]
a=[0:1:4] equivale a a=linspace(0,4,5);
In un linguaggio di programmazione classico
• passo=0.2
k=1
z[1]=-4
while(z[k]<=4)
k=k+1;
z[k]=z[k-1]+passo
end while
Matlab
z=-4:0.2:4
Uso dei due punti
• 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.
• Vediamone ora un secondo utilizzo. Data
una matrice A si voglia prelevare da essa
una sotto-matrice formata da alcune righe
e alcune colonne.
• Ad esempio se si vuol prelevare la sotto-matrice
B formata dalla sola prima colonna di A.
B=A(:,1)
• che significa B è formato da tutte le righe di A
(questo significano i due punti prima della
• virgola) ma solo dalla colonna 1.
• Si voglia prelevare da A la sotto-matrice C
formata dalle colonne 2,3
• Basta usare l’istruzione C=A(:,2:3), che
signfica C è formato da tutte le righe di A
(questo significano i due punti prima della
virgola) ma solo dalle colonne 2 e 3 .
• Si voglia prelevare la sotto-matrice D
formata dalle righe 2 e 3 di A
• basta usare l’istruzione D = A(2:3,:) che
significa: D `e formato dalle righe 2 e 3 di
A e da tutte le colonne (questo significano
i due punti dopo la virgola).
SOMMA TRA MATRICI
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Siano A e B due matrici mxn. Allora si può definire la matrice somma A+B i cui
elementi sono la somma degli elementi di ugual indici di A e B rispettivamente.
>>A=[1 2 3; 4 5 6: 7 8 9];
>>B=A’
B= 1 4 7
2 5 8
3 6 9
>>C=A+B
C= 2 6 10
6 10 14
10 14 18
>>A=A+x
ove x è un vettore 3x1 NON SI PUO’ ESEGUIRE!!!
>>A=A+1
A= 2 3 4
5 6 7
8 9 10
In questo caso anche se 1 è uno scalare si sottintende che A sia moltiplicato
per una matrice 3x3 di tutti 1 e l’operazione può essere fatta.
PRODOTTO DI SCALARE PER MATRICE
Sia A una matrice mxn e y uno scalare. Il prodotto dello scalare y
per la matrice A è una matrice mxn i cui elementi sono gli
elementi di A moltiplicati per y.
>>A=[2 3 4; 5 6 7;16 18 20]
A=
2 3 4
5 6 7
16 18 20
>> B= 2*A
B= 4 6 8
10 12 14
16 18 20
Prodotto Matrice vettore
•
Se A matrice mxn ed x vettore colonna nx1 si può definire il prodotto matrice
vettore Ax nel seguente modo:
>>A=[2 1; 3 4]
A=
21
34
>> x=[5;6]
x=
5
6
>>c=A*x
c=
16
39
Il prodotto Matrice vettore può essere calcolato solo se il numero delle colonne
della matrice è uguale al numero delle righe del vettore.
Operazioni sulle matrici
• Per aggiungere o togliere a tutte le componenti di un vettore (o di
una matrice) un numero, basta sommare 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
che fornisce il vettore
[ 20 40 60 ]
Prodotto tra matrici
E’ sufficiente mettere un asterisco tra le due matrici
A = [ -1 0; 8 3]; % assegna la prima matrice
B = [ 3 -2; 1 -1]; % assegna la seconda matrice
C =A*B
% esegui il prodotto e mostralo
• E’ evidente che si possono moltiplicare due matrici se il numero di
colonne della prima e’ uguale al numero di righe della seconda.
• Ad esempio
A = [ -1 0
3x2
83
•
5 2];
% assegna la prima matrice
2x4
• B = [ 3 -2 8 5
1 -1 2 -5];
% assegna la seconda matrice
• C = A * B % esegui il prodotto e mostralo
• In particolare si può ottenere il prodotto scalare
di due vettori
u = [-1 4 8 3 5 2]; % assegna il primo
vettore-riga
v = [ 3 ; -2 ; 8 ; 5; 1 ; -1];
% assegna il secondovettore-colonna
• s=u*v
% esegue il prodotto e lo mostra
Cmxn  Amxp  B pxn
Prodotto di due Matrici Amxp Bpxn
p
Cij   Aik  Bkj
k 1
• for i=1,…,m
for j=1,…,n
C(i,j)=0
for k=1,…,p
C(i,j)=C(i,j)+A(i,k)*B(k,j)
end
end
end
Con un linguaggio di
programmazione classico
Prodotto di due Matrici Amxp Bpxn
• for i=1:m
for j=1:n
C(i,j)=A(i,:)*B(:,j)
end
End
In matlab sostituendo il
ciclo più interno con
l’operatore : ed
utilizzando la
moltiplicazione
predefinita tra vettori *
oppure più semplicemente usando il comando
C=A*B
Operazioni componente per componente
• Una operazione molto utile in MATLAB, che non ha analogo nel
calcolo matriciale, è la seguente:
date due vettori u e v che hanno la stessa dimensione si vuole
ricavare un altro vettore che ha come componenti i prodotti (o i
quozienti) delle componenti omonime dei due vettori dati.
Ad esempio
u = [8 6 12] v = [2 3 4]
si vogliono ottenere i vettori
w = [16 18 48] (ottenuto moltiplicando componente per
componente i
due vettori)
z = [4 2 3] (ottenuto dividendo componente per componente i
due vettori)
• si devono introdurre due nuove operazioni che sono indicate con i
simboli (.*) e (./) rispettivamente ovvero anteponendo un puntino ai
simboli di prodotto (*) e di quoziente (/). rispettivamente.
•u = [8 6 12]
•v = [2 3 4]
•w = u .* v
•z = u ./ v
% il puntino precede il segno di prodotto *
% il puntino precede il segno di quoziente /
Questa nuova operazione si usa anche quando vogliamo fare
operazioni sulle singole componenti di un vettore o con le componenti
di due vettori. Cos`ı se vogliamo fare il cubo delle componenti di
•un vettore ovvero
a = [2 3 5] ed ottenere b = [8 27 125]
si deve premettere un punto al simbolo di elevamento a potenza.
>> b = a .^ 3;
•Il punto precisa che l’operazione indicata viene compiuta sulle singole
componenti.
Questo tipo di operazione è molto usata
nella valutazione di funzioni:
Valutare la funzione y=((1+x)-1)/x) in x che
varia nell’intervallo [eps/2,eps]:
x=[eps:-eps/16:eps/2]
y=((1+x)-1)./x)
Qualora si dovesse valutare la funzione
y = x sin(x)
nelle componenti di un vettore x, dovremmo
fare il prodotto delle componenti omonime
premettendo un punto al simbolo di prodotto
y = x .* sin(x);
Vettorizzazione
• L'azione di rimpiazzare un ciclo con una
operazione vettoriale viene detta
vettorizzazione e porta tre vantaggi:
• maggiore efficienza in termini di tempo di
esecuzione;
• maggiore leggibilità dell'algoritmo;
• abitudine a usare operazioni vettoriali; ci sono
macchine che usano la sintassi vettoriale poiché
hanno caratteristiche hardware ad hoc per le
operazioni di tipo vettoriale.
Funzioni che agiscono sugli array
• min(A): per i vettori restituisce il più piccolo valore nel vettore,
per le matrici restituisce un vettore riga contenente gli elementi
minimi di ogni colonna di A
• max(A): per i vettori restituisce il più grande valore nel vettore,
per le matrici restituisce un vettore riga contenente gli elementi
massimi di ogni colonna di A
• sort(A): per i vettori restituisce il vettore di input ordinato in
ordine crescente, per le matrici dispone le colonne dell’array A in
ordine crescente e restituisce un array della stessa dimensione di A
• sum(A): per i vettori restituisce la somma degli elementi del
vettore, per le Matrici restituisce la somma gli elementi di ogni
colonna dell’array A e restituisce un vettore riga che contiene le
somme risultanti.
Funzioni matematiche di base
Funzioni matematiche di base
Tipiche funzioni matematiche di base
abs(x) calcola il valore assoluto di x
exp(x) calcola ex
sqrt(x) calcola la radice quadrata di x
log(x) calcola il logaritmo naturale di x
log10(x) calcola il logaritmo decimale (in base 10)
• F. Complesse
abs(x) calcola il valore assoluto di x
angle(x) calcola la fase di un numero complesso
conj(x) calcola il numero complesso-coniugato
di x
imag(x) rende la parte immaginaria di un
numero complesso x
real(x) rende la parte reale di un numero
complesso x
• F. Numeriche
ceil(x) approssima x al numero intero più vicino verso
infinito, ceil(1.21232)=2
fix(x) approssima x al numero intero più vicino verso
lo zero fix(1.21232)=1
floor(x) approssima x al numero intero più vicino verso
- infinito floor(1.21232)=1
round(x) approssima x al numero intero più vicino
round(1.21232)=1
sign(x) calcola il segno di x e restituisce
+1 se x > 0
0 se x = 0
-1 se x < 0
Funzioni trigonometriche
•
•
•
•
•
•
•
•
•
cos(x), sin(x), tan(x) e cot(x) coseno, seno, tangente e
cotangente di x
acos(x), asin(x), atan(x) e acot(x) arcocoseno, arcoseno, arcotangente,
arcocotangente di x
sec(x) e csc(x) secante e cosecante di x
cosh(x), sinh(x), tanh(x) e coth(x) coseno iperbolico, seno iperbolico,
sech(x) tangente iperbolica e cotangente iperbolica
e secante iperbolica di x
asec(x) e acsc(x) arcosecante e arcocosecante di x
aosh(x), sinh(x), tanh(x) e coth(x) arcocoseno iperbolico, arcoseno
iperbolico,
csech(x) arcotangente iperbolica e arcocotangente
iperbolica e cosecante di x
atan2(y,x) arcotangente nei quattro quadranti (+pi:-pi)
Funzioni logiche
• any(x) restituisce uno scalare , che è pari a 1 se
almeno uno degli elementi del vettore x è diverso da
zero, 0 negli altri casi.
• any(A) restituisce un vettore riga che ha lo stesso
numero di colonne della matrice A e che contiene 1 e 0
in funzione del fatto che la corrispondente colonna di A
contiene oppure no almeno un elemento diverso da 0.
• all(x) restituisce uno scalare, che è pari a 1 se tutti
gli elementi del vettore x sono diversi da 0, 0 negli altri
casi
M-function file
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Definiscono una nuova funzione il cui nome coincide con il nome che si attribuisce al file.
Ogni funzione accetta dei dati su cui operare (parametri di ingresso) e restituisce dei risultati
(parametri di uscita).
La prima istruzione del file deve essere:
function [lista parametri uscita]=nome(lista parametri ingresso);
% commento; linea H1: compare quando si fornisce il comando
% >> help nome
Il nome della funzione segue le regole dei nomi delle variabili (31 caratteri, di cui il primo è una
lettera).
Se in una lista di parametri compare più di un parametro, essi sono separati da virgola. I parametri
specificati nella istruzione function si dicono parametri formali.
Nel corso della funzione vengono eseguiti calcoli sui parametri d'ingresso e si assegnano valori ai
parametri di uscita.
La funzione è richiamabile all’interno di qualunque espressione mediante il nome e la lista dei
parametri su cui deve operare (parametri attuali):
…nome(i1,i2,..,in)
Se non ci sono parametri d'uscita si usa:
function nome(lista parametri d'ingresso);
function []=nome(lista parametri d'ingresso);
• ESEMPIO
• La seguente funzione viene scritta in editor e gli
viene assegnato nome poli5.m:
• function y=poli5(x); oppure [y]=poli5(x);
• %polinomio di grado 5
• y=x^5/5-x^4+x^3+x^2-1.0;
• x è parametro formale d’ingresso
• y è parametro formale d’uscita;
• entro la function occorre che compaia almeno
una istruzione che definisce i parametri formali
d’uscita.
•
•
•
•
•
•
•
•
•
•
•
•
Uso della function:
» var=2;ris=poli5(var);disp(ris);
1.4000
var è parametro attuale d’ingresso
ris è parametro attuale d’uscita
» xx=3;s=poli5(xx);disp(s);
2.6000
In questo caso xx è parametro attuale d’ingresso e s è parametro attuale d’uscita.
Parametri formali e parametri attuali devono essere in corrispondenza
biunivoca.
Il commento è opzionale serve a documentare cosa calcola la funzione; se l’utente si
dimentica il tipo di elaborazione eseguita, con
>>help nome
viene visualizzata la linea di commento H1 dopo l’istruzione function, se essa è stata
specificata. Vengono visualizzate anche le successive linee di commento se sono
presenti, fino alla prima linea vuota o alla prima linea non di commento.
•
•
•
•
•
•
•
•
•
•
•
•
ESEMPIO
» help poli5
polinomio di grado 5
»
Analogamente l’istruzione
>>lookfor parola-chiave
cerca la parola-chiave specificata dall’utente nella riga di commento
dopo l’istruzione function e, se la trova, visualizza il nome della
funzione e la riga di commento.
ESEMPIO
» lookfor polinomio
poli5.m: %polinomio di grado 5
Ogni funzione usata resta in memoria. Con il comando inmem si
possono vedere le funzioni attualmente in memoria.
Si possono cancellare tutte le funzioni con
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
>> clear functions
Con
>> clear nomefun
si azzera solo la funzione specificata.
ESEMPIO 1
La function che segue calcola la media campionaria di un insieme di dati contenuti nel vettore x:
function m=media(x);
% calcolo della media campionaria di un insieme di dati
% contenuti in un vettore x;
% l'input e' il vettore x; l'output e' la media campionaria
n=length(x);
m=sum(x)/n;
In Matlab, la media si può calcolare anche con la funzione predefinita mean.
Esempio di esecuzione:
» x=[3 6 2 9 10];
» media(x)
ans =
6
» mean(x)
ans =
6
•
•
•
•
•
•
•
•
•
•
•
•
•
ESEMPIO 2
Supponiamo di avere un insieme di dati di cui si conoscono le frequenze; in
tal caso la media viene calcolata con una differente formula, che può essere
implementata mediante la seguente function:
function m=media_pesata(x,f);
% calcolo della media campionaria di un insieme di dati
% contenuti in un vettore x con frequenze contenute nel vettore f;
% l'input e' il vettore x; l'output e' la media campionaria
s=sum(f);
m=sum(x.*f)/s;
Esempio di esecuzione:
» x=[4 6 9 1];f=[14 5 8 23];
» media_pesata(x,f)
ans =
3.62
FUNZIONI USATE ENTRO UNA FUNCTION
• nargin
numero di argomenti di input che sono specificati nella
chiamata alla function in cui si trova nargin
nargout
numero di argomenti di output che sono specificati
nella chiamata alla function in cui si trova nargout
ESEMPIO
function c=testarg(a,b);
if nargin== 1
c=a.^2;
elseif nargin==2
c=a+b;
end;
SOTTOFUNZIONI
• Gli M-function file possono contenere la
definizione di più funzioni.
• La prima funzione definita è la funzione primaria
che fornisce il suo nome all'M-file; essa è l'unica
accessibile dall'esterno nel senso che può
essere richiamata dall'esterno. Le altre funzioni
che seguono sono dette sottofunzioni e sono
visibili solo alla funzione primaria e alle altre
sottofunzioni del file.
• Il comando help nome m_file visualizza solo i
commenti contenuti nella funzione primaria.
ESEMPIO
function [avg,med]=newstats(u);
% calcola media e mediana di un insieme di dati u
n=length(u);
avg=mean(u,n);
med=median(u,n);
function a=mean(v,n);
a=sum(v)/n;
function m=median(v,n);
w=sort(v);
if rem(n,2)==1
m=w((n+1)/2);
else
m=(w(n/2)+w(n/2+1))/2;
end;
Tutte queste funzioni stanno nel file newstats.m; newstats è la funzione primaria, mean e median sono sottofunzioni,
richiamabili solo da newstats oppure l'una dall'altra.
WORKSPACE DI UNA M-FUNCTION
•
•
Ogni M-function ha un proprio spazio di lavoro in cui opera.
Può usare i parametri d'ingresso ma non le variabili dello spazio di lavoro dell'ambiente globale, a
meno che non esistano variabili definite GLOBAL. Tali variabili, che fanno parte di una zona di
memoria diversa dallo spazio di lavoro generale e comune, possono essere usate nello spazio di
lavoro generale e nelle function che dichiarano di usarle.
ESEMPIO
function y=f(x);
global A1 A2;
y=A1*x+A2;
Nell’ M-file che chiama la funzione oppure nella command window:
» global A1 A2
» A1=3.0;A2=5.0;z=f(3.5)
z=
15.5
In questo modo A1 e A2 sono variabili comuni allo spazio di lavoro generale e allo spazio di
lavoro della function f; ogni volta che vengono alterate, lo sono per ogni ambiente in cui sono
dichiarate.
>>clear global A1
>>clear A1
•
cancella la variabile A1 dallo spazio di lavoro globale
cancella la variabile A1 solo dallo spazio di lavoro locale ma la
variabile esiste ancora nello spazio di lavoro globale.
Input
• Il comando “input”
Se si vuole introdurre il valore di una variabile in
un programma si usa l’istruzione input
p = input(’dammi il numero: ’);
g = p*2 % fa una operazione matematica
• Se si vuole introdurre una stringa in un
programma si usa l’istruzione
nome = input(’dammi una stringa anche con
spazi: ’,’s’);
disp(nome)
Il comando fprintf
Quando si vogliono visualizzare valori numerici è bene
che siano dotati di un “formato”, ovvero che siano
“formattati”.
Ad esempio se si vuole visualizzare una tabella che ad
ogni numero intero compreso tra 1 e 6 associ la sua radice
quadrata, il suo quadrato ed il suo logaritmo in base e,
occorre stampare su quattro colonne come segue:
x = 1:6;
y = sqrt(x);
u = x.^2;
v = log(x);
for i=1:6
fprintf(’ num= %2i \t rad= %8.5f \t quad= %4i \t ln= %9.7e \n’,x(i),y(i),u(i),v(i))
end
Il risultato è
num = 1 rad = 1.00000 quad = 1 ln = 0.0000000e+00
num = 2 rad = 1.41421 quad = 4 ln = 6.9314718e-01
num = 3 rad = 1.73205 quad = 9 ln = 1.0986123e+00
num = 4 rad = 2.00000 quad = 16 ln = 1.3862944e+00
num = 5 rad = 2.23607 quad = 25 ln = 1.6094379e+00
num = 6 rad = 2.44949 quad = 36 ln = 1.7917595e+00
• Il comando fprintf contiene la stringa dei formati delimitata da apici,
come tutte le stringhe e, dopo la virgola, l’elenco delle variabili da
stampare.
• Nella stringa dei formati vi sono:
num = %2i significa: scrivi “num = ” con 2 cifre nel formato “i” intero;
rad = %8.5f significa: scrivi “rad = ” con 8 cifre di cui 5 decimali nel
formato “fixed point”;
quad = %4i significa: scrivi “quad = ” con 4 cifre nel formato “i”
intero;
ln = %9.7e significa: scrivi “ln = ” con 9 cifre di cui 7 decimali nel
formato esponenziale;
Il simbolo \t indica la tabulazione ovvero l’incolonnamento; il simbolo
\n indica l’andare a capo
(new line).
Gestione dei grafici
•Per aprire una finestra grafica si usa l’istruzione
h1=figure
in cui figure `e il comando che attiva la finestra grafica
mentre h1 `e un identificatore del manico (handle) del
comando figure che servirà a specificare i parametri della
finestra grafica con un successivo
comando set.
La variabile h1 è stata scelta in quanto h `e l’iniziale di
handle. La cifra 1 è stata scelta in previsione dell’utilizzo di
altri manici.
Posizione e dimensione della finestra grafica
• La posizione e le dimensioni della finestra
grafica si precisano all’interno del comando set.
• Le unità di misura possono essere: cm, mm,
pixel, foot, ...
• E’ conveniente dare le misure in proporzioni alle
dimensioni dello schermo, le cui dimensioni
(larghezza, altezza) sono considerate unitarie.
• Per fare questo si usa il formato normalized
ovvero si scrive l’istruzione
set(h1, ’Units’, ’normalized’)
• Le dimensioni della finestra grafica si
precisano dichiarando quattro numeri
relativi a:
1) origine finestra in ascisse;
2) origine finestra in ordinate;
3) lunghezza della finestra;
4) altezza della finestra.
•
Avendo scelto le unità normalizzate questi quattro numeri vanno espressi come frazione dell’unità:
ad esempio volendo posizionare la finestra grafica in alto a destra dello schermo l’origine della
finestra in ascissa dovrà essere la metà della larghezza dello schermo: (0.5) l’origine della finestra in
ordinate risulterà (0.5) La lunghezza della finestra risulter`a met`a della larghezza dello schermo:
(0.5) e l’altezza della finestra risulterà metà della altezza dello schermo: (0.5).
Questi quattro numeri devono essere messi come quattro componenti di un vettore:
•
[ascissa origine , ordinata origine , lunghezza , altezza ].
Il tutto viene messo nell’istruzione set nel modo seguente
set(h1, ’Units’, ’normalized’, ’Position’, [0.5 0.5 0.5 0.45]);
Se si volesse fare la figura a tutto schermo si dovrebbe scrivere
•
set(h1, ’Units’, ’normalized’, ’Position’, [0 0 1 1]);
E’ conveniente dare come altezza non 1 ma 0.9 affinchè nella parte alta dello schermo possa starci
la striscia superiore che contiene i comandi di MATLAB. Quindi
set(h1, ’Units’, ’normalized’, ’Position’, [0 0 1 0.9]);
Colore dello sfondo
• E’ possibile definire il colore dello sfondo della
finestra su cui si andranno a realizzare i disegni
• Questo si realizza con l’istruzione:
• whitebg(h1, ’black’)
nero
• whitebg(h1, ’blue’)
blu
• whitebg(h1, ’cyan’)
ciano
• whitebg(h1, ’magenta’)
magenta
• whitebg(h1, ’yellow’)
giallo
• whitebg(h1, ’green’)
verde
Più disegni sulla stessa finestra
• Sovrapporre più disegni su una stessa
finestra o mettere una scritta su un grafico:
• Per “tener ferma” la finestra durante i
disegni si deve usare l’istruzione
hold on.
Comando plot
• plot(x,y)
La funzione plot prende in ingresso due
vettori della stessa lunghezza e visualizza
le coppie di punti corrispondenti alle
coordinate fornite dai due vettori.
• Dati in input i due vettori x e y il grafico sarà
formato dai punti (x1,y1), (x2,y2)……. (xn,yn).
Tali valori potranno essere visualizzati per punti
o collegati con una linea continua ottenuta
mediante interpolazione lineare.
• Un ulteriore parametro della funzione plot
riguarda lo stile con cui vogliamo visualizzare il
grafico.
• plot(x,y,stile)
Esempio:disegno funzione seno
h1 = figure;
set(h1, ’Units’, ’normalized’, ’Position’, [0 0 1 0.9]);
whitebg(h1, ’black’)
hold on
• x = 0 : 0.1 : 12;
• y = sin(x);
• plot(x,y,’r:’);
Esempio:disegno funzione seno
h1 = figure;
set(h1, ’Units’, ’normalized’, ’Position’, [0 0 1 0.9]);
whitebg(h1, ’black’)
hold on
• x = 0 : 0.1 : 12;
• y = sin(x);
• plot(x,y,’r*’);
Esempio di stili
h1 = figure;
set(h1, ’Units’, ’normalized’, ’Position’, [0 0 1 0.9]);
whitebg(h1, ’black’)
hold on
• x = 0 : 0.1 : 12;
• y = sin(x);
• plot(x,y,’b-’);
Assi cartesiani
• MATLAB sceglie automaticamente le dimensioni
degli assi in modo che il grafico vi stia dentro
completamente.
• In alternativa si possono fissare gli assi di
dimensioni volute. Ad esempio se si vuole che la
ascissa vada da 0 a 10 e che la ordinata vada
da -2 a 2 si scriverà
axis([0 10 -2 2]);
• I quattro valori rappresentano rispettivamente:
”xmin” ”xmax” ”ymin” ”ymax”.
Mettere un titolo
•
Il comando
h2=title(‘Funzione seno’);
Serve per visualizzare il titolo della finestra:
restituisce un handle h2, che può essere
utilizzato per settare i parametri del titolo,
quali il colore del font, la dimensione, il tipo
del carattere.
Il tutto si può specificare con delle linee di
codice del seguente tipo:
Attivare una griglia
• Spesso è conveniente tracciare una
griglia che aiuta a leggere i valori numerici
della funzione in corrispondenza a
determinate ascisse.
• La griglia si realizza con l’istruzione
grid on
• grid minor
Fly UP