Informatica per Scienze Geologiche LT a.a

Slides:



Advertisements
Presentazioni simili
MATLAB.
Advertisements

Dipartimento di Matematica
INTRODUZIONE A MATLAB.
Script bash I file di comandi in Linux. BASH  Bourne Again Shell  Modalità interattiva o batch (file di comandi)  Ambiente di programmazione “completo”
VETTORI: DEFINIZIONI Se ad una grandezza fisica G si associa una direzione ed un verso si parla di vettori: ✔ Le grandezze fisiche possono essere di due.
Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica FONDAMENTI DI INFORMATICA Domenico Talia
1 Elementi DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
Parte 2 Programmare in Matlab – I Sommario: Introduzione: m-file Strutture condizionali e cicli –Istruzione “if” + Operatori logici in MatlabIstruzione.
INTRODUZIONE A MATLAB/OCTAVE MANOLO VENTURIN UNIVERSITÀ DEGLI STUDI DI PADOVA DIP. DI MATEMATICA PURA ED APPLICATA A. A. 2007/2008.
1 Simulazione Numerica dei Fenomeni di Trasporto Necessità di introduzione dei tensori  11  12  13  23  21  22 Vogliamo descrivere in un modo che.
NUMERI ed ERRORI MANOLO VENTURIN UNIVERSITÀ DEGLI STUDI DI PADOVA DIP. DI MATEMATICA PURA ED APPLICATA A. A. 2007/2008.
.  I tipi di dati non primitivi sono gli array, le struct e le union.  Gli array sono degli aggregati di variabili dello stesso tipo.  La dichiarazione.
Informatica per Scienze Geologiche LT a.a
Informatica per Scienze Geologiche LT a.a
© 2007 SEI-Società Editrice Internazionale, Apogeo
Informatica per Scienze Geologiche LT a.a
Informatica per Scienze Geologiche LT a.a
11. Lettura e Scrittura di file in Matlab
Unità di apprendimento 1
Informatica per Scienze Geologiche LT a.a
La rappresentazione delle informazioni
Introduzione al linguaggio C
Informatica per Scienze Geologiche LT a.a
DISTRIBUZIONI TEORICHE DI PROBABILITA’
Script Marco D. Santambrogio –
IL CONCETTO DI ALGORITMO
Dal problema al processo risolutivo
Corso di Segnali e Sistemi
DEM da laser-scan: rappresentazione contour in qGis
MATRICI (ARRAY) IN MATLAB/OCTAVE
Excel 1 - Introduzione.
Informatica per Scienze Geologiche LT a.a
FORMULE E FUNZIONI SU EXCEL
Informatica per Scienze Geologiche LT a.a
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
PROGRAMMAZIONE BASH – ISTRUZIONE IF
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
La Statistica Istituto Comprensivo “ M. G. Cutuli”
SAS® OnDemand for Academics SAS Studio
ELEMENTI DI GRAFICA IN MATLAB/OCTAVE
Informatica per Scienze Geologiche LT a.a
Esercitazione di Statistica Economica
realizzato dal prof.Conti Riccardo
Esercitazione di Statistica Economica
Informatica per Scienze Geologiche LT a.a
Classe III A A.s – 2012 Programma di Informatica
INTRODUZIONE A EXCEL Il foglio elettronico o foglio di calcolo è una tabella che contiene parole e numeri che possono essere elaborati applicando formule.
Programmare.
Informatica per Scienze Geologiche LT a.a
Derive 5 28/12/2018 Lavoro didattico per Apprendere - lezione su materia specifica di Retucci Anna - classe 3C Terza edizione.
© 2007 SEI-Società Editrice Internazionale, Apogeo
Struttura di un programma
I numeri relativi DEFINIZIONE. Si dicono numeri relativi tutti i numeri interi, razionali e irrazionali dotati di segno (positivo o negativo). ESEMPI Numeri.
Impariamo a conoscere le Matrici
Struttura di un programma
Derive 5 di Anna Retucci 02/01/2019
Matrici Definizioni Matrici Rettangolari Quadrate 02/01/2019
Informatica per Scienze Geologiche LT a.a
© 2007 SEI-Società Editrice Internazionale, Apogeo
I fogli elettronici Microsoft Excel.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
APPUNTI SUL LINGUAGGIO C Esercizi su File e Alberi Binari
Processi decisionali e funzioni di controllo
Fogli di Calcolo Elettronici
Array e Stringhe Linguaggio C.
PowerShell di Windows PowerShell è un shell che mette a disposizione un prompt interattivo e un interprete a riga di comando , per le sue caratteristiche.
La programmazione strutturata
Docente: Sabato Bufano
Corso di Fondamenti di Informatica
Corso di Fondamenti di Informatica
Transcript della presentazione:

