Thursday 15 December 2011

'Vector field processings': un plugin Quantum GIS per l'analisi di campi vettoriali 2D

Questo plugin Python per Quantum GIS fornisce una serie di funzionalità per derivare parametri di campi vettoriali 2D, come divergenza, modulo del rotore e linee di flusso. Due esempi di dati su cui sono applicabili queste tecniche sono i flussi glaciali e le colate di frana.

Determinazione di linee di flusso nel ghiacciaio Reeves (Antartide).
Dati periodo 2001-2003, da Biscaro, (2010).

I moduli descritti sono stati realizzati inizialmente come moduli Python o C++ a se stanti, e presentati nei post Un esempio di analisi di campo vettoriale con software open source: il ghiacciaio David (Antartide orientale) (per divergenza e rotore) e Calcolare le linee di flusso in campi vettoriali: due implementazioni open-source in Python e C++ (per le linee di flusso).

In questo post presento alcuni dettagli tecnici del plugin, oltre ai risultati di un test sulla crescita degli errori cumulativi nell'interpolazione di linee di flusso (o più precisamente pathlines), mentre in quello precedente descrivo un esempio di applicazione a dati di flussi glaciali antartici (ghiacciaio Reeves).



Schermata del plugin


I parametri calcolati dal plugin sono elencati nella tabella seguente.

Vector parametersMagnitude gradientsPathlines
magnitudealong x axispathlines from start points
orientationsalong y axis
divergencealong flowlines
curl module

Alcuni operatori su campi vettoriali sono intuitivi, come la magnitudine o l'orientazione del flusso. La loro derivazione è possibile anche con una applicazione delle funzioni standard di map algebra presenti nei software GIS. Più complesse sono le derivazioni del gradiente e del rotore. Si tratta di due operatori fisici che rappresentano rispettivamente la tendenza a espandersi/contrarsi oppure a ruotare di un flusso. Un flusso con divergenza positiva tende ad espandersi, a contrarsi nel caso opposto. Moduli positivi del rotore indicano rotazioni anti-orarie, se negative rotazioni orarie.

Il gradiente spaziale della magnitudine del campo lungo le orientazioni di flusso, come pure lungo le orientazioni degli assi cartesiani, ci informa sulle variazioni di magnitudine sperimentate dai flussi lungo quelle specifiche orientazioni.

Per la derivazione delle linee di flusso sono richieste tecniche più avanzate: si utilizzano metodi numerici per la risoluzione di Ordinary Differential Equations (ODE). Uno fra i più diffusi, grazie all'accuratezza dei risultati prodotti, è il metodo di Runge-Kutta-Fehleberg. Non ripeto qui le formule, presenti in testi di matematica per l'ingegneria (come  Advanced Engineering MathematicsKreyszig, 2006), oltre che in rete (fra cui nel post Calcolare le linee di flusso in campi vettoriali: due implementazioni open-source in Python e C++). Con questi metodi è possibile calcolare le linee di flusso sia per flussi stazionari sia per flussi che variano nel tempo.
L'implementazione nel plugin si riferisce al caso più semplice, i flussi stazionari. Una maggiore disponibilità di dataset GIS vettoriali non stazionari renderebbe utile l'estensione anche a campi variabili nel tempo.


Gli errori cumulativi nella interpolazione di pathlines

Il metodo di Runge-Kutta-Fehleberg (RKF 45) è utilizzato, oltre che per la sua accuratezza, anche perchè consente di stimare l'errore connesso al passo temporale utilizzato. 
Considerando che riducendo o aumentando il passo temporale ridurremmo o aumenteremmo l'errore connesso alla stima dello spostamento, è possibile variare il passo temporale in maniera da ottenere un errore stimato prossimo ma non superiore ad una soglia da noi stabilita. Questo errore stimato si riferisce ad ogni singolo passo di interpolazione.

Ma cosa avviene quando noi interpoliamo per 1000, 2000 o più passi successivi? Come aumentano gli errori totali nella stima, e quindi quanto sono affidabili i nostri risultati quanto interpoliamo su lunghi periodi temporali?
Questo è un aspetto a cui accenno in questa seconda parte, utilizzando un esempio analitico di movimento circolare uniforme per il quale posizioni al variare del tempo sono perfettamente predicibili e quindi le posizioni stimate con l'algoritmo sono confrontabili con quelle esatte.
Quanto segue è un esempio che fornisce delle indicazioni su quale possa essere la crescita nel tempo degli errori cumulativi di interpolazione delle posizioni.
Consideriamo un moto circolare uniforme che avviene su un raggio di 100 m, con una velocità tangenziale costante di 200 m/s. Il periodo è quindi di circa 3.14 s.

Campo vettoriale 'circolare' (visualizzato in base alla magnitudine) e pathlines determinate  dal plugin.
Il punto in alto al centro rappresenta la posizione iniziale.

I parametri utilizzati per il test di interpolazione consistono in step di 0.1 s, un tempo totale di 5000 s, ed un errore massimo ammesso per step di 1e-6 m. L'algoritmo modifica la durata degli steps in 0.025 s, per avere errori costanti di 4.0e-8 m. Per raggiungere il limite temporale richiesto di 5000 s il numero totale di step è uguale a 200 000. 


Confrontando i valori stimati di posizione con quelli teorici, vediamo che in prima approssimazione l'errore cumulativo reale cresce in maniera lineare, proporzionale al numero di step
Errore cumulativo reale nella posizione al variare del numero di passi di interpolazione (linea arancione).
Il valore stimato di errore per singolo step è rappresentato dalla linea orizzontale (rossa). 


I valori del tasso di crescita dell'errore complessivo (1.4e-9 m/step, vedi figura sottostante) sono di circa un ordine di grandezza più piccoli dell'errore stimato per gli step individuali (4.0e-8 m/step). Il tasso di crescita non è costante, ma presenta oscillazioni, relativamente limitate e di origine non chiara. 
Si può supporre che in prima approssimazione l'errore cumulativo sia inferiore al prodotto tra il numero di step effettuati ed il valore medio stimato dell'errore per singolo step.
Ovviamente questa relazione risulta valida per questo specifico caso di analisi e dovrebbe essere confermata o approfondita per altri casi teorici.

Variazioni dell'errore cumulativo / numero di step di interpolazione.



Pagina di download del plugin

Si trova alla url: www.malg.eu/vectorparameters.php
L'installazione è quella usuale per i plugin per Quantum GIS.





No comments: