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