Informatica per Scienze Geologiche LT a.a.2016-2017 Introduzione all’utilizzo di metodologie informatiche nella Geologia Docente: Prof. Carla Braitenberg, Dipartimento Matematica e Geoscienze, Via Weiss 1, Università di Trieste E-mail: berg@units.it 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 eseguire il programma windmg, o server dmg, 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

Accesso per docenti

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 Quali informazioni ho acquisito dalla visita del terreno? Come descrivo la crisi sismica? In cosa consiste la sorgente? 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? Fine 08.11.2016

Ambiente integrato Matlab Start 10 nov 2016

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 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: >> 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] 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) 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 Fine 10 nov 2016

Prime applicazioni utilizzando l’ambiente matlab. Inizio 15.11.2016

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

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) 4

Trasposta Un vettore riga e’ la trasposta di un vettore colonna. »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 Fine 15 novembre 2016

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 Inizio 17 novembre 2016

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';

Definire le due date, quella d’inizio e quella presunta di fine studi 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 date dayPerMonth=30.5 dayPerYear=12*dayPerMonth dayConversion=[dayPerYear dayPerMonth 1] currentTime=[2016 11 17] start=[1995 07 02] elapsedTime=currentTime-start t=dayConversion*elapsedTime'

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 NaN (utile per definire variabili non-inizializzate)

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: >>x1 = 0:2:10 Da 0 a 10 (minore o uguale), intervallo pari a 2 >> x2 = 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=[ 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 2D (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.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 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 ] Per il valore minimo e massimo, e relativo indice: [minT, minK]=min(test) ; [maxT, maxK]=min(test); Per trovare gli indici dei valori maggiori o uguali una data soglia: K=find(test ==18) Per trovare gli indici nel quale i valori sono nella norma: Kmedia= find (test >18 & test < 28]

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,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 vettore x ed y. Attenzione: x,y devono essere array della stessa lunghezza. Fine 17 nov 2016

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_AbissoTrebiciano_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) Inizio 22 nov 2016

%Max_TrebicianoWater %read the data file and find extreme value. load('livello_AbissoTrebiciano_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 ' ,num2str(tmax),' value= ', num2str(liv(kmax,6)),'m']); media=mean(liv(:,6)); scarto= std(liv(:,6)); disp(['average ' ,num2str(media),'m',' std= ', num2str(scarto),'m' ] );

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

Funzioni create dall’utente E’ utile richiamare blocchi di programmi che vengono utilizzati frequentemente dall’esterno, senza doverli riprogrammare. Si definisce una funzione, con input e output, che svolge una certa operazione. Chiamata della funzione output input

Funzioni create dall’utente Vediamo la chiamata alla funzione in dettaglio >>function [out1,out2,out3] = nomefunz(input1,input2) Una funzione ha un output. Se piu’ di uno, le variabili vanno raggruppate in parentesi quadre. Una funzione ha uno o piu’ input Il nome della funzione e’ anche il nome dello script di matlab. Una volta chiusa la funzione, le variabili vengono cancellate dalla memoria. i nomi delle variabili in output devono avere corrispondenza nell’interno della funzione non e’ necessario richiamare tutte le variabili in output. - possiamo definire una funzione anche senza output. Una funzione che crea un plot non ha variabili in output

Esempio di funzione che non restitutisce valori in output Esempio di funzione che non restitutisce valori in output. Plot di tre sinusoidi sovrapposte. Chiamata da command line: plotsines(1/20,1/40,1/70) function plotsines(f1,f2,f3) switch nargin case 0 plotsines(1/20,1/50,1/100) otherwise x=linspace(0,100,1000); y=sin(x*pi*f1)+sin(x*pi*f2)+sin(x*pi*f3); figure plot(x,y) xlabel('x'); ylabel('y'); end

Call function from command line or from script: type on command line: plotsines(1/20,1/50,1/100) Be sure that the script plosines.m is in your working folder.

