Informatica per Scienze Geologiche LT a a 2019

  • Slides: 14
Download presentation
Informatica per Scienze Geologiche LT a. a. 2019 -2020 Introduzione all’utilizzo di metodologie informatiche

Informatica per Scienze Geologiche LT a. a. 2019 -2020 Introduzione all’utilizzo di metodologie informatiche nella Geologia Parte B Docenti: Prof. Eugenio Omodeo, Prof. Carla Braitenberg, Dipartimento Matematica e Geoscienze, Università di Trieste

Inizializzazione di array con valori costanti • • • » o=ones(1, 10) Vettore riga,

Inizializzazione di array con valori costanti • • • » o=ones(1, 10) Vettore riga, con 10 elementi, pari a 1. » z=zeros(23, 1) Vettore colonna con 23 elementi, pari a 0 » r=rand(1, 45) Vettore riga, 45 elementi (numeri casuali compresi nell’intervallo [0, 1]) • » n=nan(1, 69) • Vettore riga di valori Na. N (utile per definire variabili noninizializzate)

Inizializzazione automatica • Creare array di valori equi-distanziati • >> x=linspace(0, 10, 5) –

Inizializzazione automatica • Creare array di valori equi-distanziati • >> x=linspace(0, 10, 5) – Da 0 a 10 (incluso), con 5 valori • Equivalente, ma diamo l’intervallo: >>x 1 = 0: 2: 10 • Da 0 a 10 (minore o uguale), intervallo pari a 2 >> x 2 = 0: 10 Se non viene specificato l’intervallo, viene assunto intervallo pari 1 Intervallazione logaritmica: logspace >> x=logspace(1, 4)

Indirizzamento di un array • Definito un array c, vorremo indirizzare il contenuto. c=[

Indirizzamento di un array • Definito un array c, vorremo indirizzare il contenuto. c=[ 100 102 104 105] c(1) c(2) c(3) c(4) L’indirizzo puo’ essere uno scalare oppure un vettore. Se vettore, il risultato e’ della stessa lunghezza. z=[4 6 9 11 13 15] a=z(1: 3) b=z(3: end)

Indicizzazione di array bidimensionali • Un array 2 D (o detta anche matrice) puo’

Indicizzazione di array bidimensionali • Un array 2 D (o detta anche matrice) puo’ essere indicizzata dalle posizioni di riga e colonna, oppure da un indice lineare unico che segue una numerazione ben definita e codificata degli elementi dell’array. L’indice cresce lungo le colonne, partendo dalla prima colonna. La selezione di una parte di una matrice avviene selezionando un intervallo di indici: >> A=rand(6) % matrice 6 x 6 di numeri casuali >> B=A(1: 3, 1: 2) % seleziona la parte superiore sinistra >> C=A([1 4 6], [1 3 4]) % seleziona alcune righe e colonne

Selezionare colonna e riga completa di un array >> A=rand(3) A= 0. 9172 0.

Selezionare colonna e riga completa di un array >> A=rand(3) A= 0. 9172 0. 7537 0. 0759 0. 2858 0. 3804 0. 0540 0. 7572 0. 5678 0. 5308 >> B=A(2, : ) B = 0. 2858 0. 3804 0. 0540 >> C=A(: , 2) C= 0. 7537 0. 3804 0. 5678

Indicizzazione secondo criteri logici • E’ possibile definire gli indici su base di risultati

Indicizzazione secondo criteri logici • E’ possibile definire gli indici su base di risultati di un criterio di ricerca sui valori dell’array oppure su ricerche applicate sugli indici stessi. • Esempio: L’array Temperatura(4, 1200) sia un array contenente la data (anno, mese, giorno) e la temperatura misurata in una stazione per un periodo di diversi anni. Vorremmo selezionare le date nelle quali la temperatura sia stata maggiore di 35°C, minore di -10°C, e vorremmo trovare la data della temperatura piu’ bassa in tutto l’intervallo di tempo. • Illustriamo i comandi di linea su un array monodimensionale di prova. Si potranno poi applicare gli stessi comandi al problema della temperatura o ad altro problema analogo.

Indicizzazione secondo criteri logici test =[ 20 19 18 17 28 29 21 25

Indicizzazione secondo criteri logici test =[ 20 19 18 17 28 29 21 25 ] • Per il valore minimo e massimo, e relativo indice: • [min. T, min. K]=min(test) ; [max. T, max. K]=max(test); • • Per trovare gli indici dei valori maggiori o uguali una data soglia: • K=find(test ==18) • Per trovare gli indici nei quali i valori sono nella norma: • Kmedia= find (test >18 & test < 28] •

Grafico di una sequenza • Un grafico di una serie di valori, come quelli

Grafico di una sequenza • Un grafico di una serie di valori, come quelli della temperatura richiede una serie di coppie di valori, x e y. >>x=linspace(0, 20); >>y=3*sin(2*pi/ 10 *x); >>plot(x, y); >>title('Sinusoide'); >>xlabel('x(m)’); >>ylabel('y(m)');

Dalla scheda precedente. • Per migliorare il grafico, e’ necessario aumentare la lnghezza del

Dalla scheda precedente. • Per migliorare il grafico, e’ necessario aumentare la lnghezza del vettore x ed y. Attenzione: x, y devono essere array della stessa lunghezza.

Altre funzioni da plottare • Retta, parabola, cosinusoide, esponenziale • Sovrapposizione di due o

Altre funzioni da plottare • Retta, parabola, cosinusoide, esponenziale • Sovrapposizione di due o piu’ sinusoidi • Retta piu’ sinusoide • Rumore sovrapposto alla sinusoide

Esercizio livello acqua nell’Abisso di Trebiciano • Anni di osservazione: 2006 -2008, un campione

Esercizio livello acqua nell’Abisso di Trebiciano • Anni di osservazione: 2006 -2008, un campione ogni ora. Unita’ di misura: m sopra il livello del mare. • Caricare il file. Nome dell’array: liv_Trebiciano load('livello_Abisso. Trebiciano_Tdec. mat'); • Determinare valore medio, valore massimo e data del valore massimo • Comandi necessari: • max(livello_tdec): cerca il massimo sulla quinta colonna, comprendente il livello. • mean(livello_tdec) • std(livello_tdec)

%Max_Trebiciano. Water %read the data file and find extreme value. load('livello_Abisso. Trebiciano_Tdec. mat'); liv=livello_tdec;

%Max_Trebiciano. Water %read the data file and find extreme value. load('livello_Abisso. Trebiciano_Tdec. mat'); liv=livello_tdec; % contains the workspace liv_Trebiciano with year, month, day hour, value n=length(liv(: , 1)); % extreme value [xmax, kmax] = max(liv(: , 6)); tmax=liv(kmax, 2: 4); disp([' max value at ' , num 2 str(tmax), ' value= ', num 2 str(liv(kmax, 6)), 'm']); media=mean(liv(: , 6)); scarto= std(liv(: , 6)); disp(['average ' , num 2 str(media), 'm', ' std= ', num 2 str(scarto), 'm' ] );

Continua il programma: qui la parte che crea il grafico figure; plot(livello_tdec(: , 1),

Continua il programma: qui la parte che crea il grafico figure; plot(livello_tdec(: , 1), livello_tdec(: , 6)) title('Livello acqua nel pozzo Abisso Trebiciano'); xlabel('tempo in anni'); ylabel('livello (m)');