5 Analisi dei risultati
5.1 Matlab
Lo studio dei dati provenienti da Sim4Life viene svolto all’interno di un ambiente di cal-colo utilizzato comunemente negli studi universitari: Matlab (Matrix Laboratory).
Matlab è un ambiente per il calcolo numerico e l'analisi statistica scritto in C; esso con-sente di manipolare matrici, visualizzare funzioni e dati, implementare algoritmi, creare in-terfacce utente, e interfacciarsi con altri programmi.
Nell’utilizzo di Matlab il nostro scopo è quello di ottenere, in un primo momento i valori del campo elettrico: medio, di picco e 99 percentile.
Caricando i file dei risultati di Sim4Life su Matlab, nel workspace compariranno quattro variabili, che altro non sono che i tre assi cartesiani Axis0, Axis1, Axis2 e lo Snapshot0 che costituisce l’insieme dei valori del campo elettrico nelle tre componenti all’interno del domi-nio. Queste variabili presentano i seguenti tipi e dimensioni:
Name Value Size
Axis0 1x224 double 1x224
Axis1 1x275 double 1x275
Axis2 1x258 double 1x258
Snapshot0 15703214x3 complex single 15703214x3
Tabella 5.1: Workspace di Matlab di un qualsiasi file
Allo scopo è stata scritta una funzione Matlab (getCampoElettrico) che permette di cal-colare i valori di picco, medio e 99 percentile del campo elettrico, all’interno della quale vengono uniformati, adattati e convertiti i formati numerici e non numerici provenienti da Sim4Life; ad esempio vengono sostituiti tutti i valori classificati dal programma come NaN (Not a Number) con degli zeri. Successivamente per poter calcolare il valore assoluto del
campo elettrico è necessario epurare i dati da tuti i valori nulli in quanto non significativi.
Per chiarezza i valori nulli rappresentano lo spazio esterno a Duke, quindi non interessanti al fine dello studio, ma che comunque risultano presenti tra i dati da gestire.
la funzione getCampoElettrico prende in input la matrice dell'andamento del campo elet-trico nelle tre componenti, risultato della simulazione di Sim4Life ed un opzionale fattore di scala utilizzato per variare a piacimento i valori del campo elettrico.
La funzione restituisce in uscita tre valori numerici ed una matrice:
• E_peak è uno scalare in doppia precisione che contiene il valore massimo del campo elettrico;
• E_99 è uno scalare in doppia precisione che contiene il valore 99-percentile del campo elettrico;
• E_mean è uno scalare in doppia precisione che contiene il valore medio del campo elettrico;
• Esum è un vettore di numeri complessi contenente la somma delle componenti di ogni asse del campo elettrico.
Procediamo quindi ad una breve analisi del codice in figura 5.2 partendo dalla prima riga non commentata:
riga 3: viene operato un controllo sul numero degli argomenti in input alla funzione e contemporaneamente viene valorizzato il fattore di scala così da consentire anche una chiamata alla funzione omettendo questo parametro;
riga 7: vengono sostituiti i tipi Not a Number con degli zeri per non incorrere in possibili errori di type mismatch;
riga 8: vengono sommate le tre componenti della matrice Snapshot0;
riga 9: effettua il calcolo puntuale del valore assoluto di Snapshot0 epurato degli elementi nulli;
riga 10: calcola il numero dei campioni (lunghezza della matrice del campo elettrico in input alla funzione)
riga 11: calcola il totale degli elementi;
riga 12: opera il calcolo dei valori di picco del campo elettrico riga 13: calcola il 99 percentile del campo elettrico
riga 14: calcolo del valore medio del campo elettrico.
Figura 5.2: Funzione che estrae i valori di picco, 99 percentile e medio del campo elettrico
I file esportati da Sim4Life, grazie al comando Mask Filter, sono stati suddivisi in cartelle numerate da 1 a 4, ognuna contenente le simulazioni per un diverso valore di conducibilità della pelle. All’interno di queste cartelle sono presenti i file come riportato in figura 5.3:
Figura 5.3: File inseriti nel Matlab
Di seguito le funzioni scritte per il calcolo dello SMAPE e per la rappresentazione grafica di quest’ultimo. La figura 5.4 riporta la funzione per il calcolo dello SMAPE che viene ri-chiamata dal programma principale.
Figura 5.4: Funzione per il calcolo dello SMAPE
Di seguito la funzione, sempre chiamata dal programma principale, adibita alla genera-zione grafica dei risultati.
Figura 5.5: Funzione generatrice delle grafiche
Di seguito si riporta una breve descrizione funzionale del programma principale che ha fondamentalmente compiti di orchestrazione delle chiamate alle varie funzioni precedente-mente descritte.
Lo script in Matlab è stato strutturato per fungere da dizionario dati in modo da raziona-lizzare il lavoro e semplificarne la lettura e l’esecuzione. In questa procedura sono state de-finite due strutture dati (array), denominate NomiFile e Valori che vengono riempiti rispettiva-mente dei dati risultanti delle simulazioni e dai valori del campo elettrico (di picco 99 per-centile e medio) per ciascuna regione e conducibilità elettrica della pelle.
Organizzando i calcoli in questo modo, Matlab calcolerà tutti i valori del campo elettrico richiesti e li organizzerà come una tabella tridimensionale.
Breve analisi del codice:
Righe 1-4: Inizializzazione delle variabili e valorizzazione dell’array contenente i files
ri-Riga 5: definizione di un cell array in grado di contenere ogni tipo di dato destinato ad essere riempito con i valori del campo elettrico per ogni regione stimolata e per ogni va-lore di conducibilità della pelle;
righe 6-14: cicli annidati che scorrono le cartelle e i nomi dei files generando il percorso dei files da caricare. La riga 10 chiama la funzione getCampoElettrico il cui output valo-rizzerà i valori del campo elettrico in una mappa che verrà salvata dal codice di riga 11 nel cell array;
righe 16-19: vengono definite le dimensioni della griglia di output e fissata la quota del piano di taglio sagittale (lungo l’asse Y);
riga 20: dichiaro il cell array che conterrà i risultati del calcolo dello SMAPE;
righe 23-31: i loops annidati sono costruiti per percorrere la parte triangolare superiore della matrice data dalle combinazioni di tutti i valori di conducibilità acquisiti, così da scegliere come parametri per la funzione getSmape tutte le combinazioni di due condu-cibilità senza ripetizioni;
righe 33-37: l’obiettivo del ciclo è quello di disegnare i valori dello SMAPE contenuti nel piano di taglio selezionato, attraverso chiamate multiple alla funzione drawFigure; a tal fine è necessario trasformare il vettore SMAPE in una matrice tridimensionale (funzione reshape) le cui dimensioni sono state definite in precedenza.
Figura 5.6: Programma principale