Operatori logici per controllare il flusso del programma- if/else/elseif Matlab in comune con altri programmi mette a disposizione un controllo logico. If condizione comandi end If condizione comandi elseif condizione else end If condizione comandi else end Per definire la condizione utilizziamo i simboli elencati nella pagina successiva.

Condizioni logiche in Matlab Uguale == Non uguale ~= Maggiore > Maggiore uguale >= Operatori logici: And & oppure && Or | oppure || Negazione: ~

Ripetiamo l’esempio delle tre sinusoidi Salviamo il seguente script con nome plotsines_flexible.m %plotsines_flexible % funzione mette in grafico tre sinusoidi function plotsines_flexible(f1,f2,f3) x=linspace(0,100,1000); if nargin==1 y=sin(x*pi*f1); elseif nargin==2 y=sin(x*pi*f1)+sin(x*pi*f2); elseif nargin==3 y=sin(x*pi*f1)+sin(x*pi*f2)+sin(x*pi*f3); end plot(x,y) xlabel('x'); ylabel('y');

Cicli di ripetizione For n= 1:100 comandi End La variabile del loop e’ un vettore. Nell’interno del blocco e’ uno scalare.Non e’ necessario che i valori del vettore siano conscutivi. Il blocco dei comandi: Tutti i comandi compresi fra la riga del for e la riga di end Fine 22.11.2016

Cicli di ripetizione - while Un loop generico e’ fattibile con while. Non necessita di conoscere il numero di iterazioni, ma poniamo una condizione logica. >> while condizione comandi >> end I comandi vengono eseguiti mentre la condizione viene soddisfatta. N=0 while N<10 N=N+1 end disp(‘finito!’)

Grafici cartesiani x=-pi:pi/100:pi; y=cos(4*x).*sin(10*x).*exp(-abs(x)); plot(x,y,'k-');

Grafico semi-logaritmico x=-pi:pi/100:pi; y=cos(4*x).*sin(10*x).*exp(-abs(x)); plot(x,y,'k-'); semilogx(x,y,'k');

Grafico semilogaritmico x=0:1:40; Y=10*exp(-abs(x)); figure plot(x,y,'k-'); semilogy(x,y,'k');

Esempio da prima: x=0:1:40; y=10*exp(-abs(x)); figure subplot(2,1,1) plot(x,y) subplot(2,1,2) semilogy(x,y,'k')

Formulazione matematica della funzione sinusoidale Le applicazioni delle funzioni di seno e coseno sono ampie- ragione per la quale le analizziamo in dettaglio. Scriviamo la formula matematica di un’onda sinusoidale in 3D. I fronti d’onda sono lineari ed hanno un orientamento ben definito rispetto all’asse x. La direzione del fronte d’onda viene espresso dal vettore d’onda. Implementiamo poi tale equazione in uno script matlab.

Definizione della direzione del numero d'onda La direzione del vettore del numero d'onda è ortogonale ai fronti d'onda e viene definita dalle due componenti del vettore kx e ky. L'angolo del vettore con l'asse x e’ pari a: La lunghezza del vettore numero d’onda e’ pari al modulo del vettore. La lunghezza d’onda della sinusoide e’ pari a:

Definizione della due componenti del vettore numero d'onda Da prima abbiamo definito la lunghezza del vettore n’umero d’onda: Le due componenti sono allora date dalla relazione:

Matlab: onda sinusoidale lineare (sinusoide.m) function sinusoide(lam,A,alf) % grafico di fronte d'onda lineare % eliminazione variabili e librerie create in precedenza if nargin==0 sinusoide(25,10,30) else % creazione vettore x di valori compresi tra 0 e 70 uniformemente divisi su 100 valori. Per y intervallo da 0 a 90. x = linspace(0,70,100); y= linspace(0,90,100); % creazione matrice a 2 Dimensioni X e Y. [X,Y]= meshgrid(x,y); % numero d'onda k=(2*pi)/lam; alf1=alf*pi/180; kvec=k*[cos(alf1) sin(alf1)]; kx=kvec(1); ky=kvec(2); % calcolo dei valori asse z Z = A*(sin(kx*X+ky*Y)); % grafico tridimensionale dei risultati figure surf(X,Y,Z); % visualizzazione 3D (azimuth 37.5, elevation 30) view(3); % manteniamo il fattore di scala axis equal; % etichette sugli assi xlabel('X'); ylabel('Y'); zlabel('Z'); end Valori tipo: lam=25; A=10 alf=30

