Orario del corso Analisi Numerica 1 a.a. 2011/2012 Dott.ssa Silvia Bonettini Modalità d’esame Compito scritto + Prova orale 2 prove “in itinere” Lunedì 10:30-13:30 Aula2 Mercoledì 14:00-16:00 Aula2/Laboratorio Ricevimento: mercoledì 10:30-12:30 E-mail docente: [email protected] Pagina web del corso (provvisoria): http://dm.unife.it/~bonettini/annum11.htm Contenuti del corso Elementi di Analisi Numerica Matlab 1 Di cosa si occupa l’Analisi Numerica? “trovare gli algoritmi che risolvono un problema matematico nel minor tempo e con la massima accuratezza” “dare una risposta numerica ad un problema matematico mediante un calcolatore” Applicazioni Apprendimento automatico: riconoscimento di cifre scritte a mano, riconoscimento di sequenze di proteine Problemi di ingegneria strutturale: simulazione di velocità e pressione di un fluido in una tubatura Simulazione della temperatura attorno ad una sezione d’ala durante il rientro di veicoli aerospaziali (V. Comincioli, Analisi Numerica, Metodi, Modelli, Applicazioni) Applicazione: ricostruzione di immagini Osservazione L’utilizzo di uno strumento come il calcolatore impone dei limiti di TEMPO Algoritmi numerici SPAZIO Large Binocular Telescope (Mount Graham, Arizona, USA) 2 Limiti di tempo Si studiano algoritmi efficienti che possono essere eseguiti in un tempo “ragionevole” Studio della complessità computazionale =numero di operazioni necessarie all’esecuzione dell’algoritmo Risultato: Non tutti i numeri possono essere rappresentati al calcolatore Il risultato delle operazioni è diverso da quello usuale Ad esempio, per il calcolatore vale la seguente uguaglianza: 1 1 1 !!! 253 Limiti di spazio Si dispone di uno spazio di memoria finita per i dati. Il calcolatore opera in una aritmetica diversa da quella che conosciamo. Studio della stabilità=come si comporta un algoritmo rispetto all’aritmetica finita. Perchè l’errore? Il calcolatore è in grado di rappresentare solo un numero finito di cifre. Si rappresenta solo un sottoinsieme finito dell’insieme dei numeri reali e un intervallo limitato di interi. 3 Per prima cosa si deve considerare: La rappresentazione dei numeri interi e reali sul calcolatore; Come vengono eseguite le operazioni; Quali sono gli effetti dell’ aritmetica finita sugli algoritmi Per comprendere l’aritmetica del calcolatore occorre conoscerne i principi fondamentali di funzionamento Il calcolatore E’ una macchina usata per Richiami di informatica e programmazione Analizzare Elaborare Collezionare precisamente e velocemente una grande quantità di informazioni. Non è “creativo” Occorre fornirgli una lista precisa e finita di azioni da compiere, cioè un algoritmo 4 “Dentro” al calcolatore Hardware tutto ciò che nella macchina è strettamente fisico (parti elettroniche, circuitali, meccaniche, etc.) Software La componente fondamentale dell’hardware: il circuito I dati (foto digitali, testi, …) Gli strumenti informatici che servono per elaborare i dati (visualizzatori di immagini, editor di testi, videogiochi…) La componente fondamentale dell’informazione: il bit C. E. Shannon (1916-2001) Ogni tipo di informazione (numeri, musica, immagini, testo, istruzioni…) può essere codificato come sequenza di 0 e 1. (A mathematical theory of communication, Bell System Technical Journal, 1948) Il bit (binary digit) è l’unità di misura dell’informazione Unità di misura dell’informazione Multipli del bit 8 bit = 1 byte 16 bit = 1 word 210 byte = 1 KB (circa 1000 byte) 220 byte = 1 MB (circa 1 milione di byte) 230 byte = 1 GB (circa 1 miliardo di byte) 240 byte = 1 TB (circa 1000 miliardi di byte) 5 La codifica dei dati e degli algoritmi Codifica di dati: il testo Tabelle che, ad un determinato numero fanno corrispondere un simbolo alfanumerico. Codici: numeri binari da 1 a 127 (ASCII standard) da 128 a 255 (ASCII esteso) Nuovo standard: Unicode Codice ASCII standard Codice ASCII esteso 6 La codifica dei dati: le immagini Scala di grigi Ad ogni tono è associato un codice. 63=11111 Suddivisione dell’immagine in pixel Immagini RGB 11 12 34 23 34 34 12 13 34 11 12 34 56 56 57 58 0 13 61 60 0=00000 Immagini RGB 10 21 34 23 34 35 12 13 34 11 60 58 56 56 57 58 6 54 61 60 11 12 34 23 34 34 12 13 34 11 12 34 56 56 57 58 0 13 61 8 60 9 10 21 3 10 11 16 34 11 12 44 46 56 58 58 10 45 44 51 7 Codifica degli algoritmi: i programmi Anche le istruzioni, per essere comprese dal calcolatore, devono essere espresse come sequenze di numeri binari Per definizione, un programma è un algoritmo codificato E’ un entità statica (le istruzioni di un programma, una volta codificate, non sono più modificate) Esecuzione dei programmi: i processi esecuzione delle istruzioni necessarie per produrre i risultati desiderati dall’utente a partire dai dati forniti inizialmente Un programma durante la sua esecuzione viene detto processo E’ un’entità dinamica (dipende per esempio dai dati forniti) Dati Calcolatore Risultati Programma Macchina di von Neumann Struttura del calcolatore 8 Macchina di von Neumann Memoria centrale: dispositivo in grado di immettere, conservare ed estrarre informazioni Contiene i programmi Contiene i dati necessari all’esecuzione dei programmi CPU: contiene gli elementi circuitali necessari al funzionamento dell’elaboratore. La memoria Fisicamente è costituita da un insieme di elementi ciascuno dei quali può assumere due soli stati fisici rappresentabili dai simboli 0 e 1 (circuiti) individuati da un indirizzo (“etichetta”) CPU Esegue i programmi che risiedono nella memoria centrale in modo sequenziale Base 10 9 9 9 9 Base 2 1 1 1 1 2 3 4 5 6 7 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Codifica binaria sia del contenuto che dell’indirizzo Osservazione Fissato un numero di cifre N, quale è il massimo numero intero in una certa base che possiamo rappresentare su N cifre? 1 8 Memoria Dispositivi di Input/Output: permettono la comunicazione e il trasferimento dei dati (monitor, stampanti,...). 0 La memoria Indirizzo Memoria 0 1 Dimensione massima della memoria 2 3 . . . . 2N-1 Ampiezza della memoria 9 Dimensione della memoria Se N è il numero di cifre binarie disponibili per rappresentare un indirizzo, l’intervallo di indirizzi utilizzabili su un calcolatore è [0…..2N-1] per un totale di 2N celle di memoria. Tale valore è chiamato dimensione massima di memoria o spazio di indirizzamento di un calcolatore. La CPU Unità logico-Aritmetica (ALU Arithmetic and Logic Unit) E’ il sottosistema che esegue operazioni matematiche e logiche come l’addizione, la sottrazione ed il confronto. E’ dotata di registri = locazioni dove memorizzare temporaneamente i dati e i risultati delle operazioni. Unità di controllo (UC) Realizza ogni funzione per reazione a un preciso comando (istruzione). La direzione dei compiti è formulata dall'utente mediante un programma, che risiede in memoria codificato in forma binaria La memoria centrale è: Un insieme finito di locazioni (celle) di uguali dimensioni; Ogni cella consta di n bit; Ogni cella è caratterizzata da un indirizzo e dal contenuto; Mentre il bit è l’unità fondamentale di informazione, la cella è l’unità fondamentale di memoria; L’informazione, che comprende sia i dati che i programmi, risiede nella memoria. L’Unità di Controllo L’UC esegue in continuazione il ciclo dell’istruzione: 1. Legge dalla memoria l’istruzione da eseguire 2. Decodifica l’istruzione (ovvero determina il da farsi) 3. Esegue l’istruzione mandando il comando appropriato all’ALU, alla memoria, e ai dispositivi di I/O Questi 3 passi vengono ripetuti di continuo finché si raggiunge l’ultima istruzione del programma. 10 Istruzioni in linguaggio macchina Esempio: somma di due numeri Somma il dato nella cella di indirizzo 54 con quello nella cella di indirizzo 376 e memorizza il risultato nella cella 376 Le istruzioni che possono essere decodificate ed eseguite dall' unità di controllo di un calcolatore codificate in forma binaria, detta anche linguaggio macchina. Le istruzioni in questo linguaggio hanno il formato: Carica il contenuto della cella 54 in un registro Carica il contenuto della cella 376 in un altro registro e somma il contenuto dei registri Sovrascrivi il risultato nella cella 376 CODICE OPERATIVO CODICE DATO(o DATI) Memoria 0 1 0 0 1 1 0 0 1 53 54 0 0 0 1 1 0 0 0 55 1 1 1 1 0 1 1 0 56 1 1 0 0 0 0 0 1 Op. Code (8 bit) Operando (indirizzo a 16 bit) Significato 00101110 0000000000110110 Leggi cella 54 00001001 0000000101111000 Carica e Somma cella 376 00010001 0000000101111000 Scrivi in cella 376 … 0 1 1 0 0 0 0 0 … 376 1 0 0 0 1 0 0 0 0 1 377 0 0 0 1 0 0 0 1 I programmi e la programmazione ALU REGISTRI 0 1 1 0 0 0 0 0 + 0 0 1 0 0 0 0 1 1 0 0 0 0 0 0 1 = 11 Classificazione dei programmi SOFTWARE APPLICATIVO Software di sistema: il sistema operativo Rende appropriatamente utilizzabili le risorse fisiche presenti in un sistema informatico. 01010101… Comando SOFTWARE DI SISTEMA FIRMWARE S.O. HW HARDWARE Risultato Funzioni del SO Permette agli utenti di accedere alle funzionalità del sistema operativo mediante opportune parole-chiave o comandi. Consente all’utente di attivare i programmi. Gestisce la memoria, la CPU e i dispositivi di I/O. Gestisce le operazioni di recupero, eliminazione, modifica, copia dei dati Organizzazione dei dati in files: contenitori logici individuati da un nome, a loro volta raggruppati in cartelle secondo una struttura ad albero 01010101… Programmi applicativi Word processing (WP): trattamento di testi, dalla battitura alla correzione, all’impaginazione e alla stampa (MICROSOFT WORD) Foglio elettronico: elaborazione di dati, soprattutto di tipo numerico e loro organizzazione in tabelle e grafici (MICROSOFT EXCEL) Gestore di dati e archivi (database): archiviare e gestire informazioni in modo efficiente e razionale Pacchetti grafici ( Computer Aided Design CAD) Pacchetti applicativi aziendali: elaborazione fatture, gestione magazzino… Librerie scientifiche matematiche e statistiche. 12 Programmazione Come si costruisce un programma? Tradurre un algoritmo in istruzioni eseguibili per il calcolatore, ossia in linguaggio macchina. Programmazione in linguaggio macchina Occorre conoscere i codici operativi delle istruzioni e gli indirizzi dei dati in memoria. Il programmatore deve scrivere una sequenza di cifre binarie Inconvenienti I programmi in linguaggio macchina sono molto lunghi, poco leggibili, non portabili (ogni cpu ha un suo linguaggio) Devono essere noti gli indirizzi dei dati in memoria e i codici delle istruzioni Difficile modifica del programma Difficile localizzazione degli errori Esempio: somma di due numeri Op. Code (8 bit) Operando (indirizzo a 16 bit) Significato 00101110 0000000000110110 Leggi 53 00001001 0000000101111000 Somma 376 00010001 0000000101111000 Scrivi in 376 Programmazione in assembly Il linguaggio assembly si basa sulla corrispondenza del codice operativo delle istruzioni a parole chiave e sulla possibilità di associare i dati a nomi simbolici (variabili) Esempio: somma di due numeri. LINGUAGGIO MACCHINA Significato LINGUAGGIO ASSEMBLY 00101110 0000000000110110 Leggi 53 LOAD X 00001001 0000000101111000 Somma 376 ADD Y 00010001 0000000101111000 Scrivi in 376 STORE Y 13 Programmazione in assembly Si suddivide in due fasi Scrittura del file sorgente, ossia di un file di testo che contiene le parole chiave corrispondenti alle istruzioni dell’algoritmo Fase di assemblaggio, ossia la traduzione del sorgente in linguaggio macchina che viene effettuata da un apposito programma , detto assembler, fornito dal costruttore Sorgente LOAD, X ADD, Y STORE, Y Programma Assemblatore Come l’assemby si basano sull’utilizzo di parole chiave, con le quali il programmatore scrive il codice sorgente. A differenza dell’assembly, ad una istruzione di un linguaggio evoluto possono corrispondere più istruzioni in linguaggio macchina La traduzione in linguaggio macchina viene effettuata da un programma traduttore Esempio: somma di due numeri. Y=X + Y Programma Traduttore vantaggi: il programmatore può non conoscere gli indirizzi dei dati in memoria e i codici di rappresentazione delle istruzioni facile modifica del programma e localizzazione degli errori svantaggi: programma non portabile corrispondenza 1 a 1 tra istruzione in assembler e in linguaggio macchina 001011100000000000110 110000010010000000101 111000000100010000000 101111000 Programmazione in linguaggi evoluti Sorgente Programmazione in assembly Linguaggi evoluti Vantaggi Programmi portabili Non è richiesta la conoscenza dell’hardware del calcolatore o della rappresentazione delle istruzioni a livello macchina Linguaggi orientati alla natura del problema da risolvere Fortran: problemi scientifici Cobol: problemi gestionali Basic, Pascal, Logo: scopi didattici C: costruzione sistemi operativi, compilatori, interpreti Prolog: intelligenza artificiale 001011100000000000110 110000010010000000101 111000000100010000000 101111000 14 Programmazione in linguaggi evoluti Il programmatore deve conoscere la sintassi del linguaggio, ossia le parole chiave e la relativa modalità di utilizzo I linguaggi si suddividono in 2 categorie in base alle caratteristiche del traduttore linguaggi compilati linguaggi interpretati Linguaggi compilati (Fortran, C,...) Fase di editing (scrittura del file sorgente) Fase di traduzione (compilazione) File sorgente Compilatore Programma Dati Fase di esecuzione Programma Risultati Linguaggi interpretati (Matlab) File sorgente Dati Interprete Fase di traduzione ed esecuzione Segnalazione di eventuali errori Risultati 15