Calcolo Numerico - Dipartimento di Matematica e Informatica

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