Esempio oscillazione Fine 24.11.2016

Onda sferica L'onda sferica rappresenta un'immagine istantanea delle onde che si sviluppano sulla superficie di un lago sollecitata dalla caduta di un masso. Descrizione matematica dell'onda sferica: Se l'origine dell'onda e' in x0,y0:

Matlab: onda sinusoidale lineare (sinusoide.m) function sinusoide_radiale(lam,A,x0,y0) % grafico di fronte d'onda lineare % eliminazione variabili e librerie create in precedenza if nargin==0 sinusoide_radiale(25,10,50,50) else % creazione vettore x di valori compresi tra 0 e 70 uniformemente divisi su 100 valori. Per y intervallo da 0 a 90. x = linspace(0,100,100); y= linspace(0,100,100); % creazione matrice a 2 Dimensioni X e Y. [X,Y]= meshgrid(x,y); % numero d'onda k=(2*pi)/lam; % calcolo dei valori asse z Z = A*sin(k*sqrt((X-x0).^2+(Y-y0).^2)); % grafico tridimensionale dei risultati figure surf(X,Y,Z); % visualizzazione 3D (azimuth 37.5, elevation 30) view(3); % manteniamo il fattore di scala axis equal; % etichette sugli assi xlabel('X'); ylabel('Y'); zlabel('Z'); end Valori tipo: lam=25; A=10 X0=50 Y0=50

Esempio onda sferica

Onda sferica la cui ampiezza decade esponenzialmente Vogliamo anche descrivere il caso in cui l'ampiezza dell'onda decade con il raggio esponenzialmente.

Matlab: onda sinusoidale radiale che decade function sinusoide_radexp(lam,A,x0,y0,sigx,sigy) % grafico di onda radiale che decade % eliminazione variabili e librerie create in precedenza if nargin==0 sinusoide_radexp(25,10,50,50,20,40) else x = linspace(0,100,100); y= linspace(0,100,100); % creazione matrice a 2 Dimensioni X e Y. [X,Y]= meshgrid(x,y); % numero d'onda k=(2*pi)/lam; % calcolo Ampiezza onda Ar = A*exp(-((X-x0)/sigx).^2 -((Y-y0)/sigy).^2); % calcolo dei valori asse z Z = Ar.*sin(k*sqrt((X-x0).^2+(Y-y0).^2)); % grafico tridimensionale dei risultati figure surf(X,Y,Z); % visualizzazione 3D (azimuth 37.5, elevation 30) view(3); % manteniamo il fattore di scala axis equal; % etichette sugli assi xlabel('X'); ylabel('Y'); zlabel('Z'); end Valori tipo: lam=25; A=10 x0=50 y0=50 sigx=20 sigy=40

Onda sferica con decadimento anisotropo

Superficie polinomiale Di larga applicazione e' l costruzione di una superficie costituita elementi polinomiali. Esempio: descrizione di un campo regionale di una quantita' misurata, come emissione Radon, flusso termico.

Esempio superficie polinomiale Z = 2*X+3*Y+X.^3*.1+Y.^2 *1.5 Z = 0.2*X+0.3*Y+X.^3*0.01+Y.^2*0.05 Esercizio: Costruire la superficie polinomiale. Variare i parametri e descrivere il risultato. Costruire una superficie piana. Costruire una superficie di secondo ordine

Funzione polinomiale function Polinomiale(a,b,c,d) % grafico di onda radiale che decade % eliminazione variabili e librerie create in precedenza if nargin==0 Polinomiale(0.2,0.3,0.01,0.05) else % creazione vettore x di valori compresi tra 0 e 70 uniformemente divisi su 100 valori. Per y intervallo da 0 a 90. x=linspace(-7,7,100); y=linspace(-9,9,100); % creazione matrice a 2 Dimensioni X e Y. [X,Y]= meshgrid(x,y); % calcolo dei valori asse z Z = a*X+b*Y+c*X.^3+d*Y.^2; % grafico tridimensionale dei risultati figure surf(X,Y,Z); shading flat % visualizzazione 3D (azimuth 37.5, elevation 30) view(3); % manteniamo il fattore di scala axis equal; % etichette sugli assi xlabel('X'); ylabel('Y'); zlabel('Z'); end

