Informatica per Scienze
Geologiche LT
a.a.2017-2018
Introduzione all’utilizzo di metodologie
informatiche nella Geologia
Docente: Prof. Carla Braitenberg,
Dipartimento Matematica e Geoscienze, Via Weiss 1, Università di Trieste
E-mail: [email protected] Tel. 040 5582258
Scopo delle esercitazioni• Introduzione all’utilizzo de PC a servizio della geologia
• In molte situazioni e’ necessaria un’analisi quantitativa di un
fenomeno e la successiva rappresentazione su carta geografica
• Un geologo vorra’ integrare le informazioni esistenti con i risultati di
un rilevamento o di una analisi di terreno, o di un campionamento
sul terreno,oppure frutto di una indagine geofisica o petrologica.
• Le esercitazioni introducono all’ambiente di sviluppo Matlab ed alla
scrittura di script di Matlab.
• Le problematiche affrontate comprendono la gestione del flusso di
un programma di calcolo e la rappresentazione grafica in 3D di
funzioni di interesse generale come la gaussiana o un’onda
sinusoidale oppure un modello digitale del terreno.
Accedere al sistema informatico• Il software Matlab e’ installato su un server.
• In aula informatica ci sono tre file di computer
(seconda,terza e quarta fila di banchi) e altre file
dotate di thin client. Per accedere dai computer al
server, digitare le proprie credenziali di ateneo
(sxxxx), quindi fare click sull’icona denominata
server windows, che e’ necessario per collegarsi al
desktop remoto, sul quale sono installati tutti i
programmi dei quali necessitiamo durante il corso.
Verra’ richiesta nuovamente l’autenticazione.
• Dai thin client eseguire start -> applications ->
windows ed inserire le proprie credenziali come
sopra.
Regole e consigli di lavoro
• La cartella documenti e’ quella personale
di ogni studente e la ritrovate su qualsiasi
postazione di ateneo dal quale accedete
(esempio H3). La cartella ha spazio
limitato, ma potete salvare i vostri elaborati
su questa cartella.
Da ricordare
• Non salvare niente sul desktop
• Il proiettore: windows p
• Per copiare file da usb: copia/incolla, non
trascinare
• Alla fine: prego fare log-off due volte
Applicazione in linguaggio MatLab
• Verranno sviluppati script di tipo MatLab, eseguibili in
ambiente MatLab o in ambienti liberi Octave e FreeMat.
• Link all’emulatore MatLab Octave:
• http://www.gnu.org/software/octave/
• http://wiki.octave.org/Octave_for_Windows
• Sulle macchine dell’Universita’ trovate l’installazione di
MatLab e Octave.
• L’acquisto di una licenza studente Matlab E’ consigliata. In
alternativa lo studente potra’ installare Octave sul proprio
PC, ma non sara’ possibile fornire assistenza per
l’installazione.
Introduzione l’ambiente di sviluppo MatLab
• Matlab e’ un ambiente di sviluppo molto potente della Mathworks di
larghissimo utilizzo. E’ un sistema integrato per la progettazione,
esecuzione e rappresentazione grafica dei risultati di un programma
di lavoro. Un programma di lavoro consiste in una serie di comandi
predefiniti. Uno script e’ un file contenente i comandi di linea (le
routine) che vengono eseguiti in sequenza.
• Matlab mette a disposizione una moltitudine di routine classificati a
seconda dell’applicativo, come:
• - analisi statistica dei dati
• -Soluzione di problemi numerici, di inversione, soluzone di equazioni
differenziali
• -Acquisizione dati in laboratorio
• GIS: creare mappa geografica di valori misurati in campagna,
scegliere la proiezione cartografica, sovrapposizione di dati di
diversa natura: Immagine satellitare, temperatura al suolo a 100m di
profondita’, isolinee della topografia, rete stradale.
Introduzione all’ambiente di sviluppo MatLab
• Soluzione numerica di problemi ad elementi finiti o alle differenze
finite.
• Pacchetto Signal Processing. Analisi spettrale, filtraggio di
sequenze temporali o nello spazio.
Crisi Sismica Centro Italia 2016• Avendo a disposizione un PC ed un
programmatore:
• Come descrivo la crisi sismica? In cosa consiste
la sorgente sismica?
• Come potrei utilizzare l’ambiente Matlab per
definire gli effetti e le cause della sequenza
sismica?
• Avendo a disposizione un programmatore, quale
software gli chiederei di sviluppare e quali dati di
osservazioni utilizzerei per definire il fenomeno?
Cartella di lavoro
Create una cartella di lavoro sulla quale raccogliete i vostri script e dati.
Per il nome della cartella non utilizzare spazi.
Per aggiungere la visibililta’ di un’altra cartella: -> set path
Help
• Matlab dispone di un’assistenza ai comandi
integrata. Questa funzione e’ fondamentale
nell’apprendimento del linguaggio di
programmazione.
>> help
Per informazioni su una funzione specifica:
>> help sin
Per documentazione piu’ ampia:
>> doc sin
Per cercare documentazione su una funzione:
>> doc e tab sin (appare un menu di ricerca)
Finestre di Matlab
• Current folder: mostra contenuto della cartella aperta. I risultati e le
chiamate degli script si riferiscono a questa cartella, se non
diversamente specificato
• Command window: qui vengono immessi comandi di linea e viene
scritto il risultato di ogni elaborazione. Digitando un comando il
sistema cerca uno script dello stesso nome nella cartella aperta,
oppure in tutte le cartelle incluse nella definizione di path. Il path
permette all’interprete di matlab di trovare script di libreria e di
sistema. Matlab assegna di default un path valido per lavorare. Le
cartelle personali di lavoro devono essere aggiunte manualmente
nel path.
• L’interprete cerca i files solo nelle cartelle assegnate, vale per gli
script e per i dati. Durante l’installazione di matlab vengono definite
le cartelle accessibili. Tutti i comandi di Matlab sono salvati in una
cartella specifica. Noi definiremo i propri script che salveremo e
potremo richiamare nel workspace.
Scripts - introduzione
• Script:
– Una serie di comandi raccolti in un file. I
comandi vengono eseguiti consecutivamente
– Lo script viene descritto nell’editor di Matlab e
salvato come file Matlab, caratterizzato dall’
estensione miofile.m
– Da riga di commando:
>> edit ciao.m
Oppure:
Scripts- nota bene
• Nello script le righe che iniziano con %
vengono interpretate come commenti
• Le prime righe commentate vengono
utilizzate dal “help” per fornire informazioni
sul comando rappresentato dallo script
• Le variabili create durante l’esecuzione
dello script sono visibili nello workspace.
Rimangono in memoria anche dopo il
termine dell’esecuzione dello script.
Script iniziale• Scopo dello script: scrivere un testo
• Salve
• Sono studente di geologia
• Operazioni da fare: creare il file nell’editor, dare nome,
descizione, ed il comando.
• Comando: disp(‘ testo’)
• % ciao.m
• % il mio primo programma
• disp('ciao')
• disp('studio geologia')
• Per lanciare il programma:
– nell’editor Run
– Nella riga di comando: ciao.m
Variabili• Iniziamo a lavorare con variabili. Le variabili hanno lo
scopo di essere contenitori di numeri con le quali
definiamo espressioni matematiche.
• Il problema da risolvere trova una formulazione
matematica generale senza la necessita‘ di assegnare
esplicitamento un numero alla variabile.
• Al momento dell‘esecuzione dello script, dobbiamo
assegnare un valore esplicito ad una variabile prima di
utilizzarla. Altre variabili vengono assegnate al momento
del calcolo.
• Tipi di variabili: numeri (64-bit double), stringhe di
caratteri (16-bit char), inoltre variabili simboliche,
complesse, integer.
• Comunemente utilizzeremo array di numeri o caratteri
Nome delle Variabili
• Per assegnare un valore ad una variabile:
• >> var1= 2.7183
• >> stringa=‘franz’
• Nomi delle variabili: il primo carattere deve essere una
lettera, poi combinazione di lettere e numeri. Case-
sensitive: distinzione di minuscole e maiuscole!
• Variabili di sistema, da non utilizzare:
• i e j potrebbere indicare numeri complessi
• pi greco: pi= 3.1416
• ans: ultimo valore
• Inf e –Inf: positivo e negativo infinito
• NaN: ‘not a number’ nei calcoli viene trattato come
numero inesistente.
Scalari
• Definiamo una variabile esplicitamente
oppure tramite una funzione. Il risultato
viene mostrato nello workspace.
• >> r= 5
• >> V=2*pi*r
Per evitare di vedere il risultato nello
workspace:
>> r=4; V=2*pi*r;
Array
• Molto spesso necessitiamo di raccogliere
un insieme di numeri in una unica
variabile. Definiamo un array di numeri.
– Esempio: tutti i valori della temperatura
misurata nell’arco di un giorno.
• In Matlab possiamo anche definire un
array di stringhe e/o numeri, ed e’ un cell
array.
– Esempio: tutti i nomi degli studenti del corso
Vettore riga
• >> riga = [1 3 5 6.3 7.5 3.2]• >> riga = [1 3 5 6.3 7.5 3.2]
• Output in Command window:
• riga =
• 1.0000 3.0000 5.0000 6.3000 7.5000 3.2000
• Workspace:
Size e length
• Determinare tipo di variabile e numero di elementi che
essa contiene; determinare se essa e’ riga o colonna:
– Vedi workspace
– Digitare la variabile nel command window
– Comando: >> size
– >> size(col)
– ans =
– 4 1
Distingure size da length, che fornisce numero di
elementi in riga o colonna, equivale al numero di
elementi nell’array:
>> length(col)
ans =
4
>> size(riga)
ans =
1 6
>> length(riga)
ans =
6
Array bidimensionali
• Concatenazione di array monodimensionali, che potremmo
chiamare vettori, risulta in un array bidiemsnionale,
denominato anche matrice.
Stringhe di caratteri sono vettori. Possiamo concatenarle per
programmare frasi costruite da variabili di carattere.
Save/clear/load• Salvare le variabili in un unico ile:
• >> save miofile riga col
• Comando save salva le variabili riga e col nel file
miofile.mat nella cartella di lavoro attuale.
• Per conoscere la cartella attuale: >> pwd
• >> clear pulisce tutte le variabili in memoria
• >> load miofile carica le variabili salvate
• Per salvare la completa sessione di lavoro:
• >> save sessione; clear all;
• Per richiamarla: >> load sessione
Esercizio data e ora attuale• Scopo: determinare data e ora attuale da programma.
• Alla fine il risultato dovrebbe essere una stringa di caratteri
contente la data attuale, utilizzabile di seguito in
concatenzaione con un ulteriore testo. Esercizio:
determinare la tipologia della variabile start e startString.
• Comandi: clock e datestr
• »help clock
• »start=clock;
• »size(start)
• »help datestr
• »startString=datestr(start);
• »save startTime start startString
• »load startTime
• »disp(['I started learning MATLAB on ' ...
startString]);
Operazioni con variabili
• Operazioni aritmetiche (+,-,*,/)
• Esponente: (^)
• Espressioni concatenate, utilizzare le
parentesi:
• >> b=3; c=2; a=(b-c)/(b+c)
• >> r=5; A = pi * r^2
• >> d = (b^2 + c^2)^0.5
Funzioni intrinseche di matlab• Matlab mette a disposizione moltissime funzioni pronte
all’utilizzo, come le seguenti:
• >> sqrt(3)
• >> log(100); log10(100)
• >> cos(pi); sin(pi/2); asin(1)*180/pi
• >> atan(1)*180/pi
• >> round(1.4);
• >> floor(3.7)
ans =
3
• >> ceil(3.7)
ans =
4
Trasposta
• Un vettore riga e’ la trasposta di un vettore colonna.
• »a = [1 2 3 4]
• »b = transpose(a)
• »c = a'
• »d = b'
• La trasposta di una matrice:
• >> A=[1 2 3 4; 5 6 7 8]
• A =
• 1 2 3 4
• 5 6 7 8
•
>> B=A‘
B =
1 5
2 6
3 7
4 8
Somma e differenze di array• Il numero di righe e colonne di due array deve essere lo
stesso per sommarle.
Righe Colonne
• Con la trasposta rendiamo compatibile la somma di due
array di tipo diverso:
• >> riga= [ 1 2 3 4]; col=[ 4; 3; 2;1];
• >> s = riga + col‘
• La somma e prodotto degli elementi dell’array:
• >> sum(riga)
ans= 10>> prod(col)
ans = 24
Operazioni sugli elementi di un array
• Le funzioni che operano su scalari, solitamente
operano anche su array.
• >> f=[0 pi/4 pi/2 3*pi/4 ]
• >> r=sin(f)
• Equivale a:
• >> r = [sin(0) sin(pi/4) sin(pi/2) sin(3*pi/4) ]
• Invece le operazioni (* / ^) distinguono fra
operazioni su singolo elemento dell’array o
operazioni fra array.
Operatori aritmetici su singolo elemento
• Le operazioni (* / ^) applicate su un array
effttuano operazioni di calcolo matriciale. Se
invece intendiamo operazione elemento per
elemento, e’ necessario anteporre un punto:
Operatori aritmetici metodo standard
• Le operazioni (* / ^) applicate su un array
effttuano operazioni di calcolo matriciale.
• La moltiplicazione (*) effettua un prodotto
scalare fra array
• L’esponente puo’ essere solo effettuato su
matrici quadrate o su scalari:
• La divisione (/)corrisponde alla moltiplicazione
con l’inversa della matrice.
Nota sulla divisione fra due matrici
(dalla documentazione di Matlab)
• doc mrdivide
• x = B/A solves the system of linear equations x*A = B for x. The matrices
A and B must contain the same number of columns. MATLAB displays a
warning message if A is badly scaled or nearly singular, but performs the
calculation regardless.
• If A is a scalar, B/A performs element-wise division of B by A.
• If A is a square n-by-n matrix and B is a row vector with n elements or a
matrix with n columns, then x = B/A is a solution to the equation x*A = B,
if it exists.
• If A is a rectangular m-by-n matrix with m ~= n, and B is a row vector with
n elements or a matrix with n columns, then x = B/A returns a least-
squares solution of the system of equations x*A = B.
Esercizio – operazioni con array
• Problema: calcolare il numero di secondi che intercorrono fra
due date. Segliere la data di oggi e la data d’inizio del proprio
studio di geologia.
• Metodo
• Creare le variabili secPerMin, secPerHour, secPerDay,
secPerMonth (30.5 giorni al mese), e secPerYear (12 mesi all’anno,
le quali definscono il numero di mesi per ogni unita’ di tempo.
• Definire un vettore riga secondConversion con gli elementi in questo
ordine: secPerYear, secPerMonth, secPerDay, secPerHour,
secPerMinute, 1.
• Definire currentTimevector utilizzando clock
• Calcolare elapsedTime dalla differenza di currentTime e start
• Calcolare t (il tempo trascorso in secondi) dal prodotto scalare fra i
due vettori secondConversion e elapsedTime (uno dei due deve
essere trasposto per poter effettuare il prodotto correttamente)
L’array che definisce l’inizio degli studi:
• Definire il array start che definisce l’inizio degli
studi nel formato:
• Dal help:
• clock Current date and time as date vector.
• C = clock returns a six element date vector
containing the current time and date in decimal
form:
• [year month day hour minute seconds]
• Esempio:
• >>start = [2014 09 22 9 0 0]
Esercizio – operazioni con array
• Problema: calcolare il numero di secondi che intercorrono fra
due date. Segliere la data di oggi e la data d’inizio del proprio
studio di geologia.
• Soluzione
• »secPerMin=60;
• »secPerHour=60*secPerMin;
• »secPerDay=24*secPerHour;
• »secPerMonth=30.5*secPerDay;
• »secPerYear=12*secPerMonth;
• »secondConversion=[secPerYear secPerMonth ...
• secPerDay secPerHour secPerMin 1];
• »currentTime=clock;
• » start = [2014 09 22 9 0 0] ;
• »elapsedTime=currentTime-start;
• »t=secondConversion*elapsedTime';
Es - calcolare il numero di secondi che intercorrono fra
due date. Segliere la data di oggi e la presunta data di
fine degli propri studi di geologia.
• Entrare nell’editor di matlab e creare e salvare uno script di nome timediff.m
• Definire le due date, quella d’inizio e quella presunta di fine studi
• Calcolare il numero di secondi che intercorrono fra le due date. Calcolare poi anche il numero di giorni che intercorrono fra le due date. Fare scrivere il risultato sulla command line.
• Vedere la scheda 44 della dispensa per un modello di script.