Problemi legati al Calcolo Numerico (superiori)
Sistemi di acquisizione/elaborazione dati digitale
[modifica]Le procedure di analisi e di elaborazione dei dati si sono modificate con l'avvento dei computer (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, umidità, CO2, intensità campo magnetico, velocità, massa, ecc) e generano un segnale elettrico la cui tensione ha una ampiezza correlata alla intensità 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 è il formato dei dati che una CPU è 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.
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 cioè un convertitore da digitale a analogico ) per controllare altri dispositivi elettro-meccanici detti attuatori .
Un esempio di sistema di controllo digitale può essere una serra per la produzione di fiori, in cui la misura della temperatura o il gradi di umidità 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 potrà assumere al max possibili valori distinti, se la grandezza fisica misurata è di tipo analogico, cioè può 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 distinti valori che la variabile può assumere, ad esempio se si vuole memorizzare la misura 3,1421456 questo verrà 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, ecc.
Poi all'interno di ciascuna codifica è stabilito un range che indica il numero più piccolo e quello più 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 è pari a 32, il range è di la rappresentazione binaria interna è la seguente
il numero è 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 avrà 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 è 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 è la prima iterazione con k=0) poi reimpiegando la stessa formula possiamo calcolare y(2) x(2) (seconda iterazione k=1) ecc. 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.