650 likes | 1.14k Views
Matlab: grafici ed altro. Edmondo Giovannozzi ENEA C.R. Frascati. Outline. Esempio per stuzzicare l’appetito Introduzione a Matlab Lettura dati di FTU Grafica in Matlab Esempi. Esempio (1) per stuzzicare l’appetito. % Esempio per stuzzicare l'appetito shot = 18598;
E N D
Matlab: grafici ed altro Edmondo Giovannozzi ENEA C.R. Frascati
Outline • Esempio per stuzzicare l’appetito • Introduzione a Matlab • Lettura dati di FTU • Grafica in Matlab • Esempi Edmondo Giovannozzi ENEA C.R. Frascati
Esempio (1) per stuzzicare l’appetito % Esempio per stuzzicare l'appetito shot = 18598; te = ftudatav(shot,'%e.ecmtmax'); ne = ftudatav(shot,'$co2dens')/1e20; ne = ne:0:1.5; pe = te*ne; hf = figure(1); % hf e' uguale ad 1 set(hf,'color','white'); set(hf,‘DefaultAxesFontSize',12) subplot(3,1,1) plot(te) ylabel('T_e (keV)') title(['Shot: ' num2str(shot)]) subplot(3,1,2) plot(ne) ylim(max(0,ylim)) ylabel('n_e (10^{20}m^{-3})') subplot(3,1,3) plot(pe) ylim(max(0,ylim)) ylabel('p_e (keV 10^{20}m^{-3})') xlabel('t (s)') joinaxes Edmondo Giovannozzi ENEA C.R. Frascati
Per iniziare • Creare una directory: $HOME/matlab • File di startup eseguito all’inizio $HOME/matlab/startup.m (copiare da ~giovan/fus/general/corsoMatlab) • Directory matlab FTU $DASROOT/matlab • Esempi in: ~giovan/fus/general/corsoMatlab Edmondo Giovannozzi ENEA C.R. Frascati
Per iniziare • Per iniziare: <giovan@efrs05 ~> matlab & • Per uscire: >> exit • Help >> help <nome comando> Esempio: >> help plot • Informazioni sulle variabili presenti in memoria >> whos • Le variabili di base sono le matrici di numeri reali, ma ci sono anche le matrici logiche, le stringhe, gli array di celle e le strutture. • Per eseguire comandi di sistema: >> !<comando unix> >> [s,w] = unix(‘<comando unix>’) Attenzione! In Matlab come in Unix le maiuscole e le minuscole sono distinte. Tutti i comandi e le funzioni standard sono in minuscolo. Nella stringa w il risultato del comando. Edmondo Giovannozzi ENEA C.R. Frascati
Help Struttura dell’help Guida all’uso help di base Guida di riferimento funzioni di fit avanzato filtraggio segnali etc. spline Statistica Tutte le proprietà grafiche Edmondo Giovannozzi ENEA C.R. Frascati
Matrici reali >> a = [1, 2, 3, 4]; % vettore orizzontale di numeri reali >> b = [1; 2; 3; 4]; % vettore verticale di numeri reali >> c = [1,2,3; 4,5,6] % matrice 2x3 di numeri reali c = 1 2 3 4 5 6 >> whos Name Size Bytes Class a 1x4 32 double array b 4x1 32 double array c 2x3 32 double array >> clear % per cancellare le variabili create Attenzione come in FORTRAN le matrici sono memorizzate per colonne: c 1 4 2 5 3 6 Edmondo Giovannozzi ENEA C.R. Frascati
Creazione Matrici reali >> a = ones(2,3); % matrice 2x3 piena di 1 >> b = zeros(3,2); % matrice 3x2 piena di 0 >> c = 0:0.4:2 % vettore di reali tra 0 e 2 a passi di 0.4 c = 0 0.4000 0.8000 1.2000 1.6000 2.0000 >> d = c’ ; % vettore colonna trasposto di c >> whos Name Size Bytes Class a 2x3 48 double array b 3x2 48 double array c 1x6 48 double array d 6x1 48 double array Grand total is 24 elements using 192 bytes Edmondo Giovannozzi ENEA C.R. Frascati
Indici >> a = [1,2,3; 4,5,6] a = 1 2 3 4 5 6 Selezione del 5 elemento in memoria >> a(5) ans = 3 Indici: k l’elemento k-esimo. k:h dall’elemento k a quello h. k:d:h come sopra a passi di d. k:end dall’elemento k alla fine. k:end-1 dall’elemento k al penultimo : tutti gli elementi di quella dimensione. a con a vettore di indici, gli elementi corrispondente all’indice. b con b vettore logico, gli elementi per cui b è 1. Tutti gli elementi >> a(:) ans = 1 4 2 5 3 6 Selezione di un singolo elemento >> a(2,3) ans = 6 Selezione di una colonna >> a(:,2) ans = 2 5 Edmondo Giovannozzi ENEA C.R. Frascati
Operatori (1) • Molti operatori lavorano elemento per elemento: >> a = [1,2,3]; >> b = [4,5,6]; >> a + b ans = 5 7 9 • Così anche molte funzioni elementari >> y = sin(0:0.4:2) y = 0 0.3894 0.7174 0.9320 0.9996 0.9093 Edmondo Giovannozzi ENEA C.R. Frascati
Operatori (2) • Gli operatori matematici: “*”, “/” , “^” , “\” sono matriciali, i corrispondenti operatori che operano elemento per elemento sono: “.*”, “./”, “.^” , “.\”. • L’operatore “\” risolve il sistema di equazioni matriciale: A*X = B , X = A\B. Attenzione: >> a = [1 ; 2 ; 3]; >> 1 / a ans = 0 0 0.3333 L’operazione matematica è definita, anche se molto spesso non è ciò che volevamo. Per avere l’inverso del vettore, elemento per elemento dovevamo scrivere: >> 1 ./ a Edmondo Giovannozzi ENEA C.R. Frascati
Numeri complessi I numeri complessi sono gestiti automaticamente in Matlab >> a = log(-2) a = 0.6931 + 3.1416i >> a + (3 + 2i) + 3j ans = 3.6931 + 8.1416i >> b = complex(2) b = 2 >> isreal(b) ans = 0 >> imag(b) ans = 0 >> exp(a) ans = -2.0000 + 0.0000i >> imag(exp(a)) ans = 2.4493e-16 Funzioni: conj complesso coniugato. real parte reale. imag parte immaginaria. abs magnitudine. angle angolo di fase in radianti. isreal test se è un vettore reale o complesso >> a = [1,2i;3,4i] a = 1 0 + 2i 3 0 + 4i >> a’ ans = 1 3 0 – 2i 0 – 4i >> a.’ ans = 1 3 0 + 2i 0 + 4i Attenzione, l’operatore “ ’ ” calcola la matrice …, usare l’operatore “ .’ ” per la semplice trasposizione Edmondo Giovannozzi ENEA C.R. Frascati
Array e operatori logici >>a = [10, 20, 30, 40, 50, 60]; >> b = a > 30 b = 0 0 0 1 1 1 >> whos Name Size Bytes Class a 1x6 48 double array b 1x6 48 double array (logical) >>a(b) ans = 40 50 60 >>id = find(B) id = 4 5 6 >>a(id) ans = 40 50 60 Operatori di comparazione: == uguale a ~= diverso da >, < maggiore, minore >=, <= maggiore uguale, minore uguale Operatori e funzioni logiche: & and logico | or logico ~ not logico xor or esclusivo (funzione) anyvero se qualche elemento di un vettore è diverso da zero o è vero (funzione). allvero se tutti gli elementi di un vettore sono diverso da zero o sono veri (funzione). Edmondo Giovannozzi ENEA C.R. Frascati
Stringhe Per maggiori informazioni: >> help strfun >> help strings Le stringhe sono vettori riga di caratteri: >>sa = [‘pluto’ ; ‘pippo’] sa = pluto pippo >>whos Name Size Bytes Class sa 2x5 10 char array Attenzione in memoria sono memorizzate per colonne >>sa(:)’ ans = ppliuptpoo Principali funzioni: ischar test se un vettore è una stringa. strcmp compara due stringhe. findstr trova una stringa all’interno di un’altra strtok separa una stringa in token (uno per volta) (strmtok) trova tutti i token di una stringa (scritta a Frascati). num2str trasforma un numero in una stringsa. str2double trasforma una stringa in un numero. sprintf Output su una stringa. (vedi I/O) sscanf Input da una stringa. (vedi I/O) Edmondo Giovannozzi ENEA C.R. Frascati
Array di celle array di celle: può contenere oggetti di diversa natura. Si creano con le parentesi graffe. >> a = {1, ‘Ciao’, [1,2,3] } a = [1] 'Ciao' [1x3 double] >> b = a(2); >> c = a{2}; >> whos Name Size Bytes Class a 1x3 400 cell array b 1x1 128 cell array c 1x4 8 char array >> st = {‘pippo’,’pluto’,’topolino’}; è ancora un array di celle composto di una sola cella. è l’elemento nella cella Per inserire un elemento in un array di celle preesistente: >> a(2) = {‘FTU’} >> a{2} = ‘FTU’ >> a(2:3) = {‘FTU’,123} >> a{2:3} = ?? errato specialmente utile con stringhe di diversa lunghezza Edmondo Giovannozzi ENEA C.R. Frascati
Strutture >> a.x = 1; >> a.y = [1,2,3]; >> a.s = ‘Ciao’ a = x: 1 y: [1 2 3] s: 'Ciao‘ >> a(2).x = ‘pluto’ a = 1x2 struct array with fields: x y s >> a(1).y ans = 1 2 3 Un’unica variabile a è composta di diversi campi (x, y, s nell’esempio), che possono essere variabili di qualsiasi tipo. Si può avere un array di strutture. Stessa sintassi per leggere il valore di un campo Edmondo Giovannozzi ENEA C.R. Frascati
Funzioni matematiche >> pi ans = 3.1416 >> atan2(3,4) ans = 0.6435 >> round(3.6) ans = 4 >> floor(3.6) ans = 3 >> mod(13,5) ans = 3 >> 1/0 ans = Inf >> eps ans = 2.2204e-16 Tutte le principali funzioni trigonometriche ed esponenziali: acos, acosh, acot, acoth, acsc, acsch, asec, asech, asin, asinh, atan, atanh, atan2, cos, cosh, cot, coth, csc, csch, exp, log, log2, log10, sec, sech, sin, sinh, tan, tanh, … E quelle più specialistiche: airy, besselh, besseli, besselj, besselkm, bessely, beta, betainc, betaln, ellipj, ellipke, erf, erfc, erfcinv, erfcx, erfinv, expint, gamma, gammainc, gammaln, legendre, psi, … Costanti principali: pi pi greco i,j unità immaginaria eps Accuratezza relativa di un numero reale Inf Infinito NaN Not-a-Number Edmondo Giovannozzi ENEA C.R. Frascati
Funzioni di analisi Principali funzioni di analisi: max, min massimo, minimo di una matrice sum somma degli elementi mean, std media, deviazione standard median mediana trapz integrazione numerica trapezoidale Se applicati ad una matrice lavorano sulla prima dimensione, che diventa unitaria. >> a = [1,2,4]; >> mean(a) ans = 2.3333 >> a = [1,2; 3,4; 6,8] a = 1 2 3 4 6 8 >> mean(a) ans = 3.3333 4.6667 >> diff(a) ans = 2 2 3 4 >> cumtrapz([10,20,30],a) ans = 0 0 20 30 65 90 Funzioni cumulative cumsum somma cumulativa cumtrapz integrale trapezoidale cumulativo Altre: sort ordina un vettore diff differenza numerica gradient gradiente (attenzione!! non opera per colonne) fft FFT filter filtro numerico Edmondo Giovannozzi ENEA C.R. Frascati
Input Output Per salvare dei dati e recuperarli usare le funzioni save e load. i dati vengono scritti in binario in un file .mat: >> savenomefilevariabile1 variabile2 >> load nomefile >> var = load(‘nomefile’) Nell’ultimo caso le variabili vengono memorizzate come membri in una struttura, con l’opzione –ascii si scrivono e si leggono in formato ascii (usare solo con singole matrici). >> a = [1,2,3]; >> b = ‘Ciao’; >> save prova >> clear >> load prova >> c = load(‘prova’) c = a: [1 2 3] b: ‘Ciao’ >> whos Name Size Bytes Class a 1x3 24 double array b 1x4 8 char array c 1x1 176 struct array >> a = [1,2,3; 4,5,6]; >> save pluto a –ascii >> type pluto 1.0000e+00 2.0000e+00 3.0000e+00 4.0000e+00 5.0000e+00 6.0000e+00 >> fid = fopen(‘pippo’,’w’) >> fprintf(fid,’Ciao %f’,3.5) >> fclose(fid) >> type pippo Ciao 3.500000 >> fprintf(‘Ciao Ciao’) Ciao Ciao >> a =sprintf(‘Ciao’) a = Ciao Senza l’indicazione del file scrive sullo schermo Edmondo Giovannozzi ENEA C.R. Frascati
Lettura di un file di testo Altri comandi di input: fscanf Lettura formattata da un file fgetl Lettura di una linea di testo da un file input Lettura di un input dall’utente Esempio: >> b = input(‘Dimmi : ‘) Dimmi : 34 b = 34 >> type pluto 1.0000e+00 2.0000e+00 3.0000e+00 4.0000e+00 5.0000e+00 6.0000e+00 >> a = load(‘pluto’) a = 1 2 3 4 5 6 >> type esempio.vs * File versus di esempio V tempo te ne .data 0.1 1.1 2.2 0.2 0.9 2.3 0.3 1.0 2.1 >> a = vsread(‘esempio.vs’) a = tempo: [3x1 double] te: [3x1 double] ne: [3x1 double] Lettura di un file versus solo numerico di piccole dimensioni. Usare vs2mat per file grandi o con variabili di tipo carattere (vedi dopo). Edmondo Giovannozzi ENEA C.R. Frascati
Input/output formati Esempi: >> fprintf(‘a=%6.2f’,3.5) a= 3.50 >> fprintf(‘b=%-6.3dA’,11) b=011 A >>fprintf(‘b=%06d’,11) b=000011 >>fprintf(‘Ciao \nCiao’,11) Ciao Ciao Formato FORTRAN tipo %n.mf F Virgola fissa %n.md I Intero %n.me E Esponenziale %n.mg G Esponenziale/Virgola fissa %n.mx - Esadecimale %ns A Stringa La larghezza del campo è n. Contrariamente al fortran se il numero risulta più lungo, il campo si allunga di conseguenza senza troncare o mettere delle stelline al posto dei numeri. Per i formati reali (f,e,g) m è il numero di cifre dopo la virgola. Per il formato intero (d,x) m è il numero di cifre che deve essere scritto, eventualmente mettendo degli zeri sulla sinistra del numero. Si può ottenere un risultato simile riempendo il campo con zeri anche con il seguente formato: ‘%0nd’. Se n è negativo i numeri si allineano a sinistra. Caratteri speciali \n New line \r Carriage return \t Horizontal tab \\ Backslash '' Single quotation mark %% Percent character Edmondo Giovannozzi ENEA C.R. Frascati
Strutture di programmazione if<condizione> … elseif <condizione> … else … end switch<variabile> case<valore> … case{<valore1>,<valore2>} … otherwise … end <variabile> e <valore> possono essere un’espressione il cui risultato è un numero scalare o una stringa. for i = <beg>:<end> … end try … catch … end Gestione dell’errore Normalmente vengono eseguite le istruzioni tra try e catch, in caso di errore quelle tra catch ed end. while <condizione> … end break uscita anticipata da un ciclo for o while continue salta le rimanenti istruzioni e va alla successiva iterazione. Edmondo Giovannozzi ENEA C.R. Frascati
Funzioni e Script Il nome di una funzione o di uno script è quello del file in cui risiede. I nomi dei file terminano in .m Chiamata di una funzione: >> [out1,out2,…] = funzione(in1,in2,…) oppure >>funzione(in1,in2,…) I parametri in ingresso sono in1, in2, etc. mentre out1, out2, etc. sono i parametri in uscita. Le parentesi quadre sono opzionali se è presente un solo parametro in uscita. Script: sequenza di comandi come se fossero immessi da tastiera. Vedono le stesse variabili che sono visibili all’utente. Funzioni: possono avere parametri in input ed in output. La variabili sono private e non sono più visibili alla fine della funzione se non sono parametri d’uscita. Definizione di una funzione in un file. Attenzione il nome della funzione è comunque quello del file in cui risiede! function [o1,o2] = funzione(i1,i2) … o1 = … o2 = … Edmondo Giovannozzi ENEA C.R. Frascati
Funzioni base per il plot (3,2,1) (3,2,2) (3,2,3) (3,2,4) (3,2,5) (3,2,6) >> x = 0:0.8:10; >> y1 = sin(x); >> y2 = cos(x); >> figure >> subplot(2,1,1) >> plot(x,y1) >> subplot(2,1,2) >> plot(x,y2,’or--’) figure(n) apre una finestra grafica con il numero n. subplot(nr,nc,k) crea o seleziona il k-esimo asse, assumendo che la figura sia divisa in nr righe ed nc colonne. plot(x,y,stile,…) plot del vettore x vs y. stile è una stringa che definisce il tipo di marker, lo stile della linea, ed il colore. Vedere l’help della funzione plot per i dettagli. Nell’esempio considerato: ‘o’ marker circolare, ‘r’ linea e marker di colore rosso, ‘- -’ linea tratteggiata. Edmondo Giovannozzi ENEA C.R. Frascati
Lettura dati FTU ed altro • Lettura dati FTU • L’oggetto vxy • Scrittura canali dollaro • Varie routine disponibili a Frascati Edmondo Giovannozzi ENEA C.R. Frascati
Lettura dati FTU >> ip = ftudatav(18598,’zzzzed.ipl’) ip = x: [1x2048 double] y: [1x2048 double] ud: [1x1 struct] >> ip.ud ans = shot: 18598 ch: 'zzzzed.ipl' xl: 'TIME ' yl: 'I PLASMA ' xu: 's ' yu: 'A ' ier: 0 il tempo in questo caso Uso: var = ftudatav(nshot, canale) nshotpuò essere un vettore di numeri di sparo, ecanalepuò essere un cellarray di stringhe. >> shots = [18598,18591]; >> ip = ftudatav(shots,’zzzzed.ipl’); >> chans = {‘%e.ecmtmax’, ’zzzzed.vpl’} ; >> va = ftudatav(18598,chans) va = 1x2 vxy object la corrente il numero di sparo Il canale appena letto Le label e le altre informazioni Edmondo Giovannozzi ENEA C.R. Frascati
Oggetti VXY >> te =ftudatav(18598,’%e.ecmtmax’) te = x: [1x296 double] y: [1x296 double] ud: [1x1 struct] >> ip = ftudatav(18598,’zzzzed.ipl’) ip = x: [1x2048 double] y: [1x2048 double] ud: [1x1 struct] >> a = te * ip a = x: [1x1772 double] y: [1x1772 double] ud: [] >> plot(a) Non sono strutture ma oggetti. Ad esempio l’operazione * corrisponde alla routine: $DASROOT/matlab/@vxy/times.m per ottenere il risultato si interpolano i due vettori su una base delle x comune. Anche la funzione plot corrisponde a: $DASROOT/matlab/@vxy/plot.m Edmondo Giovannozzi ENEA C.R. Frascati
Oggetti VXY: creazione Creare oggetti VXY >> a = vxy; % oggetto vxy vuoto >> a = vxy(struttura) % una struttura con un campo x ed uno y >> a = vxy(xvect,yvect) % due vettori della stessa lunghezza >> a = vxy(xvect,’formula’) % un vettore ed una formula funzione di x Esempi: >> a = vxy([1,2,3],[4,5,6]); >> bs.x = [1,2,3]; bs.y = [4,5,6]; >> b = vxy(bs) b = x: [1 2 3] y: [4 5 6] ud: [] >> c = vxy(0.1:0.1:10,’sin(x)’) c = x: [1x100 double] y: [1x100 double] ud: 'sin(x)' Il campo ud (user data) può contenere dei dati utente. >> b.ud = ‘Ciao’ b = x: [1 2 3] y: [4 5 6] ud: 'Ciao' >> b.y = [7,8,9] ??? Error using ==> vxy/subsasgn It is not allowed to write to the y field >> dd =b.y dd = 4 5 6 Edmondo Giovannozzi ENEA C.R. Frascati
Oggetti VXY: operatori yr y2 y1 xr x2 x1 Tutti gli operatori binari principali, non c’è distinzione tra quelli matriciali e non: + somma - sottrazione * moltiplicazione / divisione ^ elevazione a potenza La base delle x scelta è l’unione delle due basi x nella zona dove entrambi i dati sono definiti. Interpolazione lineare di default, ma può essere cambiata tramite la funzione setinterpfun. Tutte i valori di x1ed x2 nell’intervallo di validità. Edmondo Giovannozzi ENEA C.R. Frascati
Oggetti vxy: metodi principali • Le principali funzioni trigonometriche e logaritmiche: sin, cos, etc. • La funzione plot. • Funzioni di calcolo b = deriv(a) derivata di a (usa la funzione gradient) b = integ(a) integrale di a (usa la funzione cumtrapz) b = mea(a,dx) media mobile di a in un intervallo 2 dx, se dx è un vettore, media di a negli intervalli [dx(i), dx(i+1)]. Es: >> plot(te, mea(te, [0.1,0.2,0.3,0.6,1.4]),‘+k') >> vline([0.1,0.2,0.3,0.6,1.4]),’k--’) Per altre informazioni vedere: http://fusfis.frascati.enea.it/Software/Unix/FTUdata/Matlab/index.html Edmondo Giovannozzi ENEA C.R. Frascati
Oggetto vxy: operatore ‘:’ L’operatore : in matlab è l’unico operatore ternario, ovvero può agire su tre oggetti. b = a:va interpolato ai valori del vettore v (avxy, b vxy, v vettore). b = a:ca interpolato alle ascisse di c (avxy, bvxy, c vxy). b = a:dxa interpolato a passi dx (avxy, bvxy, dx scalare). b = a:xmn:xmxa ma soltanto per le ascisse comprese tra xmn e xmx, nessuna interpolazione. (avxy, bvxy, xmnxmx scalari). Attenzione l’operatore : ha una bassissima priorità, mettere sempre le parentesi intorno!!! Es: >> b = (a:0.5:0.8)*3; Esempio: >> plot(te, 0.5+(te : 0.5 : 1)) Edmondo Giovannozzi ENEA C.R. Frascati
Oggetti vxy: campi fittizi Il nuovo oggetto ha le stesse x dell’oggetto b, e le y dell’interpolazione di a sulle y di b a.f(v) v Oltre ai campi x, y ed ud esiste il campo fittizio f che permette di vedere l’oggetto vxy come una funzione: a.f(vect) valore di a ai valori di vect. a.f(b) composizione funzionale. Esempio: >> a = vxy([1,2,3],[10,15,12]); >> a.f(1.5) ans = 12.5 >> a.f([1.5, 1.8, 4]) ans = 12.5 14 NaN >> b = vxy([4,5,6],[1.5,1.8,4]) b = x:[4 5 6] y:[1.5 1.8 4.0] ud:[] >> c =a.f(b) c = x: [4 5 6] y: [12.5 14.0 NaN] ud: [] >> d = a:[1.5,1.8,4] d = x: [1.5000 1.8000] y: [12.5 14.0] ud: [] Diverso è il comportamento dell’operatore : che ritorna sempre un oggetto vxy sia pure con la base delle x cambiata. Notare la scomparsa del NaN. a a:v Edmondo Giovannozzi ENEA C.R. Frascati
Oggetti vxy: vettori Si possono avere vettori di oggetti vxy se uno passa alla ftudatav un lista di spari o una lista di canali. Molte delle funzioni viste in precedenza operano su vettori di oggetti vxy: >> te = ftudatav([18598,18591],’%e.ecmtmax’); te = 1x2 vxy object >> plot(te) Per accedere al campo fittizio f mettere (:) prima del punto: >> te(:).f(0.5) Ci sono due funzioni che creano dei cell array di canali: ftuchan, e ftudaslist. >> ch = ftuchan(‘%e.ecmtvt’,[0.93,0.97,1.0]) ch = '%e.ecmtvt(0.93)' '%e.ecmtvt(0.97)' '%e.ecmtvt(1)' >> te = ftudatav(18598,ch); >> ftudaslist(18598,'zzzz*')' ans = 'ZZZZED.IPL' 'ZZZZED.VPL' 'ZZZZEE.DCN' 'ZZZZEE.HXR' 'ZZZZEM.IBT' Edmondo Giovannozzi ENEA C.R. Frascati
Scrittura canali dollaro La funzione dbput scrive i canali dollaro. Non esiste al momento una funzione dbget dedicata alla lettura di canali dollaro, questi vanno letti tramite la ftudatav. Formato: ier = dbput(shot, channel, x, y, xlab, ylab, xunit, yunit) shot Numero di sparo double channel Canale Stringa (utente.famiglia:$canale) x Coordinate x vettore o cell Array di vettori y Matrix matrice multidimensionale xlab X label Stringa o cell Array di stringhe. ylab Y label Stringa. xunit X unità di misura Stringa o cell Array of stringhe. yunit Y unità di misura Stringa. Esempio 2D: >> dbput(18598,'giovan.pr:$prova',{r,t}, z, {'R0', 'tempo'}, 'Valore', {'m','s'},'P') Matrice z (R lungo le colonne) R t numero di sparo coordinate in un cell array: prima il raggio poi il tempo Dati in una matrice rettangolare utente.famiglia:$canale Edmondo Giovannozzi ENEA C.R. Frascati
Funzioni varie >> joinaxes >> mplot('#18598',1,'ne',ne,ne2,2,'Te',te) >> plot(x,y) >> vline([-1,2,4],'k--') >> hline([-0.5,0.5],'r:') Edmondo Giovannozzi ENEA C.R. Frascati
Strumenti per leggi di scala esemcar.vs * File tipo versus V tok te ne F A F F .data FTU 1.1 2e20 FTU . 3e20 JET 5.7 1e20 JET 6.3 8e19 ; vs2mat trasforma file versus in file matlab (.mat). Per file versus di grandi dimensioni e con campi di tipo carattere. Esempio: <giovan@efrs10> vs2mat esemcar.vs … >> load esemcar >> whos Name Size Bytes Class LABEL 1x2 132 cell array ne 1x4 32 double array te 1x4 32 double array tok 1x4 32 double array >> tok tok = 1 1 2 2 >> LABEL LABEL = 'FTU' 'JET‘ >> te te = 1.1000 NaN 5.7000 6.3000 Per creare file versus dai dati FTU, vedere totab. (GiovanniBracco) (Giovanni Bracco): ~bracco/matlab/analisi_leggi_scala.m Edmondo Giovannozzi ENEA C.R. Frascati
Altri Esempi Per l’analisi dei segnali %E.ECPFAST >> ecpfastui Edmondo Giovannozzi ENEA C.R. Frascati
Altro esempio >> dayshot(23600) 11-Apr-2003 Numero di shot:9 Shot iniziale: 23596 Shot finale: 23604 shot ora scarica durata Btor Ipl(kA) 23596 12:09 PROVA_IMP 0.00 0.00 0 23597 12:18 S60M50A06I 0.00 5.88 0 23598 12:36 S60M50A06I 1.73 5.92 -497 23599 12:59 S60M50A06I 1.73 5.92 -491 23600 13:14 S60M90A004 1.75 5.88 -887 23601 13:44 S79M80LE03 1.42 7.87 -788 23602 15:56 S79M80LE03 1.43 7.86 -788 23603 16:21 S79M80LE03 0.00 5.77 0 23604 16:43 S79M80LE03 1.40 7.87 -783 Edmondo Giovannozzi ENEA C.R. Frascati
La Grafica • Funzioni Grafiche più complesse • Uso degli handle Edmondo Giovannozzi ENEA C.R. Frascati
Altre funzioni grafiche Per avere assi logaritmici si usano semilogx, semilogy, loglog, I parametri sono quelli della funzione plot: >> semilogy(1:10,exp(1:10)) per fare dei grafici con le barre di errore usare la funzione errobar: >> errorbar(x, y, dy, stile) >> errorbar(x, y, dyl, dyu, stile) Esempio >> x = 1:9; >> y = sin(x); >> ye = abs(rand(1,9)); >> errorbar(x, y, ye, ’or--’) Edmondo Giovannozzi ENEA C.R. Frascati
Sovrapporre grafici Per sovrapporre dei grafici nello stesso asse usare il comando hold, che permette di non cancellare i grafici già presenti nell’asse considerato. >> hold on >> hold off Esempio: >> x = 1:9; >> y = sin(x); >> ye = abs(rand(1,9)); >> errorbar(x, y+ye/2, ye, ’o’) >> hold on >> plot(1:0.1:9,sin(1:0.1:9),’k’) >> hold off Nota: Il comando hold cambia la proprietà ‘NextPlot’ dell’asse e della figura corrente. Edmondo Giovannozzi ENEA C.R. Frascati
Contour plot Stampata contour o pcolor colonne x(*) (nr,1) (1,1) (1,nc) (nr,nc) y(*) righe (nr,1) (1,1) (nr,nc) (1,nc) Le funzioni sono: contour, contourf. La funzione contourf, si differenzia dalla contour solo perché le curve di livello sono riempite. Uso: >> contour(x, y, z, nc) >> pcolor(x, y, z) Se nc è un numero indica il numero di contorni, se è un vettore, i livelli a cui devono essere disegnati i contorni. Esempio: >> x = [1,2,3,4]; >> y = [1,2,3]; >> z = [4,5,6,8; 6,5,5,7; 7,6,5,5] z = 4 5 6 8 6 5 5 6 7 6 5 5 >> whos Name Size Bytes Class x 1x4 32 double array y 1x3 24 double array z 3x4 96 double array >> contour(x,y,z,20) Attenzione all’orientamento della matrice z. La coordinata y scorre lungo le colonne. (*) x, y crescenti Edmondo Giovannozzi ENEA C.R. Frascati
Pseudo color Plot La funzione pcolor ha gli stessi parametri della contour (eccetto nc): >> z z = 4 5 6 8 6 5 5 6 7 6 5 5 >> pcolor(x,y,z) >> shading flat Notare che solo una parte viene mostrata, perché il colore della faccia è quello del vertice in basso a sinistra. Il comando shading cambia il modo in cui vengono colorate le facce. Ha 3 opzioni: faceted, flat, interp. pcolor genera una superficie tridimensionale e la fa vedere dall’alto. >> shading interp 6 5 5 4 5 6 Edmondo Giovannozzi ENEA C.R. Frascati
Label, leggende, etc. >> x=0:0.1:20; >> plot(x,sin(x),x,cos(x)) >> xlabel(‘Tempo’) >> ylabel(‘Valore’) >> title(‘Seni e Coseni’) >> legend(‘Seno’,’Coseno’) >> grid on >> ylim([-1.1,1.3]) >> xlim ans = 0 20 >> axis ans = 0 20.000 -1.1000 1.3000 Il comando axis permette di impostare diverse proprietà dell’asse corrente. Edmondo Giovannozzi ENEA C.R. Frascati
Gli handle • Ogni oggetto grafico ha assegnato un handle, ovvero un numero reale che si riferisce a quell’oggetto. • Il numero 0 è l’handle del’oggetto root che descrive lo schermo e alcune caratteristiche generali di matlab. • Normalmente gli handle delle figure sono numeri interi a partire da 1. • Attenzione! Non confondere le figure (che appunto hanno gli handle) con le finestre del sistema di sviluppo interattivo. molte funzioni grafiche se chiamate con dei parametri in uscita, ritornano degli handle agli oggetti grafici appena creati. >> h = figure h = 1 >> gcf ans = 1 >> hp = plot([1,2],[1,1]) hp = 3.0010 >> gca ans = 101.0009 handle della figura: è un numero intero Le due funzioni: gcf Get Current Figure gca Get Current Axes ritornano la figura e l’asse corrente handle della linea disegnata handle del nuovo asse Edmondo Giovannozzi ENEA C.R. Frascati
Le proprietà • Tutti gli oggetti grafici hanno delle proprietà (tipo lo spessore della linea od il colore per le linee, etc.) • Gli handle servono per leggere o cambiare le proprietà degli oggetti grafici tramite le funzioni set e get. >>h = plot(1:10,sin(1:10)) h = 102.0009 >> get(gca,’children’) ans = 102.0009 >>set(gcf, ’color’, ’yellow’) >>set(h, ’linewidth’,5) >>set(gca,’position’, [0.5,0.5,0.4,0.4]) >> set(gca,’fontsize’, 20) >> get([ gcf, gca, h],'type') ans = 'figure' 'axes' 'line' Edmondo Giovannozzi ENEA C.R. Frascati
Le Proprietà (2) Funzioni per cambiare o leggere le proprietà: gcf handle della figura corrente gca handle dell’asse corrente set(h,’Prop’,Val) cambia la proprietà di h get(h,’Prop’) legge la proprietà di h findobj(h,’Prop’,Val) trova un oggetto figlio di h con la proprietà specificata delete(h) Cancella h get(h) Mostra a schermo tutte le proprietà dell’oggetto h. set(h) Mostra a schermo tutte le possibili impostazioni delle proprietà dell’oggetto h. Esempio: >> get(1) Alphamap = [ (1 by 64)… BackingStore = on CloseRequestFcn = clos… Color = [1 1 1] Colormap = [ (64 by 3) … … >> set(1) Alphamap BackingStore: [ {on} | off ] CloseRequestFcn: string -or- function handle -or- cell array Color Colormap … Edmondo Giovannozzi ENEA C.R. Frascati
Gerarchia degli oggetti grafici Root Figure Axes Uicontrol Uimenu Uicontextmenu Image Light Line Patch Rectangle Surface Text Ogni oggetto grafico è figlio di un solo genitore e può avere più di un figlio. Due proprietà descrivono le relazioni di parentela: Children vettore con gli handle degli oggetti figli. Parent handle dell’oggetto genitore. L’oggetto root non ha genitori. Image, Light, Line, Patch, Rectangle, Surface, Text non hanno figli Edmondo Giovannozzi ENEA C.R. Frascati
Esempi Patch Surface Rectangle Text 3D Surface Edmondo Giovannozzi ENEA C.R. Frascati
Le principali proprietà comuni Comuni a tutti: Type Tipo di oggetto grafico Tag Stringa con un nome per l’oggetto. Può non essere specificato. Visibleon | off, indica se l’oggetto è visibile oppure no. Parent Handle del genitore. Tranne l’oggetto root. Children Vettore di handle degli oggetti figli. Ritorna [] per gli oggetti che non hanno figli. Clippingon | off, per gli oggetti figli degli assi specifica se sono visibili solo all’interno dell’asse genitore. • Proprietà comuni a molti oggetti descritte nel seguito: • Posizione • Colore • Assi • Testi Clipping on Clipping off Edmondo Giovannozzi ENEA C.R. Frascati