Ulteriori applicazioni Creare un grafico di due onde sinusoidali di lunghezza d’onda diversa sovrapposte. La direzione delle due sia la medesima. Scegliere 1>> 2 Creare un grafico di una superficie polinomiale di secondo ordine che rappresenta l’andamento regionale, al quale viene sovrapposta una anomalia a forma gaussiana, che rappresenta un disturbo locale. La larghezza della Gaussiana e’ determinata dal coefficiente in denominatore dell’esponenziale. Simulare la presenza di tre mud-volcano; un mud-volcano viene rappresentato tramite una funzione gaussiana.

Modello digitale del terreno FVG

Rappresentazione grafica del modello digitale del terreno Scopo dell’esecizio: Utilizzare il modello digitale del terreno in zona carsica - rappresentare il modello digitale del terreno in 3D - calcolare le isolinee di quota

Grafico della topografia in 3D %Plot_Topografia3D %caricamento dati digitali del terreno load DTM_ortom_reg_regrid10m_WGS84_HD.mat; figure %surface plot surf(X1,Y1,Z1) shading interp; % visualizzazione 3D (azimuth -78°, elevation 62°) view([-78,62]); % etichette sugli assi xlabel('asse orizzantale X'); ylabel('asse verticale Y'); zlabel('asse Z quota');

Comando View view(az,el) and view([az,el]) set the viewing angle for a three-dimensional plot. The azimuth, az, is the horizontal rotation about the z-axis as measured in degrees from the negative y-axis. Positive values indicate counterclockwise rotation of the viewpoint. el is the vertical elevation of the viewpoint in degrees. Positive values of elevation correspond to moving above the object; negative values correspond to moving below the object.

Grafico creato con lo script Plot_Topografia3D.m

Grafico delle isolinee della topografia %Plot_DTM_isolinea Zmin=200; Zmax=500; step=2; v=Zmin:step:Zmax; sv=size(v); load DTM_ortom_reg_regrid10m_WGS84_HD.mat; %num2str converte i numeri in stringhe, altrimenti la concatenazione(di stringhe) non e' possibile figure('name',['esempio 2D isolinee Zmin: ' num2str(Zmin) ' Zmax: ' num2str(Zmax)]) %contour rappresenta in grafico le isolinee in 2D [C, h]=contour(X1,Y1,Z1,v);

Grafico prodotto con script Plot_DTM_isolinea

Scegli una zona zona di particolare interesse: aggiungi comando axis Scegli una zona zona di particolare interesse: aggiungi comando axis. Qui il grafico e’ ristretto su una dolina. %Plot_DTM_isolinea Zmin=180; Zmax=500; step=2; v=Zmin:step:Zmax; sv=size(v); load DTM_ortom_reg_regrid10m_WGS84_HD.mat; %num2str converte i numeri in stringhe, altrimenti la concatenazione(di %stringhe) non e' possibile figure('name',['esempio 2D isolinee Zmin: ' num2str(Zmin) ' Zmax: ' num2str(Zmax)]) %contour rappresenta in grafico le isolinee in 2D [C, h]=contour(X1,Y1,Z1,v); %axis([xmin xmax ymin ymax]) axis([13.74 13.76 45.715 45.725]);

Graficare il gradiente di una superficie v = -2:0.2:2; [x,y] = meshgrid(v); z = y.*x.*exp(-x.^2 - y.^2); % da provare anche: % z = x.*exp(-x.^2 - y.^2); % z = y.*x.*exp(-x.^2 - y.^2); [px,py] = gradient(z,.2,.2); contour(v,v,z) hold on quiver(v,v,px,py) hold off figure surf(x,y,z); % visualizzazione 3D (azimuth 37.5, elevation 30) view(3);

Gradiente della topografia %Plot_DTM_isolinea Zmin=180; Zmax=500; step=2; v=Zmin:step:Zmax; sv=size(v); load DTM_ortom_reg_regrid10m_WGS84_LD.mat; figure('name',['esempio 2D isolinee Zmin: ' num2str(Zmin) ' Zmax: ' num2str(Zmax)]) %contour rappresenta in grafico le isolinee in 2D [C, h]=contour(X1,Y1,Z1,v); %axis([xmin xmax ymin ymax]) axis([13.74 13.76 45.715 45.725]); figure [px,py] = gradient(Z1,1,1); contour(X1,Y1,Z1) hold on quiver(X1,Y1,px,py,5)