Matlab grafici ed altro Edmondo Giovannozzi ENEA C
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 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 2
Esempio (1) per stuzzicare l’appetito % Esempio per stuzzicare l'appetito shot = 18598; te = ftudatav(shot, '%e. ecmtmax'); ne = ftudatav(shot, '$co 2 dens')/1 e 20; ne = ne: 0: 1. 5; pe = te*ne; subplot(3, 1, 3) plot(pe) ylim(max(0, ylim)) ylabel('p_e (ke. V 10^{20}m^{-3})') xlabel('t (s)') joinaxes hf = figure(1); % hf e' uguale ad 1 set(hf, 'color', 'white'); set(hf, ‘Default. Axes. Font. Size', 12) subplot(3, 1, 1) plot(te) ylabel('T_e (ke. V)') title(['Shot: ' num 2 str(shot)]) subplot(3, 1, 2) plot(ne) ylim(max(0, ylim)) ylabel('n_e (10^{20}m^{-3})') 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 3
Per iniziare • Creare una directory: $HOME/matlab • File di startup eseguito all’inizio $HOME/matlab/startup. m (copiare da ~giovan/fus/general/corso. Matlab) • Directory matlab FTU $DASROOT/matlab • Esempi in: ~giovan/fus/general/corso. Matlab 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 4
Per iniziare • Per iniziare: <giovan@efrs 05 ~> matlab & • Per uscire: >> exit • Help >> help <nome comando> Esempio: >> help plot Attenzione! In Matlab come in Unix le maiuscole e le minuscole sono distinte. Tutti i comandi e le funzioni standard sono in minuscolo. • 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: Nella stringa w il risultato >> ! <comando unix> del comando. >> [s, w] = unix(‘<comando unix>’) 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 5
Help Struttura dell’help Guida all’uso help di base funzioni di fit avanzato Guida di riferimento filtraggio segnali etc. spline Statistica Tutte le proprietà grafiche 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 6
Matrici reali >> a = [1, 2, 3, 4]; >> b = [1; 2; 3; 4]; >> c = [1, 2, 3; 4, 5, 6] c= 1 2 3 4 5 6 >> whos Name Size a 1 x 4 b 4 x 1 c 2 x 3 >> clear 11/25/2020 % vettore orizzontale di numeri reali % vettore verticale di numeri reali % matrice 2 x 3 di numeri reali Attenzione come in FORTRAN le matrici sono memorizzate per colonne: c 14 25 36 Bytes Class 32 double array % per cancellare le variabili create Edmondo Giovannozzi ENEA C. R. Frascati 7
Creazione Matrici reali >> a = ones(2, 3); % matrice 2 x 3 piena di 1 >> b = zeros(3, 2); % matrice 3 x 2 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 2 x 3 48 double array b 3 x 2 48 double array c 1 x 6 48 double array d 6 x 1 48 double array Grand total is 24 elements using 192 bytes 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 8
Indici >> a = [1, 2, 3; 4, 5, 6] a= 1 2 3 4 5 6 Selezione di un singolo elemento >> a(2, 3) ans = 6 Selezione di una colonna >> a(: , 2) ans = 2 5 11/25/2020 Selezione del 5 elemento in memoria >> a(5) ans = 3 Tutti gli elementi >> a(: ) ans = 1 4 2 5 3 6 Indici: k k: h k: d: h k: end-1 : a b l’elemento k-esimo. dall’elemento k a quello h. come sopra a passi di d. dall’elemento k alla fine. dall’elemento k al penultimo tutti gli elementi di quella dimensione. con a vettore di indici, gli elementi corrispondente all’indice. con b vettore logico, gli elementi per cui b è 1. Edmondo Giovannozzi ENEA C. R. Frascati 9
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 11/25/2020 0. 9320 0. 9996 Edmondo Giovannozzi ENEA C. R. Frascati 0. 9093 10
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 = AB. L’operazione matematica è definita, anche Attenzione: >> a = [1 ; 2 ; 3]; >> 1 / a ans = 0 0 0. 3333 11/25/2020 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 11
Numeri complessi I numeri complessi sono gestiti automaticamente in Matlab >> a = log(-2) a= 0. 6931 + 3. 1416 i >> a + (3 + 2 i) + 3 j ans = 3. 6931 + 8. 1416 i >> b = complex(2) b = 2 >> isreal(b) ans = 0 >> imag(b) ans = 0 >> exp(a) ans = -2. 0000 + 0. 0000 i >> imag(exp(a)) ans = 2. 4493 e-16 11/25/2020 Funzioni: conj real imag abs angle isreal complesso coniugato. parte reale. parte immaginaria. magnitudine. angolo di fase in radianti. test se è un vettore reale o complesso >> a = [1, 2 i; 3, 4 i] a= 1 0 + 2 i 3 0 + 4 i >> a’ ans = 1 3 0 – 2 i 0 – 4 i >> a. ’ ans = 1 3 0 + 2 i 0 + 4 i Attenzione, l’operatore “ ’ ” calcola la matrice …, usare l’operatore “. ’ ” per la semplice trasposizione Edmondo Giovannozzi ENEA C. R. Frascati 12
Array e operatori logici >> a = [10, 20, 30, 40, 50, 60]; Operatori di comparazione: >> b = a > 30 == uguale a b= ~= diverso da 0 0 0 1 1 1 >, < maggiore, minore >> whos >=, <= maggiore uguale, Name Size Bytes Class minore uguale a 1 x 6 48 double array b 1 x 6 48 double array (logical) >> a(b) Operatori e funzioni logiche: ans = & and logico 40 50 60 | or logico >> id = find(B) ~ not logico id = xor or esclusivo (funzione) 4 5 6 any vero se qualche elemento di un vettore è >> a(id) diverso da zero o è vero (funzione). ans = all vero se tutti gli elementi di un vettore sono 40 50 60 diverso da zero o sono veri (funzione). 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 13
Stringhe Le stringhe sono vettori riga di caratteri: >> sa = [‘pluto’ ; ‘pippo’] sa = pluto pippo >> whos Name Size Bytes Class sa 2 x 5 10 char array Attenzione in memoria sono memorizzate per colonne >> sa(: )’ ans = ppliuptpoo 11/25/2020 Per maggiori informazioni: >> help strfun >> help strings 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). num 2 str trasforma un numero in una stringsa. str 2 double 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 14
Array di celle >> a = {1, ‘Ciao’, [1, 2, 3] } a= [1] 'Ciao' [1 x 3 double] array di celle: può contenere oggetti di diversa natura. Si creano con le parentesi graffe. >> b = a(2); è ancora un array di celle composto di una sola cella. >> c = a{2}; è l’elemento nella cella >> whos Name Size a 1 x 3 b 1 x 1 c 1 x 4 Bytes Class 400 cell array 128 cell array 8 char array >> st = {‘pippo’, ’pluto’, ’topolino’}; 11/25/2020 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 15
Strutture >> a. x = 1; Un’unica variabile a è composta di diversi >> a. y = [1, 2, 3]; campi (x, y, s nell’esempio), che possono >> a. s = ‘Ciao’ essere variabili di qualsiasi tipo. a= x: 1 y: [1 2 3] s: 'Ciao‘ >> a(2). x = ‘pluto’ Si può avere un array di strutture. a= 1 x 2 struct array with fields: x y s >> a(1). y Stessa sintassi per leggere il ans = valore di un campo 1 2 3 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 16
Funzioni matematiche >> pi ans = 3. 1416 >> atan 2(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. 2204 e-16 11/25/2020 Tutte le principali funzioni trigonometriche ed esponenziali: acos, acosh, acoth, acsch, asech, asinh, atanh, atan 2, cosh, coth, csch, exp, log 2, log 10, sech, sinh, tanh, … E quelle più specialistiche: airy, besselh, besseli, besselj, besselkm, bessely, betainc, betaln, ellipj, ellipke, erfc, erfcinv, erfcx, erfinv, expint, gammainc, gammaln, legendre, psi, … Costanti principali: pi pi greco i, j unità immaginaria eps Accuratezza relativa di un numero reale Infinito Na. N Not-a-Number Edmondo Giovannozzi ENEA C. R. Frascati 17
Funzioni di analisi >> 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 11/25/2020 Principali funzioni di analisi: max, min massimo, minimo di una matrice sum somma degli elementi mean, std media, deviazione standard mediana trapz integrazione numerica trapezoidale Se applicati ad una matrice lavorano sulla prima dimensione, che diventa unitaria. Funzioni cumulative cumsum somma cumulativa cumtrapz integrale trapezoidale cumulativo Altre: sort diff gradient fft filter ordina un vettore differenza numerica gradiente (attenzione!! non opera per colonne) FFT filtro numerico Edmondo Giovannozzi ENEA C. R. Frascati 18
Input Output >> a = [1, 2, 3]; Per salvare dei dati e recuperarli usare le funzioni save e load. i >> b = ‘Ciao’; dati vengono scritti in binario in un file. mat: >> save prova >> save nomefile variabile 1 variabile 2 >> clear >> load nomefile >> load prova >> var = load(‘nomefile’) >> c = load(‘prova’) Nell’ultimo caso le variabili vengono memorizzate come c = a: [1 2 3] membri in una struttura, con l’opzione –ascii si scrivono e si b: ‘Ciao’ leggono in formato ascii (usare solo con singole matrici). >> whos Name Size Bytes Class >> fid = fopen(‘pippo’, ’w’) a 1 x 3 24 double array >> fprintf(fid, ’Ciao %f’, 3. 5) b 1 x 4 8 char array >> fclose(fid) c 1 x 1 176 struct array >> type pippo >> a = [1, 2, 3; 4, 5, 6]; Ciao 3. 500000 >> save pluto a –ascii >> fprintf(‘Ciao’) >> type pluto Senza l’indicazione Ciao 1. 0000 e+00 2. 0000 e+00 3. 0000 e+00 del file scrive sullo >> a = sprintf(‘Ciao’) 4. 0000 e+00 5. 0000 e+00 6. 0000 e+00 schermo a = Ciao 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 19
Lettura di un file di testo >> type pluto Altri comandi di input: 1. 0000 e+00 2. 0000 e+00 3. 0000 e+00 fscanf Lettura formattata da un file 4. 0000 e+00 5. 0000 e+00 6. 0000 e+00 fgetl Lettura di una linea di testo da un file >> a = load(‘pluto’) input Lettura di un input dall’utente a=1 2 3 Esempio: 4 5 6 >> b = input(‘Dimmi : ‘) >> type esempio. vs Dimmi : 34 * File versus di esempio b = 34 V tempo te ne. data 0. 1 1. 1 2. 2 0. 9 2. 3 0. 3 1. 0 2. 1 Lettura di un file versus solo numerico >> a = vsread(‘esempio. vs’) a = tempo: [3 x 1 double] di piccole dimensioni. Usare vs 2 mat te: [3 x 1 double] per file grandi o con variabili di tipo ne: [3 x 1 double] carattere (vedi dopo). 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 20
Input/output formati Formato %n. mf %n. md %n. me %n. mg %n. mx %ns FORTRAN tipo F Virgola fissa I Intero E Esponenziale G Esponenziale/Virgola fissa Esadecimale 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: ‘%0 nd’. Se n è negativo i numeri si allineano a sinistra. 11/25/2020 Esempi: >> fprintf(‘a=%6. 2 f’, 3. 5) a= 3. 50 >> fprintf(‘b=%-6. 3 d. A’, 11) b=011 A >> fprintf(‘b=%06 d’, 11) b=000011 >> fprintf(‘Ciao n. Ciao’, 11) Ciao Caratteri speciali n New line r Carriage return t Horizontal tab \ Backslash '' Single quotation mark %% Percent character Edmondo Giovannozzi ENEA C. R. Frascati 21
Strutture di programmazione if <condizione> … else … end switch <variabile> case <valore> … case {<valore 1>, <valore 2>} … otherwise … end for i = <beg>: <end> … end try while <condizione> … end 11/25/2020 … catch … end break continue <variabile> e <valore> possono essere un’espressione il cui risultato è un numero scalare o una stringa. Gestione dell’errore Normalmente vengono eseguite le istruzioni tra try e catch, in caso di errore quelle tra catch ed end. uscita anticipata da un ciclo for o while salta le rimanenti istruzioni e va alla successiva iterazione. Edmondo Giovannozzi ENEA C. R. Frascati 22
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 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. 11/25/2020 Chiamata di una funzione: >> [out 1, out 2, …] = funzione(in 1, in 2, …) oppure >> funzione(in 1, in 2, …) I parametri in ingresso sono in 1, in 2, etc. mentre out 1, out 2, etc. sono i parametri in uscita. Le parentesi quadre sono opzionali se è presente un solo parametro in uscita. Definizione di una funzione in un file. Attenzione il nome della funzione è comunque quello del file in cui risiede! function [o 1, o 2] = funzione(i 1, i 2) … o 1 = … o 2 = … Edmondo Giovannozzi ENEA C. R. Frascati 23
Funzioni base per il plot >> x = 0: 0. 8: 10; >> y 1 = sin(x); >> y 2 = cos(x); >> figure >> subplot(2, 1, 1) >> plot(x, y 1) >> subplot(2, 1, 2) >> plot(x, y 2, ’or--’) figure(n) apre una finestra grafica con il numero n. subplot(nr, nc, k) (3, 2, 1) (3, 2, 2) (3, 2, 3) (3, 2, 4) (3, 2, 5) (3, 2, 6) 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. 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 24
Lettura dati FTU ed altro • • Lettura dati FTU L’oggetto vxy Scrittura canali dollaro Varie routine disponibili a Frascati 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 25
Lettura dati FTU >> ip = ftudatav(18598, ’zzzzed. ipl’) ip = il tempo in questo caso x: [1 x 2048 double] y: [1 x 2048 double] Uso: ud: [1 x 1 struct] la corrente var = ftudatav(nshot, canale) >> ip. ud ans = shot: 18598 ch: 'zzzzed. ipl' xl: 'TIME yl: 'I PLASMA xu: 's yu: 'A ier: 0 11/25/2020 il numero di sparo Il canale appena letto ' ' Le label e le altre informazioni nshot può essere un vettore di numeri di sparo, e canale può essere un cellarray di stringhe. >> shots = [18598, 18591]; >> ip = ftudatav(shots, ’zzzzed. ipl’); >> chans = {‘%e. ecmtmax’, ’zzzzed. vpl’} ; >> va = ftudatav(18598, chans) va = 1 x 2 vxy object Edmondo Giovannozzi ENEA C. R. Frascati 26
Oggetti VXY >> te = ftudatav(18598, ’%e. ecmtmax’) te = x: [1 x 296 double] y: [1 x 296 double] ud: [1 x 1 struct] >> ip = ftudatav(18598, ’zzzzed. ipl’) ip = x: [1 x 2048 double] y: [1 x 2048 double] ud: [1 x 1 struct] >> a = te * ip a= x: [1 x 1772 double] y: [1 x 1772 double] ud: [] >> plot(a) 11/25/2020 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 27
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: 10, ’sin(x)’) c= x: [1 x 100 double] y: [1 x 100 double] ud: 'sin(x)' 11/25/2020 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 28
Oggetti VXY: operatori 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. yr y 2 y 1 Tutte i valori di x 1 ed x 2 nell’intervallo di validità. 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati xr x 2 x 1 29
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 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 30
Oggetto vxy: operatore ‘: ’ L’operatore : in matlab è l’unico operatore ternario, ovvero può agire su tre oggetti. b = a: v a interpolato ai valori del vettore v (a vxy, b vxy, v vettore). Esempio: b = a: c a interpolato alle ascisse di c (a vxy, >> plot(te, 0. 5+(te : 0. 5 : 1)) b vxy, c vxy). b = a: dx a interpolato a passi dx (a vxy, b vxy, dx scalare). b = a: xmn: xmx a ma soltanto per le ascisse comprese tra xmn e xmx, nessuna interpolazione. (a vxy, b vxy, xmn xmx scalari). Attenzione l’operatore : ha una bassissima priorità, mettere sempre le parentesi intorno!!! Es: >> b = (a: 0. 5: 0. 8)*3; 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 31
Oggetti vxy: campi fittizi Esempio: Oltre ai campi x, y ed ud esiste il campo >> a = vxy([1, 2, 3], [10, 15, 12]); fittizio f che permette di vedere l’oggetto vxy >> a. f(1. 5) come una funzione: ans = 12. 5 a. f(vect) valore di a ai valori di vect. >> a. f([1. 5, 1. 8, 4]) ans = 12. 5 14 Na. N a. f(b) composizione funzionale. >> b = vxy([4, 5, 6], [1. 5, 1. 8, 4]) b = x: [4 5 6] Il nuovo oggetto ha le y: [1. 5 1. 8 4. 0] stesse x dell’oggetto b, e le a. f(v) ud: [] y dell’interpolazione di a >> c = a. f(b) sulle y di b v c = x: [4 5 6] y: [12. 5 14. 0 Na. N] Diverso è il comportamento dell’operatore : che ritorna ud: [] sempre un oggetto vxy sia pure con la base delle x cambiata. Notare la scomparsa del Na. N. >> d = a: [1. 5, 1. 8, 4] d = x: [1. 5000 1. 8000] a a: v y: [12. 5 14. 0] ud: [] 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 32
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 = 1 x 2 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); 11/25/2020 >> ftudaslist(18598, 'zzzz*')' ans = 'ZZZZED. IPL' 'ZZZZED. VPL' 'ZZZZEE. DCN' 'ZZZZEE. HXR' 'ZZZZEM. IBT' Edmondo Giovannozzi ENEA C. R. Frascati 33
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) Matrice z shot Numero di sparo double (R lungo le colonne) channel Canale Stringa (utente. famiglia: $canale) x Coordinate x vettore o cell Array di vettori y Matrix matrice multidimensionale R xlab X label Stringa o cell Array di stringhe. ylab Y label Stringa. xunit X unità di misura Stringa o cell Array of stringhe. t yunit Y unità di misura Stringa. Esempio 2 D: >> dbput(18598, 'giovan. pr: $prova', {r, t}, z, {'R 0', 'tempo'}, 'Valore', {'m', 's'}, 'P') numero di sparo utente. famiglia: $canale 11/25/2020 coordinate in un cell array: prima il raggio poi il tempo Dati in una matrice rettangolare Edmondo Giovannozzi ENEA C. R. Frascati 34
Funzioni varie >> joinaxes >> plot(x, y) >> vline([-1, 2, 4], 'k--') >> hline([-0. 5, 0. 5], 'r: ') 11/25/2020 >> mplot('#18598', 1, 'ne', ne 2, 2, 'Te', te) Edmondo Giovannozzi ENEA C. R. Frascati 35
Strumenti per leggi di scala vs 2 mat trasforma file versus in file matlab (. mat). Per file versus di grandi dimensioni e con campi di tipo carattere. Esempio: <giovan@efrs 10> vs 2 mat esemcar. vs … >> load esemcar. vs >> whos Name Size Bytes Class * File tipo versus LABEL 1 x 2 132 cell array V tok te ne ne 1 x 4 32 double array F A F F te 1 x 4 32 double array. data tok 1 x 4 32 double array FTU 1. 1 2 e 20 >> tok FTU. 3 e 20 tok = JET 5. 7 1 e 20 1 1 2 2 JET 6. 3 8 e 19 >> LABEL ; LABEL = 'FTU' 'JET‘ Per creare file versus dai >> te dati FTU, vedere totab. te = 1. 1000 Na. N 5. 7000 6. 3000 (Giovanni. Bracco) 11/25/2020 (Giovanni Bracco): ~bracco/matlab/analisi_leggi_scala. m Edmondo Giovannozzi ENEA C. R. Frascati 36
Altri Esempi Per l’analisi dei segnali %E. ECPFAST >> ecpfastui 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 37
Altro esempio >> dayshot(23600) 11 -Apr-2003 Numero di shot: 9 Shot iniziale: 23596 Shot finale: 23604 shot 23596 23597 23598 23599 23600 23601 23602 23603 23604 11/25/2020 ora 12: 09 12: 18 12: 36 12: 59 13: 14 13: 44 15: 56 16: 21 16: 43 scarica PROVA_IMP S 60 M 50 A 06 I S 60 M 90 A 004 S 79 M 80 LE 03 durata 0. 00 1. 73 1. 75 1. 42 1. 43 0. 00 1. 40 Edmondo Giovannozzi ENEA C. R. Frascati Btor 0. 00 5. 88 5. 92 5. 88 7. 87 7. 86 5. 77 7. 87 Ipl(k. A) 0 0 -497 -491 -887 -788 0 -783 38
La Grafica • Funzioni Grafiche più complesse • Uso degli handle 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 39
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--’) 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 40
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 11/25/2020 Nota: Il comando hold cambia la proprietà ‘Next. Plot’ dell’asse e della figura corrente. Edmondo Giovannozzi ENEA C. R. Frascati 41
Contour plot y(*) righe 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 Attenzione all’orientamento della matrice z. La coordinata y 6 5 5 6 scorre lungo le colonne. 7 6 5 5 Stampata contour o pcolor >> whos Name Size Bytes Class colonne x(*) x 1 x 4 32 double array (1, 1) (1, nc) (nr, 1) (nr, nc) y 1 x 3 24 double array z 3 x 4 96 double array >> contour(x, y, z, 20) (nr, 1) (nr, nc) (1, 1) (1, nc) (*) x, y crescenti 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 42
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 6 5 5 4 5 6 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 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 43
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 11/25/2020 Il comando axis permette di impostare diverse proprietà dell’asse corrente. Edmondo Giovannozzi ENEA C. R. Frascati 44
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. >> h = figure h =1 >> gcf ans = 1 >> hp = plot([1, 2], [1, 1]) hp = 3. 0010 >> gca ans = 101. 0009 11/25/2020 handle della figura: è un numero intero handle della linea disegnata handle del nuovo asse molte funzioni grafiche se chiamate con dei parametri in uscita, ritornano degli handle agli oggetti grafici appena creati. Le due funzioni: gcf Get Current Figure gca Get Current Axes ritornano la figura e l’asse corrente Edmondo Giovannozzi ENEA C. R. Frascati 45
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. 4, 0. 4]) >> set(gca, ’fontsize’, 20) >> get([ gcf, gca, h], 'type') ans = 'figure' 'axes' 'line' 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 46
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. 11/25/2020 Esempio: >> get(1) Alphamap = [ (1 by 64)… Backing. Store = on Close. Request. Fcn = clos… Color = [1 1 1] Colormap = [ (64 by 3) … … >> set(1) Alphamap Backing. Store: [ {on} | off ] Close. Request. Fcn: string -or- function handle -or- cell array Colormap … Edmondo Giovannozzi ENEA C. R. Frascati 47
Gerarchia degli oggetti grafici Root Figure Axes Uicontrol Image Light Uimenu Line Patch Uicontextmenu 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 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 48
Esempi Patch Rectangle Surface Text 3 D Surface 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 49
Le principali proprietà comuni Comuni a tutti: Type Tipo di oggetto grafico Tag Stringa con un nome per l’oggetto. Può non essere specificato. Visible on | 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. Clipping on | off, per gli oggetti figli degli assi specifica se sono visibili solo all’interno dell’asse genitore. Clipping on Clipping off 11/25/2020 Proprietà comuni a molti oggetti descritte nel seguito: • • Posizione Colore Assi Testi Edmondo Giovannozzi ENEA C. R. Frascati 50
Posizione Comuni a figure, axes, uicontrol, text, rectangle. Units Unità di misura: pixels, normalized, inches, centimeters, points, characters, data (solo per l’oggetto text). L’oggetto rectangle non ha questa proprietà. Position vettore di 4 componenti [Left, Bottom, Width, Height] (vettore di 3 componenti per l’oggetto text, vedere in seguito). Unità di misura: normalized da 0 a 1. Punto (0, 0) in basso a sinistra, (1, 1) in alto a destra. characters larghezza della lettera x, altezza pari a quella tra due linee di testo. (1, 1) Width Left (0, 0) Oggetto figlio Bottom Height Oggetto genitore La posizione degli altri oggetti è specificata rispetto agli assi nelle unità data. Proprietà: XData, YData, ZData 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 51
Colore Colormap Quasi tutti gli oggetti, hanno una o alcune proprietà che specificano un colore direttamente. nome (lungo o breve) Gli oggetti surface, patch ed image usano le colormap. Colormap Diretto Indice all’interno della colormap (1 -ncmap) 11/25/2020 Colore indice Specifica diretta terna RGB R G B Scalato (dipende dalla proprietà Clim dell’asse) RGB Nomi corti Nomi lunghi [1 1 0] y yellow [1 0 1] m magenta [0 1 1] c cyan [1 0 0] r red [0 1 0] g green [0 0 1] b blue [1 1 1] w white [0 0 0] k black Edmondo Giovannozzi ENEA C. R. Frascati 52
Colormap >> pcolor(magic(4)) >> shading interp >> colorbar >> colormap(jet) >> colormap(gray) >> jet ans = 0 0 0. 5625 0 0 0. 6250. . . 0 1. 0000 0. 0625 1. 0000. . . 0. 6250 0 0 0. 5625 0 0 11/25/2020 Matrice nx 3 Edmondo Giovannozzi ENEA C. R. Frascati 53
Proprietà di un asse >> plot(1: 4, 10: 40) >> set(gca, ’Xgrid’, ’on’) >> set(gca, ’XMinor. Tick’, ’on’) >> set(gca, ’XTick. Label’, {‘uno’, ’due’, ’tre’, ’quattro’}) >> set(gca, ’YTick’, [17, 27, 37]) >> set(gca, ’Font. Size’, 12) >> get(gca, ’XLim’) ans = 1 4 Le funzioni axis, xlim, ylim permetto comunque di impostare molte delle proprietà degli assi. 11/25/2020 XMinor. Tick Edmondo Giovannozzi ENEA C. R. Frascati YTick XGrid XTick. Label 54
Text Si aggiunge del testo ad un grafico con le funzione xlabel, ylabel, title, oppure con la funzione text. La posizione è specificata con un vettore di due o tre numeri. L’effettiva posizione del testo è data dalla proprietà extent. Le proprietà Horizontal. Alignment e Vertical. Alignment influenzano la posizione dell’extent. >> plot(x, y) >> h = text(0. 3, 0. 5, 'Ciao! Argh!', 'fontsize', 24); >> line(0. 3, 0. 5, 'Marker', '+', 'Color', 'r') >> rectangle('pos', get(h, 'Extent')) >> get(h, ’Vertical. Alignment’) middle posizione extent Un sottoinsieme del Te. X permette di avere sottoscritti, sovrascritti, caratteri greci ed altri simboli. >> text(0. 3, 0. 5, 'Ciao^{Ciao}_alpha', 'fontsize', 24); 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 55
Appendici • Proprietà delle linee (presenti in vari oggetti) • Le principali proprietà dell’oggetto root • Le principali proprietà delle figure • Le principali proprietà degli assi • Dell’oggetto line 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 56
Proprietà delle linee Gli oggetti line, patch, surface hanno delle proprietà legate alle linee che li compongono: Line. Style Stile della linea Line. Width Larghezza della linea (0. 5) Marker Tipo di Marker. Edge. Colore | none | auto | flat* none trasparente auto colore delle linee che connettono i marker. flat colore del vertice. Marker. Face. Colore | none | auto | flat* none trasparente auto colore del background (asse o finestra) flat colore del vertice. Marker. Size Dimensione del marker * Solo patch e surface 11/25/2020 Stile delle linee Simbolo Stile solid line (default) -dashed line : dotted line -. dash-dot line no line Tipo di Marker Description + plus sign o circle * asterisk. point x cross s square d diamond ^ upward pointing triangle v downward pointing triangle > right pointing triangle < left pointing triangle p five-pointed star (pentagram) h six-pointed star (hexagram) none no marker (default) Edmondo Giovannozzi ENEA C. R. Frascati 57
Le principali proprietà di root Units Screen. Size Le solite, di default pixels. [Left, Right, Width, Height], dimensioni dello schermo, ovviamente Left e Right valgono 0 per tutte le unità eccetto che per pixels che valgono 1. Pointer. Location [x, y], posizione del mouse nelle unità correnti. Show. Hidden. Handles {‘on’, ’off’}, di default ‘off’. Rende visibili tutti gli handle, anche quelli nascosti. (Ad esempio per gli axes, gli handle nascosti sono quelli associati al titolo ed alle label, anche se sono comunque raggiungibili con altre proprietà). >> get(0, ’Screen. Size’) ans = 1 1 1280 1024 >> get(0, ’Pointer. Location’) ans = 843 392 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 58
Le principali proprietà delle figure Units Position Color. Map Current. Object Double. Buffer Integer. Handle Name Number. Title Pointer 11/25/2020 Le unità di misura. Di default pixels. La posizione rispetto allo schermo Il colore di sfondo della figura. La colormap impostata. Generalmente si usa la funzione colormap per impostarla. L’oggetto corrente, ritornato da gco. permette semplici animazioni senza lampeggiamenti. {on off}, specifica se l’handle della figura deve essere intero. Nome della figura che appare nel barra del titolo. Specifica se nella barra del titolo deve apparire ‘Figure No. n’ La forma del mouse quando passa sulla figura: Orologio, freccia, etc. Proprietà che specificano le caratteristiche della carta per la stampa o la esportazione delle figure: Paper. Orientation, Paper. Position. Mode, Paper. Size, Paper. Type, Paper. Units. Per esportare correttamente la figura in modo che appaia come sullo schermo impostare: Paper. Type A 4 Paper. Orientation Portrait Paper. Position. Mode auto Edmondo Giovannozzi ENEA C. R. Frascati 59
Le principali proprietà degli assi Units Position Box Clim. Mode Le unità di misura. Di default normalized. La posizione rispetto alla figura. on | off. Traccia un box intorno al grafico. [cmin, cmax] Minimo e massimo sull’asse dei colori. auto | manual. Calcolo automatico o manuale dell’asse dei colori. Colore dello sfondo del grafico. Color. Order matrice nx 3 che indica nel plot la sequenza del colore delle linee. Data. Aspect. Ratio… [dx, dy, dz] Vettore con l’aspect ratio per le unità di misura degli assi (Vedere comando axis). …Mode. Plot. Box. Aspect. Ratio… [dx, dy, dz] Vettore con l’aspect ratio del plot. …Mode. Linewidth Larghezza delle linee del grafico. Font. Size Dimensione delle font usate. Font. Units Unità di misura delle Font usate. Di default point. Title handle di un oggetto text con il titolo del grafico. 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 60
Proprietà del singolo asse (X, Y o Z) XAxis. Location XColor XDir XGrid XLabel XLim. Mode XMinor. Grid XMinor. Tick XScale XTick. Mode XTick. Label. Mode 11/25/2020 top | bottom (left | right per l’asse Y). Colore dell’asse. Di default nero. normal | reverse in senso crescente o viceversa. on | off. Se è presente la griglia principale handle ad un oggetto text con la label. Usare la funzione xlabel. [min, max]. Vettore con i due estremi. Usare la funzione xlim. auto | manual Se auto gli estremi del grafico sono calcolati automaticamente. on | off linear | log L’asse è lineare o logaritmico. [x 1, x 2, …] un vettore con le posizioni dei tick. auto | manual Se auto la posizione dei tick è calcolata automaticamente. Una matrice di stringhe con le label assegnate ad ogni tick. auto | manual Se auto le label sono calcolate automaticamente. >> plot(1: 4, 10: 40) >> set(gca, ’Xgrid’, ’on’) >> set(gca, ’XMinor. Tick’, ’on’) >> set(gca, ’XTick. Label’, … {‘uno’, ’due’, ’tre’, ’quattro’}) >> set(gca, ’YTick’, [17, 27, 37]) YTick XMinor. Tick Edmondo Giovannozzi ENEA C. R. Frascati XGrid XTick. Label 61
Principali proprietà di line Proprietà generali delle linee (Marker, Linewidth, etc. ) Colore della linea XData, YData, ZData Vettori con le coordinate x, y, z Esempio: >> x = 0: 0. 2: 1; >> y= sin(3*x)+x; >> h = plot(x, y, ’ob—’); >> get(h, ’XData’) ans = 0 0. 20 0. 40 0. 60 0. 80 1. 00 >> get(h, ’Marker’) ans = o >> get(h, ’Line. Style’) ans = ->> get(h, ’Color’) ans = 0 0 1 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 62
Esempio (1) per … % Esempio per stuzzicare l'appetito shot = 18598; riga di commento, tutti i commenti iniziano con %. nella variabile shot viene inserito il numero di sparo. te = ftudatav(shot, '%e. ecmtmax'); ne = ftudatav(shot, '$co 2 dens')/1 e 20; vengono lette sia la temperatura che la densità, la densità viene divisa per 1 e 20. ne = ne: 0: 1. 5; pe = te*ne; per la densità si prendono solo i tempi tra 0 e 1. 5. La pressione è ottenuta come il prodotto tra densità e temperatura. Visto che sia te che ne sono degli oggetti vxy viene effettuata automaticamente una interpolazione sui tempi comuni. hf = figure(1); % hf e' uguale ad 1 set(hf, 'color', 'white'); set(hf, ‘Default. Axes. Font. Size', 12) si crea o si seleziona la figura 1. hf è l’handle della figura il cui valore in questo caso è proprio 1. Si imposta il colore dello sfondo della figura e si imposta la dimensione di default dei font per assi che saranno creati successivamente 11/25/2020 Edmondo Giovannozzi ENEA C. R. Frascati 63
Esempio (1) per … subplot(3, 1, 1) plot(te) ylabel('T_e (ke. V)') title(['Shot: ' num 2 str(shot)]) subplot(3, 1, 2) plot(ne) ylim(max(0, ylim)) ylabel('n_e (10^{20}m^{-3})') 11/25/2020 Si seleziona il primo asse dei tre che si vogliono si grafica la temperatura, si mette una label sull’asse y con ylabel. Il formato della label utilizza un sottoinsieme del Te. X, il carattere _ significa che il carattere successivo và sottoscritto. Si aggiunge un titolo al primo asse che appare in alto nella figura. La funzione num 2 str trasforma un numero in una stringa che viene concatenata con ‘Shot: ‘. Si seleziona il secondo asse e si grafica la densità. I limiti sull’asse y vengono prima letti con la funzione ylim poi si prende il massimo tra 0 ed i valori letti, poi si reimpostano. Si aggiunge una label sull’asse y. Nel sottoinsieme del Te. X il carattere ^ significa che il carattere successivo va sovrascritto. Le parentesi graffe raggruppano una serie di caratteri. Edmondo Giovannozzi ENEA C. R. Frascati 64
Esempio (1) per …. subplot(3, 1, 3) plot(pe) Si seleziona il terzo asse e si grafica la pressione. I limiti sull’asse y vengono prima letti con la funzione ylim poi si prende il massimo tra 0 ed i valori letti, poi si reimpostano. ylim(max(0, ylim)) Si aggiunge una label sull’asse y. , ed una label sull’asse x. ylabel('p_e (ke. V 10^{20}m^{-3})') xlabel('t (s)') joinaxes 11/25/2020 I grafici si attaccano in modo da venire uno sopra all’altro. Inoltre se fa lo zoom su un grafico, anche l’asse degli altri si modifica in corrispondenza. Edmondo Giovannozzi ENEA C. R. Frascati 65
- Slides: 65