Informatica 5 Liceo Scientifico Scienze Applicate/Problemi legati al Calcolo Numerico

Wikibooks, manuali e libri di testo liberi.
Indice del libro

Sistemi di acquisizione/elaborazione dati digitale[modifica]

Le procedure di analisi e di elaborazione dei dati si sono modificate con l'avvento dei computers ( sistemi digitali a microprocessore dotati di memoria),oggi per acquisire i dati di un esperimento si utilizzano una serie di sensori che rilevano una certa grandezza fisica ( temperatura, umidita', CO2, intensita' campo magnetico, velocita', massa, etc) e generano un segnale elettrico la cui tensione ha una ampiezza correlata alla intensita' della grandezza fisica osservata, la tensione del segnale elettrico viene misurata tramite un circuito elettronico detto ADC (Convertitore da Analogico a Digitale) e codificata in un numero binario perché questo e' il formato dei dati che una CPU e' in grado di elaborare (segnale digitale), poi la misura viene registrata in memoria ( memoria elettrica RAM, memoria magnetica Hard Disk, memoria ottica Cd ROM o DVD), le misure vengono poi elaborate tramite un microprocessore (CPU) ed infine i risultati vengo visualizzati/registrati .
Arduino circuit


Questi passaggi si applicano sia in ambito scientifico (ad esempio analisi urto di due particelle, misura della temperatura di una sostanza etc) ma anche in ambito industriale dove il computer ( PC, PLC, sistema digitale) acquisisce e elabora certi segnali e genera dei segnali (digitali o analogici ottenuti tramite DAC cioe' un convertitore da digitale a analogico ) per controllare altri dispositivi elettro-meccanici detti attuatori .
Basic robot


un esempio di sistema di controllo digitale puo' essere una serra per la produzione di fiori, in cui la misura della temperatura o il gradi di umidita' dell'aria e del terreno vengono rilevati (sensori) misurati (ADC) elaborati (PC/CPU/PLC) e impiegati per generare i segnali (digitale / analogico DAC) di comando per gestire automaticamente l'impianto di riscaldamento/condizionamento/irrigazione (attuatori)


Problemi/Errori nel calcolo numerico[modifica]

Quando si utilizza un computer per risolvere matematicamente un problema bisogna ricordarsi che ciascun numero (dato) viene memorizzato in un computer con un numero finito di bit, questo comporta che i valori registrati nei computer sono di solito delle rappresentazioni approssimate dei valori reali che vogliamo memorizzare. Se si utilizza una variabile a 32 bit per rappresentare un numero questo potra assumere al max 232 possibili valori distinti, se la grandezza fisica misurata e' di tipo analogico, cioe' puo' assumere tutti (infiniti) i valori compresi in un certo range solo alcuni valori misurati potranno essere associati senza errori a quelli rappresentabili con la variabile a 32 bit, i rimanenti valori misurati saranno approssimati a uno dei 232 distinti valori che la variabile puo' assumere, ad esempio se si vuole memorizzare la misura 3.1421456 questo verra' registrato/memorizzato come 3.1423 . Per limitare questa approssimazione si utilizzano diversi tipi di codifica, si hanno codifiche adatte per rappresentare numeri interi (int, long ), numeri con la virgola (float, double), valuta, date, etc. Poi all'interno di ciascuna codifica e' stabilito un range che indica il numero piu' piccolo e quello piu' grande rappresentabili, e poi in base alla codifica e al numero di bit impiegati si ha una certa precisione con cui i numeri possono essere rappresentati ,ad esempio per i float si indica che le cifre significative sono 7, per un double le cifre significative sono 14. Per un numero di tipo float ad esempio il numero di bit impiegati per memorizzarlo e' pari a 32, il range e' di -3.4E+38 to +3.4E+38 la rappresentazione binaria interna e' la seguente

Float example
il numero e' stato prima normalizzato e poi di questa rappresentazione sono state memorizzate segno,esponente e mantissa. I limiti della rappresentazione finita dei valori non si limitano solo alla fase iniziale di memorizzazione del dato ma si ripresentano ogni volta che dobbiamo fare un calcolo, ad esempio se si vuole fare la differenza di due numeri bisogna ricordarsi che i due numeri coinvolti sono rappresentazioni approssimate dei valori reali e che anche il risultato avra' una sua approssimazione (uguale o peggiore di quella dei dati di partenza), di solito errori gravi possono essere introdotti quando si fa la differenza di due numeri molto vicini fra loro o quando la procedura di calcolo e' di tipo iterativo ad esempio pensiamo di conoscere x(0) e y(0) (sono noti anche delta e f'(x)) e di voler calcolare x(100) y(100) conoscendo che

x(k+1)=x(k)+delta 
y(k+1)= y(k)+f'(x(k))*delta


si vede subito che mediante le formule precedenti possiamo inizialmente calcolare y(1) x(1) (questa e' la prima iterazione con k=0) poi reimpiegando la stessa formula possiamo calcolare y(2) x(2) (seconda iterazione k=1) etc. e ripetendo il calcolo ( complessivamente 100 iterazioni ) si ottengono y(100) e x(100). Nel calcolo si noti non solo la ripetizione (iterazione) delle formule al variare del valore k (0,1,2,3,4....99) ma che ad ogni passo vengono riutilizzati i valori di x e y calcolati nel passo precedente, dando luogo a una propagazione dell'errore di approssimazione.