Informatica per Scienze Geologiche LT a.a.2017-2018 · • Pacchetto Signal Processing. Analisi...

43
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

Transcript of Informatica per Scienze Geologiche LT a.a.2017-2018 · • Pacchetto Signal Processing. Analisi...

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

Accesso a materiale didattico

• moodle2

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?

Ambiente integrato Matlab

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)

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:

Editor di scripts

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:

Vettore colonna

• >> col = [2; 4; 6; 8]• >> Output in Command window:

• col =

• 2

• 4

• 6

• 8

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

Prime applicazioni utilizzando

l’ambiente matlab.

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.

Script per il calcolo del numero

di giorni fra due datedayPerMonth=30.5

dayPerYear=12*dayPerMonth

dayConversion=[dayPerYear dayPerMonth 1]

currentTime=[2016 11 17]

start=[1995 07 02]

elapsedTime=currentTime-start

t=dayConversion*elapsedTime'