Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Nome: Gabriele
5° anno
Piero Gallo
Pasquale Sirsi
Daniela Gallo
app
INFORMATICA
LINGUAGGIO C++,
EXCEL E OCTAVE
ESERCIZI CON
SVOLGIMENTO GUIDATO
FILE SORGENTI
DEGLI ESERCIZI E AUDIO
DELLE SINTESI
app
INFORMATICA
5° anno
HUB Scuola:
per una didattica
digitalmente aumentata
HUB Scuola è la piattaforma digitale per lo studio e l’insegnamento che
permette a studenti e docenti di consultare il libro digitale, esplorare le risorse
multimediali integrate nel libro e condividere i contenuti disponibili.
HUB Campus è l’ambiente in cui HUB Young è l’App per usare il libro
il docente può trovare spunti sempre di testo digitale. Pratica e intuitiva, stimola
originali per programmare la didattica l’apprendimento, favorisce l’inclusione
del futuro e per motivare gli studenti. e potenzia i risultati individuali.
HUB Smart è l’App per guardare HUB Kit raccoglie i contenuti digitali che
i video, ascoltare gli audio del libro di testo espandono il libro di testo: audio, video,
e per consentire agli studenti di allenarsi esercizi interattivi, materiali aggiuntivi
con i test, direttamente dallo smartphone. e contenuti scaricabili, mappe concettuali,
laboratori digitali e gallerie d’immagini.
HUB INVALSI è l’ambiente che permette HUB Test è la piattaforma che permette
di avvicinare l’alunno all’interfaccia della ai docenti di creare verifiche partendo
piattaforma INVALSI consentendogli da un ricco database di quesiti disponibili.
di esercitarsi in modalità Computer Based.
NOVITÀ
HUB Test è la piattaforma semplice HUB INVALSI permette di svolgere HUB Smart è l’App per fruire
e intuitiva che permette ai docenti esercitazioni di italiano, matematica dei video e degli audio dei libri
di creare verifiche personalizzate. e inglese – come previsto dalla di testo da smartphone e tablet
Contiene un ricco database di quesiti normativa – in modalità Computer senza registrazione. Facile e veloce,
ed è utile anche per l’allenamento Based, per avvicinare l’alunno permette di ripassare le lezioni
individuale degli studenti. all’interfaccia INVALSI. e di mettersi alla prova con i test.
NOVITÀ
www.mondadorieducation.it
Questo ebook contiene materiale protetto da copyright e non può essere copiato, riprodotto, trasferito, distribuito, noleggiato, licenziato o
trasmesso in pubblico, o utilizzato in alcun altro modo ad eccezione di quanto è stato specificamente autorizzato dall’editore, ai termini e alle
condizioni alle quali è stato acquistato o da quanto esplicitamente previsto dalla legge applicabile.
Qualsiasi distribuzione o fruizione non autorizzata di questo testo così come l’alterazione delle informazioni elettroniche sul regime dei diritti
costituisce una violazione dei diritti dell’editore e dell’autore e sarà sanzionata civilmente e penalmente secondo quanto previsto dalla Legge
633/1941 e successive modifiche.
Questo ebook non potrà in alcun modo essere oggetto di scambio, commercio, prestito, rivendita, acquisto rateale o altrimenti diffuso senza il
preventivo consenso scritto dell’editore. In caso di consenso, tale ebook non potrà avere alcuna forma diversa da quella in cui l’opera è stata
pubblicata e le condizioni incluse alla presente dovranno essere imposte anche al fruitore successivo.
In copertina Sfondo astratto tecnologia con icone, Hilch, GettyImages, Giovani amici
utilizzando un computer portatile isolato, londoneye, GettyImages
Contenuti digitali
Progettazione Fabio Ferri, Vincenzo Belluomo
Redazione duDAT S.r.l.
Realizzazione duDAT S.r.l. (esercizi commentati, laboratori “case studies”, lezioni LIM),
Frigo Studio srl (audio), Lumina Datamatics (mappe modificabili)
Avvertenza: Occasionalmente, possono essere visibili in questo testo nomi, confezioni e marchi commerciali di prodotti o società. Non li abbiamo eliminati
per non rendere le esemplificazioni e le immagini irreali e “false”, quindi didatticamente inefficaci. L’autore e l’editore non intendono sostenere che i prodotti
fotografati o citati siano migliori o peggiori di altri, né indirettamente consigliarne o sconsigliarne l’acquisto: non esiste alcun rapporto di nessun genere con i
relativi produttori.
L’editore fornisce - per il tramite dei testi scolastici da esso pubblicati e attraverso i relativi supporti - link a siti di terze parti esclusivamente per fini didattici o
perché indicati e consigliati da altri siti istituzionali. Pertanto l’editore non è responsabile, neppure indirettamente, del contenuto e delle immagini riprodotte su
tali siti in data successiva a quella della pubblicazione, distribuzione e/o ristampa del presente testo scolastico.
Per eventuali e comunque non volute omissioni e per gli aventi diritto tutelati dalla legge, l’editore dichiara la piena disponibilità.
La realizzazione di un libro scolastico è un’attività complessa che comporta controlli di varia natura. Essi riguardano sia la correttezza dei contenuti che la
coerenza tra testo, immagini, strumenti di esercitazione e applicazioni digitali. È pertanto possibile che, dopo la pubblicazione, siano riscontrabili errori e
imprecisioni.
Mondadori Education ringrazia fin da ora chi vorrà segnalarli a:
Servizio Clienti Mondadori Education
e-mail servizioclienti.edu@mondadorieducation.it
numero verde 800 123 931
PRESENTAZIONE
Il testo è conforme alle Indicazioni Nazionali per il Liceo scientifico opzione Scienze Applicate relative al
5° anno della disciplina Informatica.
La nostra pluriennale esperienza nell’insegnamento dell’Informatica e nel campo dell’editoria ci ha per-
messo di impostare una specifica metodologia didattica che è in grado di garantire un efficace apprendi-
mento, poiché i contenuti proposti sono sempre stati pensati e definiti in un’ottica di integrazione fra il
libro, strumento tradizionale del sapere, il computer, usato come consolidato mezzo di apprendimento e
di conoscenza, e Internet quale strumento di coordinamento e approfondimento. Impostato sulla classica
equazione sapere=saper fare, accogliendo quindi un’impostazione didattica largamente consolidata, il vo-
lume propone un’esposizione semplice e curata degli argomenti, adatta all’età degli studenti, e non tradisce
in alcun modo l’irrinunciabile completezza e il rigore scientifico dei contenuti.
IL METODO ESPOSITIVO
All’interno di ogni unità i contenuti sono veicolati da due passaggi che aiutano la comprensione degli argo-
menti e affiancano il lavoro didattico del docente:
1. OSSERVA COME SI FA: questa scheda contiene esercizi svolti e commentati, scelti in modo da abbracciare
la casistica più vasta. La stesura abitua a comprendere la lezione afferente.
2. ORA TOCCA A TE: esercizi da svolgere e guidati. Rappresentano una forma di pronta verifica, poiché lo
studente è invitato a costruire lo svolgimento utilizzando i procedimenti illustrati nell’unità di apprendi-
mento, avvalendosi di spunti di impostazione e risultati parziali.
Le Schede infografiche sintetizzano alcuni argomenti importanti di carattere generale.
Al termine di ogni sezione è presente la sezione dedicata al CLIL, che fornisce letture a tema presentate in
lingua inglese corredate di un glossario e di un questionario.
Nella stesura delle parti che compongono il libro si è intenzionalmente scelto di riservare la maggior parte
delle pagine alla trattazione più approfondita dei vari argomenti, in modo da poter arricchire maggiormen-
te il bagaglio e il livello culturale dello studente. Per quanto riguarda la sezione di esercitazione, conside-
rando la natura mista degli attuali libri di testo, si è preferito destinare al sito web quasi tutta la parte appli-
cativa. Ciò anche per la natura interattiva delle proposte operative e la naturale inclinazione della materia.
Gli autori
Prerequisiti PREREQUISITI
Conoscenze
OBIETTIVI
Conoscenze Abilità
• Conoscenza del linguaggio C++ • Errori computazionali e • Saper risolvere situazioni problematiche
• Le strutture di controllo e le propagazione dell’errore relative all’algebra matriciale e vettoriale
strutture dati principali come • Algebra vettoriale e matriciale attraverso opportuni software
vettori e matrici • Tecniche di utilizzo del software • Saper risolvere sistemi lineari con un
• Conoscenza dell’ambiente Excel Octave per il calcolo numerico numero elevato di incognite
di Microsoft • Metodo diretto di soluzione dei • Saper interpolare dei dati attraverso
Abilità sistemi lineari (Cramer) delle funzioni polinomiali
• Metodo iterativo per la Competenze
• Saper strutturare un programma soluzione di sistemi lineari
in C++ utilizzando le funzioni (Jacobi) • Acquisire la padronanza di strumenti
• Saper utilizzare e gestire vettori • Metodo per convertire una dell’informatica e utilizzare tali
e matrici in C++ strumenti per la soluzione di problemi
Obiettivi
matrice non triangolare in
• Essere in grado di inserire triangolare (eliminazione di significativi in generale, ma in particolare
formule con riferimenti relativi e Gauss) connessi allo studio della matematica
assoluti in Microsoft Excel • Fitting di dati attraverso la retta • Acquisire la consapevolezza dei vantaggi
dei minimi quadrati e dei limiti dell’uso degli strumenti e dei
• Polinomi di interpolazione di metodi informatici e delle conseguenze
Newton e Lagrange scientifiche e culturali di tale uso
... Programma M
...
Algoritmo N
...
Esposizione chiara,
Quando puoi definire efficiente Di cosa si occupa la complessità Come si classificano i problemi
un algoritmo computazionale in ordine alla complessità (sia dal punto di vista sintattico, sia da quello semantico) e codificarlo in un linguaggio di
programmazione.
1 Qualità di un algoritmo
Dati uno o più algoritmi che risolvono un problema, confrontarli per individuare il mi-
gliore sulla base di un’analisi qualitativa.
schemi e concetti
Spesso si è interessati a soluzioni di problemi che, nell’impiego delle risorse umane e di calcolo,
vengono ritenute economiche. La misura della qualità
Dato per scontato che gli algoritmi siano corretti, cercheremo di Consideriamo un algoritmo
chiave in evidenza
L’impiego dell’algoritmo più efficiente si traduce in un risparmio di risorse computazionali
assegnare loro una misura della qualità. Le principali caratte- sviluppato per la gestione di un
e, di conseguenza, in un risparmio di tempo e di denaro. missile. Se i tempi di esecuzione non
ristiche da valutare sono: rispettano determinati intervalli di
Durante la fase di analisi dei problemi è emerso che, spesso, esistono più algoritmi per risolvere • lo spazio di memoria; tempo (sistemi real-time), il missile
può provocare una catastrofe.
un problema: un classico esempio è quello della ricerca di un elemento in un array. In partico- • il tempo di esecuzione di un algoritmo.
lare abbiamo esaminato l’algoritmo di ricerca sequenziale e quello di ricerca binaria, cioè due
algoritmi risolutivi dello stesso problema. Quale preferire? Quali sono i criteri da seguire per ■ Quando parliamo di spazio di memoria, intendiamo l’area di memoria occupata da un
valutare la bontà di un algoritmo? La risposta non è immediata. processo durante la sua esecuzione, dove, con il termine memoria, indichiamo la memoria
di lavoro. Possiamo indicarla anche come risorsa spazio. Ci riferiamo sia a quella utiliz-
Di ogni algoritmo dobbiamo considerare due aspetti: zata per la memorizzazione delle strutture dati (definite nell’algoritmo), sia a quella stret-
• la sua organizzazione interna, ovvero la struttura data alle sue istruzioni (organizzazio- tamente necessaria per la memorizzazione del codice stesso, dei suoi dati di input e dei
ne delle sue strutture di controllo) e le strutture dati utilizzate (tipi di variabili semplici e risultati intermedi.
strutturate);
• le risorse necessarie per eseguirlo (in particolare la memoria e il processore), strettamen-
■ Parlando di tempo di esecuzione, invece, intendiamo il tempo necessario a eseguire il
processo legato all’algoritmo. Possiamo indicarlo anche come risorsa tempo.
te legate allo spazio e al tempo necessari alla sua esecuzione. razioni
L’evoluzione tecnologica fornisce ormai computer dotati di grandi capacità di memoria a con * una delle 4 ope
costi relativamente bassi. Per questa ragione, la risorsa spazio è diventata china e
di macimpor-
razioni meno
La bontà di un algoritmo tante nella valutazione dei problemi. Per esempio,qua se lsias i delle 4 ope
un’immagine non viene visualizzata
entro un lasso di tempo ritenuto
Indican do con ⊕
ragionevole * una
siostr
avràa un :degrado delle prestazioni che ren-
che
Ogni algoritmo può essere tradotto in programmi scritti in differenti linguaggi di programma- y)
iche, si dim Dobbiamo quindi xdare * y =ai nostri algoritmi
derà il sistema inefficiente oarit
poco
metutilizzabile. ⊕ tr(x *
zione e ogni programma verrà, a sua volta, trasformato in più processi a tempo di esecuzione. y) di mac-
Nella figura a pagina seguente riassumiamo questi concetti: un problema può avere più algo-
un’organizzazione interna tale che il processo corrispondente impieghiy il= minor
x⊕ arr(x *numero di e dei numeri
a sull ’insiem
*
risorse possibili durante la sua esecuzione. di macchin
OSSERVA COM
ritmi che lo risolvono; ognuno di questi ultimi può essere tradotto in più programmi; a ogni
operazioni risu lta- 1. Consideriamo E SI FA
sura delle della valutazione del floating del
programma corrispondono più processi a tempo di esecuzione. Nel seguito della nostra analisi, quindi, ci occuperemo
in virt
esclusivamente
ù della chiu l’appros simazione due matric i A ∈ ! m×n e B
∈ ! aventi lo
m×n
Per valutare la bontà di un algoritmo, quindi, non ci riferiremo direttamente all’algoritmo stes- questoa un algoritmo. Per farlo, confronteremo
tempo di esecuzione del processoe legato tracon
cide loro due stesso numero
di mac china coin ⎡
m di righe e n
di colonne:
so, ma alle risorse che utilizzerà in quanto entità dinamica a tempo di esecuzione. china.
o più algoritmi risolutivi di una stessa classe di problemi, zionebase
sulla degli stessi parametri rile- ⎢ 1 1 1 3 ⎥⎤
altre paro le, un’opera A= ⎢ 2 1
⎡ 4 1
1 1 ⎤
Lo studio della bontà degli algoritmi porta a un ampliamento dei nostri traguardi formativi. vanti, in modo da poter effettuareIn un’analisi qualitativa degli
ta: algoritmi stessi. ne 2 2 ⎥ B = ⎢⎢ 1 ⎥
fl(x * y) = x ⊕ *y à dell ’addizio
razione esat ⎢ ⎥ 0 0 3 ⎥
to dell ’ope l’associativit ione. ⎢ 1 2 0 ⎢
⎣ 2 ⎦⎥ ⎥
alcune prop one
rietà, cioè ddiz Calcoliamo la somm ⎣⎢ 1 2 1 2 ⎥
184 Sezione B Teoria della computazione valgonoB4
La complessità computazionale rispetto all’a
185 a e la differenza
delle matrici A
⎦
china non moltiplicazi e B.
le ope razi oni di mac
dist ributività della ⎡
Per e la ⎢ 5 2 2 4 ⎤
tiplicazione A+B = ⎢ 3 ⎥ ⎡
⎢ −3 0 0
e della mol ⎢ 1 2 5 ⎥ A−B = ⎢ 1 2 ⎥⎤
⎢ ⎥ ⎢ 1 2 −1 ⎥
⎣ 2 4 1 4 ⎥
COME SI FA ⎦ ⎢
⎣ 0 0 −1 0 ⎥
⎥
OSSERVA ciativa.
2. Verifichiamo
ora la proprietà comm
utativa per la somm
⎦
prop rietà asso ⎡ a.
e non gode della Siano A = ⎢ 2 3 5 ⎤ ⎡
cui l’addizion ⎢ ⎥ e B = ⎢ 0 3 −4 ⎤
esempio in ⎣ 1 5 9 ⎦⎥ ⎢ ⎥
■ Vediamo un
e t = 8, dati
i numeri di
macchina:
Risulta: A + ⎡
⎣ 2 1 0 ⎦⎥
B = ⎢ 2 3 5 ⎥⎤ ⎢⎡ 0 3 −4 ⎤ ⎡
due matrici 2 ×
3.
Sia B = 10 −4
⎢ + 2+0 3+ 3
258 ⋅ 10 ⎣ 1 5 9 ⎦⎥ ⎣⎢ 2 1 0 ⎥⎥ = ⎢⎢ 5−4 ⎤ ⎡ 2
a = 0,23371 429 ⋅ 102 ⎦ ⎣⎢ 1 + 2 5 + 1 9 + 0 ⎥ = ⎢⎢
⎥ 6 1 ⎤
⎥
b = 0,33678 ⊕ c) ⎦⎥ ⎣ 3 6 9 ⎦⎥
0,00000023 ⋅ 10
2
0,00000618 ⎦⎥ ⎣ 3 6 9 ⎦⎥
0,33678429 ––––––––––––
⋅ 10
−3 ORA TOCCA A TE
0,33678452
fl(b + c) =
0,61800000
a
8 ⋅ 10
0,02337125 ⋅ 10−3
−3
■ Calcola la somm
a e la differenza
delle seguenti
⋅ 10
2
0,61800000 ⎡ matrici:
0,33678452 fl (b + c) ⎢ 4 −2 5 6 ⎤
fl(a + b) = ⋅ 10
2
−3
A = ⎢ −1 0 ⎥ ⎡
0,33678452 ⋅ 102 8 ⋅ 10 ⎢ 1 2 3 4 ⎥⎤
fl (a + b) 811 0,64137125 ⎢ 3 −3 ⎥ B = ⎢ −1 −2
− 0,33677 –––––– ⎢
⎣ 5 2 4 0 ⎥⎥ ⎢ −3 −4 ⎥
c
–––––––––––– ⋅ 102 ⎦ ⎢ ⎥
10−3 ⎣ 0 4 6 7 ⎥
0,00000641 137126 ⋅ ⎦
+ c)) = 0,64
fl(a + fl (b
10−3 niamo un Prodotto
100000 ⋅ mentre con
la 1) otte
+ c) = 0,64
fl(fl (a + b) 1258 ⋅ 10
−3 .
con la proc
edura 2),
Consideriamo due
137 nerlo
+b+c=
0,64 otte matrici A ∈ ! m×n
possiamo e B ∈ ! n×p in cui
esatto è a il risultato ottimale al numero di righe
Il risultato della seconda; in il nume
rviamo che
Perciò osse solo 3 cifre esatte.
matrici: questo caso è possib ro di colonne della prima è ugual
ile realizzare il e
risultato con prodotto fra le
due
C = AB ∈ ! m×p
A A TE Il risultato del prodo
ORA TOCC di B ed è ottenu
tto sarà una matri
ce avente il nume
immediatamente da
⋅ 10
3
a = 0,6791 ⋅ 10−2 1 3
b = 0,11111 102 11 2 1 2
⋅ 2 0 9
c = 0,3295 computer
A1 1 0 2 =
I numeri nel 1 5
in cui: 3 5 0
esercizi da svolgere 9 = −1 ⋅ 1 + 3 ⋅ 0 +
(−2) ⋅ (−5)
Algebra lineare
e algorit mi in C++ A2
25
VI
Codice Fiscale: nctgrl03r12e156z
Cognome: Nicotra
Nome: Gabriele
INFOGR AFICA
Chi era Alonzo Church
La macchina di ... e la TESI Matematico formato nelle migliori
università americane, nel 1936
fu il primo a occuparsi della
Schede infografiche
MACCHINA DI TURING UNIVERSALE
Dato uno specifico algoritmo, è possibile ricorrere a una macchina di Turing
per risolverlo: una macchina di Turing universale (MdTU) è una macchina
L’ASSUNTO DI BASE
Dato un problema, possiamo dirlo risolubile o computabile o calcolabile
su doppia pagina che
sintetizzano gli argomenti
capace di simulare il comportamento di una qualsiasi altra macchina se, dati in ingresso certi valori, è possibile determinare una funzione f
di Turing. Per far questo la MdTU ha come ingressi due stringhe. che metta in relazione tali dati con un risultato.
Stringa 1: definisce la MdT Stringa 2: input della MdT
λ .. .. .. λ .. .. .. λ
PROBLEMA
più importanti
Le azioni della MdTU
Una MdTU è una macchina programmabile, in grado
236 Sezione B Teoria della computazione Intelligenza artificiale e reti neurali B5 237
VII
Codice Fiscale: nctgrl03r12e156z
Cognome: Nicotra
Nome: Gabriele
Test semistrutturati,
B è la facoltà mentale si interessa dello mettere in B a risolto) al mondo
della deriva dal classico
realtà A hardware capaci di Il nome del sistema
di comprendere la tare tramite soli sistemi stato realtà (legge, problem
)
B
antibiotici
e, discernere, confron i e controllare il loro problema intuitivo mycin usato negli
è la capacità di sceglier funzione elettrodomestic presenti nella propria realtà (fenomeno, no, diagnos i di malattie
C nte della realtà (fenome Non era utile per la
è la capacità intellett
uale quando si è fisicame al passaggio dal mondo nza C sangue
D C
) al mondo della conosce di coagulazione del
abitazione problema intuitivo ici con la loro dose
interattiva autocorrettiva
abitazione zione della Nel sistema nervoso da un corpo
di pertinenza umana studio e della realizza è: _________ formati
studi teorici si interessa dello di 11. Un sistema esperto _________ _______ ti,
è la disciplina che
si occupa degli C una tecnologia capace problemi prolungamenti ramifica
B soli sistemi hardwar
e per
casa intelligente tramite in grado di risolvere cellulare e da molti _________
per la progetta zione dei elettrodomestici e
controllare A un computer che è di calcolo ___. I _______
le prestazioni umane mettere in funzione i nella izzato da una potenza i _____________ filamentoso chiamat
o
fornire al computer si è fisicamente present complessi caratter sta umano
re sistemi il loro stato quando quella di uno speciali hanno un prolungamentola cui lunghezza
studia come progetta di efficienza pari a
C è la disciplina che al computer propria abitazione ____________________, a qualche metro.
e capaci di fornire zione della di quel settore 1 cm
hardware e softwar studio e della realizza e e software caratter
izzati può variare da circa
di pertinen za umana D si interessa dello una tecnologia capace
di
un insieme di hardwar calcolo pari assone, neuroni)
le prestaz ioni
re casa intelligente tramite controllare
B
da una potenza di (dendriti, neuroni,
studia come progetta elettrodomestici e da una sinergia e settore
è la disciplina che er mettere in funzione sta umano di quel le reti
D di fornire al comput quando non si è fisicame
nte a quella di uno speciali problemi ti affermazioni inerenti
sistemi software capaci za umana il loro stato anche è in grado di risolvere 15. Quali tra le seguen ?
le prestazioni di pertinen abitazione un programma che dominio, neurali sono corrette
presenti nella propria C o in un particolare di nodi
complessi che rientran di uno costituita da un insieme
cere paragonabile a quella Una rete neurale è
L’intelligenza artificia
le forte: zioni è possibile riconos con una efficienza A
4. 7. Quali tipi di informa o di elaborazione specialista umano
di quel settore collegati
er non possa essere nell’ambito del process inferenziali sono quelli a cui arrivano
ritiene che un comput basa su algoritmi I collegamenti di input
A
di una intelligenza
non
dell’informazione
stessa? D un software che si izzato da efficienza
B
veramente dotato e meta-algoritmi caratter segnali so cui
senso importante il problema hardware impiega
ti sono quelli attraver
distinguibile in nessun A L’algoritmo, il dato, dipendente dai sistemi C I collegamenti di output
lligenza umana e, la risoluzio ne
dall’inte essere L’esecuzione, la gestion la rete emette segnali neurale sono
che un computer non possa B
, la soluzione i nodi di una rete
B ritiene
di mente L’algoritmo, le variabili D I collegamenti tra
una macchina dotata
C e inibitorio
nte mo, il tracing di tipo eccitatorio
er possa essere verame D La risoluzione, l’algorit
ritiene che un comput in
C nza non distinguibile
dotato di una intellige umana iali:
nte dall’intelligenza 8. Gli algoritmi inferenz
nessun senso importa
er non può mai essere sono algoritmi classici
D sostiene che un comput umana ma potrà solo A
equivalente a una
mente calcolo estemporanee
i umani sono procedure di
alcuni processi cognitiv B
arrivare a simulare li totalmente sono meta-algoritmi
C
senza riuscire a riprodur previsti dall’intelligenza
D sono algoritmi non
artificiale 239
e e reti neurali B5
Intelligenza artificial
comput azione
Sezione B Teoria della
238
A
• Rappresenta i seguenti numeri secondo
lo standard IEEE a singola precisione:
35,16 B −0,78 C 145,09 D −2,22
4. • Calcola gli estremi degli intervalli di
definizione dei numeri secondo lo standard IEEE
754 a 32 bit considerando le configurazioni
livelli di difficoltà
speciali dell’esponente.
2. • Date le seguenti rappresentazioni binarie
5. • Per ogni numero x che segue, determina
di numeri in floating point a 32 bit, ricava
i corrispondenti decimali:
Allena le tue ABILI tr(x) alla quinta cifra decimale e calcola l’errore
assoluto e relativo che si commette (rappresenta
A 00111111100000000000000000000000
e le tue COMP TÀ
inizialmente tutti i numeri nella forma 0,…):
B 11000010110010000000000000000000 A ETENZE
34,5678934 ⋅ 103 C 1234,5678899
C
D
00111000010100011011011100010111
01000000010101010101010101010101
B 0,673452917 ⋅ 10−2 D 9,7453285 ⋅ 10−4
B2
• Per
10. 6.Consid ogni x del precedente esercizio, determina
3. • Date le seguenti rappresentazioni esadecimali • eraalla
arr(x)
all’auto
il diagram
quintama
cifra decimale
degli e calcola l’errore
stati relativi
di numeri in floating point a 32 bit, ricava ma “cassaforte”
Crea laassoluto e relativodescrit
che si to 18.
commette
in preced(rappresenta
enza. •• Distributore di lattine. Progetta Allena le tue ABILITÀ
A2
i corrispondenti decimali: relativa tabella
inizialmente tuttidi
i numeri nella forma 0,…). che distribuisce un automa
transizione. lattine di un solo
A 3F400000 C C287C7AE 11. Considera il diagram
7.
all’auto
•
Dati i seguenti • manumeri: x1 = relativi
degli stati 0,0000345,
sono state introdo
tte
valore. Se il distribu due monete di un unico
tore è spento, si
tipo dopo che
e le tue COMPETENZE
B AB004511 D 40E004EA ma= “ricono scitore (di
0,389475834 = 12,5673
e x3Moore) verifica la moneta eventu “mangia”
con un xnumero
2
pari di 1 e relativo
di stringh e almente introdotta.
lezione l’errore assoluto che si commette
di 0”, descrit to nella
di Moore
aggiuntiva online
effettuando la somma“Autom + x3) dei numeri 19.
(x1 i+dix2Mealy, ••
Distributore di bevand
di transiz
e senzaalla
troncati uscite”
quarta posizione
. Crea decimale.
la relativa automa che distribu e 1. Progetta un Operazioni con le matrici
tabella isce
ione. emettendo una lattina due tipi di bevande
8. •
Prendendo in considerazione i numeri dell’esercizio
12. Consid precedente, verifica l’errore assoluto e relativo introdotte due monete dopo che sono state 1. • Date le seguenti matrici, calcolane la somma A + B.
che si commette effettuando la somma dei numeri arrotondati •
eraalla
il diagram
quarta ma posizione decimale.
degli stati ed è stato scelto da 20 centesimi
di euro
all’automa “ricono relativi il tipo N. Matrice A Matrice B
scitore (di Mealy) L’automa non restitui di bevanda.
Reali Numeri in formato 0,… la presenza Mantissa
di tre 1 consecEsponente che rileva
Arrotondati sce monete. 32416 24503
lezione aggiuntiva utivi”, descritto
0,0000345 ,3450000000E−04 0,354 online. Crea−4 la relativa tabella 0,3540 20.
nella ••
Distributore di bevand 1 53421 41670
di transizione. un auto e 2. Progetta 78342 13645
0,389475834 ,3894758340E+00 0,389475834 0 0,3895 ma come il prece
delle monete a richies dente che restituisce
12,5673 13.
,1256730000E+02 Considera •
0,125673
il diagramma degli 2 0,1257 introdotta una monetata o quando sia stata
11111 11 10 9 8 7
all’automa “ricono stati relativi in eccedenza. 2 11111 65432
scitore (di Moore) 11111 10000
sequenza con numero della 21.
Somma reale lezione aggiuntiva pari di 0”,
sommadescritto ••
Distributore di bevand
e 3. Progetta un 10 11 12 13 14 65432
online. Crea la relativa nella che distribuisce
due tipi di bevand automa
Ea arrotondato di transizione. tabella una lattina dopo e emettendo 3 98765 7 8 9 10 11
che sono stati introdo 43210 2 4 6 8 10
Er arrotondato centesimi di euro tti 40
14. Considera il diagram
• bevanda. L’autom
ed è stato scelto
il tipo di
ma degli stati relativo a accetta monete ⎡
9. •
Riprendi i dati dell’esercizio 7 e verifica all’auto10. ma “ascen
Riprendi
sore”, •
i dati dell’esercizio 8 e verifica centesimi di euro da 10 e 20 ⎢ 2+1
3+0 0+
Crea descrit to in preced e non restituisce A+B = ⎢ 2 4 1+2 ⎤ ⎡
la proprietà associativa. la relativa
la proprietà
tabellaassociativa. enza. monete . ⎢ +3
1+1 0+ ⎥ 3 3 4
di transizione.
22. Svolgiamo insieme il primo degli esercizi proposti ⎢ 1 0 4 + 3 ⎥ ⎢⎢ 3 ⎥⎤
15. ••
Sequenza “ciao”.
Progett ⎣⎢ + 2
5+1 2+
1 1 + 2 ⎥⎥ ⎢⎢
= 5 2
0 7 ⎥
11. ••
Completa la seguente tabella come da modelloData •
la seguen
riportato nell’esercizio calcola l’errore assoluto e riconoscitore che riconos a un automa
te tabella 8dietransiz Siano A, B ∈ !3×5 due matrici rettangolari così definite ⎥
relativo che si commette effettuando la somma ildei relativo ione, ottieni tra una successione ca la sequenza “ciao” ⎡ 3
+1 ⎦⎥ ⎣⎢ 3 6 3 3 ⎥
numeridiagram
arrotondati alla terza posizione
ma degli decimale. ⎡ ⎤ ⎡ ⎤ (A + B) + C ⎢⎢ 3+2 4+ ⎦⎥
⎢ 3 2 4 1 6 ⎥
stati per un
⎢ 2 4 5 0 3 ⎥
di simboli in ingress 2 3+1 ⎤ ⎡
di Moore, descrit
to nella lezione aggiun automa ognuno dei quali = ⎢ 5+1
può essere una qualsia o, A = ⎢⎢ 5 3 4 2 1 ⎥⎥ B = ⎢⎢ 4 1 6 7 0 ⎥⎥ 2+0 0+ ⎥ 4 5 6
Reali Numeri in formatoonline.
0,… Mantissa Esponentetiva Arrotondati dell’alfabeto. si lettera ⎢ 3 2 7 + 3 ⎥ ⎢⎢ 4 ⎥⎤
⎢ 7 8 3 4 2 ⎥ ⎢ 1 3 6 4 5 ⎥ Adesso calco ⎣⎢ + 3
6+4 3+
2 3 + 1 ⎥ ⎢⎢ ⎥ = 6 2
2 10 ⎥
0,00012 ⎢⎣ ⎥⎦ ⎢⎣ ⎥⎦ liamo B +
Ingressi 23. •••
Sequenze binarie Ce al risultato ⎥ ⎣⎢ 6 10 5 4 ⎥⎥
⎦
0,0000678 Stati 0 1 che iniziano e finiscon aggiungiam ⎦⎥
Uscite 0. Crea un automa o per Le due matrici hanno lo stesso numero di righe e di colonne, pertanto è possibile eseguire la somma. o A.
5,9123 riconoscitore che ⎡
S0 S0 sequenze che iniziano riconosca
⎡ 3+2 2+4 4+5 1+0 6+ 3 ⎤ ⎡ 5 6 9 1 9 ⎤ ⎢ 2+1 3+2 0
S1 0 successione di simbolie finiscono con 0 da una ⎢ ⎥ ⎢ ⎥ B + C = 2+1⎢ + 2 1+1 ⎤ ⎡
S1 ⎢ 1+0 0+ ⎥ 3 5 2
S2 S1 dei quali può essere in ingresso, ciascun
o A + B = ⎢⎢ 5 + 4 3 + 1 4 + 6 2 + 7 1 + 0 ⎥⎥ = ⎢⎢ 9 4 10 9 1 ⎥⎥ ⎢ 1 2 4 + 3 ⎥ ⎢⎢ 2 ⎤
⎥ = 3 1 2 7 ⎥⎥
0
⎣⎢ + 3 5 + 4 2 + 2
Somma reale S2 somma 0
S0 devono essere riconos oppure 1. Per esempio, ⎢ 7 + 1 8 + 3 3 + 6 4 + 4 2 + 5 ⎥ ⎢ 8 11 9 8 7 ⎥
1 + 1 ⎥ ⎢⎢
S3 0 ⎢⎣ ⎥⎦ ⎢⎣ ⎥⎦ ⎥
⎦⎥ ⎣⎢ 4 9 4 2 ⎥
Ea arrotondato S3 ciute le seguenti sequen
S2 0100110, 010, 000. ze: ⎡ 3
S4 +1 3+2 ⎦⎥
(A + B) + C ⎢⎢
Non
Er arrotondato S4 0 riconosciute le sequen devono essere 4+2 3+ ⎤
S2 ze: 10, 10000, 001. = ⎢ 5+1 1 ⎥ ⎡ 4
S1 2+0 0+ 5 6 4 ⎤
Che tipo di sequen 1
24. Proprietà commutativa ⎢ 3 2 7 + 3 ⎥ ⎢⎢
za di input riconos •••
Sequen binarie ⎣⎢ + 3 6 + 4 3 + 2 ⎥ = 6 2 2 10 ⎥⎥
I numeri nel computerceA1 l’automa? 19automa a ze di lunghezza 4. Proget Verifichiamo la validità della proprietà commutativa cioè A + B = B + A. UtilizziamoEcco quindidefinite
le matrici sopra, quindi
dimostrat 3 + 1 ⎥ ⎢⎢
⎦⎥ ⎣⎢ 6 10 5 4 ⎥⎥
16. un
••
Distributore di bigliett stati finiti riconos
citore che
ta
calcoliamo B + A e verifichiamo che il risultato sia uguale al precedente. o che il risul
tato di (A +
a stati finiti che i 1. Proget ta un automa riconos ca sequen ze binarie di lunghe B) + C è ugua ⎦⎥
emette in uscita esempio, devono zza 4. Per ⎡ 2 + 2 4 + 2 5 + 4 0 + 1 3 + 6 ⎤ ⎡ 5 6 2. 9 1 9 ⎤ le al risultato
dopo che sono state un bigliett
inserite due monete o
essere riconosciute ⎢ ⎥ ⎢ •
⎥ A−
Calcola di A + (B +
C).
B + A = ⎢⎢ 4 + 5 1 + 3 6 + 4 7 + 2 0 + 1 ⎥⎥ = ⎢⎢ 9 4 10 dell’
sequenze: 01001 le seguenti
da 0,50 euro. L’autom 10, 010, 000. Non 1 ⎥⎥ cizio B in riferimento alle
9 eser
a funziona solo con essere riconosciute devono precedente. matrici
da 0,50 euro. monete le sequenze: 10, ⎢ 1 + 7 3 + 8 6 + 3 4 + 4 5 + 2 ⎥ ⎢ 8 11 9 8 7 ⎥ 3.
10000, 001. ⎢⎣ ⎥⎦ ⎢⎣ ⎥⎦ ••
Date le matr
17. 25. •••
Sequenze binarie determina ici A e B dell’
••
Distributore di bigliett
i 2. Progetta un Proget ta un automa a
che finiscono per
111. Come potete vedere confrontando i risultati A + B è uguale a B + A, pertanto la proprietà commutativa è verificata. delle
(3 ⋅ 3) in base sottomatrici di terzo 1,
esercizio
a stati finiti che automa
emette un bigliett
o che riconosca sequen stati finiti riconoscitore Proprietà associativa • elimina le
ai seguenti ordin
suggerimenti: e
sono stati inseriti dopo che ze binarie che finiscon ultim
0,60 euro. L’autom 111. Per esempi o per • elimina seco e due colonne
con monete da 10 a funziona o, devono essere
riconosciute Siano A, B, C ∈ !3×4 tre matrici rettangolari così definite 4. ••
Date le segu
non fornisce resto.
o da 20 centesimi
di euro e
le seguenti sequen
ze: 0100111, 111, enti matrici, • elimina prim nda e terza colonna
Non devono essere 00011 ⎡ 1 0 4 2 ⎤ ⎡ 2 3 0 1 ⎤ ⎡ 1 2 2 1 ⎤ calcolane a riga, prim
riconosciute le sequen 1. ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ il prodotto
A ⋅ B.
a, quar ta e
quinta colon
10000, 001. ze: 10, A = ⎢⎢ 3 1 0 3 ⎥⎥ B = ⎢⎢ 2 1 0 4 ⎥⎥ C = ⎢⎢ 1 0 2 3 ⎥⎥ N. na
160 ⎢ 2 1 1 2 ⎥ ⎢ 1 5 2 1 ⎥ ⎢ 3 4 2 1 ⎥ Matrice A
Sezione B Teoria
della comput azione ⎣⎢ ⎦⎥ ⎣⎢ ⎦⎥ ⎣⎢ ⎦⎥ 23 Matrice B
1 45 123
Verifichiamo la validità della proprietà associativa, cioè che (A + B) + C = A + (B + C).
Cominciamo calcolando A + B e al risultato aggiungiamo C. 16 456
213
2 405 042
136 213
213 216
Algebra lineare e algoritmi in C++ A2 3 39
405 04
23
405 16
4
136 213
111 024
5 111 2416
da seguire
⎣ 4 5 6 ⎥
⎦
40
Sezione A
Algoritmi di
calcolo num
erico
VIII
Codice Fiscale: nctgrl03r12e156z
Cognome: Nicotra
Nome: Gabriele
CLIL ASCOLTA
LA PRONUNCIA
GLOSSARIO
CLIL
Many questions in computational and combinatorial It is not difficult to see that with a number of nodes equal
geometry refer to the study of a finite set of points on the to four, intersections may not occur in the graph. With five
Euclidean plane. Many problems in graph theory are framed nodes you can plot different configurations (here you can
in this context when the edges are linear. see different order types (introduced by Goodman and
ARIO A major issue concerns the number of straight line Pollack in 1983)). If you draw five nodes forming a convex
GLOSS
CLIL intersections (for example, problems of transport and figure there are five crossings. The best you can do is have
ASCOLTA UNCIA optimizing layout in the press): What is the minimum a single intersection (there is no way to draw a complete
LA PRON number of crossings in a drawing of the complete graph graph of five nodes without crossing, even if the sides
AUDIO of n points on a plane? A complete graph is one in which are curved).
each point (node) is connected to all others. It also assumes Maximizing the number of crossings is easy: just place
CLIL the most generic position possible for the nodes, this implies
that in the graph no three nodes are aligned.
presen
ce in the
all the n nodes in a circle to get the maximum number
of intersections.
ge nce derived
from the to the rule
s of
l intelli
ilar
lities are s, which are sim
ia se capabi
Artific
rule ky
All of the set of precise Choms
a guage,
ent mind of system. ory of lan tactic
is of intellig form al s, in their the ary role to syn e
the bas a son
ious rea assigned a primry speaker is
abl
bols is For var
cess sym terizes followers nks to this eve
lity to pro t charac and his correct
The abi sing tha ence. Tha ve that: grammatically
or. ic proces ge. compet ately percei
behavi symbol langua use” is
a
mple of verbal to imm
edi
s the mo
The exa ngs t doubt en 100 and cat eat
bei is withou we a) “the ce, while .
human atest extent took place bet erienced the our ten eat s” is not
to the gre of language , a time which Homo sapien
exp s, sen
mouse
the t in the
“the cat fact tha process of
gin ted b) by the
The ori yea rs ago ere ntia erm ine d me al
tric which,
usand has diff hominids. d. n is det (or in the sym are followed
200 tho ry leap that cies of nnecte
interco lligent ognitio es
This rec n of a sentence ce) formal rul guage.
linguistiche e disciplinari
re by t fun din llig enc tran slat tak ph ras
mo lies wo as
the ear ficial inte machine l application to group groups kno
wn
some of cent field of arti g systems of me rcia ctio nal
pin com fun
then nas ct of develo ges, whose ge
l langua of artificial
pro spe lan gua nat ura s
the different earch on g sector
between is) obvious. Res of the leadin nal linguistics.
d one atio
was (an g constitutes comput
sin ticular,
proces , in par Focus … and now answer!
ence and D PHRA
SES
intellig three
NCE AN divided into
MPETE n, is
GU ISTIC CO ence, in tur speake
r to The configuration of large sets of nodes 1 What is The Rectilinear Crossing Number Project?
LIN compet lity of a guage; For large sets of nodes it is very difficult to determine
Linguistic s: e: the abi ken lan 2 What is the number of nodes for which a solution
ent petenc sounds of spo e or the best configuration. The main reason is that the
compon logical com to the rectilinear crossing number is being sought?
ph ono ers tand the lity to produc number of different ways to draw the nodes grows
• e and und e: the abi t sentences; ract exponentially.
produc competenc cor rec ign or to ext
tac tic atically lity to ass For example, for n = 11 there are already more
• syn ize gramm e: the abi ry
recogn competenc . Gl os sa e
than
nds two billion (precisely 2,334,512,907) different
antic ces petenc d the sou
configurations.
• sem ng from senten nol ogi cal com and understan
meani • Pho duce
lity to pro ge.
the abi
en langua atically
of spok petenc
e gramm124 Sezione A Algoritmi di calcolo numerico
ognize
tactic com duce or rec
• Syn
lity to pro .
the abi ces
rec t senten e ng from
cor petenc t meani
Sem antic com ign or to extrac
•
lity to ass
the abi .
ces
senten all
te length s.
guage ces of fini et of symbol
• Lan senten alphab
tion of a finite
a collec
cted from
constru
ne
putazio
ria del la com
e B Teo
Sezion
240
Contenuti digitali
Risorse multimediali
• Esercizi commentati
• Laboratori “Case studies” per mettere in pratica le competenze acquisite
• File audio delle Sintesi testuali
• Mappe dei concetti chiave in versione modificabile
• Test autocorrettivi interattivi
• File audio “Ascolta la pronuncia”
• Glossario in italiano e in inglese interattivo con funzione di ricerca
IX
Codice Fiscale: nctgrl03r12e156z
Cognome: Nicotra
Nome: Gabriele
SEZIONE A
ALGORITMI DI CALCOLO NUMERICO 1
X
Codice Fiscale: nctgrl03r12e156z
Cognome: Nicotra
Nome: Gabriele
Ripassiamo insieme 69
Sintesi • Mappa
Allena le tue abilità e le tue competenze 71
SEZIONE B
TEORIA DELLA COMPUTAZIONE 125
XI
Codice Fiscale: nctgrl03r12e156z
Cognome: Nicotra
Nome: Gabriele
XII
Codice Fiscale: nctgrl03r12e156z
Cognome: Nicotra
Nome: Gabriele
Macchine astratte
SEZIONE C
INFRASTRUTTURE DI RETE E ASPETTI DI SICUREZZA 241
C2 La sicurezza delle reti e la crittografia dei dati 283 LABORATORIO CASE STUDY
La sicurezza dei dati in rete
1 La sicurezza: introduzione 283
2 Sicurezza dei dati in rete 285 AUDIO
Infografica • Hacker e strumenti per violare la sicurezza 288 Ripassiamo insieme
XIII
Codice Fiscale: nctgrl03r12e156z
Cognome: Nicotra
Nome: Gabriele
SEZIONE D
INTERNET: SERVIZI, PRIVACY E SICUREZZA
NELLA SOCIETÀ DIGITALE 311
XIV
Codice Fiscale: nctgrl03r12e156z
Cognome: Nicotra
Nome: Gabriele
GNU Octave®, C++®, Microsoft Excel®, DropBox®, GoogleApps®, Prezi®, WordPress® sono marchi registrati
dai rispettivi titolari.
Referenze iconografiche
© GettyImages – © Fotolia – © Fuse – © iStock – © Hemera – © Shutterstock – © StockPhotoAstur – © Corbis – p. 167: © Museo
Nazionale della Scienza e della Tecnologia “Leonardo da Vinci”, Milano; Alessandro Nassiri
Sezione A
ALGORITMI DI CALCOLO
NUMERICO
A1 A2 A3 A4
I numeri nel computer Algebra lineare e Algebra vettoriale e Applicazioni
Rappresentare i numeri reali algoritmi in C++ matriciale con Octave scientifiche in Octave,
all’interno del calcolatore L’algebra lineare è GNU Octave è un software in Excel e in C++
non è sempre un’operazione la branca della matematica gratuito e open source Un sistema di equazioni
indolore: la parte decimale che si occupa dello per il calcolo scientifico, lineari, anche detto
può essere costituita studio dei vettori, spazi un’applicazione software sistema lineare, è un
anche da una serie infinita vettoriali (o spazi lineari), per l’analisi numerica sistema composto da
di cifre. La memoria del trasformazioni lineari e in gran parte compatibile più equazioni lineari che
calcolatore e le operazioni sistemi di equazioni lineari. con MATLAB. devono essere verificate
fatte sui numeri devono In questa Unità affronteremo Ha un insieme di funzionalità tutte contemporaneamente.
avere necessariamente una lo studio di vettori e per effettuare il calcolo Usando le matrici
caratteristica di finitezza; matrici, ne analizzeremo matriciale e consente di e il prodotto scalare fra
pertanto, in questi casi, proprietà e caratteristiche trovare la soluzione numerica matrici si possono separare
si procede eliminando effettuando delle operazioni di sistemi lineari. i coefficienti, le incognite e
una parte dell’informazione. su essi attraverso la relativa i termini noti del sistema e
Qual è l’errore che algebra. Affronteremo risolvere i sistemi applicando
si commette eliminando invece i sistemi lineari nelle soluzioni algoritmiche.
tali cifre? Quanto incide prossime Unità.
tutto ciò sul risultato finale?
PREREQUISITI OBIETTIVI
Conoscenze Conoscenze Abilità
• Conoscenza del linguaggio C++ • Errori computazionali e • Saper risolvere situazioni problematiche
• Le strutture di controllo e le propagazione dell’errore relative all’algebra matriciale e vettoriale
strutture dati principali come • Algebra vettoriale e matriciale attraverso opportuni software
vettori e matrici • Tecniche di utilizzo del software • Saper risolvere sistemi lineari con un
• Conoscenza dell’ambiente Excel Octave per il calcolo numerico numero elevato di incognite
di Microsoft • Metodo diretto di soluzione dei • Saper interpolare dei dati attraverso
Abilità sistemi lineari (Cramer) delle funzioni polinomiali
• Metodo iterativo per la Competenze
• Saper strutturare un programma soluzione di sistemi lineari
in C++ utilizzando le funzioni (Jacobi) • Acquisire la padronanza di strumenti
• Saper utilizzare e gestire vettori • Metodo per convertire una dell’informatica e utilizzare tali
e matrici in C++ matrice non triangolare in strumenti per la soluzione di problemi
• Essere in grado di inserire triangolare (eliminazione di significativi in generale, ma in particolare
formule con riferimenti relativi e Gauss) connessi allo studio della matematica
assoluti in Microsoft Excel • Fitting di dati attraverso la retta • Acquisire la consapevolezza dei vantaggi
dei minimi quadrati e dei limiti dell’uso degli strumenti e dei
• Polinomi di interpolazione di metodi informatici e delle conseguenze
Newton e Lagrange scientifiche e culturali di tale uso
1
Codice Fiscale: nctgrl03r12e156z
Cognome: Nicotra
Nome: Gabriele
FILE SORGENTI
Codici in C++
IMPARERAI…
1 Errore computazionale
Obiettivo del calcolo numerico è quello di fornire procedure di calcolo (algoritmi numeri-
ci), che, con un numero finito di operazioni elementari, consentano di individuare la soluzio-
ne di un problema, eventualmente in forma approssimata.
In generale, gli algoritmi sono iterativi sequenziali, ovvero partono da valori iniziali per cal-
colare nuovi valori; a questi viene riapplicata la stessa formula, e così via. Ovviamente, l’algo-
ritmo è valido se la successione dei valori da esso calcolata converge alla soluzione voluta. In
altri termini, la procedura deve individuare, a partire da una valutazione non corretta della so-
luzione, approssimazioni via via migliori; operando in tal modo, l’errore insito nella previsione
iniziale viene ridotto a un limite accettabile e l’ultimo valore calcolato viene così utilizzato
come soluzione del problema in esame.
Altrettanto importante rispetto alla buona valutazione della soluzione è la messa a punto di
algoritmi efficienti, cioè di procedure che permettano di risolvere un problema nel modo mi-
gliore. In pratica, nella classe dei metodi che forniscono la soluzione entro la precisione voluta,
sono preferibili quelli la cui impostazione sul calcolatore risulti più semplice per l’utente e il cui
tempo di esecuzione sia più breve. Pertanto:
In questi casi, la soluzione dei problemi avviene per mezzo di algoritmi approssimanti, i quali
determinano le soluzioni del problema per approssimazioni attraverso metodi iterativi.
Pensiamo, per esempio, ai numeri π o 2 che hanno un numero infinito di cifre; essi non po-
tranno mai essere rappresentati correttamente su un calcolatore. Eseguendo poi operazioni
elementari sui numeri finiti, potremmo ottenere risultati non più rappresentabili esattamente
dal calcolatore.
Questo significa che quando si esegue un algoritmo su un calcolatore si ha, in generale, una
creazione e propagazione degli errori; infatti, il risultato prodotto dall’algoritmo differisce
dal risultato esatto, cioè da quel risultato che otterremmo invece lavorando con i numeri reali.
Il controllo degli errori introdotto dall’uso dei numeri finiti è molto importante al fine di
determinare l’attendibilità dei risultati ottenuti.
Per esempio:
• per un righello millimetrato la sensibilità è 1 mm;
• per una bilancia con scala graduata in grammi la sensibilità
è 1 grammo.
• una bilancia, che può pesare una massa di entità massima di 10 kg con una graduazione in
grammi, ha una precisione di:
1g
= 10−4
10.000 g
Nello studio degli algoritmi numerici si cerca di ridurre al massimo questo tipo di errore, sfor-
zandosi però di conservare affidabilità ed efficienza.
Il seguente schema mette in evidenza l’errore generato nel passaggio da un modello a un altro.
1
problema fisico
em uf e
2 ec 4
modello matematico modello computazionale
F(u,d) = 0 un
en 3 eu
modello numerico
Fn(un,dn) = 0
I numeri rappresentabili nel precedente modo su un determinato calcolatore sono detti nu-
meri di macchina; la rappresentazione dei numeri di macchina è detta rappresentazione in
virgola mobile o floating point.
La forma che prevede la mantissa con una sola cifra (≠ 0) prima della virgola è definita nor-
malizzata. I numeri in virgola mobile, di solito, sono normalizzati; l’esponente è aggiustato in
modo che il bit più significativo della mantissa sia 1 e, dato che sarà sempre 1, non è necessario
specificarlo.
Rappresentazione binaria:
1001,01001 = 1,00101001 ⋅ 23 (forma normalizzata)
Notazione IEEE
L’ampiezza dello spazio dedicato all’esponente e alla mantissa e le modalità della loro memo-
rizzazione variano da calcolatore a calcolatore e ne rappresentano una caratteristica fonda-
mentale.
Una configurazione molto diffusa è quella stabilita dallo standard dell’IEEE (Institute of
Electrical and Electronics Engineers).
La notazione IEEE 754 prevede una singola precisione a 32 bit e una doppia precisione a
64 bit; entrambe utilizzano la forma normalizzata e, in particolare:
• 1 bit per il segno;
• 8 o 11 bit per l’esponente;
• 23 o 52 bit per la mantissa.
s esponente mantissa
■ Il troncamento consiste semplicemente nel trascurare tutte le cifre decimali della mantis-
sa successive alla t-esima cifra consentita; consideriamo un numero reale da memorizzare
avente rappresentazione:
x = ±1, d1 d2 d3 ... dt dt+1 dt+2… ⋅ Bp
± p d1 d2 d3 ... dt
in cui un’eventuale modifica della cifra t-esima della mantissa dipende dalla cifra dt+1:
⎧⎪ d se dt+1 < B / 2
⎪
dt∗ = ⎨
t
⎪⎪ dt +1 se dt+1 ≥ B / 2
⎪⎩
La sua rappresentazione generica in memoria sarà:
± p d1 d2 d3 ... dt∗
1,99857 ⋅ 10−2
1,998 ⋅ 10−2
Come si può vedere, i risultati differiscono di un centesimo, nei due procedimenti. I numeri
tr(x) e arr(x) sono detti entrambi rappresentazioni in virgola mobile (floating point) del nu-
mero x. La funzione che associa al numero reale x il numero di macchina tr(x), oppure arr(x),
viene indicata genericamente con fl(x) (floating point del numero reale x).
In precedenza, abbiamo definito un errore in termini di differenza tra il valore reale e quello
arrotondato o troncato; di fatto, possiamo definire meglio il concetto di errore.
Se x è un numero reale e fl(x) è la sua rappresentazione di macchina, chiameremo:
Errore assoluto:
Ea = x − fl ( x )
Errore relativo (con x ≠ 0):
x − fl ( x )
Er =
x
4 Aritmetica finita
Precisione di macchina
Si definisce precisione di macchina o epsilon di macchina il valore:
ε = σ B 1−t
con t numero di cifre decimali; pertanto:
⎧⎪ B 1−t se fl (x)= tr(x)
⎪
ε= ⎪⎨ 1 1−t
⎪⎪ B se fl (x)= arr(x)
⎪⎩ 2
Nei calcolatori, sappiamo che la base di numerazione utilizzata è la base 2 e le cifre sono indi-
cate con 0 e 1, quindi la precisione di macchina è:
ε = σ 21−t
ε è un parametro che caratterizza ogni singola architettura di elaboratore.
La relazione che lega un numero reale x alla sua rappresentazione di macchina fl(x) è:
fl(x) = x (1 + u) con ⏐u⏐ ≤ ε
La conoscenza della precisione di macchina è essenziale per un controllo della propagazione
dell’errore nell’esecuzione dei vari algoritmi di calcolo numerico.
Il seguente algoritmo calcola il valore della precisione di macchina:
C++
#include <iostream>
using namespace std;
// algoritmo Precisione_Macchina
int main()
{
int i;
double e;
e = 1;
i = 0;
while(e+1 > 1)
{
e = e/2;
i++;
}
cout << "Numero di cifre della mantissa=" << i−1 << endl;
cout << "Precisione di macchina=" << 2*e;
}
L’algoritmo si ripete fino a quando la variabile e assume un valore talmente piccolo da essere
interpretato come nullo dalla macchina e termina fornendo in output i valori i − 1 e 2 * e, che
sono rispettivamente:
• il numero delle cifre decimali della mantissa;
• l’epsilon di macchina.
Per esempio, la doppia precisione dello standard IEEE fornisce il valore:
ε = 2 −52
Operazioni di macchina
I numeri di macchina non sono un insieme chiuso rispetto alle operazioni aritmetiche. In ge-
nerale:
Non è garantito che un’operazione aritmetica su due numeri di macchina fornisca come ri-
sultato un numero di macchina.
⊗ = (x ⋅ y) (1 + u) ⊕
/ = (x / y) (1 + u)
Indicando con ⊕ * una qualsiasi delle 4 operazioni di macchina e con * una delle 4 operazioni
aritmetiche, si dimostra che:
* y = tr (x * y)
x⊕
* y = arr(x * y)
x⊕
e questo in virtù della chiusura delle operazioni di macchina sull’insieme dei numeri di mac-
china.
In altre parole, un’operazione di macchina coincide con l’approssimazione floating del risulta-
to dell’operazione esatta:
fl(x * y) = x ⊕
*y
Per le operazioni di macchina non valgono alcune proprietà, cioè l’associatività dell’addizione
e della moltiplicazione e la distributività della moltiplicazione rispetto all’addizione.
OSSERVA COME SI FA
■ Vediamo un esempio in cui l’addizione non gode della proprietà associativa.
Sia B = 10 e t = 8, dati i numeri di macchina:
a = 0,23371258 ⋅ 10−4
b = 0,33678429 ⋅ 102
c = −0,33677811 ⋅ 102
1) (a ⊕ b) ⊕ c = 2) a ⊕ (b ⊕ c)
ORA TOCCA A TE
■ Verifica la proprietà associativa con i seguenti numeri:
a = 0,6791 ⋅ 103
b = 0,11111 ⋅ 10−2
c = 0,3295 ⋅ 102
5 Propagazione dell’errore
Una singola operazione tra numeri di macchina dà luogo a un errore relativo dell’ordine della
precisione di macchina; abbiamo visto anche nell’esempio precedente come una singola opera-
zione tra numeri di macchina dia luogo a un errore; quindi, se il risultato di un’operazione è il
dato di un’operazione successiva, l’errore sul dato si propagherà nel risultato finale.
La misura della propagazione dell’errore dipenderà da quanto l’operazione è sensibile alle per-
turbazioni sui dati.
■ Sensibilità dell’operazione somma. Consideriamo due numeri reali x e y e siano fl(x) e
fl(y) le loro rappresentazioni di macchina. Calcoliamo l’errore relativo che viene commesso
dall’elaboratore quando calcola x + y.
( fl (x)⊕ fl ( y ))−(x + y )
Er = ≤3max(|u x |,|u y |,|u|) con ⏐u x⏐,⏐uy⏐,⏐u⏐< ε
x+y
Sequenza di operazioni
L’algoritmo è una sequenza ordinata di operazioni elementari con le quali si ottiene la soluzio-
ne di un determinato problema; ogni operazione della sequenza verrà eseguita come operazio-
ne di macchina, dando quindi origine a due componenti di errore:
• approssimazione delle operazioni di macchina; C++
• propagazione dell’errore accumulato. #include <iostream>
La prima componente di errore in un algoritmo, dovuta alle ap- using namespace std;
prossimazioni delle operazioni di macchina, non supera l’unità di // ALGORITMO Somma
arrotondamento, mentre la seconda componente di errore, la più int main()
importante e “pericolosa”, è dovuta alla propagazione dell’errore {
accumulato fino al passo precedente. Essa dipende esclusivamen-
double Vet[50];
te dalla natura stabile o instabile dell’operazione che si compie al
int I,N = 50;
passo considerato. Un'operazione stabile mantiene costante l'errore
mentre l'operazione instabile lo aumenta notevolmente. double S;
N = 50;
Vediamo ora qual è l’errore da cui è affetta la somma “finita” (cioè
Carica_Vettore(Vet,N);
ottenuta in aritmetica finita) di n numeri finiti.
Siano x1, x2,... xn N numeri finiti da sommare. S = Vet[0];
L’algoritmo Somma è riportato a fianco; lasciamo a te, come eserci- for(I = 1;I < N;I++)
zio, l’implementazione della funzione Carica_Vettore (già esamina- S = S + Vet[I];
ta nei precedenti volumi). cout << "Somma=" << S;
}
Quindi, il risultato finale Sn differisce dal risultato teorico S; l’errore relativo è dato da:
S −S n ( x1 n+ x 2 (n−1)+...+ x n )
≤ ⋅ 1,01 ⋅ ε
S S
Tale formula mostra che, assegnati i numeri finiti x1, x2, ... xn
la maggiorazione dell’errore relativo della loro somma finita è minima se si sommano que-
sti numeri in modo che i loro valori assoluti siano in ordine crescente
cioè:
⏐ x1⏐≤⏐ x2⏐≤ ... ≤⏐xn
Come applicazione della teoria svolta, supponiamo di voler calcolare il valore del polinomio:
p(x) = anxn + an−1xn−1 + … + a1x + a0
Il calcolo del valore del polinomio p(x) in un dato punto x0 può essere fatto in due modi:
• attraverso lo schema naturale (cioè, calcolando p(x_0));
• attraverso l’algoritmo di Horner.
Il metodo di Horner
Il metodo di Horner si basa sul fatto che il polinomio p(x) può essere scritto nella seguente
forma:
p(x) = (…((an) x + an−1)x + … + a1)x + a0
C++
// ALGORITMO Polinomio Naturale
#include <iostream>
using namespace std;
// prototipi
void Carica_Coefficienti(double Vet[], int);
int Grado_Polinomio();
double Leggi_x();
double Naturale(int, double p[], double);
int main()
{
double Vet[100], X0;
int N;
N = Grado_Polinomio() + 1;
X0 = Leggi_x();
Carica_Coefficienti(Vet, N);
cout << "Valore del polinomio = " << Naturale(N,Vet,X0);
system("pause");
}
void Carica_Coefficienti(double vettore[], int dim)
{
cout << "Inserisci i coefficienti da a0 ... an " << endl;
for (int i = 0; i < dim; i++)
cin >> vettore[i];
}
int Grado_Polinomio()
{
int grado;
cout << "Inserisci il grado del polinomio ";
cin >> grado;
return grado;
}
double Leggi_x()
{
int x;
cout << "Inserisci il valore di x ";
cin >> x;
return x;
}
double Naturale(int n, double p[], double x)
{
double s,po;
s = 1;
po = p[0];
for (int i = 1; i < n; i++)
{
s = s*x;
po = po+p[i]*s;
}
return po;
}
C++
// ALGORITMO Horner
#include <iostream>
using namespace std;
// prototipi
void Carica_Coefficienti(double Vet[], int);
int Grado_Polinomio();
double Leggi_x();
OSSERVA COME SI FA
■ Vogliamo calcolare le radici di un’equazione del tipo: ax2 + bx + c = 0.
Le soluzioni sono:
−b − b2 − 4ac −b + b2 − 4ac
x1 = x2 =
2a 2a
La formula risolutiva fornisce una precisa successione di passi, i quali, partendo dai coefficienti a, b, c, conducono
alle radici x1 e x2.
In matematica pura si suppone che a, b e c siano numeri reali e si eseguano operazioni aritmetiche esatte, inclusa
l’estrazione della radice. Come abbiamo visto, però, un calcolatore non è in grado di svolgere queste operazioni e
nemmeno di memorizzare i numeri reali a, b, c in modo esatto; deve sostituire i numeri reali con numeri in virgola
mobile e le operazioni aritmetiche esatte con le operazioni floating point.
Il risultato ottenuto in aritmetica floating point è molto diverso. Ciò è dovuto in particolare all’ultimo passaggio, dove
calcoliamo la differenza fra numeri molto simili in modulo. Questo produce il fenomeno della “cancellazione di cifre
significative”, che è un’operazione molto pericolosa e, se possibile, da evitare.
Nel caso di somme, invece, il problema è più marginale; verifichiamo sul valore di x2, in aritmetica floating point:
−b + b2 − 4ac
x2 = = 0,6430 ⋅101
2a
RIPASSIAMO INSIEME A1
I NUMERI NEL COMPUTER
AUDIO
RIPASSIAMO INSIEME A1
MAPPA
MODIFICABILE
si rappresentano come
NUMERI
APPROSSIMATI
troncamento arrotondamento
comportano un
errore
computazionale
11. •• Completa la seguente tabella come da modello riportato nell’esercizio 8 e calcola l’errore assoluto e
relativo che si commette effettuando la somma dei numeri arrotondati alla terza posizione decimale.
12. •• Completa la seguente tabella come da modello riportato nell’esercizio 8 e calcola l’errore assoluto e
relativo che si commette effettuando la somma dei numeri troncati alla quinta posizione decimale.
13. •• Completa la seguente tabella come da modello riportato nell’esercizio 8 e calcola l’errore assoluto e
relativo che si commette effettuando la somma dei numeri arrotondati alla quarta posizione decimale.
14. •• Completa la seguente tabella come da modello riportato nell’esercizio 8 e calcola l’errore assoluto e
relativo che si commette effettuando la somma dei numeri troncati alla seconda posizione decimale.
15. •• Calcola l’errore assoluto e relativo che si commette troncando e arrotondando alla sesta cifra decimale
i seguenti numeri.
determina la loro somma in aritmetica in base 10 con 4 cifre. Aiutati completando il seguente esercizio:
x1 = 0,9763 ⋅ 10−5 = 0,009763 ⋅ 10−3
x2 = 0,9895 ⋅ 10−3 = 0,9895 ⋅ 10−3
x1 + x2 = 0,999263 ⋅ 10−3
17. •• Determina l’errore assoluto e relativo che si commette troncando e arrotondando alla terza cifra
decimale i seguenti numeri.
Ea .................. troncato
Er .................. troncato
Ea .................. arrotondato
Er .................. arrotondato
ESERCIZI COMMENTATI
Le basi del linguaggio C++
Programmazione in C++
IMPARERAI…
1 Matrici e vettori
Alcuni algoritmi per il calcolo numerico che presenteremo in que- n colonne
aij j cresce
sta unità prevedono la conoscenza di elementi di algebra lineare
quali matrici, vettori e loro proprietà. ⎡ a
⎢ 11 a12 ! a1n ⎥⎤
⎢ a ! a2n ⎥⎥
i cresce
m righe
Una matrice A è una tabella di numeri reali (o complessi) con m ⎢ 21 a22
⎢ ⎥
righe e n colonne, generalmente denotata con A = (aij ) in cui i e ⎢ " " # " ⎥
j rappresentano rispettivamente il numero di riga e di colonna. ⎢ a ! amn ⎥⎥
⎢⎣ m1 am 2
⎦
matrice m × n
Una matrice di numeri reali viene indicata con A ∈ !m×n con m ri-
ghe e n colonne.
■ Una matrice O ∈ !m×n con tutti gli elementi uguali a zero si dice
matrice nulla.
In moltissimi ambiti scientifici
■ Una matrice A ∈ !n×n con lo stesso numero di righe e di colonne ci sono fenomeni e grandezze
che possono essere descritti
si dice matrice quadrata di ordine n.
dalle matrici. Basti pensare
■ Data una matrice A ∈ !m×n si dice matrice trasposta e si indica a un foglio elettronico dove
è possibile tabulare e studiare
con A T la matrice B = A T con elementi bij = aji (vengono scambia-
dati di diversa natura. Un altro
te le righe con le colonne): esempio è la modifica delle
⎡ 1 5 9 ⎤ immagini fatta con specifici
⎡ 1 2 3 4 ⎤ ⎢ ⎥ software che permettono
⎢ ⎥ ⎢ 2 6 10 ⎥
A=⎢ 5 6 7 8 ⎥ A =⎢
T
⎥ di agire sui singoli pixel in
⎢ ⎥ ⎢ 3 7 11 ⎥ maniera semplice e intuitiva
⎢⎣ 9 10 11 12 ⎥⎦ ⎢ ⎥ ma, scavando più a fondo, ci si
⎢⎣ 4 8 12 ⎥⎦ accorge che in realtà si stanno
modificando delle matrici che
rappresentano i colori rosso,
■ Una matrice quadrata A ∈ !n×n si dice simmetrica se A = A T, verde e blu.
in pratica se riga e colonna i-esima contengono gli stessi valori
nello stesso ordine.
■ Una matrice quadrata A ∈ !n×n si dice triangolare superiore se tutti gli elementi al di
sotto della diagonale principale sono nulli; si dice invece triangolare inferiore se tutti gli
elementi al di sopra della diagonale principale sono nulli.
⎡ a1 0 0 É 0 ⎤⎥
⎢
⎢ 0 a2 0 É 0 ⎥⎥
⎢ ⎡ ⎤
A = ⎢⎢ ⎥ ⎢ 1 0 0 0 ⎥
0 0 a3 É 0 ⎥ ⎢ 0 1 0 0 ⎥
⎢ ⎥ I4 = ⎢ ⎥
⎢ É É É É É ⎥ ⎢ 0 0 1 0 ⎥
⎢ 0 0 0 É an ⎥⎥ ⎢ ⎥
⎢⎣ ⎦ ⎢⎣ 0 0 0 1 ⎥⎦
Matrice diagonale Identità di ordine 4
aij = 0 per i ≠ j aij = 0 per i ≠ j ∨ aij = 1 per i = j
Quando si indica una componente di un vettore riga si usa omettere l’indice di riga. Ana-
logamente, si fa con i vettori colonna. Per esempio, a12 è la seconda componente del vettore
a, ma si scrive a2 (che nell'esempio precedente corrisponde al 3). In modo analogo, dato un
vettore colonna, per esempio b, volendo indicare la terza componente, che sarebbe b31, si
omette l’indice di colonna, cioè si scrive b3 (che nell'esempio precedente corrisponde al 5).
Sottomatrici
Una sottomatrice di una matrice A è qualsiasi matrice che si ottiene eliminando un certo
numero di righe o di colonne da A.
■ Una sottomatrice si dice principale quando ha come elementi diagonali gli stessi elemen-
ti diagonali di A:
⎡ a a23 a24 ⎤⎥
⎢ 22 ⎡ a a34 ⎤⎥ ⎡ a a14 ⎤⎥
A1 = ⎢⎢ a32 a34 ⎥⎥ A2 = ⎢⎢ = ⎢ 11
33
a33 A
⎢ ⎥ ⎢⎣ 43
a a44 ⎥⎥ 3 ⎢⎢ a41 a44 ⎥⎥
⎢⎣ a42 a43 a44 ⎥ ⎦ ⎣ ⎦
⎦
■ Si dice invece sottomatrice principale di testa di A ogni sottomatrice principale i cui ele-
menti diagonali coincidono in posizione con gli elementi diagonali di A:
⎡ a a12 a13 ⎤⎥
⎢ 11 ⎡ a a12 ⎤⎥
A1 = ⎢⎢ a21 a22 a23 ⎥⎥ A2 = ⎢⎢ 11 A =[ a11 ]
⎢ ⎥ ⎢⎣ a21 a22 ⎥⎥ 3
⎢⎣ a31 a32 a33 ⎥ ⎦
⎦
2 Operazioni su matrici
Possiamo applicare alle matrici le operazioni di somma, differenza e prodotto. Le matrici
godono inoltre di varie proprietà, tra cui la proprietà associativa e quella commutativa.
Somma e differenza
Le operazioni di somma e differenza sono così definite:
C = A + B in cui cij = aij + bij
C = A − B in cui cij = aij − bij
OSSERVA COME SI FA
1. Consideriamo due matrici A ∈ !m×n e B ∈ !m×n aventi lo stesso numero m di righe e n di colonne:
⎡ ⎤ ⎡ 4 1 1 1 ⎤
⎢ 1 1 1 3 ⎥ ⎢ ⎥
A= 2 1 2 2 ⎥
⎢ B=⎢ 1 0 0 3 ⎥
⎢ ⎥ ⎢ ⎥
⎢ 1 2 0 2 ⎥ ⎢⎣ 1 2 1 2 ⎥⎦
⎣ ⎦
Calcoliamo la somma e la differenza delle matrici A e B.
⎡ 5 2 2 4 ⎤ ⎡ 2 ⎤⎥
⎢ ⎥ ⎢ −3 0 0
A+B = ⎢ 3 1 2 5 ⎥ A − B = 1 1 2 −1 ⎥
⎢
⎢ ⎥ ⎢ ⎥
⎢ 2 4 1 4 ⎥ ⎢ 0 0 −1 0 ⎥
⎣ ⎦ ⎣ ⎦
ORA TOCCA A TE
■ Calcola la somma e la differenza delle seguenti matrici:
⎡ 4 −2 5 6 ⎤ ⎡ 4 ⎤⎥
⎢ ⎥ ⎢ 1 2 3
A = ⎢ −1 0 3 −3 ⎥ B = ⎢ −1 −2 −3 −4 ⎥
⎢ ⎥ ⎢ ⎥
⎢ 5 2 4 0 ⎥⎦ ⎢ 0 4 6 7 ⎥⎦
⎣ ⎣
Prodotto
Consideriamo due matrici A ∈ !m×n e B ∈ !n×p in cui il numero di colonne della prima è uguale
al numero di righe della seconda; in questo caso è possibile realizzare il prodotto fra le due
matrici:
C = AB ∈ !m×p
Il risultato del prodotto sarà una matrice avente il numero di righe di A e il numero di colonne
di B ed è ottenuto nel seguente modo:
n
cij = ∑ aik bkj i =1Ém j =1É p
k=1
1 3 2 1 2 9
2 0 1 0 2 =
1 5 3 5 0
in cui:
9 = −1 ⋅ 1 + 3 ⋅ 0 + (−2) ⋅ (−5)
■ Il prodotto fra matrici triangolari superiori (o inferiori) è ancora una matrice triangolare
superiore (o inferiore).
⎡ 1 0 0 ⎤ ⎡ 4 0 0 ⎤ ⎡ 4 0 0 ⎤
⎢ ⎥ ⎢ ⎥ ⎢ ⎥
⎢ 2 1 0 ⎥ ⋅ ⎢ 1 0 0 ⎥=⎢ 9 0 0 ⎥
⎢ ⎥ ⎢ ⎥ ⎢ ⎥
⎢⎣ 1 2 0 ⎥⎦ ⎢⎣ 1 2 1 ⎥⎦ ⎢⎣ 6 0 0 ⎥⎦
ORA TOCCA A TE
■ Data la matrice
⎡ ⎤
⎢ 3 2 1 ⎥
C= 0 2 4 ⎥
⎢
⎢ ⎥
⎢ −2 1 −3 ⎥
⎣ ⎦
A una matrice quadrata si fa corrispondere un numero che viene detto determinante della
matrice. Il determinante di una matrice viene indicato con il simbolo det(A), oppure con il
simbolo ⏐A⏐.
Per calcolare il determinante possiamo usare diversi metodi. Qui analizzeremo la regola di
Laplace e la regola di Sarrus.
Regola di Laplace
Vediamo di seguito il determinante di ordine 1, 2 e 3.
A ∈ !1×1 det(A) =⏐a11⏐= a11
a11 a12
A ∈ !2×2 det(A) = = a11a22 −a21a12
a21 a22
Il metodo appena descritto per il calcolo del determinante è noto come regola di Laplace, che
possiamo formalizzare nel seguente modo:
⎧⎪a11 se n =1
⎪⎪
det ( A ) = ⎨ n
⎪⎪∑ (−1)i+ j aij det(Aij ) se n >1
⎪⎪⎩ j=1
in cui Aij è la sottomatrice di ordine n−1 ottenuta eliminando da A la i-esima riga e la j-esima
colonna, (−1)i+j invece rappresenta l’alternanza del segno nelle somme algebriche (positivo, ne-
gativo, positivo, negativo…).
OSSERVA COME SI FA
■ Riportiamo l’algoritmo per il calcolo del determinante di una matrice in C++; notate l’utilizzo della ricorsione
all’interno della funzione det.
C++
// determinante di una matrice
#include <iostream>
using namespace std;
#define MAX 25
// Prototipi
int det(int m[MAX][MAX], int);
void carica_matrice(int m[MAX][MAX], int);
int main()
{
int m[MAX][MAX], c;
cout << "Ordine della matrice: ";
cin >> c;
carica_matrice(m, c);
// Determinante
cout << "Determinante= " << det(m, c) << endl << endl;
system("pause");
return 0;
}
void carica_matrice(int m[MAX][MAX], int c)
{
// Genera matrice
cout << "inserisci gli elementi della matrice" << endl;
for (int i = 0; i < c; i++)
{
cout << "Riga " << i << ": ";
for (int j = 0; j < c; j++) cin >> m[i][j];
}
}
int det(int m[MAX][MAX], int card)
{
int determinante = 0;
//Cardinalità uno
if (card == 1) determinante = m[0][0];
//Cardinalità due
if (card == 2)
determinante = m[1][1] * m[0][0] − m[0][1] * m[1][0];
//Cardinalità > 2
else {
for (int row = 0; row < card; row++)
{
int sub_m[MAX][MAX];
//Sottomatrice di ordine card − 1
for (int i = 0; i < card − 1; i++)
{
for (int j = 0; j < card − 1; j++)
{
int sub_row = (i < row ? i : i + 1);
int sub_col = j + 1;
sub_m[i][j] = m[sub_row][sub_col];
}
}
//Il segno della sottomatrice: + per pari, − per dispari
if (row % 2 == 0)
determinante += m[row][0] * det(sub_m, card − 1);
else
determinante −= m[row][0] * det(sub_m, card − 1);
}
}
return determinante;
}
Regola di Sarrus
Un modo alternativo per il calcolo del determinante di una matrice di terzo grado è dato dalla
regola di Sarrus, dove accanto alla matrice quadrata A, si scrivono le prime due colonne, otte-
nendo così tre diagonali “principali” e tre diagonali “secondarie”.
Il numero che corrisponde al determinante è dato dalla differenza tra la somma dei pro-
dotti dei termini di ciascuna diagonale principale e la somma dei prodotti dei termini di
ciascuna diagonale secondaria.
ORA TOCCA A TE
■ Realizza l'algoritmo in C++ per il calcolo del determinante di una matrice di ordine 3 utilizzando la regola
di Sarrus.
■ det(AT) = det(A)
⎡ 1 2 1 ⎤
⎢ ⎥
A =⎢ 2 1 2 ⎥
T
det( AT ) = 9 = det( A)
⎢ ⎥
⎢⎣ 3 2 0 ⎥⎦
⎡ 4 0 0 ⎤
⎢ ⎥
A=⎢ 1 2 0 ⎥ det( A) = 4 ⋅2⋅3 = 24
⎢ ⎥
⎢⎣ 1 2 3 ⎥⎦
■ Il determinante di una matrice è nullo se gli elementi di una riga o di una colonna sono
tutti uguali a zero.
■ Il determinante di una matrice cambia di segno se si scambiano due righe o due colonne.
Minori di matrice
Data una matrice A ∈ !m×n si dice minore di ordine k il determinante di una sottomatrice
quadrata di ordine k, mentre si dice minore principale di testa il determinante di una sotto-
matrice principale di testa.
⎡ 1 2 1 ⎤ ⎡ ⎤ ⎡ 1 0 0 ⎤
⎢ ⎥ −1 ⎢ −1 −1 3 ⎥ ⎢ ⎥
A=⎢ 1 1 2 ⎥ A =⎢ 1 0 −1 ⎥ AA = ⎢ 0 1 0 ⎥
−1
⎢ ⎥ ⎢ ⎥ ⎢ ⎥
⎢⎣ 1 1 1 ⎥⎦ ⎢⎣ 0 1 −1 ⎥⎦ ⎢⎣ 0 0 1 ⎥⎦
■ (AB)−1 = B−1 A −1
6 Norme
Abbiamo definito in precedenza il concetto di vettore:
■ il vettore riga si può rappresentare come
x ∈ !1×n x = [x1 x2 ... xn]
Di fatto,
Pertanto, è possibile effettuare il prodotto scalare di due vettori x, y ∈ !n definito nel seguente
modo:
n
xy T = ∑ x i y i
k=1
Ricordiamo che, seguendo la logica del prodotto matriciale, è possibile effettuare il prodotto
fra due matrici se il numero di colonne della prima corrisponde al numero di righe della secon-
da; per questo motivo dobbiamo considerare yT e non y.
Esempio: x = [1 2 3 4] y = [9 7 5 3] xyT = 50
Il prodotto scalare tra due vettori, solitamente, viene indicato con 〈x, y〉 ∈ ! e rappresenta
quindi un valore numerico reale.
Norme vettoriali
Una norma vettoriale rappresenta una particolare applicazione definita come:
⏐⏐⋅⏐⏐: !n → ! (dato un vettore restituisce un valore reale)
OSSERVA COME SI FA
■ Riportiamo l'algoritmo in C++ per il calcolo della norma euclidea.
C++
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
double s,normae,vet[10];
int n = 10;
s = 0;
Carica_Vettore(vet,n);
for (int i = 0; i < n; i++)
s += vet[i] * vet[i];
normae = sqrt(s);
cout << "Norma euclidea= " << normae;
system("pause");
return 0;
}
ORA TOCCA A TE
■ Completa il precedente programma in C++ con il calcolo della norma1 e della norma infinito. Realizza una
funzione per ogni norma da calcolare, inoltre implementa la funzione per il caricamento del vettore.
Norme matriciali
Il concetto di norma può essere esteso anche alle matrici, quindi
A partire dalle norme vettoriali, è possibile costruire alcune norme matriciali, definite appun-
to norme indotte:
■ Norma1: ⏐⏐A⏐⏐1 = maxj=1,...,n Σi=1
m
⏐aij⏐ (il massimo valore delle somme sulle colonne);
■ Norma2 o Norma euclidea: ⏐⏐A⏐⏐2 = ρ( AT A ) (la radice quadrata del raggio spettrale del
prodotto di AT per A);
■ Norma infinito: ⏐⏐A⏐⏐∞ = maxj=1,...,m Σnj=1⏐aij⏐ (il massimo valore delle somme sulle righe).
OSSERVA COME SI FA
■ Proponiamo l'algoritmo in C++ per il calcolo della norma1 e norma infinito:
C++
#include <iostream>
#include <math.h>
#define MAX 25
using namespace std;
void carica_matrice(int m[MAX][MAX], int);
int main()
{
int m[MAX][MAX], c, riga,col,norma1 = 0,normainf = 0;
cout << "Ordine della matrice: ";
cin >> c;
carica_matrice(m, c);
// calcolo della norma infinito
for (int i = 0; i < c; i++)
{
riga = 0;
for (int j = 0; j < c; j++)
riga + = abs(m[i][j]);
if (normainf < riga) normainf = riga;
}
//calcolo della norma 1
for (int i = 0; i < c; i++)
{
col = 0;
for (int j = 0; j < c; j++)
col + = abs(m[j][i]);
if (norma1 < col) norma1 = col;
}
cout << "norma1= " << norma1 << endl;
cout << "norma infinito= " << normainf << endl;
system("pause");
return 0;
}
Una norma non indotta, invece, è quella di Frobenius, che è pari alla radice quadrata della
somma di ogni elemento della matrice al quadrato:
n m
A fro
= ∑ ∑a
i=1 j=1
ij
2
Esempio:
⎡ 4 2 1 ⎤
⎢ ⎥
A=⎢ 3 1 2 ⎥ A 1 =9 A =7 A = 7,4833
⎢ ⎥ ∞ fro
⎢⎣ 2 4 1 ⎥⎦
ORA TOCCA A TE
■ Realizza il programma in C++ che implementi, attraverso funzioni differenti, il calcolo della norma1, norma
infinito e norma di Frobenius.
Se una matrice è simmetrica (A = AT) allora⏐⏐A⏐⏐1 =⏐⏐A⏐⏐∞, ciò è abbastanza evidente per il
fatto che righe e colonne risultano uguali.
OSSERVA COME SI FA
■ Data la matrice A dell’esempio precedente e il vettore x = [1 3 2], verifichiamo la prima condizione:
⏐⏐AxT⏐⏐1 = 38 ⏐⏐A⏐⏐1⏐⏐xT⏐⏐1 = 54
⏐⏐AxT⏐⏐∞ = 16 ⏐⏐A⏐⏐∞⏐⏐xT⏐⏐∞ = 21
RIPASSIAMO INSIEME A2
ALGEBRA LINEARE E ALGORITMI IN C++ AUDIO
RIPASSIAMO INSIEME A2
MAPPA
MODIFICABILE
MATRICI
sono
possono essere
nulle
quadrate
vettori
Le due matrici hanno lo stesso numero di righe e di colonne, pertanto è possibile eseguire la somma.
⎡ 3+2 2+4 4+5 1+0 6+ 3 ⎤ ⎡ 5 6 9 1 9 ⎤
⎢ ⎥ ⎢ ⎥
A + B = ⎢⎢ 5 + 4 3 + 1 4 + 6 2 + 7 1 + 0 ⎥⎥ = ⎢⎢ 9 4 10 9 1 ⎥⎥
⎢ 7 + 1 8 + 3 3 + 6 4 + 4 2 + 5 ⎥ ⎢ 8 11 9 8 7 ⎥
⎢⎣ ⎥⎦ ⎢⎣ ⎥⎦
Proprietà commutativa
Verifichiamo la validità della proprietà commutativa cioè A + B = B + A. Utilizziamo le matrici definite sopra, quindi
calcoliamo B + A e verifichiamo che il risultato sia uguale al precedente.
⎡ 2+2 4+2 5+4 0+1 3+6 ⎤ ⎡ 5 6 9 1 9 ⎤
⎢ ⎥ ⎢ ⎥
B + A = ⎢⎢ 4 + 5 1 + 3 6 + 4 7 + 2 0 + 1 ⎥⎥ = ⎢⎢ 9 4 10 9 1 ⎥⎥
⎢ 1 + 7 3 + 8 6 + 3 4 + 4 5 + 2 ⎥ ⎢ 8 11 9 8 7 ⎥
⎢⎣ ⎥⎦ ⎢⎣ ⎥⎦
Come potete vedere confrontando i risultati A + B è uguale a B + A, pertanto la proprietà commutativa è verificata.
Proprietà associativa
Siano A, B, C ∈ !3×4 tre matrici rettangolari così definite
⎡ ⎤ ⎡ ⎤ ⎡ 1 2 2 1 ⎤
⎢ 1 0 4 2 ⎥ ⎢ 2 3 0 1 ⎥ ⎢ ⎥
A = ⎢⎢ 3 1 0 3 ⎥⎥ B = ⎢⎢ 2 1 0 4 ⎥⎥ C = ⎢⎢ 1 0 2 3 ⎥⎥
⎢ 2 1 1 2 ⎥ ⎢ 1 5 2 1 ⎥ ⎢ 3 4 2 1 ⎥
⎢⎣ ⎥⎦ ⎢⎣ ⎥⎦ ⎢⎣ ⎥⎦
⎡ 2+1 3 + 0 0 + 4 1 + 2 ⎤⎥ ⎡⎢ 3 3 4 3 ⎥⎤
⎢
A + B = ⎢⎢ 2 + 3 1 + 1 0 + 0 4 + 3 ⎥⎥ = ⎢⎢ 5 2 0 7 ⎥⎥
⎢ 1+2 5 + 1 2 + 1 1 + 2 ⎥⎥ ⎢⎢ 3 6 3 3 ⎥⎥
⎢⎣ ⎦ ⎣ ⎦
⎡ 3+1 3 + 2 4 + 2 3 + 1 ⎤⎥ ⎡⎢ 4 5 6 4 ⎤⎥
⎢
(A + B) + C = ⎢⎢ 5 + 1 2 + 0 0 + 2 7 + 3 ⎥⎥ = ⎢⎢ 6 2 2 10 ⎥⎥
⎢ 3+ 3 6 + 4 3 + 2 3 + 1 ⎥⎥ ⎢⎢ 6 10 5 4 ⎥⎥
⎢⎣ ⎦ ⎣ ⎦
Svolgiamo il prodotto tra A e B (possiamo farlo perché il numero di colonne di A è uguale al numero di righe di B).
Alla fine del procedimento troveremo una matrice C (2 × 4). Allora
⎡ 2 3 ⎤ ⎡ ⎤
⎢ ⎥ ⎡ 1 2 3 ⎤ ⎢ 14 19 24 ⎥
⎢ ⎥
C = A ⋅B = ⎢ 4 5 ⎥ ⎢⎢ ⎥ ⎢ ⎥
⎥ = ⎢ 24 33 42 ⎥
⎢ 1 6 ⎥ ⎣ 4 5 6 ⎦ ⎢ 25 32 39 ⎥
⎢⎣ ⎥⎦ ⎢⎣ ⎥⎦
Proprietà associativa
Verifichiamo la validità della proprietà associativa anche per il prodotto, cioè A ⋅ (B ⋅ C) = (A ⋅ B) ⋅ C
Siano A, B, C ∈ !3×3 tre matrici quadrate così definite
⎡ ⎤ ⎡ 2 1 1 ⎤ ⎡ ⎤
⎢ 1 0 1 ⎥ ⎢ ⎥ ⎢ 1 1 3 ⎥
⎢ ⎥
A= ⎢ 2 2 1 ⎥ B = ⎢⎢ 1 0 0 ⎥⎥ C = ⎢ 0 2 1 ⎥⎥
⎢
⎢ 1 6 0 ⎥ ⎢ 0 1 4 ⎥ ⎢ 1 2 1 ⎥
⎢⎣ ⎦⎥ ⎢⎣ ⎥⎦ ⎢⎣ ⎦⎥
Cominciamo calcolando B ⋅ C
⎡ ⎤
⎢ 3 6 8 ⎥
⎢
B ⋅C = ⎢ 1 1 3 ⎥⎥
⎢ 4 10 5 ⎥
⎢⎣ ⎥⎦
Poi
⎡ 7 16 13 ⎤
⎢ ⎥
A ⋅(B ⋅C) = ⎢⎢ 12 24 27 ⎥⎥
⎢ 9 12 26 ⎥
⎢⎣ ⎥⎦
Allora A ⋅ B sarà
⎡ ⎤
⎢ 2 0 0 ⎥
A ⋅B = ⎢ 5 3 0 ⎥⎥
⎢
⎢ 7 9 6 ⎥
⎢⎣ ⎦⎥
Quindi la matrice ottenuta è ancora triangolare inferiore. Possiamo dimostrare che il prodotto di due matrici triangolari
superiori è ancora triangolare superiore. Per esempio, possiamo considerare AT e BT e calcolarne il prodotto.
Svolgiamo insieme il primo degli esercizi proposti Adesso possiamo determinare BT e AT e calcolarne
il prodotto:
Verifichiamo che (AB)T = BTAT considerando le matrici
⎡ 1 4 ⎤
⎡ 2 3 ⎤ ⎢ ⎥ ⎡ 2 4 1 ⎤
⎢ ⎥ ⎡ 1 2 3 ⎤ B = ⎢⎢ 2 5 ⎥⎥
T
AT = ⎢ ⎥
A = ⎢⎢ 4 5 ⎥⎥ B = ⎢⎢ ⎥
⎥
⎢ 3 5 6 ⎥
⎢ 3 6 ⎥ ⎣ ⎦
⎢ 1 6 ⎥ ⎣ 4 5 6 ⎦ ⎣ ⎦
⎢⎣ ⎥⎦
Abbiamo già calcolato AB nell’esercizio 4 svolto: Allora abbiamo
⎡ 14 19 24 ⎤⎥ ⎡ 14 24 25 ⎤
⎢ ⎢ ⎥
⎢ 24 33 42 ⎥⎥ BT AT = ⎢⎢ 19 33 32 ⎥⎥
⎢
⎢ 25 32 39 ⎥⎥ ⎢ 24 42 39 ⎥
⎢⎣ ⎦ ⎢⎣ ⎥⎦
allora è facile ricavare (AB)T Quindi abbiamo verificato che (AB)T = BTAT.
⎡ 14 24 25 ⎤
⎢ ⎥
⎢ 19 33 32 ⎥
⎢ ⎥
⎢ 24 42 39 ⎥
⎢⎣ ⎥⎦
Premessa
Analizziamo come calcolare gli autovalori e gli autovettori di una matrice di ordine 2.
Sia A la seguente matrice
⎡ 1 2 ⎤
A= ⎢ ⎥
⎢ 3 2 ⎥
⎣ ⎦
allora possiamo considerare
⎡ 1 2 ⎤ ⎡ ⎤ ⎡ ⎤
A −λI = ⎢ ⎥ −λ ⎢ 1 0 ⎥ = ⎢ 1 −λ 2 ⎥
⎢ 3 2 ⎥ ⎢ 0 1 ⎥ ⎢ 3 2 −λ ⎥
⎣ ⎦ ⎣ ⎦ ⎣ ⎦
A questo punto si calcola il det(A − λI) e si risolve l’equazione det(A − λI) = 0 per trovare i valori degli autovalori
relativi alla matrice A.
Quindi:
det(A −λI) = (1 −λ)(2 −λ) − 6 = 2 − 2λ −λ + λ2 − 6 = λ2 − 3λ − 4
Pertanto scrivendo l’equazione e risolvendo
det(A −λI) = 0 ⇔ (λ − 4)(λ + 1) = 0 ⇔ λ1 = 4 ∧ λ2 = −1
abbiamo trovato due autovalori per la matrice di ordine 2.
NOTA: vi è un legame tra il numero di autovalori e l'ordine della matrice, infatti il numero delle soluzioni
dell’equazione det(A − λI) = 0, contate le molteplicità, è uguale all’ordine della matrice A.
Una volta individuati gli autovalori, passiamo a determinare gli autovettori. In questo calcolo troveremo
una famiglia di vettori che variano per un parametro. Pertanto, per sceglierne uno, daremo un valore al parametro
e calcoleremo un solo autovettore.
Cominciamo determinando l’autovettore v1 relativo all’autovalore λ1 = 4. Dobbiamo risolvere il sistema
⎡ x ⎤
(A − λ1I)v1 = 0 dove v1 = ⎢ ⎥ è l’autovettore cercato.
⎢ y ⎥
⎢⎣ ⎥⎦
Allora
⎡ 1−4 2 ⎤⎥ ⎢⎡ x ⎥⎤ ⎡⎢ 0 ⎤⎥ ⎡ ⎤ ⎡ ⎤ ⎡ ⎤
⎢ −3 2 ⎥ ⎢ x ⎥ = ⎢ 0 ⎥
(A − 4I)v 1 = 0 ⇔ ⎢ ⎢ ⎥ = ⎢ ⇔ ⎢ ⎥
⎢ 3
⎣ 2 − 4 ⎥⎦ ⎢⎣ y ⎥⎦ ⎣ 0 ⎥⎦ ⎢ 3 −2 ⎥ y
⎣ ⎦ ⎢⎣
⎢
⎥⎦ ⎣ 0 ⎦
⎥
Regola di Laplace
Per comodità la calcoliamo rispetto l’ultima riga, allora avremo
⎡ 1 3 ⎤ ⎡ 2 3 ⎤ ⎡ 2 1 ⎤
1 ⋅ ⎢⎢ ⎥ −0 ⋅
⎥
⎢ ⎥+0 ⋅ ⎢ ⎥
⎢ 4 5 ⎥ ⎢ 4 0 ⎥
⎣ 0 5 ⎦ ⎣ ⎦ ⎣ ⎦
Quindi
det(A) = 1 ⋅ (1 ⋅ 5) − (3 ⋅ 0) − 0 ⋅ (2 ⋅ 5 − 3 ⋅ 4) + 0 ⋅ (2 ⋅ 0 − 1 ⋅ 4) = 5 − 0 + 0 = 5.
Regola di Sarrus
Scriviamo la matrice come segue e calcoliamo i prodotti in diagonale
⎡ 2 1 3 2 1 ⎤
⎢ ⎥
⎢ 4 0 5 4 0 ⎥
⎢ ⎥
⎢ 1 0 0 1 0 ⎥
⎢⎣ ⎥⎦
Allora troveremo
(1 ⋅ 0 ⋅ 0) + (1 ⋅ 5 ⋅ 1) + (3 ⋅ 4 ⋅ 0) − (3 ⋅ 0 ⋅ 1) − (2 ⋅ 5 ⋅ 0) − (1 ⋅ 4 ⋅ 0) = 0 + 5 + 0 − 0 − 0 − 0 = 5
Quindi abbiamo ottenuto lo stesso risultato.
v = ⎢⎡ 1 2 0 4 ⎤⎥
⎣ ⎦
v 1 = 1 + 2 + 0 + 4 =7
13. •• Determina la norma1, la norma infinito e la norma di Frobenius delle seguenti matrici.
N. Matrice
1234
1 4321
1010
010
2
321
12345
3
43210
41324
4 41240
13142
12441240
5
13511422
0 0 1 1
1 1 0 0
6
1 2 3 4
4 3 2 1
5 6
1 1
1 2
7
3 4
4 3
0 1
Svolgiamo insieme il primo degli esercizi proposti Come prima, calcoliamo la somma di tutte le righe e poi
individuiamo il massimo.
Svolgiamo l’esercizio per la prima matrice:
Prima riga
⎡ ⎤
⎢ 1 2 3 4 ⎥ 1 + 2 + 3 + 4 = 10
A = ⎢⎢ 4 3 2 1 ⎥⎥
⎢ 1 0 1 0 ⎥ Seconda riga
⎢⎣ ⎥⎦
4 + 3 + 2 + 1 = 10
Cominciamo dalla norma1 che è il massimo valore delle
somme sulle colonne in valore assoluto. Per iniziare Terza riga
calcoliamo la somma di tutte le colonne e poi 1 + 0 + 1 + 0 =2
determiniamo il massimo.
Pertanto il massimo è 10, quindi A ∞ = 10.
Prima colonna
1+ 4 + 1 =6 Infine, calcoliamo la norma di Frobenius. Questo valore
è dato dalla radice quadrata della somma degli elementi
Seconda colonna della matrice al quadrato. Per semplicità scriviamo
la matrice con tutti i suoi elementi elevati al quadrato,
2+ 3+ 0 =5
poi ne calcoliamo la somma e infine la radice quadrata
Terza colonna ⎡ ⎤
⎢ 1 4 9 16 ⎥
3+ 2+ 1 =6 ⎢ 16 9 4 1 ⎥⎥
⎢
⎢ 1 0 1 0 ⎥
Quarta colonna ⎢⎣ ⎥⎦
4 + 1+ 0 =5 A questo punto, calcoliamo la somma di tutti
gli elementi
Il massimo tra i valori ottenuti è 6 quindi A 1 = 6.
1 + 4 + 9 + 16 + 16 + 9 + 4 + 1 + 1 + 0 + 1 + 0 = 62
Calcoliamo, ora, la norma infinito che è il massimo
valore delle somme sulle righe in valore assoluto. allora avremo A fro = 62 = 7,87.
14. •• Dato il vettore x = [3 7 0 1] e le seguenti 16. •• Date le seguenti matrici, verifica che
matrici, determina la norma1 del vettore e delle ⏐⏐A + A⏐⏐1 =⏐⏐A⏐⏐1 +⏐⏐A⏐⏐1.
matrici e verifica che ⏐⏐AxT⏐⏐1 ≤⏐⏐A⏐⏐1⏐⏐xT⏐⏐1.
1) 2) 3) 1) 2) 3)
4 67 8 5231 1001 0 0 0 1 17 9002
9 00 2 0103 0001 4 4 4 4 90 4101
8 10 1 1010 3 3 3 3 3240
5 42 0 2 2 2 2
15. •• Dato il valore a = 15 e le seguenti matrici, 17. •• Date le seguenti matrici, verifica che
verifica che ⏐⏐aA⏐⏐1 =⏐a⏐⋅⏐⏐A⏐⏐1 ≥ 0. ⏐⏐A + A⏐⏐∞ =⏐⏐A⏐⏐∞ +⏐⏐A⏐⏐∞.
1) 2) 3) 1) 2) 3)
124 2310 3 5 1 1 3 3 3 3 6517 6003
420 1033 1 2 3 4 1 1 2 2 8290 3101
5146 3 6 2 1 5 1 5 4 1234 0240
7 5 3 0 6 2 1 5
A3 Algebra vettoriale
e matriciale in Octave
FILE SORGENTI
Codici in Octave
File Excel
IMPARERAI…
La figura sopra riporta la schermata che appare all’avvio del programma. Affronteremo in se-
guito l’aspetto relativo all’editor; per il momento impariamo a conoscere Octave esclusivamen-
te a linea di comando.
Octave dispone di un vero e proprio linguaggio ad alto livello, interpretato e basato sulla
creazione di array che non richiedono alcun dimensionamento iniziale.
Questo permette di risolvere più velocemente problemi formulati in forma vettoriale o matri-
ciale che, invece, richiederebbero tempi più lunghi se risolti con linguaggi quali il C o il Pascal.
A livello più basso, Octave può essere utilizzato come una calcolatrice scientifica.
Sono disponibili le classiche operazioni aritmetiche (+ − * /), l’elevamento a potenza (∧) oltre
che una vastissima libreria di funzioni pronte all’uso.
Octave
Finestra dei comandi
>> a = 256*123
a = 31488
>> b = 1456/2
b = 728
>> a = "Gabriele"
>> who
Variables in the current scope:
a ans b
>> whos
Variables in the current scope:
Attr Name Size Bytes Class
==== ==== ==== ===== =====
a 1x8 8 char
ans 1x1 8 double
b 1x1 8 double
Una volta create delle variabili, queste rimangono attive in memoria e possono essere utilizzate
in qualsiasi momento. Il comando who permette di sapere quali sono le variabili dell’utente
attualmente in memoria. Il comando whos mostra la dimensione delle variabili e la relativa
occupazione di memoria (numero di byte).
Il contenuto di una variabile può sempre essere ispezionato; scrivendo il nome della variabile
nella riga di comando, il valore contenuto in essa verrà visualizzato sullo schermo.
Ogni volta che viene eseguita un’espressione, Octave ne visualizza, subito dopo l’invio, il risul-
tato; se volessimo non visualizzare tale risultato sarebbe sufficiente porre alla fine dell’espres-
sione il simbolo “ ; ”.
Le variabili rimangono “in vita” fino alla chiusura del programma, o fino alla loro eliminazione
per mezzo del comando clear, con conseguente liberazione delle aree di memoria.
Per “pulire” invece il terminale dai comandi precedentemente inseriti, si utilizza il comando
clc. Per evitare che il risultato delle operazioni di assegnazione sia riportato sullo schermo, si
termina l’istruzione con un punto e virgola.
Octave
Finestra dei comandi
>> base = 35;
>> altezza = 12;
>> perimetro = 2*(base+altezza);
>> area = base*altezza;
>> perimetro
perimetro = 94
>> area
area = 420
>>
2 Calcolo matriciale
Il principale punto di forza di Octave è il calcolo matriciale. Poiché è inconsueto che linguaggi
di uso generale pongano le matrici come tipo di dati predefiniti, può essere utile spendere qual-
che parola per illustrare le più semplici manipolazioni matriciali che Octave permette.
Le variabili per MATLAB/Octave hanno una struttura di tipo matriciale:
• gli scalari sono considerati matrici 1 × 1;
• i vettori riga sono matrici 1 × n;
• i vettori colonna sono matrici n × 1.
Octave
Finestra dei comandi
>> A = [1 2 3;4 5 6;7 8 9]
A=
1 2 3
4 5 6
7 8 9
>> A(1,1) = 10
A=
10 2 3
4 5 6
7 8 9
Per definire una matrice le si possono, innanzitutto, assegnare direttamente gli elementi
riga per riga. All’elemento in riga i e colonna j di A si accede digitando A(i, j). Per la matrice A
dell’esempio precedente si è scelto di assegnare al solo elemento A(1,1) il valore 10.
Essendo A, B, C matrici con coefficienti reali e s un numero reale, si definiscono le operazioni:
• C=s⋅A=A⋅s prodotto di una matrice per un numero reale (tutti gli elementi di A
vengono moltiplicati per s);
• C = A' trasposizione di una matrice;
• C=A+B somma di due matrici di dimensione m × n;
• C=A−B sottrazione di due matrici m × n;
• C=A*B prodotto righe per colonne di A (m righe e n colonne) per B
(m righe e p colonne);
• C = A. B cij = aij bij prodotto di due matrici componente per componente.
* *
Come potete notare nella figura successiva, tra le due matrici A e B è stata effettuata una som-
ma (elemento per elemento) e due prodotti. Nel primo caso, si ha il classico prodotto tra ma-
trici, mentre nel secondo la presenza del punto (A. * B) ha determinato un risultato in cui ogni
elemento di A è stato moltiplicato con il corrispettivo elemento di B.
Octave
Finestra dei comandi
>> A = [1 2 3;4 5 6;7 8 9];
>> B = [2 3 1;5 6 9;4 9 7];
3 5 4 2 6 3 24 42 40
9 11 15 20 30 54 57 96 91
11 17 16 28 72 63 90 150 142
Octave
Finestra dei comandi
>> A' >> C = 2*A+B' >> C = (A+B−A')*B'
ans = C= C=
1 4 7 4 9 10 4 −11 −4
2 5 8 11 16 21 39 134 131
3 6 9 15 25 25 56 169 180
Oltre agli operatori di base, Octave mette a disposizione tutta una serie di funzioni tipiche delle
matrici.
Elenchiamo di seguito quelle principali.
Funzione Significato
zeros(n) Genera una matrice n × n di zeri
zeros(m,n) Genera una matrice m × n di zeri
Ritorna un vettore [r c] con il numero r di righe e c di colonne della matrice; se M ha più
size(M)
dimensioni, ritorna un vettore con numero di elementi per ogni dimensione
zeros(size(M)) Genera una matrice di zeri della stessa dimensione di M
ones(n) Genera una matrice n × n di uno
ones(m,n) Genera una matrice m × n di uno
ones(size(M)) Genera una matrice di uno della stessa dimensione di M
eye(n) Genera la matrice identità n × n
Funzione Significato
eye(m,n) Genera la matrice identità m × n
Ritorna la dimensione più grande della matrice; in caso di vettore length(vet) corrisponderà
length(M)
al numero di elementi del vettore
diag(M) Ritorna un vettore colonna con gli elementi della diagonale di M
diag(diag(M)) Ritorna una matrice diagonale avente la stessa diagonale di M
tril(M) Ritorna la matrice triangolare inferiore di M
triu(M) Ritorna la matrice triangolare superiore di M
rand(n) Genera una matrice n × n con valori random compresi tra 0 e 1
rand(m,n) Genera una matrice m × n con valori random compresi tra 0 e 1
det(M) Fornisce il determinante di M
inv(M) Ritorna la matrice inversa di M(M−1 con M matrice quadrata)
linspace(Base, Limit, n) Ritorna un vettore riga di n elementi equamente distribuiti fra i valori Base e Limit
Ritorna la norma di M il cui tipo è identificato da t, che può assumere i seguenti valori:
•1 : norma1
norm(M,t) •2 : norma2
• inf : norma infinito
• fro : norma di Frobenius
trace(M) Restituisce la somma degli elementi della diagonale principale
OSSERVA COME SI FA
■ Calcoliamo la matrice inversa di B e verifichiamo che: BB−1 = I. Della matrice B, inoltre, calcoliamo la norma1
(ricordiamo che corrisponde alla somma più alta delle singole colonne) e la norma infinito (somma più alta
delle singole righe).
>> norm(B,1)
ans = 7
>> nom(B,inf)
ans = 6
ORA TOCCA A TE
■ Data una matrice quadrata M, determina una nuova matrice uguale a M ma con gli elementi sulla diagonale
principale di valore raddoppiato rispetto a quelli della matrice M. Prova da solo, ma se ti trovi in difficoltà,
puoi confrontare lo svolgimento guidato negli esercizi di fine Unità.
3 Variabili e operatori
Abbiamo detto precedentemente che l’unità fondamentale di dati in Octave è la matrice.
Una variabile è una regione di memoria che contiene, quindi, i dati della matrice.
Inoltre le parti reali e immaginarie possono essere positive e negative nell’intervallo di valori
[10−308, 10308].
Una variabile di tipo char contiene uno scalare o un array di valori a 8 bit, ciascuno dei quali
rappresenta un carattere; le stringhe vanno racchiuse tra apici singoli. Per esempio:
commento = 'questa è una stringa'
Oltre agli operatori matematici di base (tabella a sinistra), Octave mette a disposizione una
serie di funzioni matematiche predefinite (tabella a destra).
exp ex
In particolare, facendo riferimento all’operatore log Logaritmo base e
puntuale (.) (di cui abbiamo già parlato nei volumi
log2 Logaritmo base 2
precedenti), ricordiamo che se A è una matrice
A∧2 = A *A mentre A.∧2 = {aij } log10 Logaritmo base 10
2
cioè a una matrice i cui elementi sono i quadrati dei abs Valore assoluto
singoli elementi di A. sqrt Radice quadrata
Operatori relazionali
Possiamo utilizzare gli operatori relazionali per mettere in atto un confronto che produce
un risultato vero (1) o falso (0).
Gli operatori relazionali sono:
< <= > >= == !=
In particolare, ricordiamo che l’operatore == è di confronto sui valori uguali (l’operatore = non
è di confronto, ma di assegnazione) mentre l’operatore != restituisce vero (1) quando gli ele-
menti confrontati sono differenti.
Nel caso in cui gli elementi confrontati siano due matrici delle stesse dimensioni (A==B),
l’output fornito è una matrice composta da valori 1 nelle posizioni in cui gli elementi delle due
matrici sono uguali e valori 0 nelle altre posizioni.
Octave
Finestra dei comandi
>> A >> B >> A==B
A= B= ans =
1 2 3 0 2 3 0 1 1
4 5 6 2 3 0 0 0 0
7 8 9 1 2 3 0 0 0
Operatori logici
Gli operatori logici confrontano gli elementi di vettori o matrici aventi le stesse dimensioni;
possono essere utilizzati attraverso i relativi simboli o attraverso funzioni equivalenti:
A&B and(A,B) A⏐B or(A,B) ∼A not(A) xor(A,B)
Un elemento è logicamente vero se non è nullo. Pertanto, l’output fornito è una matrice com-
posta da valori 1, nelle posizioni in cui gli elementi delle due matrici sono verificati funzional-
mente, e da valori 0 nelle altre posizioni.
• A&B restituisce una matrice con valori nulli solo se nella corrispondente posizione di A o/e
B vi sono elementi nulli, altrimenti restituisce 1.
• A|B restituisce una matrice con valori nulli solo se nella corrispondente posizione di A e B
vi sono elementi nulli, altrimenti restituisce 1.
• xor(A,B) restituisce una matrice con valori uguali a 1 solo se nella corrispondente posizione
di A o B vi sono elementi nulli (solo in uno dei due), altrimenti restituisce 0.
Prendiamo in considerazione le matrici A e B dell’esempio precedente e verifichiamo i risultati
per A&B, A⏐B, xor(A,B), come illustrato di seguito.
Octave
Finestra dei comandi
>> A&B >> A|B >> xor(A,B)
ans = ans = ans =
0 1 1 1 1 1 1 0 0
1 1 0 1 1 1 0 0 1
1 1 1 1 1 1 0 0 0
L’operatore “ : ”
L’operatore “ : ” è molto importante e può essere usato per scopi diversi; solitamente determina
un range di valori; per esempio, l’espressione:
v = 1 : 10
genera un vettore riga contenente i valori da 1 a 10, con passo unitario (v = 1 2 3 4 5 6 7 8 9 10);
da notare il fatto che le parentesi quadre possono essere omesse.
Possiamo ottenere una spaziatura differente da quella unitaria nel seguente modo:
v=1:2:8 (= 1 3 5 7)
v = 100 : − 10 : 50 (= 100 90 80 70 60 50)
Il termine centrale stabilisce il passo della sequenza. Quindi, in Octave utilizzeremo il coman-
do v = a:h:b per indicare un vettore di elementi compresi tra a e b con passo h.
Utilizzato con una matrice, l’operatore permette di riferirsi a porzioni della matrice. Per esem-
pio, A(i : j, x : y) fornisce una sottomatrice dalla riga i alla riga j e dalla colonna x alla y.
Octave
Finestra dei comandi
>> B >> B(1:3,2:3)
B= ans =
0 2 3 2 3
2 3 0 3 0
1 2 3 2 3
Lo script
I comandi all’interno di uno script vengono eseguiti sequenzialmente, come se fossero scritti
nella finestra dei comandi. Per eseguire il file si digita il suo nome (senza estensione) e i risultati
sono visualizzati nella finestra dei comandi (ricordiamo che il punto e virgola alla fine di ogni
comando evita di visualizzare il risultato del comando stesso).
Uno script non accetta variabili di input, ma può generare variabili di output. Inoltre, opera
sulle variabili dello spazio di lavoro che può essere arricchito introducendone di nuove duran-
te l’esecuzione dello script stesso. Ricordiamo che le variabili permangono dopo l’esecuzione
dello script.
Supponiamo di voler realizzare uno script che effettui il prodotto di due matrici quadrate e,
successivamente, la trasposta e l’inversa della matrice risultante dal prodotto. Poiché è richie-
sta una sequenza di istruzioni, sarebbe opportuno memorizzarle in uno script da eseguire
all’occorrenza.
La nuova interfaccia di Octave contempla al suo interno una finestra di Editor in cui inserire
lo script, il cui salvataggio è un’operazione semplicissima che consente di attribuire un nome
allo script (file con estensione .m). Nel nostro caso, lo script seguente ha il nome “prodotto.m”.
L’esecuzione dello script avviene semplicemente facendo clic sul pulsante salva ed esegui.
Quanto prodotto dallo script è visualizzabile all’interno della finestra dei comandi. Nel nostro
esempio, notiamo che l’uscita prodotta è quella in corrispondenza dei comandi privi del punto
e virgola finale.
L’esecuzione dello script equivale a digitare sulla linea di comando il nome del file, senza esten-
sione, come avrai avuto modo di verificare nella finestra dei comandi precedente.
Octave
Finestra dei comandi
>> prodotto
La finestra dell’editor offre,
Ct = attraverso opportuni pulsanti, la
possibilità di eseguire il codice
5 4 2 passo dopo passo inserendo dei
15 16 11 punti di interruzione (breakpoint).
19 22 15
Ci =
Il file verrà cercato dal sistema nella directory di lavoro (verificabile con il comando pwd) o,
eventualmente, spostandosi in un’altra cartella di lavoro (comando cd).
Attraverso l’interfaccia grafica potete salvare i file in qualsiasi punto del file system; dovete
tener presente, però, che Octave può eseguire un file solo se lo trova dentro la cartella di lavoro.
Fortunatamente l’interfaccia grafica ci aiuta a cambiare o aggiungere una nuova cartella di
lavoro in modo molto semplice e intuitivo.
La function
Una function è anch’essa una sequenza di istruzioni ma, a differenza dello script, accetta dei
parametri in ingresso. Inoltre, le eventuali variabili create al suo interno non permangono nel-
lo spazio di lavoro a function conclusa. La sua definizione inizia con la parola chiave function:
function [ out1, . . . , outn ] = nomefun (in1, . . . , inm)
dove:
• out1, …, outn sono i parametri di output (opzionali);
• in1, …, inm sono i parametri di input.
La function termina all’ultima sua istruzione all’interno del file, oppure quando si incontra per
la prima volta il comando return. Solitamente, il file prende il nome della funzione in cui esso
è contenuto ma, se questo non dovesse accadere, la chiamata alla funzione avviene esclusiva-
mente attraverso il nome del file (e non sul nome della funzione).
È buona norma inserire all’inizio di ogni file (e quindi di ogni function) delle linee di commen-
to, precedute dal simbolo %, per evidenziare il nome della funzione e i parametri di input e
output prodotti. La linea di commento permette una maggiore comprensione e leggibilità della
function stessa.
File funzione_prodotto.m
% function [Ct,Ci] = funzione_prodotto(A,B)
% INPUT
% A,B matrici da moltiplicare
% OUTPUT
% Ct = matrice trasposta del prodotto
% Ci = matrice inversa del prodotto
function [Ct,Ci] = funzione_prodotto(A,B)
C = A*B;
Ct = C’;
Ci = inv(C);
Il vantaggio di una function è proprio quello di essere applicabile a differenti valori in input;
il fatto di essere parametrica la rende più versatile di uno script. L’intestazione della funzione:
function [Ct,Ci] = funzione_prodotto(A,B)
dichiara delle variabili locali Ct e Ci che saranno restituite al successivo comando, chiamate
rispettivamente come X e Y. L’esecuzione di una funzione, proprio perché richiede dei parame-
tri di input e di output, provocherà un errore se avverrà direttamente dall’ambiente di editor;
pertanto è necessario utilizzare la finestra dei comandi per impartire il seguente comando:
[X,Y] = funzione_prodotto(A,B)
Octave
Finestra dei comandi
>> [X,Y] = funzione_prodotto(A,B)
X=
5 4 2
15 16 11
19 22 15
Y=
Dopo l’esecuzione della function, lo spazio di lavoro conterrà le variabili globali A,B,X,Y e non
quelle dichiarate all’interno della funzione.
salva l’intero workspace nel file dati.dat, che si presenta nel modo seguente:
# type: matrix
# rows: 2
# columns: 2
2 0
1 3
# name: ans
# type: scalar
52
Il comando:
save matrici.dat A B
conserva invece nel file matrici.dat solo le variabili elencate di seguito al nome del file, in
questo caso le matrici A e B.
Si può usare qualsiasi estensione per questi file ed è buona norma distinguerli dai file.m.
All’avvio dell’ambiente Octave, può essere ricaricato il workspace precedentemente salvato
con il comando load:
load dati.dat
5 Le strutture di controllo
Come in tutti i linguaggi di programmazione, anche in Octave esistono delle strutture di con-
trollo che consentono sviluppi algoritmici dei problemi; nello specifico le strutture sono cinque:
• il comando di selezione if;
• il comando di selezione multipla switch;
• il ciclo for;
• il ciclo while;
• il ciclo do-until. if (espressione logica)
istruzione1;
■ Il comando if calcola un’espressione lo- istruzione2;
gica ed esegue una serie di operazioni
……
quando questa espressione è vera; la sua
end
sintassi è quella illustrata qui a fianco.
Le opzioni elseif ed else permettono di eseguire diversi gruppi di istruzioni soggette a di-
verse condizioni; la sintassi in questo caso è:
Sintassi Esempio
if (espressione logica 1) if(a > 2)
istruzioni; x = sqrt(a);
elseif (espressione logica 2) elseif(a == 0)
istruzioni; x = 0;
… else
else x = 'argomento minore di zero';
istruzioni; end
end
■ Il comando switch esegue un gruppo di istruzioni basate sul valore di una variabile o di
un’espressione. Le parole chiave case e otherwise delimitano i gruppi di istruzioni e sol-
tanto un caso viene eseguito; la sintassi è:
Sintassi Esempio
switch (espressione logica) switch (a)
case 0 case 0
istruzioni; x = 'zero';
case 1 case 1
istruzioni; x = 'uno';
case 2 case 2
istruzioni; x = 'due';
otherwise otherwise
istruzioni; x = 'fuori limite';
end end
Il comando switch valuta il contenuto della variabile a ed esegue il case relativo (se a==2,
esegue soltanto le istruzioni contenute nel blocco case 2).
■ Il ciclo for ripete un gruppo di istruzioni per un determinato numero di volte; la sintassi è:
Sintassi Esempio
for k = n:m for n = 0:10
istruzioni; x(n+1) = sin(pi*n/10);
end end
I comandi che si trovano tra “for” ed “end” sono eseguiti per tutti i valori di k compresi
nell’intervallo n:m; l’esempio crea un vettore con i valori della funzione sin(x) in undici
punti equispaziati da 0 a 10 (pi è una costante inizializzata a π).
■ Il ciclo while è usato quando le istruzioni devono essere ripetute fino a quando rimane
vera l’espressione logica; la sintassi è data da:
Sintassi Esempio
while (espressione logica) a = [2,5,3,7,8,1];
istruzioni; x = 1; somma = 0;
end [r c] = size(a);
while(x < = c)
somma = somma + a(x);
x = x+1;
end
somma
Esempio Descrizione
a = [3,5,3,7,8,1]; Vettore iniziale
x = zeros(1,6); Vettore risultato inizialmente con valori 0
s = 1;
[r c] = size(a); Dimensioni del vettore
while(s < = c) Itera per tutti gli elementi di a
fatt = 1;
i = 1;
while(i < = a(1,s)) Itera per il fattoriale di ogni elemento
fatt = fatt*i;
i = i+1;
end
x(1,s) = fatt; Inserisce nel vettore x il fattoriale
s = s+1;
end
x Visualizza x
■ Il ciclo do-until viene usato nel caso in cui le istruzioni debbano essere ripetute fino a
quando rimane falsa l’espressione logica; la sintassi è data da:
Sintassi Esempio
x = 0;
do do
istruzioni; x = x+1;
until (espressione logica) until (x > = 10)
OSSERVA COME SI FA
1. Determiniamo la precisione di macchina.
L’algoritmo in C++ è stato già realizzato nell’unità relativa alla teoria dell’errore; qui ne riproponiamo una versione
implementabile direttamente in Octave:
A destra è mostrata l’esecuzione della funzione norma1(M); come riscontro, è stata calcolata la norma1 con la fun-
zione predefinita norm(M,1) messa a disposizione da Octave.
function n = normaeuclide(v) 1 3 4 5
lun = length(v); >> n = normaeuclide(v)
somma = 0;
n = 7.4162
for i = 1:lun
somma = somma + v(1,i)*v(1,i); >> norm(v,2)
end ans = 7.4162
n = sqrt(somma);
La norma euclidea è anche definita come norma2, pertanto la figura riportata accanto illustra i risultati della norma
ottenuti con la funzione realizzata e con quella predefinita disponibile nel sistema.
ORA TOCCA A TE
■ Implementa una funzione che calcoli il determinante di una matrice utilizzando la regola di Laplace.
RIPASSIAMO INSIEME A3
ALGEBRA VETTORIALE E MATRICIALE
IN OCTAVE AUDIO
RIPASSIAMO INSIEME A3
MAPPA
MODIFICABILE
OCTAVE
il suo punto
è un è anche
di forza è
software
libero
progettato per
calcolo
numerico
valida
alternativa a
MATLAB
che è
software
proprietario
Octave
Finestra dei comandi
>> Esercizio 1
V1 = 14130
V2 = 24416.64000
DV = 10286.64000
Aumento = 72.800
if(mod(l,2) == 0)
% se il resto della divisione tra l è 2 e 0 allora è pari
v_d = zeros((l/2),1)';
v_p = zeros((l/2),1)';
else
v_d = zeros((l/2+1/2),1)';
v_p = zeros((l/2−1/2),1)';
end
% abbiamo così costruito dei vettori di zeri, adesso inseriamo gli elementi tramite un ciclo for
for(i = 1:l)
if(mod(i,2) == 0)
v_p(1,i/2) = v(1,i);
else
j = i/2+1/2;
v_d(1,j) = v(1,i);
end
end
12. • Realizza la funzione Tempo2secondi che, 15. •• Scrivi una funzione che prenda in ingresso
preso in ingresso un vettore di tre elementi, che un vettore e un valore di soglia (scalare).
rappresentano, rispettivamente, il numero di ore, La funzione copi tutti gli elementi del vettore
di minuti e di secondi, calcoli il numero totale in altri due vettori, separando elementi sopra
di secondi e lo dia in output. la soglia e sotto la soglia. I due vettori sono
l’output della funzione.
13. • Realizza la funzione Secondi2tempo che, ESEMPIO
preso in ingresso il numero totale di secondi, vettore = [2 7 4 1 8 8 9]; soglia = 5;
crei il vettore contenente ore, minuti e secondi in uscita si avrà: sopra = [7 8 8 9]
e lo dia in output. sotto = [2 4 1]
14. • Creare le funzioni DistanzaEuclidea e 16. •• Dato un vettore b, determina il numero delle
DistanzaManhattan che prendano in ingresso sue componenti negative, delle sue componenti
due vettori (lunghi a piacere) e ne calcolino positive, di quelle nulle.
la distanza nei due modi diversi.
17. •• Dato un vettore b, determina la posizione
dmanh = a1 − b1 + a2 − b2 +É della sua massima componente.
2 2
deuclidea = (a1 − b1 ) + (a2 − b2 ) +É 18. •• Dati due vettori a e b, verifica che abbiano
la stessa lunghezza. Successivamente, determina
il numero delle componenti di a maggiori delle
corrispondenti componenti di b.
Esercizi sulle matrici
19. • Determina autovalori e autovettori della seguente matrice:
⎡ 1 0 1 ⎤
⎢ ⎥
A = ⎢ −1 0 1 ⎥
⎢ ⎥
⎢ 1 1 2 ⎥
⎣ ⎦
20. • ESERCIZIO SVOLTO Data una matrice quadrata M, determina una nuova matrice uguale a M
ma con gli elementi sulla diagonale principale di valore raddoppiato rispetto a quelli della matrice M.
21. • Poni in ordine crescente gli elementi di una 22. • Data una matrice A, verifica che essa
matrice qualsiasi quadrata. sia quadrata e restituisci i determinanti
Proponi le due soluzioni per l’ordinamento sulle delle sue sottomatrici principali di testa.
righe e sulle colonne.
23. • ESERCIZIO SVOLTO Data una matrice reale A, fornisci di essa il numero di elementi positivi, negativi
e nulli.
24. • Data una matrice A, se ne moltiplichino 28. •• Considera la matrice A formata da n = 4 righe
gli elementi positivi per 100 e se ne dividano e m = 6 colonne.
per due gli elementi negativi.
⎡ 1 2 3 4 5 6 ⎤⎥
⎢
⎢ 5 6 7 8 9 10 ⎥⎥
25. • Dati un vettore b e una matrice A, verifica se A= ⎢
almeno un elemento di b è anche elemento di A. ⎢ 9 10 11 12 13 14 ⎥
⎢ ⎥
⎢⎣ 15 16 17 18 19 20 ⎥⎦
26. • Dati un vettore b e una matrice A, verifica se
tutti gli elementi di b sono anche elementi di A. • Costruisci la matrice B formata dalle colonne
di A disposte in ordine inverso (ossia, la 1°
27. •• Data una matrice A = (aij), individua colonna di B è la 6° di A, la 2° di B è la 5° di A,
le posizioni (riga e colonna) del massimo e così via).
elemento e del minimo elemento di A. • Costruisci la matrice B formata dalle sole
colonne pari di A.
• Costruisci la matrice B formata dalle sole righe
dispari di A.
• Costruisci la matrice B formata dalle righe 1, 4,
3 e dalle colonne 5, 2.
• Costruisci il vettore v formato dagli elementi
diagonali akk con k = 1, …, n.
29. •• Esamina e descrivi l’effetto del seguente 30. ••• Dati i tre punti
codice Octave: A = (−1, 0, 2), B = (−2, 1, 3), C = (0, 1, 0)
calcola:
A >> for x = 3 : 7 : 25, x, end !!!" !!!"
• i vettori AB e AC ;
B >> x = 3, while x < 25, x = x + 7, end % confrontare
• la distanza fra i punti !A!!"e B;!!!"
con (a)
• il prodotto scalare di AB e AC ;
C >> m = magic(5) % quadrato magico • l’angolo BAC in gradi e in radianti.
>> r2 = m(2, :), somma = sum(r2) % seconda riga
>> c3 = m( :, 3), somma = sum(c3) % terza
colonna
>> d = diag(m), somma = sum(d) % diagonale
principale
>> ad = diag(m( :,[5 4 3 2 1]), somma = sum(ad)
% antidiagonale
>> d 1 4 = diag([m,m],4), sum(d 1 4) % 1a sotto e
4a sovra diagonale
D >> perms([1 2 3]) % permutazioni
A4 Applicazioni scientifiche
in Octave, in Excel e in C++
FILE SORGENTI
Codici in Octave
File Excel
⎪⎪ É
⎪⎪
⎪⎪ an1 x1 +an 2 x 2 +an 3 x 3 +...+ann x n = bn
⎩
Possiamo rappresentarlo in notazione matriciale con la seguente formula:
Ax = b
Dove
⎡ a a a13 É a1n ⎤⎥ ⎡ x1 ⎤⎥ ⎡ b1 ⎤⎥
⎢ 11 12 ⎢ ⎢
⎢ a a a23 É a2n ⎥⎥ ⎢ x 2 ⎥⎥ ⎢ b2 ⎥⎥
⎢ 21 22 ⎢ ⎢
A=⎢ ⎥ x = ⎢ ⎥ b = ⎢ ⎥
⎢ É ⎥ ⎢ É ⎥ ⎢ É ⎥
⎢ ⎥ ⎢ ⎥ ⎢ ⎥
⎢ an1 an 2 an 3 É ann ⎥ ⎢ xn ⎥ ⎢ bn ⎥
⎣ ⎦ ⎣ ⎦ ⎣ ⎦
Per esempio, il seguente sistema:
⎧⎪ 5x1 −2x 2 +1x 3 = 5
⎪⎪
⎨ 2x1 + x 2 −2x 3 =−1
⎪⎪
⎪⎪⎩ −x1 +3x 3 = 7
in notazione matriciale viene considerato come:
⎡ 5 −2 1 ⎤ ⎡ 5 ⎤ ⎡ 5 −2 1 ⎤ ⎡ 5 ⎤
⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥
A=⎢ 2 1 −2 ⎥ b = ⎢ −1 ⎥ → ⎢ 2 1 −2 ⎥ x = ⎢ −1 ⎥
⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥
⎢⎣ −1 0 3 ⎥⎦ ⎢⎣ 7 ⎥⎦ ⎢⎣ −1 0 3 ⎥⎦ ⎢⎣ 7 ⎥⎦
in cui A è la matrice dei coefficienti, x il vettore delle incognite e b il vettore dei termini noti.
Il sistema ammette una e una sola soluzione se e solo se la matrice dei coefficienti A ha il deter-
minante diverso da zero. Quindi la soluzione del problema può essere calcolata con la regola di
Cramer, che permette di individuare gli elementi del vettore x tramite la formula:
det( Ai )
xi = i =1Én
det( A)
La i-esima componente del vettore x si trova dividendo il determinante della matrice Ai , ot-
tenuta sostituendo la i-esima colonna di A con il vettore b, per il determinante di A. Infatti
nell’esempio avremo
⎡ 5 −2 1 ⎤ ⎡ 5 5 1 ⎤⎥ ⎡ 5 −2 5 ⎤
⎢ ⎥ ⎢ ⎢ ⎥
A1 = ⎢ −1 1 −2 ⎥ A2 = ⎢ 2 −1 −2 ⎥ A3 = ⎢ 2 1 −1 ⎥
⎢ ⎥ ⎢ ⎥ ⎢ ⎥
⎢⎣ 7 0 3 ⎥⎦ ⎢⎣ −1 7 3 ⎥⎦ ⎢⎣ −1 0 7 ⎥⎦
Le soluzioni del sistema sono pertanto date dai seguenti rapporti:
det(A1 ) 30 det( A2 ) 48 det( A3 ) 66
x1 = = =1,25 x 2 = = = 2 x3 = = = 2,75
det(A) 24 det( A) 24 det( A) 24
L’implementazione in Octave
Riportiamo ora l’algoritmo per la soluzione del sistema con la regola di Cramer da implemen-
tare in Octave.
% function x = cramer(A, b)
% Soluzione con cramer del sistema Ax = b.
% La matrice deve essere quadrata e invertibile
% INPUT:
% A,b:dati iniziali del sistema lineare Ax = b
% OUTPUT
% x:vettore soluzioni
function x = cramer(A, b)
[m, n] = size(A);
if m ∼ = n
error('Matrice non quadrata.')
end
if det(A) == 0
error('Matrice singolare.')
end
for j = 1:n
B = A;
B(:, j) = b;
x(j) = det(B)/det(A);
end
x = x';
All’interno del ciclo for è posto il blocco di istruzioni da iterare (3 volte nel nostro caso). A ogni
iterazione viene creata una matrice B inizializzata, a ogni passaggio, ad A e l’istruzione succes-
siva B(:, j) = b; consente di modificare B inserendo nella colonna j di B il vettore b (l’operatore “:”
in questo caso indica tutte le righe della matrice).
Octave
Finestra dei comandi
>> A = [5 −2 1;2 1 −2;−1 0 3] >> b = [5 −1 7] >> x = cramer(A,b)
A= b= x=
5 −2 1 1.2500
2 1 −2 5 −1 7 2.0000
−1 0 3 2.7500
L’implementazione in Excel
Excel prevede, all’interno della categoria “Matema-
tica e trigonometria”, delle formule per la gestione In Excel è possibile visualizzare
contemporaneamente tutte le formule
delle matrici; in questo caso la funzione MATR.DE- inserite all’interno del foglio di lavoro: basta
TERM è quella che fa al caso nostro, consentendoci andare nelle opzioni → Impostazioni
di calcolare il determinante della matrice. avanzate e nella sezione relativa a Opzioni
di visualizzazione per il foglio di lavoro e
Riportiamo il foglio Excel con i risultati dei calcoli
inserire la spunta in corrispondenza della
prima e con le formule esplicitate subito dopo. voce Visualizza formule nelle celle anziché
i risultati calcolati.
Per determinare le soluzioni del sistema dobbiamo calcolare n + 1 determinanti; possiamo de-
durre che il numero di operazioni necessarie per il calcolo del determinante di una matrice
n × n è dell’ordine di n!, pertanto per sistemi con un numero di equazioni (e quindi di incognite)
elevato tale metodo risulta poco veloce.
L’implementazione in C++
Riportiamo l’algoritmo del metodo di Cramer anche in C++ utilizzando come soluzione per il
calcolo del determinante la funzione realizzata attraverso il metodo di Laplace vista in prece-
denza.
C++
#include <iostream>
using namespace std;
#define MAX 25
int det(int A[MAX][MAX], int); //Prototipo
int main()
{
int A[MAX][MAX], B[MAX][MAX], b[MAX], c;
float x[MAX];
cout << "Ordine della matrice: ";
cin >> c;
//Genera matrice e vettore
for (int i = 0; i < c; i++)
{
cout << "Riga " << i << ": ";
for (int j = 0; j < c; j++) cin >> A[i][j];
1 3 4
function [x] = trisup(A,b) 0 1 5
[rig,col] = size(A); 0 0 8
if or(rig ~ = col,size(b,1) ~ = rig)
fprintf('ERRORE:Dati in input non validi'); >> b = [4;2;1]
x = "; b=
return
4
end
2
if isequal(A,triu(A)) == 0 1
fprintf('ERRORE:Matrice non triangolare superiore\n');
x = "; >> x = trisup(A,b)
return x=
end
−0.62500
n = rig;
1.37500
if A(n,n) == 0 error('La funzione verrà interrotta per un denominatore = 0'); 0.12500
x =";return; end
x(n,1) = b(n)/A(n,n);
for i = n−1:−1:1
somma = 0;
for j = i+1:n
somma = somma+A(i,j)*x(j,1);
end
if A(i,i) == 0 error('La funzione verrà interrotta per un denominatore = 0');
x =";
return;
end
x(i,1) = (b(i)−somma)/A(i,i);
end
In questo caso, la soluzione immediata è fornita dalla prima equazione (x1 = b1/a11) e da questa
a ogni passo possono essere calcolate tutte le altre soluzioni; per questo motivo il metodo è
denominato metodo di sostituzione in avanti, in quanto il vettore x viene calcolato partendo
dalla prima componente con la seguente formula:
⎪⎧⎪ x = b1
⎪⎪ 1 a
⎪ 11
⎨
⎪⎪ bi −Σi−1
j=1 aij x j
⎪⎪ i x = i = 2, ..., n
⎪⎪⎩ aij
end x=
n = rig;
4.00000
if A(1,1) == 0 error('La funzione verrà interrotta a causa di un −6.00000
denominatore = 0'); x = ";return; end 0.87500
x(1,1) = b(1)/A(1,1);
for i = 2:n
somma = 0;
for j = 1:i−1
somma = somma+A(i,j)*x(j,1);
end
if A(i,i) == 0 error('La funzione verrà interrotta a causa di un denominatore = 0'); x = ";return; end
x(i,1) = (b(i)−somma)/A(i,i);
end
L’implementazione in Excel
Riportiamo ora un esempio in Excel di entrambi i metodi con dei semplici sistemi a tre incogni-
te; anche in questo caso visualizziamo sia le formule sia i risultati finali.
L’implementazione in C++
Proponiamo di seguito entrambi i listati in C++ per il metodo di sostituzione all’indietro e in
avanti. Per entrambi è stato definito un valore massimo della dimensione della matrice pari a
25(MAX); la dimensione reale viene chiesta all’inizio del programma e conservata all’interno
della variabile c.
C++
#include <iostream>
using namespace std;
#define MAX 25
//Prototipi
void carica_matrice(int m[MAX][MAX], int);
int main()
{
int m[MAX][MAX], c;
float x[MAX], b[MAX], somma;
cout << "Ordine della matrice: ";
cin >> c;
cout << "inserisci matrice TRIANGOLARE SUPERIORE" << endl;
carica_matrice(m, c);
// carica termini noti(vettore b)
for (int i = 0; i < c; i++)
{
cout << "Termine noto Riga " << i << ": ";
cin >> b[i];
}
if (m[c−1][c−1] == 0) cout << "Funzione interrotta a causa di un denominatore=0";
else
{
x[c−1] = (float)b[c−1]/m[c−1][c−1];
for (int i = c−2; i >= 0; i−−)
{
somma = 0;
for (int j = i+1; j < c; j++)
somma+ = m[i][j]*x[j];
x[i] = (b[i]−somma)/m[i][i];
}
// stampa soluzioni
for (int i = 0; i < c; i++)
{
cout << "x" << i << ": " << x[i] << endl;
}
}
system("pause");
return 0;
}
void carica_matrice(int m[MAX][MAX], int c)
{
//Genera matrice
cout << "inserisci gli elementi della matrice" << endl;
for (int i = 0; i < c; i++)
{
cout << "Riga " << i << ": ";
for (int j = 0; j < c; j++) cin >> m[i][j];
}
}
C++
#include <iostream>
using namespace std;
#define MAX 25
//Prototipi
void carica_matrice(int m[MAX][MAX], int);
int main()
{
int m[MAX][MAX], c,j;
float x[MAX], b[MAX], somma;
cout << "Ordine della matrice: ";
cin >> c;
cout << "inserisci matrice TRIANGOLARE INFERIORE" << endl;
carica_matrice(m, c);
// carica termini noti(vettore b)
for (int i = 0; i < c; i++)
{
cout << "Termine noto Riga " << i << ": ";
cin >> b[i];
}
if (m[0][0] == 0) cout << "Funzione interrotta a causa di un denominatore=0";
else
{
x[0] = (float)b[0]/m[0][0];
for (int i = 1; i < c; i++)
{
somma = 0;
for (j = 0; j <= i−1; j++)
somma+ = m[i][j]*x[j];
x[i] = (b[i]−somma)/m[i][i];
}
// stampa soluzioni
for (int i = 0; i < c; i++)
{
cout << "x" << i << ": " << x[i] << endl;
}
}
system("pause");
return 0;
}
void carica_matrice(int m[MAX][MAX], int c)
{
//Genera matrice
cout << "inserisci gli elementi della matrice" << endl;
for (int i = 0; i < c; i++)
{
cout << "Riga " << i << ": ";
for (int j = 0; j < c; j++) cin >> m[i][j];
}
}
Nel paragrafo precedente abbiamo appurato che, nel caso di un sistema in cui la matrice A sia
una matrice triangolare, la soluzione risulta molto più agevole e veloce, pertanto l’obiettivo
che tale metodo si prefigge è quello di trasformare il sistema in modo tale da rappresentare la
matrice A come una matrice triangolare superiore.
La trasformazione in un sistema equivalente avviene mediante le seguenti operazioni elementari:
• scambiando la i-esima equazione con la j-esima;
• sostituendo la i-esima equazione con un suo multiplo (moltiplicando per uno scalare diver-
so da zero);
• sostituendo la j-esima equazione con una combinazione lineare di se stessa con la i-esima
equazione.
Per raggiungere l’obiettivo di realizzare un sistema triangolare dobbiamo procedere per passi;
ogni i-esimo passo contribuisce a modificare le equazioni dalla Ei+1 alla En , pertanto per otte-
nere il nuovo sistema triangolare occorrono n−1 passi. Consideriamo il seguente sistema di En
equazioni:
E1 ⎪⎧⎪ a11 x1 +a12 x 2 +a13 x 3 +É+a1n x n = b1
⎪
E2 ⎪⎪⎪ a21 x1 +a22 x 2 +a23 x 3 +É+a2n x n = b2
⎨
É ⎪⎪ É
⎪
En ⎪⎪ an1 x1 +an 2 x 2 +an 3 x 3 +É+ann x n = bn
⎪⎩
Il primo passo prevede di riscrivere le equazioni da E2 a En con lo scopo di eliminare tutti i ter-
mini ai1x1 dalla seconda equazione in poi lasciando intatta l’equazione E1.
Ogni equazione Ei (i = 2...n) verrà riscritta come combinazione lineare con E1 e, nello specifico,
come:
a
E1 −mi1 E1 dove mi1 = i1 per i =1Én e a11 ≠ 0
a11
⎧⎪
(1) ⎪⎪ (1) (1) (1) (1) (1)
⎪⎪ + + +É+ =
E1 ⎪⎪ a11 x1 a12 x 2 a13 x 3 a1n x n b1
⎪⎪
(2) ⎪⎪ (2) (2) (2) (2)
⎪⎪ + +É+ =
E2 ⎨ a22 x 2 a23 x 3 a2n x n b2
⎪⎪
É ⎪⎪ É
⎪⎪
(2) ⎪⎪ (2) (2) (2) (2)
⎪⎪ + +É+ =
En ⎪⎪ an 2 x 2 an 3 x 3 ann x n bn
⎪⎩
I numeri fra parentesi tonde, sopra i vari coefficienti, indicano che gli stessi sono stati ricalco-
lati al passo successivo, in questo caso al passo 2, pertanto sia i coefficienti sia i termini noti al
passo (2) sono stati calcolati tenendo in considerazione i termini del passo (1):
(2) (1) (1) (2) (1) (1)
e per i, j = 2, ..., n
aij = aij − mi1a1j bi = bi − mi1b1
Così facendo tutti i coefficienti e i termini noti dalla seconda equazione (E2) all’ultima (En) sono
stati ricalcolati e i coefficienti relativi a x1 sono stati eliminati.
OSSERVA COME SI FA
■ Supponiamo di dover risolvere il seguente sistema di quattro equazioni con quattro incognite:
⎧ 3x1
⎪ + 2x2 − 4x3 + x4 = 1
⎪
⎪
⎪
⎪ 12x1 − 2x2 − 1x3 + 3x4 = 3
⎨
⎪
⎪ 9x1 + 7x2 + 4x3 + x4 = −4
⎪
⎪
⎩−3x1
⎪
⎪ + 5x2 −10x3 + 6x4 = −2
Al passo (1) avremo pertanto la seguente situazione (in blu sono rappresentati i valori che non verranno ricalcolati al
passaggio successivo):
(1)
mi1 x1 x2 x3 x4 b
1 3 2 −4 1 1
4 12 −2 −1 3 3
3 9 7 4 1 −4
−1 −3 5 −10 6 −2
Alla luce di questo, ricalcoliamo tutti i coefficienti e i termini noti dalla seconda equazione in poi:
(2)
x1 x2 x3 x4 b
3 2 −4 1 1
0 −10 15 −1 −1
0 1 16 −2 −7
0 7 −14 7 −1
Così facendo, tutti i coefficienti di x1 (tranne la prima equazione) sono divenuti nulli. A questo punto dobbiamo consi-
derare la seconda equazione e applicare lo stesso procedimento in modo da annullare, dalla terza equazione in poi,
tutti i coefficienti di x2.
(2) (3)
mi2 x1 x2 x3 x4 b x1 x2 x3 x4 b
3 2 −4 1 1 3 2 −4 1 1
1 0 −10 15 −1 −1 0 −10 15 −1 −1
Così facendo, tutti i coefficienti di x2 (tranne la prima e la seconda equazione) sono diventati nulli. A questo punto
dobbiamo considerare la terza equazione e applicare lo stesso procedimento in modo da annullare, nella quarta e
ultima equazione, il coefficiente di x3.
Calcoliamo quindi mi3 dalla terza equazione in poi:
a33 a43
m33 = =1 m43 = = −0,2
a33 a33
(3) (4)
mi2 x1 x2 x3 x4 b x1 x2 x3 x4 b
3 2 −4 1 1 3 2 −4 1 1
0 −10 15 −1 −1 0 −10 15 −1 −1
A questo punto il processo di trasformazione del sistema è terminato e il risultato finale è un sistema equivalente
rispetto a quello di partenza:
⎧
⎪ 3x1 + 2x2 − 4x3 + ⎧
x4 =
⎪ 3x1 + 2x2 − 4x3 +
1 1x4 = 1
⎪
⎪ ⎪
⎪
⎪
⎪ 12x1 − 2x2 − 1x3 + 3x4 = 3 ⎪
⎪ − 10x2 + 15x3 − 1x4 = −1
⎨ ≡ ⎨
⎪⎪ 9x1 + 7x2 + 4x3 + x4 = −4 ⎪
⎪ 17,5x3 − 2,1x4 = −7,1
⎪⎪ ⎪
⎪
⎪⎪⎩ −3x1 + 5x2 − 10x3 + 6x4 = −2 ⎪
⎪
⎩ 5,88x4 =−3,12
ORA TOCCA A TE
■ Trasforma il seguente sistema in uno equivalente
in cui i coefficienti rappresentano una matrice
−2x1
3x1
+ 3x2 − x3 +
+ 5x2 − 3x3 +
4x4
2x4
=
=
−2
2
triangolare superiore. 6x1 + x2 + 3x3 − 5x4 = 1
4x1 + x3 + 2x4 = −1
Octave Octave
Finestra dei comandi Finestra dei comandi
M= S=
1 1.0000
3 −1.0000
−4 −7.1000
−2 −3.1200
Come si può notare, i differenti sistemi hanno prodotto gli stessi risultati, pertanto possiamo
affermare che i due sistemi sono equivalenti.
I coefficienti delle incognite del sistema equivalente sono, pertanto, rappresentati attraverso
una matrice triangolare superiore alla quale applicare agevolmente il metodo di sostituzione
all’indietro per un sistema triangolare visto in precedenza.
Formalizziamo ora il metodo di eliminazione di Gauss riportando le formule che permetto-
no di trasformare il sistema dal passo k al passo k+1 e cioè eliminando la variabile xk dalla
k + 1-esima equazione in poi.
(k)
Se akk ≠ 0 (gli elementi akk si dicono elementi pivotati del metodo)
L’implementazione in Octave
Riportiamo ora l’algoritmo di eliminazione di Gauss in Octave.
return;
end
m = A(j,i)/pivot;
A(j,:) = A(j,:)−m*A(i,:); % modifica riga di A
b(j) = b(j)−m*b(i); % modifica termine noto
end
if and(r == 's',i ~ = rig−1)
disp(A);
disp(b); La funzione disp
pause; visualizza il valore
di una variabile senza
end mostrarne il nome
end o la dicitura ans:
disp('Matrice finale (triangolare superiore):'); >> log(10)
ans = 2.306
disp(A); >> disp(log(10)
disp('Vettore finale dei termini noti:'); 2.306
disp(b);
L’implementazione in Excel
Verifichiamo la correttezza dei risultati ottenuti nell’esempio precedente attraverso l’ausilio di
un foglio di calcolo Excel visualizzando le formule utilizzate:
e i relativi risultati:
Il metodo di Jacobi decompone la matrice A del sistema iniziale Ax = b partendo dalla seguen-
te scomposizione:
0 0 + aij
aij = aij + +
0 + aij 0
A D L U
Consideriamo ora P = −(L + U) e N = D la matrice diagonale di A; è facile verificare che A = N − P:
⎡ 0 −a12 −a13 É −a1n ⎤ ⎡ a11 0 0 É 0 ⎥⎤
⎢ ⎥ ⎢
⎢ −a ⎥ ⎢ É 0 ⎥⎥
⎢ 21 0 −a23 É −a2n ⎥ ⎢ 0 a22 0
⎢ ⎥ ⎢ ⎥
P =−( L+U ) = ⎢ ! ! 0 É É ⎥ N = ⎢ ! ! akk " 0 ⎥
⎢ −a ⎥ ⎢ ⎥
⎢ n−1,1 −an−1,2 É 0 −an−1,n ⎥ ⎢ 0 0 É an−1,n−1 0 ⎥
⎢ ⎥ ⎢ ⎥
⎢ −an1 −an 2 É −an ,n−1 0 ⎥ ⎢ 0 0 É 0 ann ⎥⎥
⎣ ⎦ ⎢⎣ ⎦
Una volta calcolato N−1 ed eseguiti i prodotti c = N−1b e M = N−1P, risolviamo l’equazione:
x(k+1) = Mx(k) + c
partendo da un vettore x iniziale.
L’implementazione in Octave
Proponiamo di seguito l’algoritmo in Octave per il metodo iterativo di Jacobi.
4 −1 0 2 2 1
−1 4 2 1 1 3
3 −1 4 −1 −1 −4
3 0 1 4 4 −2
U=
0 −1 0 2
0 0 2 1
0 0 0 −1
Inserito il valore
0 0 0 0 della tolleranza,
il programma inizia
L= le iterazioni e dopo
una serie di
0 0 0 0 output intermedi
−1 0 0 0 restituisce
3 −1 0 0 il vettore delle
3 0 1 0 soluzioni xk:
xk =
N=
4 0 0 0 1.27271
0 4 0 0 2.10181
0 0 4 0 −1.61115
0 0 0 4 −0.93878
P=
−0 1 −0 −2
1 −0 −2 −1
−3 1 −0 1
−3 −0 −1 −0
M=
rs = 0.69627
c=
0.25000
0.75000
−1.00000
−0.50000
Tolleranza: 0.5
Osserviamo il controllo sul raggio spettrale su M, % iterajac funzione ricorsiva per il calcolo di x
che rappresenta un fattore essenziale, in quanto
% function [x] = iterajac(M,x,c,tol)
il metodo potrebbe divergere. Possiamo inoltre
notare che l’iterazione è demandata a un’altra % x = Mx+c tol = tolleranza
funzione (iterajac da salvare in un file separato function [x] = iterajac(M,x,c,tol)
dal nome iterajac.m), che è ricorsiva, cioè richia- x1 = M*x+c
ma se stessa con il nuovo valore del vettore x, o if norm((x−x1),1) < tol x = x1; return
termina se si è giunti alla condizione per cui:
else x = iterajac(M,x1,c,tol);
⏐⏐x(k+1) − x(k)⏐⏐1 < tolleranza end
L’implementazione in Excel
Riportiamo ora in Excel un esempio pratico sul metodo appena visto.
Consideriamo il seguente sistema Ax = b:
Da esso è sempli-
ce determinare le
seguenti matrici U
e L:
e le matrici N e P:
Prima di continuare, occorre fare una premessa: Excel prevede le formule multi-cella che rap-
presentano la soluzione ideale per le funzioni matriciali.
Fino a questo momento, abbiamo realizzato delle semplici matrici inserendo in ogni cella una
formula differente per calcolarne il singolo valore contenuto in essa.
Dovendo, invece, calcolare la matrice M come prodotto tra la matrice P e la matrice inversa di
N, abbiamo bisogno di utilizzare le funzioni matriciali e applicarle contemporaneamente a più
celle.
Per far questo potete procedere nel seguente modo:
• selezionate le celle destinate a contenere la matrice M;
• inserite all’interno della barra della formula la funzione appropriata, ma non date INVIO;
• premete la combinazione di tasti CTRL + MAIUSC + INVIO.
Digitando manualmente le parentesi graffe intorno a una formula, questa non verrà conver-
tita in una formula matriciale. È necessario premere CTRL + MAIUSC + INVIO per completa-
re una formula matriciale.
Ogni volta che si modifica una formula matriciale, le parentesi graffe scompaiono e si deve pre-
mere nuovamente CTRL + MAIUSC + INVIO per salvare le modifiche apportate alla formula.
Se si dimentica di premere CTRL + MAIUSC + INVIO, la formula si comporta come una for-
mula standard ed Excel processerà solo il primo valore o i valori presenti nella matrice spe-
cificata.
Operiamo allo stesso modo per ottenere il vettore c:
Anche in questo caso, notiamo la stessa formula matriciale inserita in più celle; notare la pre-
senza delle parentesi graffe all’interno della barra della formula.
A questo punto vi sono tutti gli elementi necessari per risolvere l’equazione
x(k+1) = Mx(k) + c
partendo dal vettore x0 iniziale:
Ribadiamo che per determinare il numero di iterazione bisogna stabilire una tolleranza tale
che:
|| x(k+1)−x(k) || < tolleranza
5 Metodi di interpolazione:
polinomio di interpolazione di Lagrange
Il calcolo numerico è utile anche per affrontare il problema dell’interpolazione di funzioni e
cioè della possibilità di costruire una funzione regolare che interpoli un insieme di punti di-
screti; formalizzando il problema, possiamo scrivere:
dato un insieme di coppie di valori (x0,y0),(x1,y1),(x2,y2),…,(xn ,y n), dove le
xi sono n+1 nodi, si trovi il polinomio di grado minore o uguale a n tale
che: pn(xi) = y i i = 0,1,…n
Quindi, noto un insieme di dati reali, il problema è costruire un polinomio che si adatti a questi
dati.
n
in cui Lk (x)= ∏
i=0,i≠k
x−x i
x k −x i k = 0,1,Én sono definiti base di Lagrange, per cui il polinomio di
Lagrange può essere riscritto come:
n ⎛ n
x −x i ⎞⎟
pn (x)= ∑⎜⎜⎜ y k ∏ ⎟⎟
k=0 ⎝ i=0,i≠K x k −x i ⎠
⎟
Condizione essenziale per l’interpolazione è quella di avere tutti i nodi distinti, e cioè xi ≠ xj
per i ≠ j. Vediamo attraverso un esempio di comprendere il funzionamento di questa formula;
consideriamo i punti:
(2,−3) (1,15) (5,2) (6,1) (4,0) (0,6)
in cui la coppia (2,−3) rappresenta (x0,y0) e la coppia (0,6) rappresenta (x5,y5):
(x −2)(x −1)(x −5)(x −6)(x −4) x 5 −18x 4 +121x 3 −372x 2 +508x −240
L5 (x)= =
(0−2)(0−1)(0−5)(0−6)(0−4) −240
Il polinomio finale sarà dato dalla somma delle basi moltiplicate per i rispettivi y i:
L’implementazione in Octave
Riportiamo ora il programma in Octave per la creazione di un polinomio di Lagrange; Octave
incorpora uno strumento per rappresentare i grafici con semplici comandi, opportunamente
commentati all’interno del listato (pagina seguente).
Il grafico compare automaticamente alla fine del processo di creazione del polinomio e rappre-
senta l’esecuzione dei comandi per disegnare il grafico, posti all’interno del programma.
L’implementazione in Excel
Excel mette a disposizione delle importanti funzionalità legate ai grafici
Un grafico a dispersione
che ci consentono di risolvere il problema dell’interpolazione a partire è la rappresentazione
da un insieme di punti. Consideriamo quindi le sei coppie di punti esa- nello spazio cartesiano di
minate sino a ora e rappresentiamole con un grafico a dispersione: un insieme di dati.
Sulla destra si aprirà un colonnino in cui impostare le opzioni della linea di tendenza di tipo
polinomiale e di grado 5, in quanto sono presenti sei coppie di valori. La spunta su “Visualizza
l’equazione” sul grafico consentirà di rendere visibile il polinomio interpolante che, come pote-
te verificare, è realizzato con il metodo di Lagrange appena visto.
L’implementazione in C++
Riportiamo in C++ l’algoritmo per calcolare il valore del polinomio in un punto x0 fornito in
input utilizzando il metodo di Lagrange.
C++
#include <iostream>
using namespace std;
#define MAX 25
int main()
{
float x[100], y[100], p = 0, x0, prod = 1;
int i, k, n;
cout << "Inserire il numero dei punti : ";
cin >> n;
for (i = 0; i < n; i++)
{
cout << "Inserire ascissa(x) del punto " << i+1 << ": ";
cin >> x[i];
cout << "Inserire ordinata(y) del punto " << i+1 << ": ";
cin >> y[i];
}
cout << "Inserire il punto in cui calcolare il valore di f(x): ";
cin >> x0;
for (k = 0; k < n; k++)
{
for (i = 0; i < n; i++)
{
if (k ! = i)
prod* = (x0−x[i])/(x[k]−x[i]);
cout << "dd(K"<< k <<")=" << prod <<endl;
}
p+ = (y[k]*prod);
}
cout << "f(x) nel punto " << x0 << " vale : " << p << endl;
system("pause");
return 0;
}
6 Metodi di interpolazione:
polinomio di interpolazione di Newton
Una variante del problema visto in precedenza è data dall’approssimazione di una funzione f
mediante funzioni più semplici, tipicamente polinomi; pertanto:
dato un insieme di x0,x1,x2,…xn(n + 1 nodi) e una funzione continua f(x),
trovare il polinomio di grado minore o uguale a n tale che:
pn(xi) = f(xi) i = 0,1,…n
Quindi, nota l’espressione analitica della funzione f(x), si ricerca una sua approssimazione fra i
polinomi di grado n che coincida con la funzione data sull’insieme dei nodi.
in cui i coefficienti ak si chiamano differenze divise e vengono calcolate nel seguente modo:
⎧⎪ f (x0 ) per k = 0
⎪⎪
⎪⎪
ak = ⎨ k f (x j )
⎪⎪ ∑ per k ≥1
⎪⎪ j=0 Πi=0 i≠ J ( x i −x j )
k
⎪⎩
mentre ωk−1(x) rappresenta il polinomio nodale definito come:
k−1
ω k−1 ( x ) = ∏( x −x i ) in cui ω 0−1 ( x ) =1
i=0
Anche in questo caso un esempio è utile per chiarire i concetti espressi dalle formule; conside-
riamo i seguenti dati iniziali:
• i valori x0 = 2, x1 = 3, x2 = 1, x3 = 5;
• la funzione f(x) = sin(x);
e determiniamo i valori della f(x) nei valori dati:
f(x0 = 2) = 0,90930 f(x1 = 3) = 0,14112 f(x2 = 1) = 0,84147 f(x3 = 5) = −0,95892
Si vuole, pertanto, determinare un polinomio che passi per i punti indicati in modo da appros-
simare al meglio la funzione data. Procediamo con il calcolo delle differenze divise:
f (x0 ) f ( x1 )
a0 = f ( x 0 ) = 0,90930 a1 = + =−0,76818
( x 0 −x1 ) ( x1 −x 0 )
f (x0 ) f ( x1 ) f (x2 )
a2 = + + =−0,418005
( x 0 −x1 )( x 0 −x 2 ) ( x1 −x 0 )( x1 −x 2 ) ( x 2 −x 0 )( x 2 −x1 )
f (x0 ) f ( x1 )
a3 = + +
( x 0 −x1 )( x 0 −x 2 )( x 0 −x 3 ) ( x1 −x 0 )( x1 −x 2 )( x1 −x 3 )
f (x2 ) f (x3 )
+ + = 0,12268
( x 2 −x 0 )( x 2 −x1 )( x 2 −x 3 ) ( x 3 −x 0 )( x 3 −x1 )( x 3 −x 2 )
Il polinomio finale sarà dato dal prodotto delle differenze divise per il rispettivo polinomio
nodale:
pn(x) = 0,90930 − 0,76818(x − 2) − 0,418005(x − 2)(x − 3) + 0,12268(x − 2)(x − 3)(x − 1)
L’implementazione in Octave
Riportiamo ora il programma in Octave per la creazione di un polinomio di Newton e della
sua rappresentazione grafica; Octave incorpora uno strumento per rappresentare i grafici con
semplici comandi, opportunamente commentati all’interno del listato (ricordiamo di utilizza-
re help nome_comando per maggiori informazioni).
% differenze divise
dd = zeros(n,1); %vettore con i valori delle differenze divise
for ind = 1:n
for j = 1:ind
pr = 1;
for i = 1:ind
if i ~ = j pr = pr*(xf(j)−xf(i));
end
end
dd(ind) = dd(ind)+(y(j)/pr);
end
end
% polinomio interpolante
poly = num2str(dd(1)); % polinomio nodale di −1 = 1 quindi solo a0 = dd[1]
pnod = ";
for i = 1:n−1
pnod = strcat(pnod,'*(x−',num2str(xf(i)),')'); % polinomio nodale
poly = strcat(poly,'+',num2str(dd(i+1)),pnod);
end
poly
% si trasforma la stringa in una funzione
fi = inline(f); p = inline(poly);
% comandi per disegnare il grafico
ig = 5 ; % fattore di ingrandimento rispetto ai nodi
x1 = min(xf)−ig; x2 = max(xf)+ig; y1 = min(y)−ig; y2 = max(y)+ig;
hold on; grid on;
title ('Grafico del polinomio di interpolazione di Newton');
xlabel('ascisse'); ylabel ('ordinate');
fplot(p,[x1,x2,y1,y2], 'b'); fplot(fi,[x1,x2,y1,y2], 'r');
% funzione errore
er = strcat(f,'−(',poly,')') erx = inline(er);
fplot(erx,[x1,x2,y1,y2], 'g−');
% comandi per disegnare i nodi
for i = 1:n
plot(xf(i),y(i), 'rh');
end;
legend ('Polinomio', 'Funzione', 'Errore', 'Nodi');
L’implementazione in Excel
Il polinomio di interpolazione di Newton si presta a essere realizzato attraverso un procedi-
mento algoritmo, pertanto per risolvere il problema con Excel dobbiamo utilizzare il linguag-
gio di programmazione VBA (Visual Basic). Lo scopo di questo paragrafo non è quello di intro-
durre al linguaggio VBA, ma semplicemente di mostrarne un suo utilizzo, utile al nostro scopo.
Vengono fornite di seguito le indicazioni sui passi da eseguire, prendendo a riferimento i valori
utilizzati sino a ora.
Appena inserito il pulsante, viene attivata la finestra “Assegna macro”, all’interno della quale
inserire il nome della macro (subroutine); facendo clic su “Nuovo” verrà attivata la finestra di
gestione della subroutine in cui inserire il codice.
Lo stesso iter deve essere svolto per quanto concerne il pulsante “Genera polinomio”. Di seguito
il codice relativo alle due subroutine.
Private Sub Differenze_divise() Private Sub Polinomio()
' calcola differenze divise ' genera polinomio di Newton
Dim n, i, j, ind As Integer Dim i, k, n As Integer
Dim xf(1 To 4) As Integer Dim pol, segno As String
Dim y(1 To 4) As Double n=4
Dim dd(1 To 4) As Double pol = "pol(x)="
Dim pr As Double For i = 1 To n
n=4 If Cells(i+2, 6) > 0 Then
For i = 1 To n segno = "+"
xf(i) = Cells(i+2, 2) Else:segno = ""
y(i) = Cells(i+2, 4) End If
Next i pol = pol+segno+Str(Cells(i+2, 6))
j = i−1
For ind = 1 To n Do While j > 0
For j = 1 To ind pol = pol+"(x−"+Str(Cells(j+2, 2))+")"
pr = 1 j = j−1
For i = 1 To ind Loop
If i <> j Then Next i
pr = pr*(xf(j)−xf(i)) Cells(8, 3) = pol
End If
Next i End Sub
dd(ind) = dd(ind)+(y(j)/pr)
Next j
Next ind
For i = 1 To n
Cells(i+2, 6) = dd(i)
Next i
End Sub
Forniamo una breve spiegazione su alcuni aspetti del linguaggio Visual Basic. Si tratta di un
linguaggio fortemente tipizzato, in quanto è necessario, come nel caso del C++, dichiarare le
variabili indicandone il tipo. La parola chiave Dim viene utilizzata allo scopo di dichiarare la
variabile seguita dal termine As e quindi dal tipo di valore che deve essere contenuto in essa.
Per quanto concerne la dichiarazione dei vettori, viene indicato il primo e l’ultimo valore
dell’indice tra parentesi tonde. Facciamo un esempio:
Dim y(1 to 4) As Double
dichiara il vettore y di numeri reali ubicati in posizioni che vanno da indice 1 a indice 4.
A proposito di vettori, a differenza del C++ si accede ai singoli elementi utilizzando le parentesi
tonde e non quadre.
Nel programma è stato utilizzata la matrice di sistema “Cells”, la quale, come si può intuire,
contiene i valori di tutte le celle del foglio di lavoro Excel.
Si può notare anche che tutte le parole chiave iniziano con la lettera maiuscola.
A differenza del C++, il concetto di blocco non è evidenziato dalla presenza di parentesi graffe,
ma viene racchiuso all’interno delle rispettive parole chiave If...End If, For...Next, Sub...End Sub
ecc.
L’implementazione in C++
Proponiamo, inoltre, una soluzione algoritmica del Polinomio di Newton in C++, il cui codice
dovrebbe esserti ormai familiare.
C++
#include"iostream"
#include"math.h"
using namespace std;
int main()
{
int i,j,n, pr,ind;
double x[50], y[50], dd[50];
cout << "quanti valori vuoi inserire? ";
cin >> n;
// acquisizione dei valori
for( i = 0; i < n; i++)
{
cout << "Inserisci valore n. " << i+1 << " ";
cin >> x[i];
}
// calcolo della funzione seno
for (i = 0; i < n; i++)
{
y[i] = sin(x[i]);
cout << "x= " << x[i] << " y=" << y[i] << endl;
}
// azzera vettore
for (i = 0; i < n; i++)
dd[i] = 0;
// calcolo delle differenze divise
for (ind = 0; ind < n; ind++)
{
for (j = 0; j < ind+1; j++)
{
pr = 1;
for (i = 0; i < ind+1; i++)
if (i ! = j) pr = pr*(x[j]−x[i]);
dd[ind] = dd[ind]+(y[j]/pr);
}
}
// visualizza differenze divise
for (i = 0; i < n; i++)
cout << "dd= " << dd[i] << endl;
// visualizza polinomio
cout << "P(x)=" << dd[0];
for(i = 1;i < n;i++)
{
if (dd[i] > 0) cout << "+";
cout << dd[i];
for (j = 0; j < i; j++)
cout << "(x−" << x[j] << ")";
}
cout << endl;
system("PAUSE");
return 0;
}
k=1 k=1
da cui ricaviamo:
n
∑( y
k=1
k −(mx k +q)) x k = 0
n
∑( y
k=1
k −(mx k +q)) = 0
n
e infine, poiché ∑ 1 = n:
⎧⎪m n x 2 +q n x =
⎪⎪ ∑ k=1 k ∑ k=1 k ∑ k=1 y k x k
k=1 n
⎨
⎪⎪m n x +qn
⎪⎩ ∑ k=1 k = ∑ k=1 y k
n
m=
(∑ x )(∑ y )
n ∑ k=1 y k x k −
n n
k=1 k
n
k=1 k
n(∑ x )−(∑ x )
n n 2
2
k=1 k k=1 k
q=
(∑ x )(∑ y )−(∑ x )(∑ x y )
n
k=1
2
k
n
k=1 k
n
k=1 k
n
k=1 k k
n(∑ x )−(∑ x )
n n 2
2
k=1 k k=1 k
L’implementazione in Octave
La retta y = mx + q risulta quella che approssima meglio i dati; il problema pertanto si riduce al
semplice calcolo dei valori m e q e Octave offre una valida soluzione grazie alla facilità con cui
possono essere svolte le operazioni sui vettori dati.
Supponiamo di avere due vettori x e y rispettivamente delle xk e yk:
x=3527819046 e y=1025493621
% retta di approssimazione
m = (n*sum(x*y)−sum(x)*sum(y))/(n*sum(x.^2)−sum(x)^2)
q = (sum(x.^2)*sum(y)−sum(x)*sum(x*y))/(n*sum(x.^2)−sum(x)^2)
funz = strcat(num2str(m),'*x+',num2str(q))
lg = 'Interpolazione lineare'
% si trasforma la stringa in una funzione
p = inline(funz);
fplot(p,[x1,x2,y1,y2]);
title (strcat('Fitting di dati ai minimi quadrati,',lg));
% comandi per disegnare i nodi
for i = 1:n
plot(x(i),y(i),'rh');
end;
legend ('Nodi', 'Retta');
L’implementazione in Excel
La retta y = mx + q, come si è detto, risulta quella che approssima meglio i dati: il problema
pertanto si riduce al semplice calcolo dei valori m e q e Excel offre una valida soluzione grazie
alla facilità con cui possono essere svolte le operazioni sui dati.
Supponiamo di avere delle coordinate x e y e quindi rispettivamente delle xk e yk:
x=3527819046 y=1025493621
Calcoliamo pertanto le varie somme per determinare i valori di m e q. Come al solito, riportia-
mo le formule utilizzate e in seguito i risultati ottenuti:
Non ci resta, quindi, che rappresentare graficamente i punti e la retta; per quest’ultima è suffi-
ciente determinare soltanto due coppie di coordinate.
L’implementazione in C++
Riportiamo in C++ l’algoritmo per la generazione della retta dei minimi quadrati su un numero
di punti n fornito in input al programma.
C++
#include <iostream>
using namespace std;
int main()
{
float x[100], y[100],syx = 0,sx = 0,sy = 0,sx2 = 0,m,q;
int i, k, n;
cout << "Inserire il numero dei punti : ";
cin >> n;
for (i = 0; i < n; i++)
{
cout << "Inserire ascissa(x) del punto " << i+1 << ": ";
cin >> x[i];
cout << "Inserire ordinata(y) del punto " << i+1 << ": ";
cin >> y[i];
}
for (k = 0; k < n; k++)
{
syx+ = y[k]*x[k];
sx+ = x[k];
sy+ = y[k];
sx2+ = x[k]*x[k];
}
m = (n*syx−sx*sy)/(n*sx2−sx*sx);
q = (sx2*sy−sx*syx)/(n*sx2−sx*sx);
cout << "y= m= " << m << "x+" << q;
system("pause");
return 0;
}
Non a caso abbiamo parlato di curva, in quanto la tecnica dei minimi quadrati può essere
utilizzata per determinare non solo una retta, ma un polinomio di grado n che approssima al
meglio i dati.
Octave fornisce una funzione che ci aiuta a risolvere in tempi rapidi il problema dei minimi
quadrati determinando appunto i coefficienti del polinomio approssimante.
La funzione in esame è:
polyfit (x, y, n)
dove x, y sono vettori contenenti le ascisse e le ordinate dei punti dei dati da approssimare, n è
il grado del polinomio utilizzato.
Abbiamo osservato in precedenza come determinare, attraverso un processo algoritmico, i co-
efficienti della retta di fitting:
y = ax + b
>>polyfit(x,y,1)
ans =
−0.29697 4.63636
La funzione restituisce un vettore con gli elementi dei coefficienti del polinomio di primo gra-
do e quindi della retta dei minimi quadrati studiata in precedenza.
Se si aumenta l’ordine dell’equazione al secondo grado polinomiale, si ottiene:
y = ax2 + bx + c
>>polyfit(x,y,2)
ans =
>>polyfit(x,y,3)
ans =
RIPASSIAMO INSIEME
APPLICAZIONI SCIENTIFICHE
IN OCTAVE, IN EXCEL E IN C++ AUDIO
A4
MAPPA
MODIFICABILE
APPLICAZIONI SCIENTIFICHE
IN OCTAVE, IN EXCEL E IN C++
classificabili in
RISOLUZIONE COSTRUZIONE DI
DI SISTEMI LINEARI FUNZIONI INTERPOLANTI
se trasformato
in forma
matriciale
allora
metodo
di Cramer
% utilizziamo l’algoritmo di Gauss meg(A,b) per trasformare il sistema in un sistema equivalente triangolare
superiore
[A,b] = meg(A,b);
% a questo punto risolviamo il sistema partendo dall’ultima equazione
x = zeros(4,1);
x(4,1) = b(4,1)/A(4,4);
x f(x)
4. • Trasforma il seguente sistema in un sistema 1 −4
rappresentato da una matrice triangolare: 3 −1
⎪⎧⎪ 3x1 + 2x2 − x3 − 2x4 = 1 5 4
⎪⎪
⎪ 6x1 − x2 + 3x3 + 5x4 = −5 6 2
⎨
⎪
⎪ −2x1 + 8x2 + 7x3 + 6x4 = 6
⎪ • scrivi le basi di Lagrange;
⎪
⎩ −5x1 − 4x2 + 3x3 +
⎪
⎪ 2x4 = 4 • calcola il valore del polinomio interpolatore
in x = 0;
• calcola il valore del polinomio interpolatore
5. • Trasforma il seguente sistema in un sistema in x = 20.
rappresentato da una matrice triangolare:
⎪⎧⎪ x1 + x2 − x3 − x4 = 3 10. • Data la seguente tabella di valori della funzione
⎪⎪ f(x):
⎪ x1 − x2 + 2x3 + 3x4 = −1
⎨
⎪
⎪ −x1 + x2 + 2x3 + 3x4 = 4 x f(x)
⎪
⎪
⎩ −x1
⎪
⎪ − x2 + 3x3 + 2x4 = −2 1 −2
0,5 1
2 2
6. • Calcola le soluzioni del sistema relativo 5 0
al precedente esercizio.
8 −4
7. • Risolvi il sistema Ax = b con i seguenti dati, • scrivi le basi di Lagrange;
prendendo in considerazione il vettore iniziale x0: • calcola il valore del polinomio interpolatore
⎡ in x = 0;
⎢ 5 0 10 0 ⎤⎥ ⎡
⎢ 0 ⎤
⎥ • calcola il valore del polinomio interpolatore
⎢ 0 10 0 34 ⎥⎥ ⎢ 10 ⎥
A= ⎢ b=⎢ ⎥ in x = 7.
⎢ 10 0 34 0 ⎥ ⎢ 14 ⎥
⎢ ⎥ ⎢ ⎥
⎢⎣ 0 34 0 130 ⎥⎦ ⎢⎣ 34 ⎥⎦ 11. • Data la seguente tabella di valori della funzione
f(x):
Determina U, L, N, P, M e le soluzioni finali
considerando una tolleranza di 0,1. x f(x)
5 −4
7 −1
10 4
15 2
• scrivi il polinomio interpolante di Lagrange;
• calcola il valore del polinomio interpolatore
in x = −2;
• calcola il valore del polinomio interpolatore
in x = −3.
12. • Data la seguente tabella di valori della funzione 16. • Determina la retta dei minimi quadrati che
f(x): rappresenti la tendenza dei seguenti dati:
x f(x) x y
1 −2 1 3
2 −1 2 5
3 2 −1 4
4 6 0 0
• scrivi le basi di Lagrange; 6 3
• calcola il valore del polinomio interpolante
in x = 0; 17. • Determina la retta dei minimi quadrati che
• calcola il valore del polinomio interpolante rappresenti la tendenza dei seguenti dati:
in x = 6.
x y
13. • Scrivi il polinomio interpolante che approssimi 3 0
al meglio la funzione f(x) = log(x) relativamente 4 4
ai seguenti punti: 7 6
x 2 1
1 5 7
0,5 9 9
2
4 18. • Determina la retta dei minimi quadrati che
8
rappresenti la tendenza dei seguenti dati:
x y
14. • Scrivi il polinomio interpolante che approssimi 5 −4
al meglio la funzione f(x) = ex relativamente
−4 0
ai seguenti punti:
−1 −2
x
0 3
1
6 1
2
−3 2
4
6 19. •• Discutere la risolubilità del sistema
⎧ x − y − 2z = 3
⎪
15. • Determina la retta dei minimi quadrati che ⎪
⎪
rappresenti la tendenza dei seguenti dati: A=⎪
⎨2x + y + z = a
⎪
⎪
⎪
⎩3x − z = 0
⎪
x y
−1 3 in funzione del parametro reale a. Suggerimento:
applicare l’eliminazione di Gauss e considerare
0 0
il sistema equivalente triangolare.
−3 2
20. •• Dire per quali valori di k ∈ ! il sistema
Ax = b ammette soluzione. In caso positivo
si determinino esplicitamente tali soluzioni.
⎡ 1 −1 ⎤ ⎡ x ⎤ ⎡ 0 ⎤
⎢ 2 ⎥ ⎢ 1 ⎥ ⎢ ⎥
A= ⎢ 0 1 1 ⎥ x = ⎢⎢ x2 ⎥⎥ b=⎢ 1 ⎥
⎢ ⎥ ⎢ x ⎥ ⎢ ⎥
⎢ 0 0 k +1 ⎥ ⎢⎣ 3 ⎥⎦ ⎢⎣ −1 ⎥⎦
⎣ ⎦
I1 R5 I5
A B
I2 I4
I3
α β γ
R1 R2 R3
J1 J2 J3 R4
+ + +
E1 E2 E3
E1 = 27 V E2 = 20 V
E3 = 25 V R1 = 4 Ω
R2 = 1 Ω R3 = 10 Ω
R4 = 20 Ω R5 = 2 Ω
CLIL ASCOLTA
LA PRONUNCIA
GLOSSARIO
CLIL
Many questions in computational and combinatorial It is not difficult to see that with a number of nodes equal
geometry refer to the study of a finite set of points on the to four, intersections may not occur in the graph. With five
Euclidean plane. Many problems in graph theory are framed nodes you can plot different configurations (here you can
in this context when the edges are linear. see different order types (introduced by Goodman and
A major issue concerns the number of straight line Pollack in 1983)). If you draw five nodes forming a convex
intersections (for example, problems of transport and figure there are five crossings. The best you can do is have
optimizing layout in the press): What is the minimum a single intersection (there is no way to draw a complete
number of crossings in a drawing of the complete graph graph of five nodes without crossing, even if the sides
of n points on a plane? A complete graph is one in which are curved).
each point (node) is connected to all others. It also assumes Maximizing the number of crossings is easy: just place
the most generic position possible for the nodes, this implies all the n nodes in a circle to get the maximum number
that in the graph no three nodes are aligned. of intersections.
The hunt to discover the crossing number of a complete to determine the rectilinear crossing number for values of
graph started with R. Guy in the 1960s. As of the year 2000 n less than 50. So far we have been successful for n ≤ 17.
only the values for n ≤ 9 were known, in 2001 the case for Recent work (as yet unpublished) has found the rectilinear
n = 10 was solved, while in 2004 it was that of n = 11. crossing number for n = 19 and n = 21. The desire to solve
The main objective of the project is to use sophisticated the problem for n = 18 has become truly irresistible: this will
mathematical methods (order type abstract extensions) be the main objective of the project.
Sezione B
TEORIA DELLA
COMPUTAZIONE
B1 B2 B3 B4 B5
Sistemi e modelli Teoria Teoria della La complessità Intelligenza
I progressi tecnologici degli automi calcolabilità computazionale artificiale e reti
degli ultimi decenni L’automa è un La teoria della Dato un problema, neurali
hanno reso possibile qualunque dispositivo calcolabilità si occupa è possibile I progressi ottenuti
costruire sistemi che esegue da se della potenza e delle determinare un recentemente
informatici sempre più stesso un particolare limitazioni dei sistemi insieme, generalmente nell’intelligenza
complessi e strutturati. compito, sulla base di calcolo. È nata finito, di algoritmi in artificiale non hanno
Di conseguenza, di stimoli o ordini quando i logici grado di risolverlo. precedenti. Ma se le
per progettarne ricevuti. In sostanza, matematici – La scelta di un nostre esperienze si
e analizzarne il concetto di automa esplorando i concetti algoritmo piuttosto incrociano sempre più
il comportamento, è quello di una di computazione, di un altro può essere spesso con software
non è più macchina capace algoritmo, problema basata su differenti “intelligenti”, siamo
sufficiente applicare di svolgere in maniera risolvibile per via fattori. Tra essi, ancora distanti dalla
un semplice approccio automatica, una volta algoritmica – quello che gioca creazione di una vera
di studio intuitivo. sollecitata in modo dimostrarono un ruolo essenziale intelligenza artificiale,
Occorre ricorrere opportuno, operazioni l'esistenza di problemi è la complessità in grado di pensare
a rappresentazioni che portano a un non risolvibili con computazionale, almeno come un
astratte e preciso risultato. nessun algoritmo. che è una grandezza essere umano.
formalizzate: i modelli. misurabile.
PREREQUISITI OBIETTIVI
Conoscenze Conoscenze Abilità
• Strategie per la risoluzione di • Concetto di sistema • Saper classificare sistemi
problemi quale astrazione utile alla • Riconoscere e utilizzare modelli utili per
• Algoritmi comprensione della realtà la rappresentazione della realtà
• Generalità sui sistemi • Concetto di informazione per la • Costruire automi
Abilità comprensione dei procedimenti • Utilizzare la macchina di Turing
di soluzione dei problemi • Saper valutare un algoritmo in termini di
• Saper strutturare un programma • Automa quale modello di efficienza e costi
• Implementare algoritmi calcolo • Saper distinguere pregi e potenzialità
• Riconoscere le caratteristiche di • Metodi computazionali e di algoritmi genetici e sistemi di
un sistema esaminato nella vita macchina di Turing intelligenza artificiale
di tutti i giorni • Complessità computazionale e Competenze
ordine di grandezza dei problemi
• Intelligenza artificiale • Utilizzare strumenti metodologici per
• Reti neurali porsi con atteggiamento razionale e
• Sistemi esperti e algoritmi critico di fronte a sistemi e modelli di
genetici calcolo
125
Codice Fiscale: nctgrl03r12e156z
Cognome: Nicotra
Nome: Gabriele
B1 Sistemi e modelli
IMPARERAI…
Che cosa sono e a che cosa Che cosa significa “modellare” A riconoscere e classificare
servono i sistemi una realtà i sistemi e i modelli
1 I sistemi
Una semplice definizione
Intuitivamente, conosciamo la differenza tra un mucchio di piselli e un’automobile. Se toglia-
mo o aggiungiamo un pisello al mucchio non cambia quasi nulla, ma se togliamo o aggiungia-
mo un elemento agli oggetti che costituiscono l’automobile, le cose cambiano radicalmente.
Pensa a che cosa accadrebbe se togliessimo il motore, o se aggiungessimo un paio di ali. Ciò
accade perché non è possibile affermare che un’automobile è uguale alla semplice somma degli
elementi di cui è costituita, cosa che, invece, possiamo affermare per il mucchio di piselli.
L’automobile, infatti, è formata da oggetti che interagiscono tra loro con lo scopo di farla fun-
zionare come se fosse un’unica entità. Possiamo affermare, allora, che un mucchio di piselli
non è un sistema, mentre un’automobile lo è.
La definizione di sistema può essere più o meno complessa, più o meno formale; noi ne utiliz-
zeremo una abbastanza semplice.
Un sistema è un insieme di elementi che interagiscono tra loro per funzionare come un unico
elemento.
OSSERVA COME SI FA
1. Consideriamo il sistema automobile; in esso possiamo identificare tutti gli elementi
che caratterizzano un sistema.
Infatti:
• l’obiettivo è permettere gli spostamenti dell’uomo;
• le parti sono costituite dai vari componenti meccanici ed elettrici: il moto-
re, le ruote, le portiere, e così via;
• le interazioni sono: in ingresso, il carburante e le persone da trasporta-
re, in uscita l’energia (termica e meccanica) e le persone trasportate;
• le relazioni sono le attività svolte dai vari componenti che permettono
all’automobile di essere messa in moto, di avanzare, di sterzare, e
così via.
2. Ora consideriamo un altro sistema: il corpo umano. Anche in esso possiamo identificare tutti gli elementi che
caratterizzano un sistema.
Infatti:
• l’obiettivo è la sopravvivenza dell’uomo;
• le parti sono costituite dai vari apparati: l’apparato circolatorio, l’apparato respiratorio, l’apparato nervoso, l’ap-
parato muscolare e così via;
• le interazioni sono, per esempio, l’aria respirata in ingresso rispetto al corpo umano, la sudorazione in uscita dal
corpo umano;
• le relazioni consistono nella sincronizzazione delle attività svolte dai vari apparati che permettono al sistema
stesso di far sopravvivere l’uomo; per esempio, la respirazione permette di filtrare l’ossigeno che viene distribuito
alle cellule tramite l’apparato circolatorio, e così via.
3. Consideriamo infine il sistema computer. In esso possiamo identificare tutti gli elementi che caratterizzano
un sistema.
Infatti:
• l’obiettivo è permettere le elaborazioni da parte dell’uomo;
• le parti sono costituite dai vari componenti meccanici, elettrici ed elettronici: il microprocessore, la memoria, la
scheda madre, e così via;
• le interazioni sono: in ingresso, i dati e i programmi inseriti dall’utente; in uscita, i dati trasformati;
• le relazioni sono le attività svolte dai vari componenti che permettono al computer di visualizzare immagini, stam-
pare lettere e relazioni, e così via.
I sottosistemi
Spesso le parti che costituiscono un sistema (specialmente se questo è complesso) sono, a loro
volta, altri sistemi. Si parla allora di sottosistemi.
Ogni sottosistema, pur essendo sempre un sistema e potendo quindi essere considerato sin-
golarmente, concorre al raggiungimento dell’obiettivo del sistema principale di cui è parte.
Nel sistema complesso del corpo umano, per esempio, possiamo individuare il sottosistema
cuore, il sottosistema fegato, il sottosistema cervello e molti altri. Ogni sottosistema è, a sua
volta, un sistema. Nel sottosistema cuore, per esempio, possiamo identificare tutti gli elementi
che caratterizzano un sistema.
Infatti:
• l’obiettivo è garantire il filtraggio del sangue venoso e l’invio
del sangue arterioso in tutto il corpo;
• le parti sono costituite dai ventricoli destro e sinistro, e così
via;
• le interazioni sono: il sangue venoso in ingresso (che dalle
parti periferiche del corpo arriva al cuore) e il sangue arterio-
so, purificato e ossigenato, in uscita (che dal cuore va verso le
parti periferiche del corpo);
• le relazioni consistono nella sincronizzazione dei sottosiste-
mi (per esempio, quando il ventricolo destro si apre, quello si-
nistro si chiude), che permettono al sistema un costante e con-
tinuo filtraggio e pompaggio del sangue.
Nell’esempio del sistema cuore, lo stato interno può essere composto dall’insieme delle sue
caratteristiche fisiche quali il volume, la pressione sanguigna, e così via; per il sistema auto-
mobile, lo stato interno può essere composto dall’insieme dei valori che rappresentano i litri
di carburante presenti nel serbatoio, la marcia inserita, il livello dell’olio motore, e così via.
Leggere i valori dello stato di un sistema in un certo istante equivale a effettuare una fotografia
del sistema in quell’istante, ovvero a considerare la sua situazione in quel preciso momento.
I valori degli ingressi di un sistema, i valori delle uscite e i valori assunti dallo stato di un siste-
ma vengono memorizzati in apposite variabili che prendono il nome di variabili di ingresso,
di uscita e di stato.
AUTOMOBILE
I1 = Carburante S1 = Ferma U1 = Energia termica
S2 = Avanza
U2 = Energia meccanica
I2 = Persone da S3 = In retromarcia
trasportare U3 = Persone
... trasportate
Tali leggi molto spesso sono complicate e vengono espresse mediante complesse formule ma-
tematiche. Le relazioni esistenti tra le variabili o tra le varie parti di un sistema sono rilevabili
ed esprimibili mediante funzioni matematiche. Le funzioni sono le seguenti.
• La funzione di transizione dello stato f() ci permette di calcolare quale valore assumerà
lo stato del sistema s(t) a un generico istante t, in base alla situazione iniziale del sistema
s(t0) e a tutti gli ingressi applicati al sistema dall’istante iniziale t0 fino all’istante t, cioè i(t).
Possiamo esprimerla nel seguente modo:
s(t) = f(s(t0), i(t))
• La funzione di trasformazione delle uscite g() ci permette di calcolare quale valore as-
sumerà l’uscita u(t) a un generico istante (t), conoscendo il valore dello stato e degli ingressi
allo stesso istante.
u(t) = g(s(t), i(t))
Esistono, però, relazioni che per loro natura possono essere espresse solo tramite tabelle di
corrispondenza esplicite, grafici o altre forme, che, in alcuni casi, rendono difficile l’individua-
zione del tipo di relazione matematica esistente.
Definizione di un sistema
Un sistema è completamente descritto quando si conoscono le sue caratteristiche e il suo
comportamento, cioè quando si sa che cosa succede in uscita quando si applicano determi-
nati ingressi.
Studio di un sistema
Un sistema descritto secondo lo schema qui illustrato viene studiato per affrontare tre diversi
tipi di problemi.
• Problema della previsione: noti l’ingresso I e il sistema
I S ?
S, si vuole determinare l’uscita U.
Nei primi due casi conosciamo il comportamento del sistema e quindi la corrispondenza tra in-
gresso e uscita, nell’ultimo caso dobbiamo determinare il comportamento dell’intero sistema,
cioè identificare il sistema.
OSSERVA COME SI FA
1. Caffettiera
Una caffettiera è un sistema composto dai seguenti sottosistemi:
• serbatoio d’acqua
• filtro
• guarnizione
• recipiente superiore
• impugnatura
CAFFETTIERA
I1 = Acqua S1 = Vuota U1 = Caffè
I2 = Caffè S2 = Pronta
U2 = Vapore
I3 = Fonte S3 = In riscaldamento
di calore
...
La funzione di transizione deve indicare come la caffettiera passi dallo stato vuota allo stato pronta, dallo stato pronta
allo stato in riscaldamento e così via.
La funzione di trasformazione deve indicare come fa la caffettiera a produrre in uscita il caffè e il vapore.
2. Sistema di irrigazione
Consideriamo un impianto di irrigazione automatico per piccoli orti o terrazzi in grado di fornire acqua tramite irrigatori,
nella quantità prefissata dall’utente.
Il sistema è composto dai seguenti elementi:
• ingresso dell’acqua
• tubazioni principali
• pompa per aumentare la pressione dell’acqua
• centralina elettronica di comando
• tubazioni secondarie
• irrigatori
IMPIANTO
DI IRRIGAZIONE
I1 = Acqua
U1 = Umidità
S1 = In azione del terreno
I2 = Impostazioni
S2 = Spento
della centralina
S3 = In pausa
La funzione di transizione deve indicare come l’impianto di irrigazione passi dallo stato spento allo stato in azione,
dallo stato in azione allo stato in pausa, e così via.
La funzione di trasformazione deve indicare come fa l’impianto di irrigazione a produrre in uscita un’umidità del terre-
no accettabile per la sopravvivenza delle piante.
Per esempio, un missile che viaggia dalla Terra alla Luna consumando com-
bustibile solido è un sistema variante: una caratteristica fisica del dispo-
sitivo, la sua massa, varia nel tempo, e infatti il suo moto varia in quanto la
sua massa diminuisce con il tempo per effetto del consumo del carburante.
Attenzione, però, l’obiettivo è quello di studiarne il moto!
Un sistema distributore di lattine è invariante: infatti un comando dato in
istanti di tempo diversi porta sempre allo stesso risultato.
Una variabile è continua quando, scelti due possibili valori diversi tra
loro del suo dominio di esistenza D, la variabile può assumere tutti gli
infiniti valori compresi tra questi due estremi, mentre diremo che è
discreta quando può assumere solo un numero finito di valori.
Per esempio, la variabile peso è continua, infatti una persona non pesa 67 o
68 kg, ma il suo peso può essumere uno qualsiasi degli infiniti valori com-
presi tra 67 e 68; in questo caso consideriamo come dominio di esistenza
[0, 200], supponendo che una persona pesi al massimo 200 kg.
La variabile pulsante è sicuramente discreta, infatti può assumere solo
due valori: acceso o spento; in questo caso abbiamo come dominio di esi-
stenza D = {acceso, spento}.
Per esempio, le caratteristiche di un sasso rimangono invariate nel tempo. Questo tuttavia non
è vero se si considera come tempo il passare dei millenni, cioè se si ragiona su scala geologica.
Anche questo dipende dallo scopo dell’analisi del sistema.
ORA TOCCA A TE
■ Individua i vari sottosistemi e le grandezze in gioco per i seguenti sistemi.
• Controllo della temperatura in una stanza
Supponi di voler mantenere la temperatura di una stanza costante a 19°. Un termostato controlla la temperatura nella
stanza e comanda l’afflusso di acqua ai caloriferi della stanza.
• Sistema di puntamento di un cannone, a catena aperta
Calcola a priori le coordinate dell’obiettivo, quindi sia la direzione sia l’alzata del cannone (impostazioni).
Calcola gli effetti del vento o di altri agenti esterni e poi inizia a sparare.
• Sistema di puntamento di un cannone, a catena chiusa
Calcola a priori le coordinate dell’obiettivo, quindi sia la direzione sia l’alzata del cannone. Calcola gli effetti del vento
o di altri agenti esterni e poi inizia a sparare. Dopo il primo colpo si valuta la distanza dell’obiettivo e in base a questa
vengono valutate le impostazioni del cannone.
• Orologio ad acqua
Quando osservi la figura, noterai che per avere uno spo-
stamento costante e uniforme sulla scala temporale, oc-
corre che la portata in ingresso al serbatoio principale sia
costante. Per far questo il livello dell’acqua del serbatoio
di regolazione dev’essere mantenuto costante. Questo è
ottenuto attraverso l’uso di una valvola fluttuante che fun-
ziona, in sostanza, da sistema retroazionato. L’acqua entra
nel serbatoio di regolazione da una fonte esterna, supponi Serbatoio
per semplicità da un altro serbatoio detto serbatoio di ri- di rifornimento Galleggiante
fornimento, e arriva al serbatoio di regolazione attraverso Scala
un piccolo tubo di afflusso alla fine del quale vi è un galleg- temporale
giante sferico che funge da elemento regolante: quando il
livello dell’acqua si abbassa, con esso scende il galleggian-
te che apre il tubo di afflusso facendo aumentare la portata Serbatoio
d’acqua in ingresso al serbatoio di regolazione. Al contra- di regolazione
rio, quando aumenta il livello nel serbatoio di regolazione
si ha un conseguente innalzamento anche del galleggiante,
che provoca una diminuzione della portata dell’acqua in
ingresso. Il risultato è quello di avere il livello del serbatoio Serbatoio
di regolazione costante, a meno di piccole oscillazioni. principale
Il concetto di astrazione
Parlando di modelli, siamo portati inevi-
tabilmente a parlare di astrazione. Tale
concetto è molto comune in informatica e
possiamo riassumerlo come segue.
Tipi di modelli
I modelli possono essere classificati in base al contesto in cui devono risultare simili al si-
stema originale: essenzialmente si dividono in fisici e astratti.
• Fisici o reali sono i modelli la cui struttura è costituita da elementi del mondo fisico.
• Astratti o simbolici sono i modelli che consentono di rappresentare le caratteristiche del-
la realtà analizzata servendoci di un linguaggio simbolico (per esempio, il linguaggio ma-
tematico, il linguaggio grafico, il linguaggio di programmazione).
A loro volta, i modelli fisici si possono suddividere in iconici e analogici, mentre tra quelli
astratti si possono individuare i modelli matematici, quelli grafici e quelli logici.
Possiamo schematizzare tutto ciò con la seguente figura:
MODELLI
Fisici Astratti
INFOGR AFICA
Classificazione dei
MODELLI
MODELLI
Un MODELLO è una rappresentazione semplificata di un sistema con tutti
i dettagli necessari alla risoluzione di un problema. A seconda del contesto
all’interno del quale cercano di rappresentare il sistema originale, i modelli
possono essere considerati fisici o reali oppure astratti o simbolici.
Fisici o reali
Quando la loro struttura è costituita
da elementi del mondo fisico.
Iconici Analogici
Tutte le riproduzioni di sistemi in cui Riproduzioni in cui vengono mantenute
una o più grandezze originali sono state inalterate le relazioni tra gli elementi
modificate proporzionalmente, al fine del sistema, ma in cui le grandezze
di semplificarne lo studio. fisiche originali vengono sostituite
Un esempio tipico sono i modellini in scala: (almeno parzialmente)
se la scala è 1:1 si parla di modello naturale, con altre dal comportamento analogo.
mentre si parlerà di modelli ridotti quando Un esempio di modello analogico è
la scala è minore di 1 e di modelli espansi il barometro metallico, un cilindro con
quando è maggiore di 1. una base mobile in cui è stato praticato
Difficilmente il fattore di scala il vuoto. La pressione comprime il cilindro
è lo stesso per tutte e i movimenti della parete mobile vengono
le grandezze: per trasmessi a un indice che visualizza
esempio, il modellino la pressione su una scala graduata.
di un elefante La grandezza reale (pressione
potrà riprodurne atmosferica) viene
fedelmente le rappresentata dalla
dimensioni, ma non rotazione dell’indice,
il peso. In questi che è di natura diversa;
casi, il modello ma il comportamento
si dice simile. è analogo.
Matematici
Sono i modelli in cui il sistema è
rappresentato dalle leggi matematiche
che lo regolano.
Ne sono stati teorizzati di molti tipi, ma
i più usati nello studio dei sistemi sono:
Astratti • l’insiemistica, che permette di
o simbolici
rappresentare le mutue relazioni tra
gli insiemi e le rispettive gerarchie
di appartenenza;
Quando rappresentano le • l’algebra, che racchiude tutte le regole
caratteristiche della realtà fondamentali per il calcolo;
analizzata servendosi • l’analisi funzionale, che consente
di un linguaggio simbolico. di rappresentare attraverso funzioni
le mutue relazioni tra gli elementi
di un sistema e di studiarne
il comportamento nel tempo.
Grafici
Sono i modelli che rappresentano
il sistema a cui si riferiscono con
Logici particolari codifiche simboliche
(tipicamente forme e disegni).
Detti anche algoritmici, questi Sono impiegati più che altro per scopi
modelli sono insiemi di regole logico- educativi ed esplicativi, visto che
funzionali che permettono di emulare sfruttano pienamente tutta la capacità
integralmente il sistema originale. espressiva insita nella comunicazione
Un esempio sono le simulazioni visiva. Questa stessa infografica è un
di sistemi reali tramite linguaggi esempio di modello grafico, così come
di programmazione o altri strumenti gli schemi a base di frecce e i riassunti
informatici. che fai mentre studi.
RIPASSIAMO INSIEME
SISTEMI E MODELLI
AUDIO
B1
MAPPA
MODIFICABILE
SISTEMI
comportamento
5. Qual è l’obiettivo dello studio di un sistema? 16. Una tabella che descrive un sistema
è un modello di tipo:
6. Quando una variabile si dice discreta?
A matematico
7. Quando un sistema si dice discreto nelle B iconico
sollecitazioni? C analogico
D logico
8. Quando un sistema si dice discreto nelle
interazioni? 17. Un programma scritto in un linguaggio
di programmazione è un modello di tipo:
9. Nello studio di un sistema, in che cosa consiste A matematico
il problema della previsione?
B iconico
10. Che differenza c’è tra ingressi e disturbi? C grafico
D logico
11. A che cosa serve un modello?
18. Considera una nuova classificazione: sistema
12. Classifica i seguenti sistemi per tipo: naturale, artificiale, misto. Quali dei seguenti
sistemi sono naturali, quali artificiali e quali
A la roulette misti?
B un orologio A Lettore CD
C un aereo B Flipper
D una lavatrice C Sistema di equazioni di primo grado
E una diga D Essere umano
F un frigorifero E Sistema solare
G un semaforo F Sistema nervoso
H una bicicletta
I una calcolatrice tascabile 19. Un dipinto in un museo è considerato da un
visitatore come un sistema statico, mentre per
L un libro di testo l’addetto al suo restauro è un sistema dinamico.
M una cucina a gas Perché?
N un autobus nell’ora di punta
O un impianto antifurto 20. La piantina in scala di un appartamento
è un modello:
P un impianto di riscaldamento per la casa
A grafico
13. Che tipo di sistema è un distributore automatico B matematico
di bibite? C iconico
D logico
14. Che tipo di modello è una costruzione
in mattoncini LEGO che rappresenta
un’abitazione?
Letto
Soggiorno
28. •• Individua tra i seguenti il sistema
e i suoi sottosistemi:
Bagno
A atomi di carbonio, proteina, atomi di idrogeno,
atomi di ossigeno, atomi di azoto
B persone, edifici, economia, macchine, impianti,
26. Che tipo di modello è quello rappresentato allevamenti
di seguito?
C Sole, pianeti, sistema solare, comete, asteroidi,
⎧
⎪
⎪6 y − 3x = 0 detriti spaziali
⎨
⎪
⎩2x + 4 y = 8
⎪ D persone, comunicazione, team di lavoro, messaggi
IMPARERAI…
A che cosa servono gli automi Come riconoscere un automa Come rappresentare un automa
Per quanto detto, un automa è un sistema. Possiamo quindi introdurre la seguente definizione.
Un automa a stati finiti (ASF) è un automa in cui anche l’insieme degli stati è composto da
un numero finito di elementi.
Moneta2/Moneta2
Moneta1/Niente
■ mediante un diagramma degli stati
(modello grafico); S1 Moneta1/Lattina S2
Moneta2/Lattina
• Le bolle o nodi rappresentano gli stati dell’automa. All’interno della bolla si scrive il nome
dello stato corrispondente.
• Gli archi rappresentano le relazioni di passaggio da uno stato all’altro. L’etichetta sopra
ogni arco ha la forma seguente:
Input/Output
cioè è formata dall’input che genera la transizione e dall’output che viene rilasciato a segui-
to della transizione.
Per esempio, la transizione mostrata qui con l’etichetta Moneta/Lattina:
Moneta/Lattina
S1 S2
significa che dallo stato S2, quando si riceve in input una moneta, si transita allo stato S1
emettendo in uscita una lattina.
• Lo stato iniziale è quello dal quale l’automa inizia a ricevere gli ingressi e a descrivere il suo
comportamento (elaborazione o esecuzione). È rappresentato da un nodo con una freccia
entrante:
S0
• Gli stati finali sono particolari stati in cui si viene a trovare l’automa al termine di un’ese-
cuzione che ha avuto successo.
Sono individuati da una bolla con un doppio circolo e vengono indicati solo negli automi per
cui ciò ha significato.
Sf
Il diagramma degli stati quindi è una rappresentazione grafica sia della funzione di transi-
zione f sia della funzione di trasformazione g.
OSSERVA COME SI FA
■ Automa distributore automatico di bibite – Prima versione
Descrizione dell’automa
L’automa deve emettere in uscita una lattina di aranciata dopo che sono state inserite due monete da 1 euro. L’au-
toma funziona solo con monete da 1 euro.
Moneta/Niente
S1 S2
Moneta/Lattina
Transizione di stato
Nel caso dell’automa distributore, ci troviamo nello stato “attesa seconda moneta” solo dopo
che si è verificato l’evento “introduzione di una moneta da 1 euro”; passiamo a un nuovo stato,
eventualmente, fornendo un output. Nell’esempio, dallo stato “attesa seconda moneta” passia-
mo allo stato “attesa prima moneta”, fornendo in output una lattina.
OSSERVA COME SI FA
■ Automa ascensore – Consideriamo l’esempio dell’automa ascensore per individuare meglio i passi da seguire
per arrivare alla costruzione del diagramma degli stati.
Le fasi sono:
• 1° Passo [Analisi delle specifiche verbali e/o scritte]
• 2° Passo [Formalizzazione]
• 3° Passo [Sintesi con diagramma degli stati]
Descrizione dell’automa
Progettare la logica di funzionamento di un sistema capace di controllare un ascensore per una
ALL
palazzina di tre piani, con pulsantiera mostrata a lato.
2° Passo [Formalizzazione]
In questa fase si procede a codificare ingressi, uscite e stati assegnando loro nomi più concisi.
S0
1P/“Primo” S0
S1
Nel caso in cui venga premuto il pulsante 2P, si avrà un comportamento analogo al precedente così come indicato
di seguito.
1P/“Primo” S0 2P/“Secondo”
S1 S2
A questo punto, lasciando da parte per il momento il pulsante ALL, non ci resta che il pulsante T per completare la
descrizione del comportamento ammissibile dallo stato S0; in questo caso, il comando richiesto sarà ininfluente e
quindi l’ascensore non farà altro che rimanere al piano terra. Nella rappresentazione grafica, questo è indicato con
un arco che partirà dallo stato S0 e ritornerà sempre in S0 con segnale d’uscita “Terra”.
T/“Terra”
1P/“Primo” S0 2P/“Secondo”
S1 S2
Terminata l’analisi relativa allo stato S0, possiamo completare il grafo procedendo allo stesso modo sia per S1 che
per S2.
T/“Terra”
1P/“Primo” S0 2P/“Secondo”
1P/“Primo”
S1 T/“Terra” S2
2P/“Secondo”
Quindi:
T/“Terra”
2P/“Secondo”
1P/“Primo” S0 2P/“Secondo”
1P/“Primo”
S1 T/“Terra” S2
T/“Terra”
2P/“Secondo”
1P/“Primo”
5 Le tabelle di transizione
Un’altra modalità di rappresentazione degli automi, del tutto equivalente ai diagrammi di
transizione, è quella che utilizza la tabella di transizione.
La tabella di transizione è una tabella con un numero di righe pari al numero degli stati
dell’automa e un numero di colonne pari al numero dei diversi ingressi. Le celle contengono
una coppia formata dallo stato successivo e dall’uscita da emettere.
Per esempio, consideriamo la tabella relativa a quattro stati e tre ingressi, e in particolare la
riga relativa allo stato S3 e la colonna relativa all’ingresso I2. La cella situata all’incrocio tra
tale riga e tale colonna contiene lo stato successivo e l’uscita quando nello stato S3 si avrà l’in-
gresso I2.
Ingressi
I1 I2 I3
Stati
S1
S2
S3 Stato successivo/
Uscita
S4
Consideriamo l’automa del distributore di bibite analizzato nelle lezioni precedenti. La tabella
di transizione che lo descrive è formata da due righe, poiché abbiamo due stati, e da una sola
colonna, poiché abbiamo un solo ingresso.
Ingressi
Moneta
Stati
S1 S2/Niente
S2 S1/Lattina
La prima riga dice che, quando ci si trova nello stato S1 (attesa prima moneta) e viene inserita
una moneta da 1 euro (Moneta) si passa allo stato S2 senza emettere in uscita una lattina.
Quando, invece, ci si trova nello stato S2 (attesa seconda moneta) e viene inserita una moneta
da 1 euro (Moneta), si passa allo stato iniziale S1 e questa volta si emette in uscita una lattina
di aranciata.
Ora apportiamo una piccola modifica all’automa distributore appena descritto, analizzando
questa seconda versione.
OSSERVA COME SI FA
■ Automa distributore automatico di bibite – Seconda versione
Descrizione dell’automa
L’automa deve emettere in uscita una lattina di aranciata dopo che sono state inserite due monete da 1 euro oppure
una da 2 euro. L’automa funziona solo con monete da 1 euro e da 2 euro e non fornisce resto.
S1 Moneta1/Lattina S2
Moneta2/Lattina
Ingressi
Moneta1 Moneta2
Stati
S1 S2/Niente S1/Lattina
S2 S1/Lattina S2/Moneta2
La seconda riga, per esempio, dice che, quando ci si trova nello stato S2 (attesa seconda moneta):
• se viene inserita una moneta da 1 euro (Moneta1) si passa allo stato S1 e si emette in uscita una lattina;
• se viene inserita una moneta da 2 euro, la si restituisce e si rimane nello stesso stato in attesa di una moneta
da 1 euro.
Gli automi riconoscitori sono quelli in grado di riconoscere la presenza di una particolare
sequenza di simboli tra tutti quelli che si avvicendano in ingresso.
Tra gli automi riconoscitori, molto importanti sono quelli in grado di riconoscere se una strin-
ga fa parte o meno di un determinato linguaggio. Tali automi, dopo l’ingresso dell’ultimo sim-
bolo della stringa in ingresso rispondono:
• con un “sì” (o “riconosciuta”) se la stringa appartiene al linguaggio;
• con un “no” (o “non riconosciuta”) se la stringa non appartiene al linguaggio.
Ingressi: Uscite:
OSSERVA COME SI FA
■ Consideriamo un automa riconoscitore che rileva la presenza della sequenza 010 tra tutti i simboli 0 e 1 che
si avvicendano in ingresso.
Ingressi: Uscite:
U = {0, R} 0/0
0 = non è stata riconosciuta alcuna sequenza 010 A B
R = è stata riconosciuta la sequenza 010
1/0
S = {A, B, C} 0/R
A = (stato iniziale) si rimane in questo stato finché 1/0 1/0
esce 1
B = è stato riconosciuto il primo zero della sequen-
za C
C = è stata riconosciuta la sottosequenza 01
OSSERVA COME SI FA
1. Automa cassaforte – Progettiamo un automa riconoscitore che riconosca la sequenza 245 di apertura di una
cassaforte. In ingresso, possono avvicendarsi numeri interi compresi tra 0 e 5.
Ingressi: Uscite:
I = {0, 1, 2, 3, 4, 5}
U = {0, R}
0 = non è stata riconosciuta alcuna sequenza 245
R = è stata riconosciuta la sequenza 245
S = {A, B, C}
A = (stato iniziale) si rimane in questo stato finché non si inserisce 2
B = è stato riconosciuto il numero 2 quale primo valore della sequenza
C = è stato riconosciuto il numero 4 quale secondo valore della sequenza
Tabella di transizione
Ingressi
0 1 2 3 4 5
Stati
A A/0 A/0 B/0 A/0 A/0 A/0
B A/0 A/0 B/0 A/0 C/0 A/0
C A/0 A/0 B/0 A/0 A/0 A/R
2. Automa riconoscitore della stringa “ADA” – Progettiamo un automa riconoscitore che non ammette ripetizioni:
se, per esempio, l’automa riceve in ingresso la sequenza “ADADA”, riconosce solo una stringa e non due.
A/0 D/0
A/R
S0 S2
D/0 D/0
ORA TOCCA A TE
1. Prova a modificare l’automa ammettendo che in ingresso possano essere letti i simboli A, B, C, D.
2. Definisci un automa riconoscitore che non ammette ripetizioni in grado di riconoscere all'interno
di un insieme di bit la sequenza 11001.
RIPASSIAMO INSIEME B2
TEORIA DEGLI AUTOMI
AUDIO
RIPASSIAMO INSIEME B2
MAPPA
MODIFICABILE
AUTOMI
sistemi
caratterizzati da
dinamicità
invarianza
discretezza
ingressi e uscite
finiti
B A/0 Y/0
B i
00 10
s
X X/0 Z/0
Y Y/0 Y/0
IMPARERAI…
Di cosa si occupa la teoria Che cos’è e come funziona Che cosa sono i problemi risolubili
della calcolabilità una macchina di Turing e la tesi di Church
Formulazione
di un problema
Metodo risolutivo
(progetto)
Bontà
Individuazione di un algoritmo
di un algoritmo (complessità
computazionale)
Linguaggio
di programmazione
(codifica)
Scelta
Stesura del linguaggio
del programma più adatto (sintassi
Esecuzione e semantica)
su una
macchina fisica
Risultati (output)
Formulazione
di un problema
Metodo risolutivo
(progetto)
Bontà
Individuazione di un algoritmo
di un algoritmo (complessità
computazionale)
Scelta del formalismo
per la codifica
dell’algoritmo
Scelta
Dati (input) Esecutore dell’esecutore
più adatto
Risultati (output)
I modelli matematici
I modelli matematici servono a svincolarci da una determinata macchina fisica.
Una macchina fisica, infatti, potrebbe essere “migliore” di un’altra e risolvere un problema che
l’altra non riesce a risolvere. Ma se neanche la macchina “più potente” risolve un problema,
questo potrebbe essere non risolvibile.
Tra questi modelli matematici il più famoso è quello delle macchine di Turing (MdT), un’a-
strazione matematica che rappresenta un potente strumento logico-concettuale per capire
che cosa si intende per elaborazione.
Le MdT infatti:
■ hanno posto le basi per i moderni computer e sono essenziali per lo studio di un’altra im-
portante disciplina dell’informatica: la teoria della computabilità, che studia il calcolo
algoritmico, ossia il calcolo eseguibile in modo meccanico;
■ sono alla base della programmazione imperativa, introducendo concetti essenziali qua-
li: locazione di memoria, assegnamento, stato, iterazione;
■ hanno messo a disposizione i concetti chiave per poter introdurre una definizione di mac-
china astratta.
In realtà esiste una gerarchia di esecutori-modelli che (semplificando) possiamo chiamare
macchine. Li elenchiamo di seguito dal più specifico al più generico (quello che risolve una
classe di problemi più ampia):
• macchine combinatorie;
• macchine (automi) a stati finiti;
• macchine a stack;
• macchine di Turing.
La macchina di Turing è quella in grado di risolvere la
classe più ampia di problemi.
2 Un modello computazionale:
la macchina di Turing
Nel 1936 il matematico inglese A.M. Turing propose una definizione del concetto di algoritmo
tramite un modello matematico di macchina in grado di eseguire una computazione. Tale mo-
dello prese il suo nome diventando la famosa macchina di Turing.
La macchina di Turing fu introdotta una decina di anni prima che fosse realizzato il primo
prototipo di elaboratore a “programma memorizzato”. È stata considerata un modello, con una
struttura molto semplice e facile da percepire, che tiene conto di tutte le proprietà logiche di
una macchina reale capace di eseguire qualunque algoritmo.
La macchina di Turing assume un ruolo decisamente molto importante nella teoria della
computabilità, che si occupa dell’analisi degli algoritmi per decidere sulla loro computabili-
tà, cioè sul fatto che siano o meno risolvibili indipendentemente dalla macchina fisica su cui
saranno eseguiti.
L’attuale struttura del computer (macchina di Von Neumann) deriva dal formalismo della
macchina di Turing. La macchina di Turing rappresenta un prototipo astratto di macchina
calcolatrice, costruito in modo da riprodurre ciò che vi è di essenziale nel comportamento
computistico dell’uomo.
TLS
Unità
di controllo
λ a1 a2 a3 a4 a5 a6 λ
ai, qi
■ La MdT è provvista di un’unità di controllo che impartisce alla TLS i seguenti ordini:
• F = Fermo;
• S = Spostati a sinistra e analizza la cella;
• D = Spostati a destra e analizza la cella.
Questi tre elementi costituiscono l’insieme M = {F, S, D} detto insieme dei simboli di movi-
mento. Questo insieme, unito con l’insieme Q degli stati della macchina, forma l’alfabeto
interno della MdT.
■ L’ultimo componente della MdT è l’unità logica, preposta alla decisione dei passi che la
macchina deve compiere. Per prendere tale decisione, ossia per fornire l’istruzione corri-
spondente al successivo passo da eseguire, l’unità logica necessita di due ingressi:
• il simbolo ai corrispondente al contenuto della cella sulla quale è posizionata in quell’i-
stante la TLS;
• il simbolo qi corrispondente allo stato della macchina in quell’istante.
Le varie combinazioni di questi due valori (ai, qi) definiscono univocamente il compor-
tamento della MdT. Infatti, dopo l’introduzione della coppia, l’unità logica fornisce una
terna di valori che corrispondono all’istruzione da eseguire. In particolare:
• il simbolo aj che dev’essere scritto nella cella su cui è posizionata la TLS;
• il simbolo q j che indica lo stato in cui deve passare la macchina;
• il simbolo mj che rappresenta la direzione in cui si deve muovere la TLS.
TLS
Unità
di controllo
Memoria
di controllo
Unità logica
Memoria
interna
λ λ b a a c λ λ λ λ
b, q0
applicando la quintupla
λ λ c a a c λ λ λ λ
n. 2
a, q0
applicando la quintupla
λ λ c b a c λ λ λ λ
n. 1
a, q0
applicando la quintupla
λ λ c b b c λ λ λ λ
n. 1
c, q0
applicando la quintupla
λ λ c b b c λ λ λ λ
n. 3
λ, q0
applicando la quintupla
λ λ b a a c λ λ λ λ
n. 4
λ, q1
Questa macchina si posiziona sulla cella che contiene il primo simbolo della stringa, nello stato
q0 (stato iniziale) esegue lo scambio richiesto rimanendo in q0. Quindi si sposta alla destra del
simbolo già considerato e continua fino a che non incontra la fine della stringa segnalata dal
simbolo λ (casella vuota); in tal caso, passa nello stato q1 e si arresta (la computazione termi-
na) in quanto nessuna quintupla presenta lo stato qi uguale a q1: per questo, q1 è detto stato
finale.
OSSERVA COME SI FA
1. Definiamo una MdT che esegua l’addizione di due numeri naturali.
Rappresentazione dell’input
I numeri sono rappresentati sul nastro da una sequenza di barre ⏐. Al numero 0 viene fatta corrispondere una barra,
al numero 1 due barre, al numero 5 sei barre e così via. Due numeri sono rappresentati da due sequenze di barre
separate dalla cella vuota.
Per esempio, per eseguire 2 + 3 avremo la seguente situazione di partenza:
λ λ λ
λq0
Computazione
Per effettuare la somma, la MdT riempie con una barra la cella vuota che separa i due numeri e cancella le due barre
finali del secondo numero.
Rappresentazione dell’output
La seguente figura riporta la situazione della MdT dopo la computazione:
λ λ λ λ
λ, q4
2. Definiamo una MdT per verificare se, in una sequenza di 0 e 1, il numero di 1 presenti nella sequenza
è dispari. Questo stesso problema può essere affrontato con gli automi, di cui riportiamo qui il relativo
automa riconoscitore.
Rappresentazione dell’input
La situazione di partenza della MdT può essere quella mostrata di seguito. La testina è posizionata sul primo ca-
rattere da leggere.
λ 1 0 0 1 1 λ λ λ
1, q0
Rappresentazione dell’output
Se il numero di 1 è dispari, la macchina scrive “d” nella prima casella a destra della sequenza dei simboli in in-
gresso.
Se il numero di 1 è pari (oppure se la sequenza è vuota), la macchina scrive “p” nella prima casella a destra della
sequenza dei simboli in ingresso.
Nell’esempio appena visto la situazione finale sarà:
λ 1 0 0 1 1 d λ λ
d, q2
In una matrice funzionale le colonne indicano i possibili input che possono essere letti e le
righe i differenti stati in cui può trovarsi la macchina.
In ogni cella è contenuto il nuovo simbolo da scrivere, il nuovo stato e il tipo di movimento da
effettuare.
Ingressi
Input 1 Input 2 Input 3 Input n
Stati
Stato 1 Simbolo da Simbolo da Simbolo da Simbolo da
Stato 2 scrivere, nuovo scrivere, nuovo scrivere, nuovo scrivere, nuovo
Stato 3 stato, movimento stato, movimento stato, movimento stato, movimento
Stato m da effettuare da effettuare da effettuare da effettuare
Consideriamo per esempio una MdT che somma una unità a un numero scritto in notazione
decimale.
1. q0 0 1 q1 F 7. q0 6 7 q1 F
2. q0 1 2 q1 F 8. q0 7 8 q1 F
3. q0 2 3 q1 F 9. q0 8 9 q1 F
4. q0 3 4 q1 F 10. q0 9 0 q0 S
5. q0 4 5 q1 F 11. q0 λ 1 q1 F
6. q0 5 6 q1 F
Ingressi
0 1 2 3 4 5 6 7 8 9 λ
Stati
q0 1, q1, F 2, q1, F 3, q1, F 4, q1, F 5, q1, F 6, q1, F 7, q1, F 8, q1, F 9, q1, F 0, q0, S 1, q1, F
q1 Stop Stop Stop Stop Stop Stop Stop Stop Stop Stop Stop
In questo caso, si suppone che inizialmente la macchina si trovi nello stato q0 e sia posizionata
sulla cifra più a destra del numero; se la cifra esaminata è diversa da 9, viene semplicemente
cambiata in quella successiva e, passando la macchina nello stato q1, il procedimento si arre-
sta, altrimenti la cifra 9 viene mutata in 0 e si ha uno spostamento della testina sulla cifra alla
sua sinistra, in modo da tenere conto del riporto.
Per esempio, la MdT che scambia ciascun a con b, ciascun b con c, ciascun c con a, può essere
rappresentata nel seguente modo:
c, a, D
b, c, D
λ , λ, F
q0 q1
a, b, D
INFOGR AFICA
La macchina di
TURING UNIVERSALE...
MACCHINA DI TURING UNIVERSALE
Dato uno specifico algoritmo, è possibile ricorrere a una macchina di Turing
per risolverlo: una macchina di Turing universale (MdTU) è una macchina
capace di simulare il comportamento di una qualsiasi altra macchina
di Turing. Per far questo la MdTU ha come ingressi due stringhe.
Stringa 1: definisce la MdT Stringa 2: input della MdT
λ .. .. .. λ .. .. .. λ
L’ASSUNTO DI BASE
Dato un problema, possiamo dirlo risolubile o computabile o calcolabile
se, dati in ingresso certi valori, è possibile determinare una funzione f
che metta in relazione tali dati con un risultato.
PROBLEMA
OSSERVA COME SI FA
1. Consideriamo la MdT che somma un’unità a un numero, e rappresentiamo il numero non in notazione deci-
male, ma come semplice sequenza di barre | (al numero 0 viene fatta corrispondere una barra, al numero 1
due barre, al numero 2 tre barre e così via). Supponiamo che dopo le barre tutte le celle siano vuote.
Tabella di transizione
Ingressi
⏐ λ
Stati
q0 ⏐, q0, D ⏐, q1, D
q1 ⏐, q1, D λ, q2, S Configurazioni non previste.
q2 λ, q3, S null Infatti non ci sono transizioni
q3 λ, q4, F null per gli ingressi λ negli stati
q2 e q3
Diagramma di stato
q0 q1
λ, ⏐, D
⏐, ⏐, D
⏐, ⏐, D
λ, λ, S
Anche il diagramma di
q4 stato è un diagramma non
q3 q2 completo. Infatti negli stati
⏐ , λ, F
⏐ , λ, S q2 e q3 non sono previste
transizioni per gli ingressi λ
2. Consideriamo la MdT già presa in considerazione che verifica se, in una sequenza di 0 e 1, il numero di 1
presenti nella sequenza è pari o dispari.
Tabella di transizione
Ingressi
0 1 λ
Stati
Diagramma di stato
1, 1, D
q0 q1
1, 1, D
0, 0, D 0, 0, D
λ, p, F λ, d, F
q2
q4 * * q4 S → Scorre tutti gli * e si posiziona alla fine della rappresentazione del primo numero
q5 * * q5 D → Si sposta tra il primo e il secondo numero (ogni volta che cancella una barra aggiun-
ge un asterisco tra i due)
q6 ⏐ ⏐ q6 D → Va alla fine del secondo numero
q6 * * q1 S → Appena incontra il primo * del secondo numero ritorna allo stato iniziale
Tabella di transizione
Ingressi
⏐ *
Stati
q0 null null
q1 *, q2, S null
q2 ⏐, q3, S *, q0, F
q3 ⏐, q3, S *, q4, S
q4 *, q5, D *, q4, S
q5 ⏐, q6, D *, q5, D
q6 ⏐, q6, D *, q1, S
Diagramma di stato
q0
*, *, F
q1
q2
⏐, ⏐, D ⏐, *, S
*, *, S
q6
⏐, ⏐, S
⏐, ⏐, D
q5 *, *, S q3
*, *, D
⏐, *, D ⏐, ⏐, S
q4
*,*, S
ORA TOCCA A TE
1. Considera la seguente situazione iniziale di una MdT.
λ λ λ λ λ λ λ
⏐, q0
λ, q2
B
* * λ λ λ
*, q0
C
* * * * * * F λ λ λ
F, q2
( ( ( a + b ) ) ) λ
(, q0
[ [ [ 5 + 7 ] ] ] λ
λ, q1
1. q0 [ ( q0 D 1. q0 ( [ q0 D 1. q0 ( [ q0 D 1. q0 ( [ q0 F
2. q0 a 5 q0 D 2. q0 a 5 q0 D 2. q0 a 5 q0 D 2. q0 a 5 q0 D
3. q0 b 7 q0 D 3. q0 b 7 q0 D 3. q0 b 7 q0 D 3. q0 b 7 q0 D
4. q0 + + q0 D 4. q0 ) ] q0 D 4. q0 + + q0 D 4. q0 + + q0 D
5. q0 ] ) q0 D 5. q0 λ λ q1 F 5. q0 ) ] q0 D 5. q0 ) ] q1 F
6. q0 λ λ q0 F 6. q0 λ λ q1 F
Ingressi
a b λ
Stati
q0 b, q0, D a, q0, D λ, q1, S
q1 a, q1, S a, q1, S λ, q2, D
q2 a, q2, F b, q2, F λ, q2, F
a, b, D
q0 q1 a, b, D
b, a, D
λ, λ, F b, a, D
λ, λ, F
q2
λ λ λ λ λ λ λ
⏐, q0
0, *, D
q0 q1 0, *, D
1, 1, D
λ, λ, F λ, λ, F 1, 1, D
0 1 0 0 1 1 λ λ λ λ
0, q0
RIPASSIAMO INSIEME B3
TEORIA DELLA CALCOLABILITÀ
AUDIO
RIPASSIAMO INSIEME B3
MAPPA
MODIFICABILE
ESECUTORI O MODELLI
COMPUTAZIONALI
macchine
astratte
dalla più
specifica
alla più generica
macchine
combinatorie
automi
a stati finiti
macchine
a stack
macchine
di Turing
2. Supponi che la testina di lettura e scrittura A Dopo aver letto la sequenza di ingresso 111
di una MdT si trovi sul simbolo 1 di una sequenza la MdT si troverà nello stato q0
di 0 e 1 presenti sul nastro di una MdT. B Dopo aver letto la sequenza di ingresso 00011
Che cosa accade con l’esecuzione delle seguenti la MdT si troverà nello stato q1
quintuple? C Dopo aver letto la sequenza di ingresso 1111
q0 1 0 q0 F la MdT si troverà nello stato q0
q0 0 1 q0 F D Dopo aver letto la sequenza di ingresso 111011
la MdT si troverà nello stato q0
q0 λ λ q0 F
A Viene scambiato continuamente lo 0 con 1 5. Considera la seguente situazione iniziale
e viceversa senza che la MdT si muova di una MdT.
dalla prima cella del nastro
B La MdT non può iniziare a computare
⏐ a a λ λ λ λ λ λ λ
C Tutti gli 0 vengono cambiati in 1
D Tutti gli 1 vengono cambiati in 0
a, q2
3. Considera la seguente tabella di transizione.
Supponi di aver eseguito le seguenti quintuple:
Ingressi
0 1 λ • q0 a b q1 D
Stati
• q1 a b q1 D
q0 0, q0, D 1, q1, D p, q2, F • q1 λ F q2 F
q1 0, q1, D 1, q0, D d, q2, F
q2 Stop Stop Stop Quale delle seguenti è la situazione finale?
A
Quale delle seguenti affermazioni è vera?
⏐ b a λ λ λ λ λ λ λ
A Dopo aver letto la sequenza di ingresso 1111
la MdT produrrà in output una “d”
B Dopo aver letto la sequenza di ingresso 1110001 λ, q2
la MdT produrrà in output una “p”
C Dopo aver letto la sequenza di ingresso 00000 B
la MdT produrrà in output una “p”
D Dopo aver letto la sequenza di ingresso 0000 b b λ λ λ λ λ λ λ
la MdT produrrà in output una “d”
a, q0
F, q2 7. • Contatore 1
Considera una stringa costituita da A e B e
D terminante per λ. Progetta una macchina di Turing
che produca S, se la stringa contiene un numero
⏐ b b F λ λ λ λ λ λ pari di A, N nel caso contrario.
8. • Successore
F, q2 Progetta una macchina di Turing che, ricevendo un
numero intero positivo, calcoli il suo successore.
12. • Specchio
λ, q1
Progetta una macchina di Turing che ricopi
in modo speculare la stringa di valori ABC.
Da quale dei seguenti insiemi di quintuple è stata
prodotta? 13. • Sostituzione
Progetta una macchina di Turing che sostituisca
A B
il simbolo X con il simbolo Y e il simbolo Y con
1. q0 [ ( q0 D 1. q0 ( [ q0 F il simbolo X di una stringa presente sul nastro.
La computazione ha termine quando viene
2. q0 a x q0 D 2. q0 a x q0 D incontrato il simbolo /.
3. q0 b y q0 D 3. q0 b y q0 D
14. • Massimo
4. q0 * + q0 D 4. q0 * * q0 D
Progetta una macchina di Turing che calcoli
5. q0 ] ) q0 D 5. q0 ) ] q1 F il massimo tra due numeri.
6. q0 λ λ q0 F
15. • Contatore 2
Progetta una macchina di Turing che riconosca
C D le stringhe che hanno lo stesso numero di 0 e 1.
1. q0 ( [ q0 D 1. q0 ( [ q0 F 16. • Considera la seguente situazione in cui si trova
2. q0 a x q0 D 2. q0 a x q0 D una MdT:
3. q0 b y q0 D 3. q0 b y q0 D
λ λ b a a b λ λ λ λ
4. q0 * + q0 D 4. q0 ) ] q0 D
5. q0 ) ] q0 D 5. q0 λ λ q1 F
b, q0
6. q0 λ λ q1 F
λ, q1 λ, λ, F
b, b, D
18. • Considera la seguente situazione in cui si trova Che cosa accade se iniziamo la computazione
una MdT: con la seguente situazione di partenza?
λ λ 1 0 1 0 λ λ λ λ a a b b a a λ λ λ λ
1, q0 a, q0
Scrivi le quintuple necessarie per passare 22. ••• Spiega perché un ristorante è un classico
alla situazione seguente: esempio di macchina astratta. In particolare,
individua i seguenti elementi: la memoria,
λ λ a b a b λ λ λ λ le operazioni primitive, le operazioni e strutture
dati per gestire il trasferimento dati, le operazioni
e strutture dati per gestire il controllo del flusso
λ, q1 di esecuzione, l’interprete.
B4 La complessità
computazionale
IMPARERAI…
Quando puoi definire efficiente Di cosa si occupa la complessità Come si classificano i problemi
un algoritmo computazionale in ordine alla complessità
1 Qualità di un algoritmo
Spesso si è interessati a soluzioni di problemi che, nell’impiego delle risorse umane e di calcolo,
vengono ritenute economiche.
Durante la fase di analisi dei problemi è emerso che, spesso, esistono più algoritmi per risolvere
un problema: un classico esempio è quello della ricerca di un elemento in un array. In partico-
lare abbiamo esaminato l’algoritmo di ricerca sequenziale e quello di ricerca binaria, cioè due
algoritmi risolutivi dello stesso problema. Quale preferire? Quali sono i criteri da seguire per
valutare la bontà di un algoritmo? La risposta non è immediata.
Di ogni algoritmo dobbiamo considerare due aspetti:
• la sua organizzazione interna, ovvero la struttura data alle sue istruzioni (organizzazio-
ne delle sue strutture di controllo) e le strutture dati utilizzate (tipi di variabili semplici e
strutturate);
• le risorse necessarie per eseguirlo (in particolare la memoria e il processore), strettamen-
te legate allo spazio e al tempo necessari alla sua esecuzione.
La bontà di un algoritmo
Ogni algoritmo può essere tradotto in programmi scritti in differenti linguaggi di programma-
zione e ogni programma verrà, a sua volta, trasformato in più processi a tempo di esecuzione.
Nella figura a pagina seguente riassumiamo questi concetti: un problema può avere più algo-
ritmi che lo risolvono; ognuno di questi ultimi può essere tradotto in più programmi; a ogni
programma corrispondono più processi a tempo di esecuzione.
Per valutare la bontà di un algoritmo, quindi, non ci riferiremo direttamente all’algoritmo stes-
so, ma alle risorse che utilizzerà in quanto entità dinamica a tempo di esecuzione.
Lo studio della bontà degli algoritmi porta a un ampliamento dei nostri traguardi formativi.
Processo 1
Programma 1 ...
... Programma M
...
Algoritmo N
...
Dati uno o più algoritmi che risolvono un problema, confrontarli per individuare il mi-
gliore sulla base di un’analisi qualitativa.
2 Costo di un algoritmo
Un modo non adatto per valutare il tempo di esecuzione
di un algoritmo
Esiste un semplicissimo modo di valutare il tempo di esecuzione di un algoritmo: esprimerlo in
unità solari. Per esempio, potremmo servirci di un orologio ed esprimere il tempo in secondi.
Per valutare il tempo di esecuzione in unità solari è sufficiente eseguire il processo corri-
spondente a un primo algoritmo e cronometrare il tempo impiegato per la sua esecuzione.
Successivamente se ne esegue un secondo e si fa altrettanto. Confrontando i tempi, si arriverà
all’individuazione dell’algoritmo più efficiente.
■ I costrutti iterativi, quali MENTRE ... FINEMENTRE, RIPETI ... FINCHÉ, hanno un co-
sto pari alla somma dei costi del test e del corpo del ciclo.
In particolare:
• il test del ciclo, essendo un’istruzione semplice, ha complessità pari a uno;
• il costo del corpo del ciclo, invece, è dato dalla somma dei costi delle singole istruzioni.
Naturalmente va tenuto conto di quante volte ciascuna istruzione viene eseguita. Nel
calcolo non includiamo mai le istruzioni di apertura e di chiusura del corpo del ciclo.
Se il ciclo viene iterato K volte, allora il costo è:
Costo = CostoTest * K + CostoCorpo * K
Nei cicli a controllo in testa però, il test viene eseguito K + 1 volte e non K volte (l’ultimo
test, il (K + 1)-esimo, è quello di uscita dal ciclo), quindi:
Costo = CostoTest * (K + 1) + CostoCorpo * K
Il costo dominante
Utilizzando queste regole, è possibile eliminare gli inconvenienti a cui abbiamo fatto cenno,
legati al sistema di elaborazione e al compilatore o interprete utilizzato. I risultati ottenuti
sono, però, approssimati. Questo perché è consuetudine occuparsi solo di operazioni dal costo
dominante, quali, per esempio, confronti e moltiplicazioni, trascurando le istruzioni meno
onerose dal punto di vista esecutivo, quali addizioni, incrementi, decrementi. Possiamo ora
dire che:
Infatti, per ottenere il tempo totale di esecuzione di un algoritmo, basterà moltiplicare il co-
sto complessivo dell’algoritmo per il tempo di esecuzione di un’istruzione di costo unitario
(tempo unitario), espresso in secondi, se questo ci è noto.
OSSERVA COME SI FA
1. Esempio di costo per istruzioni semplici.
Le seguenti istruzioni semplici hanno tutte costo pari a 1.
I←1
Som ← 0
MENTRE (I ≤ N) ESEGUI
Som ← Som + I
I←I+1
FINEMENTRE
SCRIVI("La somma dei primi", N, "numeri è", Som)
FINE
Se N = 10, il costo del solo ciclo è pari a 31, valore ottenuto da (3 * 10) + 1. Infatti il ciclo è costituito da un test che
ha costo uguale a 1 e da un corpo composto da 2 istruzioni semplici (non consideriamo l’istruzione FINEMENTRE),
anch’esse di costo unitario: il costo dell’intero ciclo è, pertanto, uguale a 3. Considerato che il ciclo deve essere
eseguito dieci volte, il costo totale è dato da 3 * 10 = 30.
Ma non abbiamo ancora finito! Quando il ciclo viene eseguito per la decima volta, la variabile I viene incrementata di
un’unità assumendo, così, il valore 11. La condizione di ciclo viene eseguita un’undicesima volta in modo da poter
verificare la falsità della condizione e, quindi, consentirne l’uscita. Tale esecuzione comporta l’aggiunta di un’ulterio-
re unità portando, così, il valore a 31. Il costo complessivo dell’intero algoritmo (costo del ciclo + costo delle altre
istruzioni) è infine 31 + 5 = 36, includendo anche le 4 istruzioni prima del ciclo e l’istruzione di scrittura finale.
Generalizzando, quindi, per N qualsiasi il costo è:
(3 * N) + 1 + 5 = 3N + 6.
Il costo del costrutto SE ... ALLORA precedente è pari a 3. Questo valore si ottiene sommando 1 per il test della
condizione e 2 per le istruzioni contenute nel ramo ALLORA.
SE (Y > 0)
ALLORA
R←1
ALTRIMENTI
Z←2
P←0
R←2
FINESE
Il costo del costrutto SE ... ALLORA ... ALTRIMENTI precedente è pari a 4. Questo valore si ottiene sommando 1 per
il test della condizione, 3 per le istruzioni del ramo ALTRIMENTI (si sceglie il ramo ALTRIMENTI poiché le istruzioni in
esso contenute sono in numero maggiore rispetto a quelle del ramo ALLORA).
Per N = 10 abbiamo:
Costo di Alg1Bis = 5 + CostoCostruttoMENTRE =
= 5 + (3 + CostoChiamata + CostoFunzioneSomma) * 10 + 1 =
= 5 + (3 + 1 + 2) * 10 + 1 =
= 66
dove:
5 è il costo delle istruzioni (1), (2), (3), (4) e (8)
3 è il costo delle istruzioni (5), (6) e (7)
2 è il costo delle istruzioni della funzione Somma()
8. Costo per costrutto iterativo PER ...: calcolo dei primi N numeri pari.
FUNZIONE SommaIPrimiNumPari(N: INTERO): INTERO
VARIABILI
M, I, P:INTERO
INIZIO
M←0
PER I ← 1 A N ESEGUI
P←2*I
M←M+P
FINEPER
Per la funzione SommaIPrimiNumPari
RITORNO(M) individuiamo i seguenti costi:
FINE • assegnazione esterna al ciclo: 1;
• assegnazione iniziale ciclo PER: 1;
• numero di test del ciclo PER: N + 1;
Costo di SommaIPrimiNumPari = CostoAssegnazioneEsterna + • incrementi del ciclo PER: N;
CostoCicloPER = • corpo del ciclo PER: 2 * N;
= 1 + (1 + N + 1 + 2 * N + N) + CostoRITORNO = 1 + (2 + 4N) + 1 = • istruzione RITORNO: 1.
=4*N+4
3 Complessità computazionale
Il numero di operazioni di un algoritmo è legato alla dimensione dei dati di input. Nell’algo-
ritmo Alg1 relativo alla somma dei primi N numeri interi, analizzato nel paragrafo precedente,
il numero di operazioni è strettamente legato a N, dove N è, appunto, la dimensione dei dati in
input. Possiamo, allora, definire il numero di operazioni in funzione di tale dimensione.
Usiamo la notazione generica T(N) per indicare la funzione matematica che indica la relazio-
ne esistente tra il numero di operazioni di un programma e la dimensione N dei dati in input.
La funzione T(N) è chiamata complessità computazionale (in tempo) o semplicemente
complessità dell’algoritmo. La dimensione N dei dati in input è anche detta dimensione
del problema.
Nell’esempio dell’algoritmo Alg1 creato per calcolare la somma dei primi N numeri naturali
possiamo quindi scrivere:
Dimensione Numero
del problema di operazioni
complessità (Alg1) = T(N) = TAlg1(N) = 3N + 6
Riepilogando: la complessità T(N) di un algoritmo è una funzione che lega la dimensione N del
problema al numero di operazioni eseguite dall’algoritmo per risolvere quel problema.
Poiché T(N) è una funzione, possiamo rappresentarla tramite un diagramma cartesiano, po-
nendo sull’asse delle ascisse la dimensione N del problema e su quello delle ordinate il numero
di operazioni. La complessità dell’algoritmo Alg1 si può rappresentare come nella figura in
basso.
Otteniamo una retta perché la complessità T(N) = 3N + 6 rappresenta l’equazione di una retta.
Per convenzione considereremo sempre N maggiore o uguale a 1, intendendo che deve esserci
almeno un dato in input (N è, infatti, la dimensione dei dati in input).
T(N): numero
di operazioni
TAlg1(N)
(1,9)
N: dimensione
1 del problema
OSSERVA COME SI FA
■ Un esempio di determinazione della complessità computazionale.
Consideriamo i tre algoritmi di seguito riportati, aventi N come dimensione del problema: il primo calcola N5, il secon-
do calcola XN, il terzo calcola XN con un metodo diverso. Determiniamo la complessità di ciascuno di essi.
ALGORITMO Alg2 ALGORITMO Alg3 ALGORITMO Alg4
VARIABILI VARIABILI VARIABILI
X, N, I:INTERO Q, X, N, I:INTERO Q, X, N, I:INTERO
INIZIO INIZIO INIZIO
SCRIVI("Inserisci il valore N") SCRIVI("Inserisci la base") SCRIVI("Inserisci la base")
LEGGI(N) LEGGI(X) LEGGI(X)
X←N SCRIVI("Inserisci l’esponente") SCRIVI("Inserisci l’esponente")
I←1 LEGGI(N) LEGGI(N)
MENTRE (I < 5) ESEGUI Q←1 Q←1
X←X*N I←N I←N
I←I+1 MENTRE (I > 0) ESEGUI MENTRE (I > 1) ESEGUI
FINEMENTRE Q←Q*X SE ((I MOD 2) = 0)
SCRIVI(N) I←I−1 ALLORA
FINE FINEMENTRE X←X*X
SCRIVI(Q) I ← I DIV 2
FINE ALTRIMENTI
Q←Q*X
• L’algoritmo Alg2 ha complessità pari a 18 qualunque sia N, poiché ri- I←I−1
chiede 18 operazioni elementari; possiamo esprimere la complessità
come TAlg2(N) = 18. Infatti, oltre alle istruzioni iniziali e a quella finale, di FINESE
costo complessivo pari a 5, il ciclo (che comprende un test e due istru- FINEMENTRE
zioni, con costo ciclo = 3) viene ripetuto 4 volte. Il test viene ripetuto Q←Q*X
un’altra volta, prima di constatare che la condizione è diventata falsa. SCRIVI(Q)
Quindi TAlg2(N) = 5 + 4 * 3 + 1 = 18.
FINE
• L’algoritmo Alg3 ha complessità pari a 3N + 8, possiamo esprimerla
come TAlg3(N) = 3N + 8. Infatti, oltre alle istruzioni di inizializzazione e di I/O (costo totale = 7), il ciclo (costo totale
= 3, compreso il test) viene ripetuto N volte prima di uscire. Allora TAlg3(N) = 7 + 3N + 1 = 3N + 8.
• Determinare la complessità dell’algoritmo Alg4 non è semplice come per i due algoritmi precedenti, anzi è abba-
stanza macchinoso, ma proviamoci ugualmente! Dobbiamo fare le seguenti considerazioni: supponiamo che N
sia una potenza di 2. Poiché nell’algoritmo Alg4 la variabile I rappresenta l’esponente (I ← N), possiamo genera-
lizzare che I = 2K per un qualsiasi valore di K > 0. Dividere I per 2 (I ← I div 2), quindi, è equivalente a sottrarre
1 da K. Pertanto N div 2 = (2K−1). Ogni iterazione decrementa K di 1. Alla fine del ciclo i = 1, cosicché k = 0.
Perciò il numero di cicli è k: Alg4 fa esattamente log2 N
iterazioni. Infatti: log2 N = log2 (2K) = K * log2 2 = K. Il co- T(N): numero
sto del corpo del ciclo è Test del ciclo + Costo del costrut- di operazioni
to SE = 1 + (1 + 2) = 4. Quindi il costo totale del ciclo è TAlg4(N)
TAlg3(N)
4 * log2 N + 1, dove l’1 finale si riferisce all’ultimo test. Il
costo totale di Alg4 è pertanto: 4 * log2 N + 8, consideran-
do anche le istruzioni di inizializzazione e di I/O. Avremo 20
TAlg2(N)
perciò TAlg4(N) = 4 * log2 N + 8. Se N non è una potenza
di 2, si dimostra che TAlg4(N) è proporzionale a 4 * log2 N.
10
Qui e nel seguito indicheremo con log il logaritmo in base 2,
ovvero in generale log N sta per log2 N.
Possiamo esprimere le funzioni di complessità dei tre algorit- N: dimensione
mi considerati con i diagrammi visibili nella figura. 10 20 del problema
La complessità è legata ai valori dei dati in input e a come i dati sono disposti, oltre che alla
loro dimensione.
Consideriamo due algoritmi di ricerca: Alg5 e Alg6. Essi svolgono lo stesso compito, ossia la
ricerca di un elemento all’interno di un vettore già ordinato. Pur operando in maniera diversa,
i due algoritmi forniscono lo stesso risultato. Per semplicità, riportiamo soltanto la funzione
che implementa l’operazione di ricerca. È utile valutare e confrontare la complessità degli al-
goritmi.
Per decidere quale considerare delle tre, va analizzato il tipo di applicazione. Per esempio, in si-
stemi di tipo real-time interessa solo la funzione Tpessimo(N), ma in genere è la funzione Tmedio(N)
quella che riveste maggiore importanza. Pertanto, parlando di complessità di un algoritmo,
ci riferiremo implicitamente all’analisi del caso medio. Quando tale analisi risulta difficile,
come accade spesso, si ricorre al caso pessimo, cioè alla funzione Tpessimo(N). Possiamo consi-
derare che Tpessimo(N) fornisca una limitazione alla complessità dell’algoritmo, nel senso che le
altre funzioni di complessità non possono crescere più di quella del caso pessimo.
Ora sottoponiamo l’algoritmo di ricerca binaria ai tre tipi di analisi descritte, in modo da po-
terlo confrontare con l’algoritmo di ricerca sequenziale.
Consideriamo la ricerca con successo di un elemento nel vettore Vet ordinato.
■ Caso ottimo. Si ha quando l’elemento X da ricercare si trova proprio a metà del vettore Vet.
Nel caso ottimo, quindi, la complessità è pari a 1.
■ Caso pessimo. Si ha quando è necessario suddividere il vettore Vet fino a ridurlo a un solo
elemento. Nel caso pessimo, quindi, si dimostra che occorrono log N confronti. Infatti, a
ogni confronto la dimensione del vettore si dimezza. Quanti confronti possiamo fare? Ap-
plichiamo lo stesso tipo di ragionamento fatto per valutare la complessità dell’algoritmo
Alg4, e cioè supponiamo che N = 2K per qualsiasi valore di K > 0. Dividere per due a ogni
iterazione corrisponde a sottrarre 1 a K, quindi l’algoritmo effettua log N iterazioni.
■ Caso medio. L’analisi diventa notevolmente complessa. Riportiamo solo il risultato finale,
che è circa log N.
L’algoritmo ottimo
La tabella confronta i due algoritmi nei tre casi (dimensione N del problema).
Come possiamo osservare, gli algoritmi hanno la stessa complessità nel caso ottimo, ma com-
plessità diverse nel caso medio e nel caso pessimo.
L’obiettivo è quello di risolvere un problema scrivendo un algoritmo con la minima complessi-
tà possibile sia nel caso medio sia in quello pessimo: definiremo tale algoritmo un algoritmo
ottimo.
Pertanto, per complessità di un problema intenderemo la complessità degli algoritmi ottimi
che lo risolvono (e spesso tale complessità non è nota, perché risulta difficile da calcolare). Con-
sideriamo ora il corpo di un algoritmo, che verifica se un numero intero N maggiore di 2 è pri-
mo. Cominciamo a individuare la dimensione del problema: abbiamo un solo input, pertanto la
dimensione è pari al valore dello stesso input (quindi, per esempio, il problema di verificare che
201 sia un numero primo ha dimensione pari a 201).
In questi casi, allora, conviene fare riferimento all’ordine di grandezza della complessità,
cioè valutare la complessità per valori molto grandi delle dimensioni del problema. Si parla
di complessità asintotica.
Riprendiamo i grafici delle funzioni T(N) degli algoritmi Alg2, Alg3 e Alg4. Notiamo che, per
valori di N compresi tra 1 e l’ascissa del punto P1, l’algoritmo Alg4 compie un numero di opera-
zioni inferiore all’algoritmo Alg2, pur avendo complessità asintotica superiore. Al crescere di
N, però, è TAlg3 che cresce di più.
T(N): numero
di operazioni
TAlg3(N) TAlg4(N)
20
TAlg2(N)
10 P1
N: dimensione
del problema
N = 1 10 20
che si legge: limite per N che tende a infinito della funzione T(N). In definitiva, si ottiene un’e-
spressione in funzione di N che indica qual è il comportamento asintotico dell’algoritmo.
Introduciamo ora le seguenti definizioni.
Siano f(N) e g(N) due funzioni. Si dice che f(N) è di ordine di grandezza g(N) e si scrive
O(g(N)) e si legge:
“O grande di g di N” se esiste una costante C > 0 tale che, per tutti i valori nel dominio di N,
f(N) < C * g(N).
Pertanto, dire che T(N) è O(g(N)), significa che g(N) è un limite superiore alla legge di crescita
di T(N), cioè T(N) non cresce più di g(N). Il grafico di T(N) da un certo punto in poi starà, per le
ragioni appena esposte, al di sotto di quello di C * g(N). Diremo inoltre che:
f(N) è proporzionale a g(N) se f(N) è O(g(N)) e g(N) è O( f(N)). Si dice anche che f(N) e g(N)
sono dello stesso ordine (di grandezza).
C * g(N)
T(N): numero
di operazioni
T(N)
Da questo punto
in poi il grafico di T(N)
sta al di sotto di quello
di C * g(N)
N: dimensione
del problema
Programmi e algoritmi saranno quindi valutati confrontando le loro funzioni T(N) e trala-
sciando le costanti di proporzionalità. Pertanto:
• algoritmi con funzioni di complessità N, 2N, 3N, oppure 2N + 3, 2N + 200, 3N + 4000 sono
tutti O(N), cioè sono tutti proporzionali a N;
• algoritmi con funzioni di complessità come 5N2, 8N2 + 67 sono tutti O(N2), cioè sono tutti
proporzionali a N2.
Classe
Descrizione
di complessità
Indica la complessità degli algoritmi che eseguono lo stesso numero di operazioni indipen-
Complessità dentemente dalla dimensione dei dati di input. Un classico esempio è dato da un algoritmo
costante O(1) senza cicli, in cui l’esecuzione non dipende dalla dimensione del problema. Altri esempi sono
o O(C) dati dall’esecuzione dell’algoritmo Alg7 visto in precedenza nel caso ottimo (numero pari) o,
ancora, dall’algoritmo di ricerca sequenziale nel caso ottimo.
Indica la complessità degli algoritmi che eseguono un numero di operazioni proporzionale a
Complessità
log N. Un esempio è l’algoritmo di ricerca binaria, che ha complessità logaritmica nel caso
logaritmica O(logN)
pessimo e nel caso medio.
Indica la complessità degli algoritmi che eseguono un numero di operazioni proporzionale a N,
Complessità cioè proporzionale alla dimensione del problema. Per esempio, hanno complessità lineare la
lineare O(N) ricerca sequenziale, la lettura e la stampa degli elementi di un array, l’algoritmo di verifica di
un numero primo, Alg7 nel caso pessimo.
Complessità È la classe di molti algoritmi di ordinamento. Per esempio, ha complessità NlogN l’algoritmo
NlogN O(NlogN) MergeSort (un altro famoso algoritmo di ordinamento) in tutti i casi (ottimo, medio, pessimo).
La sua caratteristica è avere le dimensioni del problema come base da elevare a un espo-
Complessità
nente K. Quando K = 2 si parla di complessità quadratica; è di questo tipo l’algoritmo di
polinomiale
ordinamento BubbleSort. Quando K = 3 si parla invece di complessità cubica. È di questo tipo
O(NK)
l’algoritmo che effettua la moltiplicazione di due matrici quadrate di dimensione N.
La sua caratteristica è avere la dimensione del problema come esponente. Ne è un esempio
Complessità
un algoritmo che deve produrre tutte le possibili stringhe di lunghezza N su un alfabeto di 10
esponenziale O(KN)
simboli.
6 Efficienza di un algoritmo
Due algoritmi appartenenti alla stessa classe di complessità (cioè due algoritmi di pari com-
plessità computazionale) possono essere confrontati relativamente al tempo di esecuzione.
Vediamo meglio che cosa significa che due algoritmi appartengono alla stessa classe di com-
plessità.
Siano f1(N) e f2(N) due funzioni con la stessa classe di complessità computazionale, relati-
ve, rispettivamente, agli algoritmi A1 e A2 che risolvono lo stesso problema. Diremo che A1
e A2 appartengono alla stessa classe di complessità se:
f1 (N )
lim =C con C > 0 costante
N →∞ f 2 (N )
f1 (N )
■ A1 è più efficiente di A2 se: lim
N →∞ f 2 (N )
=C con C < 1
f1 (N )
■ A2 è più efficiente di A1 se: lim
N →∞ f 2 (N )
=C con C > 1
Esaminiamo gli algoritmi Alg8 e Alg9, che calcolano somma e prodotto dei primi N numeri
interi.
ALGORITMO Alg8 ALGORITMO Alg9
VARIABILI VARIABILI
N, I, Som, Prod: INTERO N, I, J, Som, Prod: INTERO
INIZIO INIZIO
Som ← 0 Som ← 0
Prod ← 1 Prod ← 1
SCRIVI("Inserisci un numero") SCRIVI("Inserisci un numero")
LEGGI(N) LEGGI(N)
I←1 I←1
MENTRE (I < N) ESEGUI MENTRE (I < N) ESEGUI
Som ← Som + I Som ← Som + I
Prod ← Prod * I I←I+1
I←I+1 FINEMENTRE
FINEMENTRE J←1
SCRIVI("La somma è:", Som) MENTRE (I < N) ESEGUI
SCRIVI("Il prodotto è:", Prod) Prod ← Prod * J
FINE J←J+1
FINEMENTRE
Avremo quindi: SCRIVI("La somma è:", Som)
TAlg8(N) = 4N + 8 SCRIVI("Il prodotto è:", Prod)
FINE
TAlg9(N) = 8 + 2 * (3 * N + 1) = 6N + 10
I due algoritmi appartengono alla stessa classe di complessità lineare; infatti:
TAlg8 (N ) 4
lim =
N →∞ TAlg9 (N ) 6
Classe di N
complessità 10 20 40 60
0,00001 0,00001 0,00001 0,00001
Costante = K
secondi secondi secondi secondi
0,00001 0,000012 0,000014 0,000016
Logaritmica: log N
secondi secondi secondi secondi
0,00001 0,00002 0,00004 0,00006
Lineare: N
secondi secondi secondi secondi
0,0001 0,0004 0,0016 0,0036
Quadratica: N2
secondi secondi secondi secondi
0,001 0,008 0,066 0,216
Cubica: N3
secondi secondi secondi secondi
0,001 1 12,7 366
Esponenziale: 2N
secondi secondo giorni secoli
0,0059 58 3.855 3 × 1013
Esponenziale: 3N
secondi minuti secoli secoli
OSSERVA COME SI FA
1. Un esempio emblematico.
Il sig. Rossi ha realizzato un algoritmo di ordinamento. Analizzando il codice, risulta una complessità O(N2). Per ese-
guire un test reale sul suo algoritmo, il sig. Rossi prova a ordinare 100 elementi. Il tempo di esecuzione calcolato
sul suo computer è di 5 secondi. Il sig. Rossi reputa buono tale risultato: è quindi fiducioso che l’algoritmo possa
ordinare qualsiasi numero di elementi in un tempo “ragionevole”.
Il sig. Rossi si sbaglia! Vediamo perché T(N = 100) = 5 sec = C * N2, poiché la complessità è O(N2).
Calcolando la costante C, ed essendo N = 100, avremo:
5 = C * (100)2 da cui: C = 5 * 100−2
Supponiamo ora di voler ordinare 100.000 elementi; allora:
T(N = 100.000) = C * N2 = 5 * 100−2 * 100.0002 = 5 * 106 sec = 5 milioni di sec =
= circa 83.000 minuti = circa 1380 ore = circa 57 giorni (di tempo macchina)
2. Un esempio riassuntivo.
Consideriamo il problema di caricare un vettore Vet con N elementi (N ≤ 100). Il termine dell’inserimento sarà evi-
denziato dall’introduzione dello zero.
Abbiamo, quindi, due algoritmi risolutivi dello stesso problema. Quale preferire? Qual è il più efficiente a parità di
complessità?
1. Individuiamo la dimensione del problema. In questo caso è facile: N è il numero di elementi inseriti prima di
inserire lo 0.
2. Valutiamo la complessità dei due algoritmi:
• Alg10. Le prime tre istruzioni (2, 3, 4) hanno un costo totale pari a 3. Consideriamo ora il ciclo. Il ciclo è com-
posto da un test che ha costo uguale a 1 e da un corpo composto da tre istruzioni semplici di costo unitario.
Pertanto il costo dell’intero ciclo è uguale a 4. Considerato che il ciclo deve essere eseguito al massimo
(N − 1) volte, poiché il primo elemento viene inserito dall’istruzione 4 già considerata, la complessità totale è
data da 4 * (N − 1).
Quando il ciclo viene eseguito per la (N − 1)-esima volta, la variabile I viene incrementata di un’unità assumen-
do, così, il valore N. La condizione di ciclo viene eseguita un’altra volta, in modo da poter verificare la falsità
della condizione e, quindi, consentirne l’uscita. Dobbiamo quindi aggiungere un’unità al suddetto calcolo
arrivando, così, a:
TAlg10(N) = 3 + 4 * (N − 1) + 1 − 4N
ALGORITMO Alg10
VARIABILI
I: INTERO
Vet: ARRAY[100] di INTERO
INIZIO
I←1
SCRIVI("Introduci il primo elemento")
LEGGI(Vet[I])
MENTRE ((Vet[I] ≠ 0) AND (I < 100)) ESEGUI
I←I+1
SCRIVI("Introduci il ", I, "° elemento")
LEGGI(Vet[I])
FINEMENTRE
FINE
• Alg11. Le prime due istruzioni (2, 3) hanno costo unitario, per un costo totale pari a 2. Consideriamo ora il
ciclo, che è composto da un test che ha costo uguale a 1, da un corpo di due istruzioni semplici (costo uguale
a 2) e da un costrutto SE che ha costo uguale a 2. Pertanto, il costo dell’intero ciclo è uguale a 5.
Considerato che il ciclo deve essere eseguito al più N volte, la complessità totale è data da 5 * N.
• Per uscire dal ciclo, la condizione viene testata ancora una volta in modo da poterne verificare la falsità, onde
consentirne l’uscita. Dobbiamo aggiungere quindi ancora un’unità al suddetto calcolo arrivando, così, a:
TAlg11(N) = 2 + 5 * N + 1 = 5N + 3
ALGORITMO Alg11
VARIABILI
I: INTERO
Finito: BOOLEANO
Vet: ARRAY[100] di INTERO
INIZIO
I←1
Finito ← FALSO
MENTRE (NOT Finito) ESEGUI
SCRIVI("Introduci il ", I, "° elemento")
LEGGI(Vet[I])
SE ((Vet[I] = 0) OR (I = 100))
ALLORA
Finito ← VERO
ALTRIMENTI
I←I+1
FINESE
FINEMENTRE
FINE
Basandoci sulla valutazione del caso pessimo, possiamo osservare che nei due algoritmi:
• il tempo di esecuzione non dipende dalla disposizione dell’input, ma solo dalla dimensione dell’input stesso;
• la complessità è lineare per entrambi, poiché entrambi sono proporzionali a N:
Essi hanno, quindi, lo stesso ordine di grandezza di N, cioè sono O(N) e fanno parte della classe degli algoritmi
lineari;
TAlg10 (N) 4
• Alg10 è più efficiente di Alg11; infatti: lim = <1
N→∞ TAlg11 (N) 5
RIPASSIAMO INSIEME B4
LA COMPLESSITÀ COMPUTAZIONALE
AUDIO
RIPASSIAMO INSIEME B4
MAPPA
MODIFICABILE
COMPLESSITÀ
COMPUTAZIONALE
spazio tempo di
di memoria esecuzione
(soprattutto)
che si misura in
numero di
operazioni
o costo
che è legato a
dimensione dei
dati di input
o dimensione
dell’algoritmo
2. Completa correttamente le seguenti frasi. 15. Quali sono le operazioni dal costo dominante?
A Data una funzione di complessità T(N) 16. Qual è l’unità di misura del tempo di esecuzione
di un algoritmo A si dice che T(N) è O(g(N)) se: di un algoritmo?
.......................................................................................................................................
.......................................................................................................................................
17. In quali casi i dati di ingresso sono irrilevanti
nel calcolo della complessità?
B Date due funzioni di complessità T1(N) e T2(N),
si dice che sono dello stesso ordine se: 18. La complessità è legata alla dimensione dei dati
.......................................................................................................................................
in input?
.......................................................................................................................................
19. La complessità è legata ai valori dei dati in input?
C Dire che la complessità di un algoritmo Alg1 è
proporzionale a N significa: 20. Che cosa significa fare l’analisi del caso ottimo,
.......................................................................................................................................
pessimo e medio?
.......................................................................................................................................
21. Che miglioramenti possono esserci in termini
di performance per un algoritmo esponenziale
3. In che cosa consiste la valutazione della bontà eseguito su un calcolatore del futuro 10.000
di un algoritmo? volte più veloce di un calcolatore attuale?
4. Perché analizziamo due algoritmi che risolvono 22. Quando un algoritmo si dice ottimo?
la stessa classe di problemi? In che cosa
consiste il loro confronto? 23. Perché si parla di complessità asintotica?
5. Perché si parla di risorsa spazio e risorsa tempo 24. Quando si dice che f(N) è di ordine g(N)?
di un algoritmo?
25. Quante e quali classi di computabilità conosci?
31. Un algoritmo con complessità pari a C(N) = Nk 35. •• Qual è la dimensione del problema per
con K > 3 appartiene alla classe di complessità: un algoritmo che ha il compito di calcolare
il numero di divisori di un dato numero?
A esponenziale
B polinomiale Ordine di grandezza e classi
C lineare di complessità
D costante
36. •• ESERCIZIO SVOLTO Individua la classe
32. La classe di problemi P è: di complessità della seguente funzione:
Quindi F2(N) ha complessità O(N2). 47. ••• Ordina un array con l’algoritmo del
Selection Sort. Vi sono molti modi per ordinare
un array di elementi interi in modo crescente.
Uno dei più facili da capire e da programmare
37. •• Fai un esempio di algoritmo che abbia è quello che si basa sull’algoritmo di Selection
complessità costante.
Sort, che si basa sui seguenti passi:
38. •• Fai un esempio di algoritmo che abbia • cerca nell’array il numero più piccolo e
complessità lineare. scambialo con il primo elemento dell’array;
• la parte ordinata dell’array è ora il primo
39. •• Fai un esempio di algoritmo che abbia elemento, mentre quella non ancora ordinata
complessità logaritmica. sono i rimanenti elementi;
• cerca nella parte non ordinata il numero più
40. •• Fai un esempio di algoritmo che abbia piccolo e scambialo con il secondo elemento
complessità quadratica. dell’array;
• ripeti la ricerca e lo scambio fino a quando tutti
41. •• Fai un esempio di algoritmo che abbia gli elementi sono al posto giusto;
complessità esponenziale. • ogni iterazione aumenta di 1 la lunghezza della
parte ordinata e diminuisce di 1 quella della
42. •• Stabilisci e classifica l’ordine delle funzioni parte non ordinata.
T(N): L’algoritmo è mostrato nel riquadro seguente.
Determina l’ordine di grandezza della procedura
A log(5N) + NlogN D 3K + N di Selection Sort.
B KN + K(N − 1) + K(N − 2) E N * (N − 1)
C (N + 1)! + KN F K(N − 1) + N(K − 1) PROCEDURA SelectionSort(A: ARRAY[N]
di INTERO)
43. •• Fai un esempio in cui il costo di un algoritmo VARIABILI
è funzione dei valori dei dati in input.
I, J, Indice, Min, Temp: INTERO
44. •• Fai un esempio in cui la dimensione del INIZIO
problema è legata al numero dei dati di input
PER I ← 1 A N ESEGUI
(quantità) e un altro in cui la dimensione del
problema è legata al valore del dato in input. Min ← A[I]
Indice ← I
45. •• Un processore Ghepardo a 1Ghz esegue
un algoritmo di ordinamento che richiede 2N2 PER J ← I + 1 A N ESEGUI
operazioni per ordinare n numeri. Un processore SE (A[J] < Min)
Bradipo a 1Mhz (anni ’80) esegue un algoritmo ALLORA
di ordinamento che richiede 50N log2 N
operazioni su n numeri. Min ← A[J]
B5 Intelligenza artificiale
e reti neurali
IMPARERAI…
Che cos’è l’intelligenza Quali sono le aree di applicazione Cosa sono i sistemi Cosa sono i sistemi
artificiale dell’intelligenza artificiale esperti neurali
In filosofia, per intelletto si intende quella facoltà mentale che ha ogni essere umano di com-
prendere la realtà e di farsi delle idee, la quale comporta a sua volta la capacità di scegliere,
discernere, confrontare, comparare, dissociare, associare, sintetizzare. L’insieme di queste
funzioni viene chiamato capacità intellettuale.
tratta di una materia in forte evoluzione, sia perché è una disciplina di frontiera in cui s’incon-
trano le numerose discipline che abbiamo precedentemente elencato. Pertanto, piuttosto che
delimitare e fornire una rigorosa definizione, preferiamo elencare e descrivere le sue caratteri-
stiche fondamentali e le sue principali aree d’applicazione.
Umanamente Razionalmente
«L’automazione delle attività che associamo «Lo studio delle facoltà mentali attraverso
al pensiero umano, come il processo decisionale, l’uso di modelli computazionali»
Pensare
la risoluzione di problemi, l’apprendimento…» [Charniak, McDermott, 1985]
[Bellman, 1978]
«L’arte di creare macchine che svolgono funzioni «Il ramo della scienza dei calcolatori che si occupa
che richiedono intelligenza quando svolte da esseri dell’automazione del comportamento intelligente»
Agire umani» [Luger-Stubblefield, 1993]
[Kurzweil, 1990]
«L’impresa di costruire artifatti intelligenti»
[Ginsberg, 1993]
INFOGR AFICA
L’INTELLIGENZA
ARTIFICIALE: le ORIGINI
LA STORIA DELL’INTELLIGENZA ARTIFICIALE
Il 1956 è l’anno che sancisce l'inizio degli studi sull'intelligenza artificiale: nello storico
convegno tenutosi nel Dartmouth College di Hanover (New Hampshire), John McCarthy
(informatico statunitense, vincitore del Premio Turing 1971, noto per i suoi contributi nel
campo dell'intelligenza artificiale) introdusse per la prima volta l’espressione Artificial
Intelligence nella proposta della conferenza, fornendo così l’input per l’istituzione della
nuova disciplina. In questa occasione, vennero raccolti i contributi sviluppati negli anni
precedenti per orientarne gli sviluppi in direzione delle potenzialità future.
Sebbene questo convegno rappresenti la nascita ufficiale di
questa disciplina, lo studio dell'intelligenza artificiale affonda
le sue radici in alcune teorie del passato che riassumeremo in
questa pagina.
La tecnologia emblematica dell’IA forte è stata quella dei sistemi esperti, ovvero di quei
programmi che riproducono il comportamento di un esperto umano in uno specifico dominio.
In particolare:
• forniscono le stesse risposte o gli stessi consigli che fornirebbe l’esperto umano;
• sono in grado di giustificare la propria risposta.
I sistemi esperti si usano per risolvere problemi la cui soluzione richiede una considerevole
esperienza umana. Tipici campi di utilizzo sono: diagnostica, progettazione, controllo, piani-
ficazione, istruzione ecc. Approfondiremo questo argomento più avanti, nel capitolo. Per ora,
basti sapere che il compito dell’interfaccia è quello di rendere la comunicazione tra l’utente e
il sistema esperto la più naturale possibile. La base di conoscenza memorizza la conoscenza
dell’esperto. Tale conoscenza consiste, essenzialmente, di fatti e regole.
Il motore inferenziale è la parte attiva del sistema. Usa la base di conoscenza per inferire
nuovi fatti e produrre soluzioni.
L’idea di fondo era che si potesse riversare tutta la conoscenza di un esperto di dominio in un
sistema esperto, e che questo avrebbe potuto essere equivalente (e quindi sostituibile) a una
persona. Il problema reale non è stato tanto la scelta della tecnologia, ancora oggi usata in for-
ma più limitata, ma piuttosto la promessa di poter avere tanti piccoli robot asimoviani pronti
a lavorare per noi.
Modulo
spiegazione
Base di Motore
Utente Interfaccia
conoscenza inferenziale
Modulo
aggiornamento
L’intelligenza artificiale debole sostiene che un computer non sarà mai in grado di essere
equivalente a una mente umana, ma potrà solo arrivare a simulare alcuni processi cognitivi
umani senza riuscire a riprodurli nella loro totale complessità.
Si tratta quindi di un’IA che agisce come se pensasse e avesse una mente.
I sostenitori dell’intelligenza artificiale debole non si pongono più l’obiettivo di realizzare in-
telligenze simili a quelle umane, ma piuttosto di realizzare software che possano sostituire
alcune funzioni umane, come per esempio la traduzione automatica di testi, o la previsione di
atti criminali, che sono senza dubbio funzioni complesse non immediatamente riconducibili a
sistemi formali, ma la cui soluzione non potrà far dire che “nuove intelligenze” vivono tra noi.
L’importante è che il software agisca come un soggetto intelligente, non che lo sia davvero.
Se un navigatore satellitare ci consente di arrivare a destinazione, fornendoci informazioni
con una voce sintetica suadente, magari addirittura confrontandosi con il traffico reale sulle
strade, a chi segue l’IA debole non importerà il modo in cui ci arriva, mentre un seguace dell’IA
forte potrà obiettare che non è così che le persone ragionano.
INFOGR AFICA
Aree di applicazione
dell’INTELLIGENZA
ARTIFICIALE
Sistemi esperti
I sistemi esperti non rispondono
Robotica più all’esigenza di realizzare
algoritmi risolutivi di problemi
L’area della robotica intelligente (cioè l’area
applicativi, ma richiedono solamente
della robotica di interesse per l’IA) si articola
di rappresentare conoscenza: la
nelle sottoaree della manipolazione e della
macchina algoritmica utilizza poi
navigazione. In termini molto generali, queste
questa conoscenza per costruire
due particolari sottoaree si occupano dei
inferenzialmente la soluzione dei
problemi geometrici e di movimento connessi
problemi applicativi posti (purché
con la realizzazione di robot intelligenti e
riguardanti le informazioni possedute
hanno raggiunto da tempo risultati concreti
dal sistema). Per esempio, questo
e rilevanti anche dal punto di vista applicativo.
tipo di IA potrebbe essere usato in
futuro per affiancare il medico nella
formulazione di diagnosi.
Domotica
Lo studio della realizzazione della “casa intelligente” è una delle applicazioni
più recenti dell'intelligenza artificiale: questa tecnologia è capace di mettere
in funzione elettrodomestici e controllare il loro stato anche in remoto,
automatizzando i lavori domestici con software connessi a Internet e piccoli
robot specializzati.
Controllo autonomo
Quando un sistema è particolarmente complesso e le sue variabili difficilmente
prevedibili, l'intelligenza artificiale può essere molto efficace: è il caso del
controllo automatico di veicoli che si devono orientare in ambienti mutevoli, come
le sonde spaziali o le automobili senza pilota.
Giochi
Storicamente, i metodi informatici che stanno alla base dell'intelligenza
artificiale sono stati sviluppati con obiettivi ludici. Lo studio dei giochi ha
determinato lo sviluppo e la messa a punto di numerose tecniche, soprattutto
quelle della ricerca nello spazio degli stati. Nel 1997, per la prima volta nella
storia, il software Deep Blue sviluppato dalla IBM ha sconfitto il campione del
mondo umano di scacchi, Garry Kasparov. La forza di questo programma deriva
principalmente dalla sua straordinaria potenza computazionale: l’algoritmo che
sceglie le mosse è capace di calcolare 100 milioni di posizioni al secondo.
Programmazione automatica
L’obiettivo di questo filone di ricerca è quello di costruire sistemi che, partendo
da specifiche ad alto livello delle funzioni che un programma deve eseguire,
riescano a generare automaticamente il programma desiderato.
3 Il contributo di Turing
Il successo dell’IA è legato alla disponibilità di un sistema artificiale all’interno
del quale riprodurre, attraverso un processo di emulazione, i fenomeni dell’intel-
ligenza. Fin dall’inizio, il candidato ad assumere questo ruolo è stato il compu-
ter. Come abbiamo visto nelle precedenti Unità, alla base dell’invenzione di que-
sto meraviglioso strumento c’è il concetto di macchina universale di Turing.
Oltre a questa invenzione, il genio matematico Alan Turing fornì una soluzione
concreta e operativa al problema dell’espressione dell’intelligenza in una mac-
china: il test di Turing.
Il test di Turing
Il test di Turing è un metodo di verifica dell’intelligenza artificiale. È stato ideato da Alan
Turing negli anni ’50. Ancora oggi, è considerato uno dei principali criteri di verifica dell’intel-
ligenza artificiale. Il test di Turing è molto semplice. Una persona scrive su dei bigliettini delle
domande da inviare a due soggetti diversi in un’altra stanza. In una delle stanze è situata una
macchina, nell’altra si trova invece una persona. Entrambi i soggetti rispondono alla domanda
dell’esaminatore stampando su un biglietto una risposta. I biglietti vengono infine riconsegnati
all’esaminatore. Al termine del ciclo di domande, l’esaminatore deve scoprire in quale delle due
stanze si trova la macchina. L’esperimento viene poi ripetuto sostituendo la macchina con una
persona a cui viene affidato il compito di mentire alle domande. L’esaminatore deve cercare di
capire quale delle due persone sta mentendo e quale invece sta rispondendo sinceramente alle
domande. Il test di Turing è considerato superato soltanto se il numero di volte in cui l’esami-
natore individua la macchina è pari al numero di volte in cui l’esaminatore scopre la persona
che mente (al momento nessuna macchina è mai riuscita a superare il test di Turing sull’intel-
ligenza artificiale).
Le domande possono essere di qualsiasi tipo, e riguardare conoscenze enciclopediche (per es.:
dimmi qual è il fiume che attraversa la Pianura Padana), capacità di calcolo (per es.: quanto fa 5
alla quarta?), esperienze emotive (per es.: come ti senti quando osservi un tramonto?), doman-
de con co-referenza (per es.: ti piace il lago di cui abbiamo già parlato?) e qualsiasi altra cosa
venga in mente all’esaminatore.
Non sempre rispondere correttamente indurrà nell’esaminato l’idea che l’altro sia una persona.
Per giungere alla comprensione, il computer dovrebbe saper:
• interpretare il linguaggio
naturale, per comunicare
con l’esaminatore nel suo lin-
guaggio umano; L’umano
• rappresentare le conoscen- è A o B? PT
ze, per memorizzare quello
che sa o sente;
A B
• ragionare automaticamen-
te, per utilizzare la conoscen-
za memorizzata in modo da
rispondere alle domande e
trarre nuove conclusioni;
• apprendere, per adattarsi a
nuove circostanze, individua-
re ed estrapolare pattern.
SEI UN UMANO? PROVALO! Ormai ci viene automatico e non ci facciamo più caso: molto spesso ci viene chiesto, al momento della
registrazione o dell'accesso a un sito o a un backoffice online, di digitare caratteri alfanumerici copiandoli da un'immagine, oppure di
scegliere tra le immagini di un set quelle che possiedono alcune caratteristiche specifiche.
Lettere e numeri possono essere casuali o avere un senso compiuto ma,
in tutti i casi, non somigliano ai caratteri che di solito vengono riprodotti
da un qualsiasi word-processor. Le lettere sono distorte e spesso sono
presenti linee e colori fatti apposta per ostacolarne la lettura. Di norma,
non è necessario più di qualche secondo per riuscire a riconoscerle
correttamente o per individuare le immagini giuste. Quello che stiamo
facendo è un vero e proprio test. Nella fattispecie, è una forma di test di
Turing, immaginato appunto da Turing: CAPTCHA, Completely Automated
Public Turing test to tell Computers and Humans Apart (letteralmente,
Test di Turing completamente pubblico e automatico per distinguere
esseri umani e computer). Si tratta di una delle più familiari procedure
antispam, che sfrutta una delle peculiarità proprie del cervello umano,
ovvero quella di riconoscere istantaneamente simboli e immagini.
Se, infatti, nessuno di noi ha particolari difficoltà a leggere o analizzare
immagini da qualunque supporto (cartaceo o virtuale che sia), la stessa
cosa non vale per un computer che, per farlo, ha bisogno di un software
OCR. Considerando che al momento le macchine non sanno risolvere un
test di Turing (ovvero, formalmente, non sanno pensare), un test di Turing
è un buon metodo per distinguere una macchina da un essere umano.
Un essere umano, infatti, lo passa, mentre una macchina, al momento,
no. Questo ostacola quegli spambot che scandagliano autonomamente
la Rete alla ricerca di moduli di immissione.
Bisogna dare credito a Turing di aver concepito un test che è rimasto significativo a distanza di
sessant’anni. Sono state fatte delle estensioni al test per introdurre elementi multimediali, ma
fondamentalmente il test ancora oggi è considerato piuttosto valido.
4 Il contributo di Searle
Un tentativo di superare la posizione del test di Turing è stato rea-
lizzato da John Rogers Searle, nato nel 1932, professore di filoso-
fia a Berkeley, Università della California, noto per i suoi contributi
alla filosofia del linguaggio e alla filosofia della mente.
Searle, attraverso il suo esperimento mentale chiamato stanza ci-
nese, ipotizza l’esistenza di una stanza dove è possibile introdurre
dei testi scritti in una lingua e da dove verranno emessi dei testi
tradotti in un’altra lingua. Un osservatore potrà pensare che chi
sta facendo le traduzioni, sia esso una persona o un automa, sia un
soggetto intelligente. Secondo Searle, invece, questa operazione
potrebbe essere eseguita in modo del tutto automatico e mecca-
nico, utilizzando per esempio un libro di regole o un dizionario.
Non è necessario, infatti, che chi opera la traduzione conosca la lingua di traduzione e nemme-
no la lingua originale: l’operazione non ha pertanto nulla di intelligente.
La posizione di Searle non ha l’obiettivo di contestare il test di Turing, ma piuttosto l’aderenza
di questo alla posizione dell’IA forte.
D’altro canto, anche le osservazioni di Searle sono opinabili. Asserire che l’operazione di tradu-
zione sulla base di un dizionario sia possibile è un’affermazione palesemente falsa (famosa la
traduzione di “la carne è debole e lo spirito è forte”, tradotta nella lingua finale come “il liquore
è forte e la bistecca è avariata”); si prende un compito ostico e se ne ipotizza una soluzione ba-
nale, per poter sostenere che non c’è pensiero; ma se questa soluzione fosse possibile, il compito
non sarebbe complesso e non rientrerebbe nell’ambito dell’IA e della specificità dell’intelligen-
za umana.
Resta da analizzare il punto dell’IA forte contestato da Searle: è necessario che i programmi
“pensino”, o quanto meno seguano gli stessi processi attuati dalle persone, per poter risolvere
problemi tipicamente svolti dall’intelligenza umana?
Il problema è particolarmente mal posto, in quanto non è stato stabilito ancora il modo in cui
le persone “pensano”. Vi è perfino chi mette in dubbio l’esistenza del pensiero stesso quando è
separato dai suoi effetti operativi o altri che fanno risalire alle emozioni la base dell’intelligen-
za. La critica di Searle risulta pertanto non legata intimamente al test di Turing, ma a letture di
questo che ne hanno falsato il senso.
Non vi è alcun tipo di fondamento scientifico per poter supportare la posizione dell’IA for-
te; non rimane, perciò, che la posizione dell’IA debole, che può essere oggi ridefinita come IA
pragmatica. Ciò non significa affatto che gli obiettivi cardine dell’IA forte (la creazione di
robot e di automi antropomorfi) debbano essere abbandonati, ma solo che è possibile cercare
di raggiungerli anche in modi diversi dall’approccio al pensiero.
Computer e robot
Con l’informatica, l’uomo concepisce la realizzazione di una macchina (il computer) che ri-
produce alcune facoltà dell’intelligenza dell’uomo e che risolve alcuni problemi. Progettare
un computer significa per l’uomo sostituire se stesso con una macchina nel ragionare, senza
coinvolgere l’interazione con il mondo.
Logicamente, si possono identificare, sempre in maniera sintetica, anche tre tipi di elaborazio-
ne dell’informazione:
• l’esecuzione di algoritmi (computer esecutorio);
• la gestione di dati (scrittura, memorizzazione, aggiornamento e lettura – computer ge-
stionale);
• la risoluzione di problemi (computer risolutorio); una dizione equivalente a risoluzione
di un problema è quella di inferenza sulla conoscenza (si può parlare in tal caso di elabo-
ratore inferenziale).
La robotica intelligente
Nel caso della robotica, cioè nel caso dell’interelaborazione dell’informazione, occorre ag-
giungere ai tre precedenti tipi di informazione (algoritmo, dato, problema) coinvolti nei corri-
spondenti tre tipi di elaborazione (esecutoria, gestionale, risolutoria o inferenziale), due altri
tipi di informazione:
• il modello dei fenomeni prodotti dal robot;
• il modello dei fenomeni percepiti dal robot.
L’IA studia i computer (gli elaboratori) e i robot (gli interelaboratori) nei quali viene svolta
elaborazione risolutoria o inferenziale.
La parte della robotica che è oggetto di interesse per l’IA prende il nome di robotica intelli-
gente. Al giorno d’oggi, siamo soliti riferirci al computer o al robot parlando di sistema in-
telligente. Secondo Bertrand Russell, filosofo e logico matematico gallese vissuto nel ’900,
le proprietà che si associano a un agente intelligente sono quelle relative alla sua capacità di
svolgere alcune attività intellettive tipicamente umane, all’offrire delle prestazioni di livello
umano, allo svolgere attività inferenziali e all’agire razionalmente.
INFORMATICA E ROBOTICA
PERCEZIONE
ATTRAVERSO I
SENSORI
ELABORAZIONE
ATTRAVERSO
il computer
(L’ELABORATORE)
PRODUZIONE
ATTRAVERSO gli
ATTUATORI
INFORMATICA ROBOTICA
L’approccio classico dell’informatica è quello che prevede che l’uomo costruisca, attraverso
l’algoritmo, la soluzione di un problema. Questa nuova concezione di utilizzo dell’elaboratore
richiede, invece, che l’uomo sia in grado di fornire alla macchina un algoritmo capace a sua
volta di costruire un algoritmo. In IA, questi algoritmi, che sono in effetti dei meta-algoritmi,
vengono definiti come algoritmi inferenziali.
L’input di un algoritmo inferenziale è, pertanto, la rappresentazione del problema che si desi-
dera che la macchina risolva automaticamente. Con questa tipologia di algoritmi, la macchina
viene concepita non più come mero esecutore abile e veloce nell’esecuzione di algoritmi ma,
piuttosto, come entità capace di costruire autonomamente gli algoritmi necessari per risolvere
problemi.
Continuando a ragionare sullo studio dell’IA che coinvolge elaboratori e robot, può essere utile
dare uno sguardo alla figura.
Nell’ambito dell’IA, esiste una differenza
tra problema intuitivo, cioè l’esigenza av- B
vertita dall’uomo di dover risolvere un pro- rappresentazione
blema, e la formalizzazione di tale proble-
ma, che in IA viene denominata problema inferenza
A
rappresentato. Conseguentemente, il riso- mondo
mondo della
lutore automatico di problemi è in grado di della realtà
conoscenza
confronto
operare un’elaborazione sul problema rap- della realtà
presentato che permette di costruire il pro-
C
blema risolto. Questo problema può essere
espresso sia dall’algoritmo risolvente, che fisica intelligenza artificiale
A fenomeno problema intuitivo
si applica al problema rappresentato, sia
B modello problema rappresentativo
dall’esecuzione dell’algoritmo risolvente, C legge problema risolto
che produce la soluzione del problema (in (algoritmo risolvente)
questo caso si fa riferimento a una soluzio-
ne algoritmica).
Sempre osservando la figura, ci rendiamo conto che le attività svolte possono essere articolate
nel seguente modo:
• passaggio dal mondo della realtà (fenomeno, problema intuitivo) al mondo della conoscen-
za della realtà (modello, problema rappresentato). Questo passaggio, che costituisce la rap-
presentazione, viene anche chiamato abduzione;
• passaggio all’interno della conoscenza della realtà (dal modello alla legge, dal problema
rappresentato al problema risolto). Questo passaggio, che costituisce la risoluzione ed
esecuzione, viene anche chiamato inferenza;
• passaggio dal mondo della conoscenza della realtà (legge, problema risolto) al mondo del-
la realtà (fenomeno, problema intuitivo). Questo passaggio, che costituisce il confronto e
soddisfacimento, viene anche chiamato adduzione.
Le attività dell’abduzione e dell’adduzione vengono globalmente intese con il termine di af-
ferenza, concetto che è in contrapposizione con quello di inferenza, in quanto quest’ultimo
opera all’interno della conoscenza della realtà. L’IA si concentra proprio sull’attività inferen-
ziale nell’emulare le attività intellettuali dell’uomo. Ciò, però, può variare da caso a caso. Per
esempio, nel caso della risoluzione automatica di problemi legati ai giochi (come quello in cui
il computer gioca a scacchi) il computer, dopo avere costruito l’algoritmo risolvente, lo esegue.
In altre circostanze, invece, la macchina costruisce l’algoritmo risolvente, mentre l’uomo lo
utilizza eseguendolo. È questo il caso dei sistemi esperti (di cui abbiamo già fatto cenno nel
Paragrafo 2 di questa Unità).
7 I sistemi esperti
Definiamo sistema esperto un programma in grado di risolvere problemi complessi che ri-
entrano in un particolare dominio, con un’efficienza paragonabile a quella di uno specialista
umano di quel settore.
Un sistema esperto potrebbe, per esempio, essere capace di elaborare diagnosi mediche esa-
minando le cartelle cliniche (opportunamente formalizzate) di un paziente; o potrebbe va-
lutare tutti i fattori di rischio e le prospettive di guadagno di un determinato investimento
finanziario.
Tutti i sistemi esperti presentano i seguenti elementi costitutivi:
• una base di conoscenza
• un motore inferenziale
• un’interfaccia utente.
Le prime applicazioni dell’IA ai sistemi esperti risalgono agli anni ’60 e furono sperimentate
negli ambienti di ricerca delle Università statunitensi.
Il primo sistema esperto degno di questo nome fu MACSYMA, un sistema esperto completo di
matematica simbolica ideato, tra gli altri, da Joel Moses (matematico israeliano-americano,
informatico e professore emerito del Massachusetts Institute of Technology). Il sistema MAC-
SYMA era ancora basato su algoritmi tradizionali e venne seguito da DENDRAL, il primo clas-
sico esempio di “generate and test”, ovvero di procedura euristica, destinato alla ricerca nel
settore chimico.
I primi studi sulla comprensione e l’elaborazione del linguaggio naturale portarono alla na-
scita di HEARSAY, un programma concepito da un’equipe di ricercatori della Carnegie Mel-
lon University per consentire il colloquio fra esperti tramite una lavagna astratta costituita
appunto dal computer. In seguito, lo sviluppo di sistemi esperti si è concentrato in particolar
modo sulla soluzione di problemi medici. In questo settore, una vera e propria pietra miliare è
costituita da MYCIN, che prese avvio come progetto nel 1972 all’Università di Stanford.
MYCIN permetteva di identificare i batteri che causano infezioni gravi, come la batteriemia
e la meningite, e di raccomandare antibiotici nella dose adatta al peso corporeo del paziente.
Il nome del sistema deriva proprio dagli antibiotici stessi: molti antibiotici, infatti, hanno il
suffisso -mycin. Il sistema MYCIN è stato utilizzato anche per la diagnosi di malattie di coagu-
lazione del sangue.
Da questo modello presero spunto altri sottosistemi destinati all’ampliamento degli studi sulla
spiegazione (GUIDON), sull’acquisizione della conoscenza (TEIRESIAS) e sul motore inferen-
ziale (EMYCIN).
EMYCIN fu, nel 1979, il primo sistema inteso come strumento generale (tool) per lo sviluppo
specialistico di ulteriori programmi. Sul suo modello presero forma programmi destinati a dia-
gnosticare malattie polmonari (PUFF e CENTAUR), per il cancro (ONCOCIN) e anche per la
diagnosi dei guasti industriali (DART).
Sempre per il settore medico fu realizzato, nei primi anni ’70, CASNET, caratterizzato dalla
presenza al suo interno di uno schema generale (EXPERT) utilizzabile anche in sistemi con
diversa specializzazione; mentre con ben diversa specializzazione furono PROSPECTOR, rea-
lizzato nel 1979 da Peter Hart e Richard Duda per la ricerca petrolifera, XCON, rinominato R1,
realizzato nel 1980 da John McDermott per progettare la configurazione hardware dei grandi
computer, e PLANT, realizzato nel 1981 da Ryszard Michalski dell’Università dell’Illinois per
diagnosticare le malattie nelle coltivazioni di soia. Sia presso le Università, sia nelle aziende
specializzate, l’ambiente in cui in un primo tempo s’era coltivata la programmazione avanzata
è andato trasformandosi in ambiente di sviluppo per sistemi esperti.
Per spiegare e/o riprodurre l’intelligenza e tutte le facoltà cognitive di un essere umano (o di
qualche altra specie animale) è necessario emulare le proprietà e la fisiologia del cervello,
ovvero il funzionamento delle sue cellule.
A questo scopo, sono nate le reti neurali artificiali, nel tentativo quindi di riprodurre le atti-
vità proprie del cervello umano.
Una rete neurale artificiale è uno strumento informatico che imita il funzionamento di un
cervello biologico nel memorizzare e nell’utilizzare le informazioni ricevute.
Per poter costruire reti neurali in grado di imitare il comportamento del sistema nervoso uma-
no, sono prima state studiate accuratamente le caratteristiche del cervello umano.
Nel sistema nervoso esistono miliardi di neuroni (cellule nervose) formati da un corpo cellu-
lare e da molti prolungamenti ramificati, detti dendriti, attraverso i quali il neurone riceve
segnali elettrici da altri neuroni. Ogni neurone ha anche un prolungamento filamentoso chia-
mato assone, la cui lunghezza può variare da circa 1 cm a qualche metro. All’estremità, l’as-
sone si ramifica formando terminali attraverso i quali i segnali elettrici vengono trasmessi ad
altre cellule (per esempio, ai dendriti di altri neuroni). Tra un terminale di un assone e la cellula
ricevente esiste uno spazio. I segnali superano questo spazio per mezzo di sostanze chimiche,
dette “neurotrasmettitori”. Il punto di connessione tra terminale e dendrite è detto sinapsi.
Un neurone trasmette un impulso elettrico (si “attiva”) lungo il suo assone quando si verifica
una differenza di potenziale elettrico tra l’interno e l’esterno della cellula. L’impulso elettrico
provoca la liberazione di un neurotrasmettitore dai terminali dell’assone, che a loro volta pos-
sono, per esempio, influenzare altri neuroni.
Il cervello umano è un calcolatore complesso, non lineare e parallelo. Pur essendo costituito
da elementi di elaborazione molto semplici (i neuroni), è in grado di eseguire computazioni
complesse, come il riconoscimento, la percezione e il controllo del movimento, molte volte più
velocemente del più veloce degli attuali computer.
Il cervello è in grado di modificare le connessioni tra i neuroni in base all’esperienza acquisita,
cioè è in grado di imparare.
Sinapsi
Corpi Cellula di Schwann I neuroni biologici sono da
Dendriti di Nissl Assone 5 a 6 ordini di grandezza
Nodo di Ranvier
più lenti dei componenti
elettronici convenzionali: un
evento in un chip si verifica
Guaina mielinica
in alcuni nanosecondi
Cono di
(10–9 s) mentre un
emergenza
evento neurale in alcuni
dell’assone
millisecondi (10–3 s).
Assoni di Fibra muscolare
altri neuroni
Nel cervello non esiste un controllo centralizzato, nel senso che le varie zone del cervello fun-
zionano insieme, influenzandosi reciprocamente e contribuendo alla realizzazione di uno spe-
cifico compito.
Infine, il cervello è fault tolerant, cioè se un neurone o una delle sue connessioni sono danneg-
giati, il cervello continua a funzionare, anche se con prestazioni leggermente degradate.
Dopo questa doverosa premessa, risulta maggiormente evidente che per riprodurre artificial-
mente il cervello umano è necessario realizzare una rete di elementi molto semplici che sia una
struttura distribuita, parallela, capace di apprendere e quindi di generalizzare (cioè di produr-
re uscite in corrispondenza di ingressi non incontrati durante l’addestramento).
Dati di input
Ricerca
Rete neurale delle regole Base
di interpretazione di conoscenza
dei fenomeni
Rappresentazione
Dati di output della conoscenza
La rete neurale, una volta raccolti gli input necessari, li pone tra loro in relazione pesandoli
in funzione della loro influenza. Al termine effettua una sorta di media ponderata che rap-
presenta l’output ossia l’esito previsto per il fenomeno studiato.
Si intuisce facilmente che una scelta attenta e oculata delle variabili (gli input), le quali defi-
niscono il problema oggetto di studio e alimentano la rete, è di fondamentale importanza. Gli
scienziati hanno pensato di ricondurre questo fenomeno a una somma dei segnali di ingresso:
se la somma supera un certo livello, viene emesso un segnale. Ciò in base al fatto che ogni se-
gnale in ingresso ha un peso diverso e, di conseguenza, un’influenza diversa sul risultato della
somma. Cambiare i pesi significa poter cambiare i modi di far funzionare i neuroni. Il proble-
ma che ci si pone, però, è il seguente: come può avvenire un cambiamento automatico dei pesi
affinché possiamo ottenere la funzione voluta?
Marvin Minsky, un informatico e scienziato americano specializzato in IA, negli anni ’60 rie-
sce a dare una risposta partendo dal caso di un semplice neurone. Minsky utilizza un metodo
Con esempio si fa riferimento all’associazione tra i dati che descrivono il problema e la rela-
tiva soluzione.
In questo modo, la rete modifica i propri parametri automaticamente e sarà così in grado di
trovare la soluzione anche partendo da nuove classi di dati.
Chiariamo il concetto partendo da un semplice esempio.
Durante la fase di apprendimento, una rete è in grado di autocorreggersi. Per farlo, ricorre alla
differenza tra quanto reputava dovesse accadere e quanto è avvenuto in passato nelle diverse
manifestazioni dello stesso fenomeno osservato. Per esempio, una rete utilizzata per prevedere
l’andamento della borsa valori svolge il suo apprendimento prendendo in esame i vari anda-
menti passati in corrispondenza di determinati valori che si sono realizzati per gli input (valori
come il PIL, il costo del lavoro, la quantità di moneta in circolazione ecc.); in sostanza, la rete
considera i valori degli input in un determinato periodo e calcola il relativo esito. In altri termi-
ni, calcola quale dovrebbe essere, in base al suo apprendimento e alle azioni previste dall’algo-
ritmo, il valore raggiunto dall’indice di borsa in base agli input ricevuti. Considerato che si trat-
ta di valori che fanno riferimento a fenomeni passati, si è in grado di comunicare alla rete l’esito
corretto che poi si è verificato, cioè qual è stato l’andamento della borsa. In questo modo, la rete
confronta la sua opinione con l’esito corretto, calcolando l’errore compiuto. Utilizzando l’algo-
ritmo di apprendimento, la rete modifica i propri pesi in modo tale che, in situazioni future,
nel caso le venissero sottoposti gli stessi valori per gli input, l’errore da essa compiuto risulte-
rebbe più moderato. La rete, così, assorbe gradualmente le regole che legano l’input all’output,
per arrivare, a completamento dell’apprendimento, a generare errori sempre più ridotti.
Dall’analisi del precedente esempio, appare chiaramente evidente che le reti neurali rappre-
sentano uno dei primi strumenti informatici adattivi, nel senso che sono strumenti che si
“modellano” sulla base del fenomeno studiato.
Il risultato fornito non ha la pretesa di raggiungere una correttezza globale sui casi possibili,
ma vuole garantire che l’errore associato al valore ottenuto rappresenti il minimo possibile.
In aggiunta a questo, i programmi basati su reti neurali non si bloccano di fronte a un errore
ma, anzi, lo sfruttano per perfezionare le prestazioni. Le reti neurali, quindi, rappresentano un
validissimo approccio per affrontare problemi di “ottimizzazione dell’approssimazione”, come
l’interpretazione dei comandi vocali, l’interpretazione della scrittura o le previsioni nei più
svariati campi.
mente ampio, significativi cambiamenti negli organismi viventi. Questo processo si basa sulla
trasmissione del patrimonio genetico di un individuo alla sua discendenza e sull’interferenza
in essa frapposta dalle mutazioni casuali.
Nonostante i cambiamenti tra una generazione e l’altra siano generalmente piccoli, il loro ac-
cumularsi nel tempo può portare a un concreto cambiamento nella popolazione, attraverso
svariati fenomeni, il principale dei quali è, secondo la teoria di Charles Darwin, quello della
selezione naturale.
Gli algoritmi genetici operano su una popolazione di potenziali soluzioni applicando il prin-
cipio della sopravvivenza del più adatto, così come avviene in natura, evolvendo verso una
soluzione che si avvicina il più possibile alla reale soluzione del problema.
Gli algoritmi genetici sono stati sviluppati inizialmente da John
Holland (scienziato statunitense e professore di psicologia, elet-
trotecnica e informatica), intorno alla metà degli anni ’70, come
metodo per individuare e ottimizzare gli algoritmi usati nel cal-
colo di alcune funzioni. A tale fine, Holland si è rifatto al mecca-
nismo della selezione naturale. Scopo del meccanismo è quello
di generare popolazioni sempre migliori, fino a identificare le ca-
ratteristiche che formano l’evoluzione con la miglior funzione di
fitness, che è il vero legame con la realtà che si vuole simulare e
ottimizzare. L’algoritmo genetico infatti ricercherà il massimo (o
se si vuole il minimo, e allora invece di fitness si potrà chiamare funzione costo o errore) di
questa funzione. I parametri rispetto a cui ottimizzare la funzione vanno codificati, opportu-
namente quantizzati, in stringhe binarie.
Un algoritmo genetico è una procedura di ricerca iterativa il cui scopo è l’ottimizzazione della
funzione di fitness e si svolge nei seguenti passi:
• generazione di una popolazione iniziale con caratteristiche pseudocasuali;
• assegnazione, a ogni individuo, di un valore di fitness;
• ordinamento degli individui per valori di fitness;
• definizione dei migliori individui come genitori della prossima generazione.
Partendo da questi individui, se ne genera un numero pari della generazione successiva. Ciò
può avvenire secondo due differenti procedure.
Insiemi fuzzy
La logica sfumata è quindi considerata uno strumento flessibile attraverso il quale si è resa
possibile la rappresentazione di concetti imprecisi che tutti noi utilizziamo normalmente nel
linguaggio naturale. Per esempio, nella frase “Lucia è alta” il concetto di altezza risulta im-
preciso, poiché non ci è data una definizione rigorosa di quanto Lucia sia alta. Con gli insiemi
fuzzy possiamo definire il concetto di altezza, per esempio con il seguente insieme:
{ 0,1/150 + 0,25/160 + 0,5/170 + 0,8/180 + 0,9/190 + 1/200 }.
POPOLAZIONE
SELEZIONE RIMPIAZZAMENTO
L’insieme fuzzy appena rappresentato è composto da una serie di valori che indicano l’altezza
di una persona in centimetri, e da un numero compreso nell’intervallo [0,1] che, come abbia-
mo visto, rappresenta il grado di appartenenza dell’elemento all’insieme. Pertanto, scrivendo
0,5/170, stiamo affermando che una persona alta 170 cm è di altezza media poiché il grado di
appartenenza dell’elemento 170 è 0,5, mentre una persona alta 200 cm è una persona decisa-
mente alta, poiché il grado di appartenenza dell’elemento 200 è 1. Un insieme fuzzy può essere
rappresentato attraverso una funzione che indica la funzione di appartenenza degli elementi
all’insieme. Un esempio di funzione di appartenenza può essere il seguente:
1
μ(x) =
⎛ 50−x ⎞⎟
2
1+⎜⎜ ⎟
⎝ 10 ⎟⎠
che è una funzione gaussiana utilizzabile, per esempio, per rappresentare l’insieme fuzzy “per-
sone con età prossima ai 50”, poiché essa forma una curva che raggiunge il picco massimo (di
valore 1) con x uguale a 50.
RIPASSIAMO INSIEME
INTELLIGENZA ARTIFICIALE E RETI NEURALI
AUDIO
B5
MAPPA
MODIFICABILE
INTELLIGENZA
ARTIFICIALE
sistemi
hardware e
software
che simulano
comportamenti
intelligenti
A ritiene che un computer non possa essere 7. Quali tipi di informazioni è possibile riconoscere
veramente dotato di una intelligenza non nell’ambito del processo di elaborazione
distinguibile in nessun senso importante dell’informazione stessa?
dall’intelligenza umana
A L’algoritmo, il dato, il problema
B ritiene che un computer non possa essere
una macchina dotata di mente B L’esecuzione, la gestione, la risoluzione
C ritiene che un computer possa essere veramente C L’algoritmo, le variabili, la soluzione
dotato di una intelligenza non distinguibile in D La risoluzione, l’algoritmo, il tracing
nessun senso importante dall’intelligenza umana
D sostiene che un computer non può mai essere 8. Gli algoritmi inferenziali:
equivalente a una mente umana ma potrà solo A sono algoritmi classici
arrivare a simulare alcuni processi cognitivi umani
B sono procedure di calcolo estemporanee
senza riuscire a riprodurli totalmente
C sono meta-algoritmi
D sono algoritmi non previsti dall’intelligenza
artificiale
9. Con abduzione facciamo riferimento: 12. Nei sistemi esperti, il motore inferenziale:
A al passaggio dal mondo della realtà (fenomeno, A rappresenta il sapere necessario ad affrontare
problema intuitivo) al mondo della conoscenza e risolvere problemi in quel campo
della realtà (modello, problema rappresentato) B è in grado di dedurre, a partire dalla base
B al passaggio all’interno della conoscenza della di conoscenza, le conclusioni che costituiscono
realtà (dal modello alla legge, dal problema la soluzione a un dato problema che rientra
rappresentato al problema risolto) nel dominio
C al passaggio dal mondo della conoscenza della C è un insieme di moduli informatici grazie ai quali
realtà (legge, problema risolto) al mondo della un essere umano è in grado di interagire con
realtà (fenomeno, problema intuitivo) il programma ponendo domande e leggendo le
D al passaggio dal mondo della realtà (fenomeno, risposte
problema intuitivo) al mondo della conoscenza D è l’insieme del sapere e dei moduli informatici
della realtà (legge, problema risolto) necessari per gestire l’interazione con
il programma
10. Con inferenza facciamo riferimento:
A al passaggio dal mondo della realtà (fenomeno,
13. MYCIN è stato il primo sistema esperto degno
di questo nome. Quali tra le seguenti affermazioni
problema intuitivo) al mondo della conoscenza
relative a questo sistema sono esatte?
della realtà (modello, problema rappresentato)
B al passaggio dal mondo della conoscenza della A Permetteva di identificare i batteri che causano
realtà (legge, problema risolto) al mondo della infezioni gravi
realtà (fenomeno, problema intuitivo) B Il nome del sistema deriva dal classico suffisso
C al passaggio dal mondo della realtà (fenomeno, mycin usato negli antibiotici
problema intuitivo) al mondo della conoscenza C Non era utile per la diagnosi di malattie
della realtà (legge, problema risolto) di coagulazione del sangue
D al passaggio all’interno della conoscenza della D Raccomandava antibiotici con la loro dose
realtà (dal modello alla legge, dal problema adattata al peso corporeo del paziente
rappresentato al problema risolto)
14. Completa correttamente il seguente testo.
11. Un sistema esperto è: Nel sistema nervoso esistono miliardi di
A un computer che è in grado di risolvere problemi _________ ________________ formati da un corpo
complessi caratterizzato da una potenza di calcolo cellulare e da molti prolungamenti ramificati,
di efficienza pari a quella di uno specialista umano i ________________. I ________________
di quel settore hanno un prolungamento filamentoso chiamato
B un insieme di hardware e software caratterizzati ____________________, la cui lunghezza
da una sinergia e da una potenza di calcolo pari può variare da circa 1 cm a qualche metro.
a quella di uno specialista umano di quel settore (dendriti, neuroni, assone, neuroni)
C un programma che è in grado di risolvere problemi
complessi che rientrano in un particolare dominio, 15. Quali tra le seguenti affermazioni inerenti le reti
con una efficienza paragonabile a quella di uno neurali sono corrette?
specialista umano di quel settore A Una rete neurale è costituita da un insieme di nodi
D un software che si basa su algoritmi inferenziali collegati
e meta-algoritmi caratterizzato da efficienza B I collegamenti di input sono quelli a cui arrivano
dipendente dai sistemi hardware impiegati segnali
C I collegamenti di output sono quelli attraverso cui
la rete emette segnali
D I collegamenti tra i nodi di una rete neurale sono
di tipo eccitatorio e inibitorio
CLIL ASCOLTA
LA PRONUNCIA
GLOSSARIO
CLIL
The ability to process symbols is the basis of intelligent All of these capabilities are derived from the presence in the
behavior. mind of a set of precise rules, which are similar to the rules of
The example of symbolic processing that characterizes a formal system.
human beings to the greatest extent is without doubt verbal For various reasons, in their theory of language, Chomsky
language. and his followers assigned a primary role to syntactic
The origin of language took place between 100 and competence. Thanks to this every speaker is able
200 thousand years ago, a time which experienced the to immediately perceive that:
evolutionary leap that has differentiated Homo sapiens, our a) “the cat eats the mouse” is a grammatically correct
species, from all other species of hominids. sentence, while
Language and intelligence are closely interconnected. b) “the cat mouse the eats” is not.
All the same, the Turing test assumes that any intelligent
computer must know how to communicate by means of This recognition is determined by the fact that in the
natural language, as we humans do. formation of a sentence (or in the symmetrical process of
Since the beginning one of the main goals of artificial understanding a sentence) formal rules are followed which,
intelligence has been the development of programs that together, make up the grammar of a language.
can produce and understand natural language speech. These rules, which are divided into different groups
Actually, the first steps in this direction were motivated (or components), are applied (not necessarily in a sequential
more by practical concerns than theoretical stimuli. In fact manner) to the construction of correct sentences, or to the
some of the earliest funding for research projects in the verification of sentences spoken by other speakers. The main
then nascent field of artificial intelligence were attracted by group of rules (or basic components) of the Chomsky
the prospect of developing systems of machine translation theory determines the general structure of a sentence and
between different languages, whose commercial application takes into account the fact that everyone is intuitively able
was (and is) obvious. Research on natural language to group words together in such a manner as to comprise
processing constitutes one of the leading sectors of artificial functional groups known as phrases.
intelligence and, in particular, computational linguistics.
Glossary
• Phonological competence
the ability to produce and understand the sounds
of spoken language.
• Syntactic competence
the ability to produce or recognize grammatically
correct sentences.
• Semantic competence
the ability to assign or to extract meaning from
sentences.
• Language
a collection of sentences of finite length all
constructed from a finite alphabet of symbols.
Sezione C
INFRASTRUTTURE
DI RETE E ASPETTI
DI SICUREZZA
C1 C2
Protocolli di rete La sicurezza delle reti e la crittografia dei dati
Una rete è strutturata a livelli che poggiano l'uno La sicurezza a livello telematico non esiste.
sull'altro, come a formare una pila. Ogni livello Partendo da questa affermazione si può intuire quanto
gestisce la comunicazione con gli altri attraverso il problema sia grave e di difficile soluzione; pertanto
i protocolli di rete. sono state messe in campo diverse strategie nel tentativo
ISO/OSI e TCP/IP rappresentano le più diffuse di tenerlo, il più possibile, sotto controllo.
infrastrutture di rete.
PREREQUISITI OBIETTIVI
Conoscenze Conoscenze
• Fondamenti di telematica • Il modello ISO/OSI
• Topologie di rete • La suite TCP/IP
• Differenza tra segnale analogico • I dispositivi di rete
e digitale • Indirizzamento e concetto di subnetting
• I mezzi trasmissivi • Il concetto di sicurezza
Abilità Abilità
• Saper individuare una topologia • Saper realizzare una semplice rete LAN
di rete • Saper predisporre il piano di indirizzamento anche con eventuali sottoreti
• Saper effettuare delle • Saper riconoscere un dispositivo di rete
operazioni nel sistema binario • Saper utilizzare dei sistemi per la difesa del computer
• Saper effettuare le conversioni Competenze
binario-decimale e viceversa
• Acquisire la padronanza di strumenti dell’informatica e utilizzare tali strumenti
per la soluzione di problemi significativi in generale
241
Codice Fiscale: nctgrl03r12e156z
Cognome: Nicotra
Nome: Gabriele
C1 Protocolli di rete
IMPARERAI…
1 Reti di computer
Prima di introdurre i concetti sui protocolli di rete e su come avviene lo scambio informativo
all’interno di una rete di computer, riteniamo opportuno riproporre alcuni concetti di base
sulle reti, argomenti che sono stati trattati nel primo biennio di questo corso.
Una rete di computer (computer network) è costituita da un insieme di computer o più in ge
nerale da unità di elaborazione autonome, connesse mediante un sistema di comunicazione
in grado di scambiarsi messaggi o condividere risorse utilizzando regole di comunicazione
note come protocollo di comunicazione.
Parliamo più in generale di unità di elaborazione anziché di computer. Sono esempi: una
stampante di rete e le unità che controllano o gestiscono il traffico in rete, come modem e rou
ter. Tali unità di elaborazione vengono chiamate nodi o host.
• I nodi sono collegati fisicamente tra loro attraverso un sistema di comunicazione che pre
vede attrezzature passive (cavi elettrici, fibre ottiche, connettori e così via) e attrezzature
o dispositivi attivi (modem, router, schede di rete e così via).
• I nodi sono collegati logicamente tra loro attraverso programmi e software che, per dialo
gare correttamente, utilizzano un insieme di regole detto protocollo informatico di co
municazione.
Le apparecchiature
che iniziano con
H sono gli host,
mentre quelle
identificate dalla T
sono i terminali. Sistema di
comunicazione
2 I tipi di rete
Esistono vari tipi di rete, dalle più piccole, che possono essere composte anche solo da due
personal computer, a reti enormi, con migliaia di computer distribuiti su vaste aree geogra
fiche.
Un possibile criterio di classificazione delle reti si basa sulla loro estensione geografica. I vari
tipi di rete sono:
• PAN
• LAN
• CAN
• MAN
• WAN
• GAN
■ PAN (Personal Area Network, rete personale): è una rete che si estende per pochi metri. In
tale ambito operano diversi dispositivi che gravitano attorno a un unico utente: telefono
cellulare, tablet, notebook. Tali dispositivi possono scambiarsi informazioni o collegarsi a
reti di livello superiore come, per esempio, Internet. Una rete PAN può utilizzare sia colle
gamenti via cavo (wired) che connessioni wireless.
■ LAN (Local Area Network): sono reti che si estendono fino a qualche centinaio di metri (ma
esiste anche una definizione di LAN estesa, la cui ampiezza copre qualche chilometro), mai
però di suolo pubblico; di solito, si sviluppano all’interno di un edificio. Il termine locale si
usa per indicare “vicinanza” e si contrappone a remoto, che indica “lontananza”. Sono reti
affidabili, non molto costose e di facile manutenzione. La tecnologia più diffusa per la rea
lizzazione di una LAN è Ethernet.
■ CAN (Campus Area Network o Controller Area Network o Cluster Area Network): si usa in un
ambito ristretto come quello di un campus universitario o di una fiera espositiva.
■ MAN (Metropolitan Area Network): può coprire un’area di alcune decine di chilometri qua
drati, corrispondente appunto a una città; tuttavia, a essa si preferisce ormai la WAN. Sto
ricamente le MAN sono nate per fornire servizi di TV via cavo nelle città in cui la ricezione
terrestre non era buona. In pratica, un’antenna posta in una posizione favorevole distribu
iva il segnale alle case mediante cavo. Dopo una prima fase avvenuta a livello locale, sono
subentrate le grosse aziende che hanno richiesto di cablare intere città, soprattutto negli
Stati Uniti. Quando il fenomeno Internet è esploso, queste società hanno diffuso la comuni
cazione Internet anche attraverso il cavo TV utilizzando la struttura preesistente. Questa
struttura, attualmente, utilizza la fibra ottica come mezzo di collegamento.
■ WAN (Wide Area Network): sono reti che connettono computer posti a distanze enormi.
Sono anche dette reti geografiche poiché si possono sviluppare in ambito nazionale, inter
nazionale e intercontinentale. Naturalmente, i tempi di risposta sono maggiori rispetto a
quelli di una LAN; sono quindi reti un po’ più lente. Queste reti sono, per la loro stessa natu
ra, molto più “aperte” delle reti locali, ovvero hanno tutta una serie di procedure già predi
sposte per accogliere nuovi elaboratori remoti: da quelli di un’eventuale nuova sede fino al
computer portatile di un dipendente munito di modem e (ovviamente) di linea telefonica.
■ GAN (Global Area Network): sono reti che collegano computer collocati in vari continenti
attraverso l’uso di diverse tecnologie: dai semplici cavi ai satelliti.
Internet, o più semplicemente “the Net”, “la Rete”, è il classico esempio di GAN. Non ha impor
tanza quale sia la tecnologia che unisce le reti: cavi, fibre ottiche, ponti radio, satelliti o altro.
Non è neppure rilevante di che tipo siano i computer connessi: dal piccolo personal computer
al grosso elaboratore. Punto di forza di Internet, e motivo del suo velocissimo espandersi, è
la capacità di “parlare” un linguaggio universale, adatto alla quasi totalità degli elaboratori
esistenti.
3 Le topologie di rete
La topologia di una rete definisce il modo in cui sono collegati i nodi della sottorete di co
municazione. Ogni topologia possiede caratteristiche che influenzano il costo e il through
put, cioè la quantità di informazioni scambiate nell’unità di tempo.
La topologia è fisica quando definisce il modo in cui i componenti hardware sono collega
ti fisicamente. È logica quando definisce il percorso dei messaggi attraverso i componenti
hardware. La topologia fisica può essere diversa dalla topologia logica. Con i tipi di collega
mento che abbiamo visto in precedenza si realizzano, per esempio, le seguenti topologie di rete.
• Topologia a bus
• Topologia a stella
• Topologia ad anello
• Topologia a maglia completa
■ Topologia a bus: tutti i nodi sono connessi a un unico mezzo fisico co
mune (il bus) che viene condiviso (collegamento di tipo multipunto). Le
estremità del mezzo fisico non sono tra di loro collegate e devono avere
dei terminatori che impediscano al segnale di generare echi non desi
derati. La trasmissione è di tipo broadcast: i messaggi vengono inviati a
tutti i nodi ma solo quello che riconosce di essere il destinatario lo me
morizza sul proprio hard disk; solo un nodo alla volta può trasmettere sul canale. Per evita
re collisioni, ovvero sovrapposizioni di segnali da parte di più nodi che vogliono trasmette
re contemporaneamente, si adottano tecniche dette di accesso al canale. Una delle tecniche
più diffuse è nota come tecnica a contesa di tipo CSMA (di cui parleremo nel Paragrafo 8).
■ Topologia a stella: tutti i nodi hanno un collegamento di tipo punto a
punto con un nodo centrale detto centro stella che può essere un ripeti
tore di segnale (hub) o un dispositivo intelligente (switch o router). Tra i
nodi periferici vi è, quindi, un collegamento di tipo logico. Un messaggio
inviato dal mittente è ricevuto da tutti i nodi, ma solo il destinatario lo
memorizzerà sul suo hard disk. Il tipo di trasmissione è di tipo broad
cast, quindi la topologia logica è di tipo a bus, mentre quella fisica è di
tipo a stella. Se uno o più collegamenti fisici vengono interrotti, il resto della rete continua a
funzionare. Se si guasta il nodo centrale tutta la rete rimane bloccata. Si possono facilmen
te aggiungere nuovi nodi fino al numero massimo previsto dal nodo centrale (per esempio,
il massimo numero di connessioni previste dallo switch centrale). È la topologia più utiliz
zata per piccole LAN.
■ Topologia ad anello: ogni nodo è connesso al successivo con un colle
gamento di tipo punto a punto. L’ultimo nodo è connesso al primo, in
modo da formare un anello unidirezionale. Ogni messaggio da trasferire
Linea Linea
diretta diretta
Centralina di
commutazione (zona)
P1 P2 P3 P4
Si utilizza il termine “pacchetto” per indicare che la lunghezza massima dei messaggi è
prefissata. Il vantaggio di far viaggiare più pacchetti destinati a uno stesso dispositivo
lungo strade differenti è quello di ridurre il rischio di sovraffollamento di alcune linee e
di sottoutilizzo di altre: un rialzo improvviso delle richieste di transito lungo una linea si
risolve dirottando alcuni pacchetti lungo percorsi alternativi. Poiché i pacchetti possono
arrivare in un ordine diverso rispetto a quello di partenza, i dispositivi di ricezione dei dati
devono provvedere alla ricostruzione dell’esatta sequenza dei pacchetti che compongono
il messaggio, prima della consegna al destinatario. In caso di ricezione errata, vengono
ritrasmessi solo i singoli pacchetti non ricevuti. Per questi motivi, la commutazione di pac
chetto è la tecnica maggiormente utilizzata dalle reti attuali.
Le componenti software di una rete telematica sono rappresentate dai programmi di ge
stione del collegamento e del traffico dei dati.
Un protocollo definisce come avviene lo scambio di dati e cosa ci si sta scambiando. In termi
ni più formali diremo che il “come” riguarda le modalità, ovvero le procedure da seguire per
scambiarsi i dati, e il “cosa” riguarda il significato, ovvero il formato dei dati scambiati (cioè, il
formato dei messaggi).
Si definiscono sistemi aperti quei sistemi che, pur basandosi su sistemi operativi incompatibi
li, sono capaci di interagire tra loro in accordo con degli standard predefiniti.
un sistema aperto è costituito da sette strati funzionali detti layer (livelli) o sottosistemi,
numerati da uno a sette, ciascuno dei quali comunica con quelli adiacenti attraverso speci
fici protocolli.
l’architettura di rete definisce, livello per livello, i protocolli effettivi e le interfacce, ovvero
le relazioni che intercorrono tra gli strati appartenenti agli stessi layer nelle stazioni trasmit
tenti e riceventi.
Host A Host B
7 Applicazione Applicazione 7
Protocolli di elaborazione
di alto livello
6 Presentazione Presentazione 6 (gestione dei dati)
5 Sessione Sessione 5
4 Trasporto Trasporto 4
comunicazione
1 Fisico Fisico 1
I sette layer garantiscono tutte le funzioni necessarie alla rete per la comunicazione tra sistemi
e, inoltre, una molteplicità di funzioni opzionali (compressione, cifratura dei dati ecc.): in tal
modo, si suddivide un compito complesso in un insieme di compiti più elementari.
■ Simmetria: consente di bilanciare i carichi elaborativi sui vari sistemi. Assicura, inoltre,
che le varie richieste provenienti da un sistema siano interpretate correttamente dalla con
troparte. Ciò rappresenta la base per i processi elaborativi di tipo cooperativo e di tipo
clientserver.
■ Struttura gerarchica: i vari sottosistemi (layer) sono organizzati in una rigorosa gerarchia
operativa: ogni livello riceve i comandi e i dati dal livello superiore, esegue per esso alcune
sue particolari funzioni e chiede servizi al livello inferiore. Lo scopo di un layer è appunto
quello di offrire determinati servizi ai livelli più alti, nascondendo i dettagli su come tali
servizi vengano implementati.
■ Modularità: garantisce che ogni livello abbia ben definite funzioni interne e interfacce
con cui riceve, o trasmette, comandi e dati verso i propri livelli adiacenti. La definizione di
queste relazioni assicura che ogni livello abbia specifiche caratteristiche che lo contrad
distinguono dagli altri. Ciò è particolarmente importante poiché garantisce possibilità di
sviluppo: nel caso in cui nuove tecnologie necessitino di aumentare e/o variare le prestazio
ni di un layer, non sarà necessario modificare anche gli altri.
Host A Host B
Protocollo di livello
7
Livello 7 Livello 7
Interfaccia livello Interfaccia livello
6/7 Protocollo di livello 6/7
6
Livello 6 Livello 6
Interfaccia livello Interfaccia livello
5/6 Protocollo di livello 5/6
5
Livello 5 Livello 5
Interfaccia livello Interfaccia livello
4/5 Protocollo di livello 4/5
4
Livello 4 Livello 4
Interfaccia livello Interfaccia livello
3/4 Protocollo di livello 3/4
3
Livello 3 Livello 3
Interfaccia livello Interfaccia livello
2/3 Protocollo di livello 2/3
2
Livello 2 Livello 2
Interfaccia livello Interfaccia livello
1/2 Protocollo di livello 1/2
1
Livello 1 Livello 1
Mezzo fisico
Ogni livello di host A deve passare i dati, assieme a delle specifiche informazioni di controllo, al
livello sottostante, e ciò fino al livello più basso, sotto cui c’è la presenza del mezzo fisico, grazie
al quale i dati vengono effettivamente trasferiti dall’host A all’host B. Una volta giunti all’host
B, i dati vengono passati al Livello 1 e, da qui, a quello superiore, fino a raggiungere il Livello N.
Fra ogni coppia di livelli adiacenti è definita un’interfaccia che qualifica le operazioni primi
tive, le quali possono essere richieste al livello sottostante, nonché i servizi che possono essere
offerti dal livello sottostante.
Per meglio comprendere questi primari meccanismi su cui si basa il funzionamento del softwa
re di rete, possiamo analizzare la figura seguente, che schematizza una situazione reale in cui
due professionisti geograficamente distanti, uno giapponese e l’altro italiano, desiderino co
municare:
Mezzo fisico
Vediamo, ora, come avviene la trasmissione di un messaggio tra due host. Supponiamo che
un’entità di Livello 7 in esecuzione sull’host A debba inviare un messaggio M alla sua peer
entity dell’host B. La generazione del messaggio avviene al livello più alto del modello, cioè al
settimo. Analizziamo la figura seguente:
• il Livello 7 consegna il messaggio M al Livello 6;
• il Livello 6 aggiunge un suo header H6 in testa al messaggio. L’header racchiude informa
zioni di controllo, per esempio il numero di sequenza del messaggio, la dimensione del mes
saggio, l’indirizzo del mittente, quello del destinatario ecc. Un livello può anche aggiungere
un suo trailer in coda al messaggio in cui si trova un campo CRC per verificare che il mes
saggio ricevuto sia conforme a quello trasmesso;
• il Livello 6 consegna questo prodotto al Livello 5;
Host A Host B
M Protocollo M
di Livello 7
Livello 7 Livello 7
H6 M Protocollo M H6
di Livello 6
Livello 6 Livello 6
H5 H6 M Protocollo M H6 H5
di Livello 5
Livello 5 Livello 5
H4 H5 H6 M Protocollo M H6 H5 H4
di Livello 4
Livello 4 Livello 4
H3 H4 H5 H6 M Protocollo M H6 H5 H4 H3
di Livello 3
Livello 3 Livello 3
H2 H3 H4 H5 H6 M T2 T2 M H6 H5 H4 H3 H2
Protocollo
di Livello 2
Livello 2 Livello 2
Protocollo
di Livello 1
Livello 1 Livello 1
Mezzo fisico
Nel caso in cui il traffico risulti troppo intenso, il livello di trasporto può suddividere i fra
me che compongono il messaggio e spedirli utilizzando percorsi di rete diversi: sarà com
pito del destinatario ricostruire il messaggio completo nell’eventualità che i diversi frame
(che seguono strade distinte) non giungano nell’ordine corretto.
■ Il livello di sessione (session) consente a sistemi diversi di stabilire tra loro una sessione
completa di dialogo, ossia un canale logico di comunicazione, attraverso l’organizzazione
e la sincronizzazione dei messaggi e del tipo di percorso (monodirezionale, bidirezionale
ecc.); sarà, poi, compito dei livelli inferiori scegliere il percorso ottimale da far seguire al
messaggio.
■ Il livello di presentazione (presentation) considera la sintassi e la semantica delle infor
mazioni trasmesse, ossia viene analizzato il significato del messaggio. Ciò implica il rico
noscimento e l’interpretazione non solo dei dati componenti il messaggio stesso, ma anche
dei caratteri di controllo, dei metodi di conversione dei dati dal formato originale in quello
standard recepito dalla rete, dei dati eventualmente crittografati o compressi ecc. Attual
mente, queste operazioni richiedono una soluzione generale all’interno di un livello speci
fico, utilizzando un metodo interpretativo standard.
■ Il livello di applicazione (application) si occupa di fornire i suoi servizi direttamente agli
utenti. Fanno parte di questo livello tutte le applicazioni funzionanti in rete. Il suo compito
è quello di garantire la corrispondenza tra i dispositivi presenti, così che il messaggio venga
proposto al destinatario nel modo previsto dai dispositivi in suo possesso: se, per esempio,
è in arrivo un messaggio da visualizzare su un terminale, questo livello dovrà riorganizzare
i dati in base alle sue caratteristiche.
L’accesso alla rete è multiplo, perciò tutte le stazioni hanno la stessa facoltà di parlare, a con
dizione di accertarsi prima che la linea sia libera, operazione che possono eseguire tutte in
contemporanea.
Tutti
ascoltano
per vedere
se è libero
Tutti i nodi possono accedere alla rete non appena questa si libera
(accesso multiplo) e chiunque può iniziare a trasmettere per primo.
Può accadere che due o più stazioni tentino di trasmettere all’incirca nello stesso momento
poiché hanno trovato la linea libera. La trasmissione parte nello stesso momento e quella del
la prima, inevitabilmente, “collide” con quella della seconda: i segnali elettrici che trasmetto
no i dati che hanno generato la collisione si sovrappongono, generando messaggi non com
prensibili dalle stazioni destinatarie. Se non esistesse nessun sistema per segnalare l’avvenuta
collisione, le due stazioni continuerebbero a trasmettere i rispettivi messaggi per intero, nella
convinzione che questi saranno recapitati ed elaborati. Il sistema di controllo delle collisioni si
serve di un apposito circuito presente nella scheda d’interfaccia, che rimane sempre in ascolto
anche quando la scheda medesima sta trasmettendo, per verificare che non siano avvenute
collisioni. Fondamentalmente, il circuito non è complesso: tutto ciò che deve verificare è l’esi
stenza di valori di tensione superiori alla norma. In caso di collisione, infatti, i segnali elettrici
delle due stazioni si mescolano e finiscono anche per sommarsi, perciò la tensione risultante
che circola in rete è maggiore.
Nel caso in cui si verifichi una collisione, le stazioni trasmittenti sospendono la trasmissione e
attivano un timer di durata casuale prima di ritentare la trasmissione. Il fatto che il timer sia
casuale impedisce che entrambe ritentino la trasmissione nello stesso istante (è per questo mo
tivo che si dice che “Ethernet usa un sistema di accesso di tipo probabilistico”). Se, nonostante
l’uso dei timer, la collisione si verificasse nuovamente, il timer verrebbe allungato progressiva
mente fino a un punto in cui il continuare delle collisioni indicherebbe un guasto fisico sulla rete.
Trasmette
Ascolta e ascolta
Ascolta
Il formato MAC del frame di una rete Ethernet è mostrato nella seguente figura:
vendor code
Il primo campo, il preambolo, viene trasmesso per primo, per garantire la stabilità e la sin
cronizzazione dei supporti fisici. I due campi successivi indicano gli indirizzi MAC del desti
natario e del mittente. Tali campi sono composti da 6 byte e servono per specificare in modo
univoco l’indirizzo della scheda di rete del computer destinatario e del computer mitten
te. I primi tre byte indicano il vendor code, cioè un numero unico al mondo e identificativo
del costruttore di quella scheda di rete; i secondi tre byte sono utilizzati dal costruttore come
identificativo univoco di quella scheda. I successivi 16 bit del formato MAC indicano il tipo di
protocollo eseguito nella rete. Lo stesso campo nello standard 802.3, viene utilizzato per indi
care la dimensione del campo dati che, nel formato Ethernet, ha una lunghezza variabile, per
esempio 1024 bit. L’ultimo campo FCS (Frame Check Sequence) è destinato a contenere alcuni
bit per il controllo degli errori sui bit trasmessi.
Una connessione è un’associazione che si stabilisce tra due livelli paritari allo scopo di
scambiare informazioni tra due o più entità di livello superiore dei rispettivi sistemi.
Un collegamento viene detto “connesso” quando la comunicazione tra due entità avviene nelle
seguenti tre fasi distinte:
• creazione della connessione
• trasferimento dati
• chiusura della connessione.
Nella prima fase il mittente effettua una esplicita richiesta di connessione al destinatario
(che ancora non sa di essere tale), ovviamente, in modalità non connessa. In questa fase, mit
tente e destinatario faranno riferimento ai loro indirizzi.
Nelle fasi successive, i due interlocutori non faranno più riferimento ai loro indirizzi ma al nu
mero identificativo che contraddistingue la connessione tra di essi creata.
La principale differenza tra servizi connessi e servizi non connessi consiste nella sequen
zialità delle informazioni scambiate.
I servizi non connessi garantiscono una maggiore efficienza nello sfruttamento del canale
trasmissivo, pur non garantendo alcun controllo del flusso. I pacchetti trasmessi a un livello
non connesso e non confermato, cioè senza che sia stata attesa la risposta di ricezione avve
nuta da parte del destinatario, prendono il nome di datagram. Tale termine deriva dall’unione
di data (dati) e telegram (telegramma) e fa intendere che per spedire un pacchetto si scrive il
nome del destinatario e si consegna il tutto all’ufficio postale (servizio non connesso) senza
attendere la risposta di avvenuto ricevimento da parte del destinatario (servizio non confer
mato).
I servizi non connessi si occuperanno di verificare gli errori di flusso, gestire gli errori di dati
con ritrasmissioni, suddividere i dati in frame, riconoscere e gestire i delimitatori dei frame. I
servizi connessi del livello data link si occuperanno, invece, di stabilire la connessione, chiu
dere una connessione e trasferire i dati con le funzionalità dei servizi senza connessione.
Due sono le principali tecniche di controllo del flusso che vengono utilizzate:
• controllo del flusso con tecnica stop and wait o trasmissione con attesa;
• controllo del flusso con tecnica sliding window o delle finestre scorrevoli.
■ La tecnica stop and wait consiste nel trasmettere un frame e attendere un segnale di ri
scontro dal destinatario. Questa tecnica offre, però, scarsi risultati nel caso di trasferimenti
consistenti di frame. La tecnica stop and wait richiede un collegamento tra gli interlocutori
di tipo half duplex, cioè quando un’entità trasmette l’altra riceve e, viceversa, per i segnali
di riscontro. Per assicurare la possibilità a tutti di trasmettere in qualsiasi momento, il ca
nale viene utilizzato in modalità full duplex, una direzione per i dati e l’altra per i riscontri.
In questo modo, però, la banda del canale viene utilizzata a metà, in quanto l’altra metà è
utilizzata per i segnali di riscontro: la tecnica delle sliding windows evita questo inconve
niente.
■ La tecnica sliding windows consente a ogni stazione di trasmettere e ricevere contem
poraneamente dati, evitando la trasmissione dei segnali di riscontro, ottimizzando, così,
il canale in modalità full duplex. Tutte le entità interlocutrici sono dotate di un buffer che
può contenere un numero N di frame. Un mittente, allora, può inviare fino a N frame al de
stinatario, senza che possano essere persi per sovraccarico del destinatario. A ogni frame
scambiato, il destinatario aggiunge un numero di sequenza per indicare lo stato del frame
in ricezione.
Il controllo di parità
Il controllo di parità consiste nell’aggiungere un bit, detto bit di parità, alla codifica stan
dard di ogni carattere trasmesso, in modo che il nuovo carattere così ottenuto contenga un
numero sempre pari, o sempre dispari, di simboli 1; si parla allora rispettivamente di parità
pari e parità dispari.
All’arrivo del carattere, il mittente dovrà verificare che il numero di 1 presenti nel carattere
ricevuto corrispondano a quanto richiesto dal bit di parità.
Parità pari:
1 0 0 1 1 0 1 0 1 0 0 1 1 0 1
Parità dispari:
1 1 0 0 1 1 0 1
Come si può facilmente intuire, tale metodo rileva solo errori singoli e non multipli; è infatti
un metodo quantitativo (conta solo gli 1) e non posizionale (non ci dice dove sono questi 1).
Un esempio di metodo correttivo è quello della parità incrociata. In tale metodo si suddivide
il messaggio in blocchi di N caratteri calcolando la parità longitudinale e trasversale di ogni
blocco e inviandola assieme al blocco. Consideriamo il seguente esempio in cui supponiamo di
applicare la parità pari:
0 1 0 1 1 1 0 0
1 1 1 0 0 1 0 0
Parità 1 0 0 1 1 1 0 0
0 1 0 1 0 1 0 1 Blocco di caratteri
trasversale da trasmettere
1 1 0 0 1 0 1 0
0 1 0 0 0 1 0 0
1 0 0 1 0 1 1 0
1 1 0 1 1 1 0 1
0 1 1 0 1 0 0 Parità longitudinale
Con questa tecnica è possibile rilevare la presenza di errori multipli e, se sono in numero pari,
anche di individuarli.
Come possiamo notare dalla figura, se i bit segnati in rosso dovessero cambiare valore all’arri
vo, ce ne accorgeremmo confrontandoli con le parità trasversali e longitudinali, mentre errori
del tipo segnalato in blu non verrebbero individuati. Infatti, gli errori in blu sono due per riga,
per cui il bit di parità sarebbe lo stesso anche se non ci fossero. Pertanto il sistema non riusci
rebbe a individuare riga e colonna dell’errore.
Dividiamo P'(x) per D(x) in aritmetica modulo 2. Per effettuare tale tipo di divisione occorre
non considerare gli eventuali prestiti e riporti delle somme e delle sottrazioni, ovvero, si appli
ca l’operazione logica di XOR bit a bit tra gli operandi intermedi. Affinché il divisore (parziale)
sia contenuto nel dividendo (parziale) è sufficiente che il numero di bit significativi del dividen
do sia almeno uguale a quello del divisore.
10001101000 1011
1011 10110110
=01111
1011
=1000
1011
=01110
1011
=1010
1011
=0010
010 K = 3 → R3(x) = 0x2 + 1x1 + 0x0 = x
Ricordiamo che la divisione viene effettuata utilizzando la tecnica del modulo 2; per esempio,
il primo passaggio consiste nel selezionare i 4 bit più significativi del dividendo (1000); questi
contengono il divisore (in quanto il numero di bit è uguale a quelli del divisore), per cui si mette
1 al bit del risultato.
Per continuare, occorre sottrarre ai 4 bit del dividendo il divisore. Poiché siamo in aritmetica
modulo 2, occorre effettuare l’operazione di XOR bit a bit, ottenendo: 011 come risultato della
sottrazione.
Per poter andare avanti, occorre abbassare il prossimo bit del dividendo e, poiché ciò che si
ottiene non contiene il divisore (in quanto ha solo tre bit significativi), allora si aggiunge 0 al
risultato, e così via.
Il polinomio da trasmettere è:
A(N) + R(K) = 1 0 0 0 1 1 0 1 + 0 1 0 = 1 0 0 0 1 1 0 1 0 1 0
Che corrisponde al polinomio trasmesso:
T(N + K) = T(8 + 3) = 1x10 + 0x9 + 0x8 + 0x7 + 1x6 + 1x5 + 0x4 + 1x3 + 0x2 + 1x1 + 0x0 =
= x10 + x6 + x5 + x3 + x
Il mittente dividerà T(N + K) per D(M) e si controllerà il resto; se è nullo non ci saranno stati
errori, infatti:
10001101010 1011
1011 10110110
=01111
1011
=1000
1011
=01110
1011
=1011
1011
=0000
000 Resto nullo
Con questa tecnica si rilevano e individuano errori singoli, doppi e presenti in numero dispari;
per far questo è importante la scelta del polinomio divisore D(M). La scelta del polinomio G(x)
è importante per la bontà del metodo.
I polinomi che sono diventati standard internazionali sono:
CRC16: x16 + x15 + x2 + 1 = 11000000000000101
CRCCCITT: x16 + x12 + x5 + 1 = 10001000000100001
12 La suite TCP/IP
Si parla di internetwork quando reti anche non omogenee (sia LAN che MAN o WAN) ven
gono collegate fra loro.
Applicazione
Processo/
Presentazione
Applicazione
Sessione
TRASPORT
Trasporto
(TCP UDP)
Collegamento dati
Rete
Fisico
Come si evince dalla figura, il protocollo IP si colloca al terzo livello ISO/OSI, mentre TCP si
colloca al quarto e utilizza IP a livello inferiore. Ai soli fini informativi, è doveroso ricordare
che in realtà il TCP/IP annovera al quarto livello anche un altro importante protocollo: UDP.
Questa architettura semplificata si contrappone alla complessità del modello ISO/OSI ed è sta
to uno dei motivi che ha portato alla sua imponente diffusione. Dalla figura si nota, inoltre,
come il livello applicativo sia sempre presente ma, in determinati casi, può innestarsi pronta
mente sul protocollo TCP, varcando alcuni livelli intermedi.
Il protocollo TCP/IP possiede alcune proprietà molto importanti che hanno decretato il suc
cesso a livello internazionale. Ricordiamo, tra le altre:
• l’indipendenza dalla tecnologia di rete e l’utilizzo di un’unica unità di trasmissione dati,
nota con il nome di datagrammi;
• l’interconnessione tramite indirizzi di rete (indirizzi IP) e domini, che consente il colle
gamento dinamico di nuovi nodi, o di intere reti, senza dover intervenire sulla struttura
precedente.
Per comprendere al meglio il funzionamento del protocollo TCP/IP, occorre partire dal livello
del protocollo IP. Questo protocollo definisce pacchetti che, abbiamo detto, vengono chiamati
datagrammi e rappresentano le unità di base per le comunicazioni su Internet. Questi pacchet
ti passano da una parte all’altra del pianeta in concomitanza con l’apertura di una pagina web
o l’invio dei messaggi di posta elettronica. Il datagramma IP contiene indirizzi a 32 bit sia per
il computer di origine, sia per quello di destinazione. Questi indirizzi IP identificano in modo
univoco i computer e sono utilizzati dai router per dirigere i singoli datagrammi alle rispettive
direzioni. Il router non esamina il contenuto del datagramma, ma ne legge solo l’indirizzo di
destinazione a lunghezza totale.
I datagrammi IP sono suddivisi logicamente in due aree:
• l’intestazione, che contiene tutte le informazioni necessarie per il suo instradamento lun
go la rete;
• il campo dati vero e proprio.
Ma se l’IP rappresenta il braccio del TCP/IP, il TCP rappresenta la mente. Infatti, mentre il
primo si limita a spedire rapidamente i dati che gli arrivano senza preoccuparsi se qualcosa
non procede correttamente, il secondo si occupa di controllare che l’informazione trasmessa
dai livelli superiori arrivi correttamente a destinazione. Il TCP, al contrario del protocollo IP,
fornisce una visione dei dati di tipo a flusso (data stream), cioè i dati sono ricevuti in sequenza
e nello stesso ordine con il quale sono stati trasmessi, strutturati semplicemente come una se
quenza di byte, e in più fornisce al suo utente una visione del collegamento come se esso fosse
una linea dedicata.
Per il TCP, il segmento rappresenta l’unità di trasferimento che viene utilizzata sia per i dati,
sia per i messaggi di riscontro e per la gestione delle connessioni. Come il datagramma a livello
IP, così il segmento TCP è suddiviso in due parti che contengono una l’intestazione e l’altra i
dati.
Il complesso dei protocolli TCP/IP definisce le modalità con cui devono essere organizzati e
trasmessi i dati lungo la sottorete di comunicazione, lasciando ai gateway il compito di sceglie
re, di volta in volta, lungo quale via far avanzare i singoli datagrammi.
È per questa fondamentale caratteristica, e per i motivi poc’anzi definiti, che il protocollo
TCP/IP è divenuto uno standard affermato per la gestione delle connessioni tra reti e oggi, con
la diffusione mondiale di Internet, è riconosciuto come l’infrastruttura di base per tutte le con
nessioni a questa immensa rete pubblica.
13 Interconnessione di reti:
bridge, router e gateway
Quando si uniscono reti elementari per realizzare un’internetwork si devono utilizzare dei di
spositivi di rete particolari il cui compito è quello di collegare fra loro le varie reti. A seconda
del livello su cui intervengono per effettuare questo collegamento, questi dispositivi prendono
il nome di bridge, router e gateway.
Il bridge mette in connessione due (o più) reti limitandosi a intervenire nei primi due livelli
del modello ISO/OSI, cioè connettendo tra loro solo reti fisiche dello stesso tipo.
In altri termini, si puo dire che il bridge sia in grado di connettere reti separate che han
no uno schema di indirizzamento compatibile. I bridge più semplici eseguono soltanto la
duplicazione di ogni pacchetto, del secondo livello ISO/OSI, nelle altre reti a cui è connesso,
mentre bridge più sofisticati sono in grado di determinare gli indirizzi dei nodi connessi nelle
varie reti così da trasferire solo i pacchetti che necessitano di questo attraversamento. Poiché il
bridge opera al secondo livello ISO/OSI, non è in grado di distinguere i pacchetti in base ai pro
tocolli di rete del terzo livello (TCP/IP) e, pertanto, trasferisce indifferentemente tali pacchetti.
I router connettono due o più reti intervenendo al terzo livello del modello ISO/OSI: sono
in grado, pertanto, di trasferire solo i pacchetti di un determinato tipo di protocollo di rete
(per esempio, il TCP/IP) indipendentemente dal tipo di reti fisiche effettivamente connesse.
In altri termini, si può dire che i router siano in grado di connettere reti separate che hanno
schemi di indirizzamento differenti, ma che utilizzano lo stesso tipo di protocollo di rete
al terzo livello ISO/OSI. L’instradamento dei pacchetti attraverso le reti connesse al router av
viene in base a una tabella di instradamento.
Il gateway (o router multiprotocollo) mette in connessione due o più reti intervenendo sia
a livello di trasporto sia nei livelli superiori del modello ISO/OSI, in funzione dei servizi che
implementa (DNS, Proxy ecc.).
È evidente, quindi, che il suo scopo non è tanto quello di connettere delle reti differenti, ma di
mettere in connessione i servizi di due o più ambienti che altrimenti sarebbero incompatibili.
Per esempio, un gateway può ritrasmettere i dati e fornire la conversione tra due diversi tipi di
applicazioni di trasferimento di posta elettronica.
Nel settore della comunicazione il termine gateway ha molti significati e, in particolare, viene
utilizzato spesso per descrivere qualsiasi dispositivo di internetworking. Nonostante i termini
router e gateway siano intercambiabili, consigliamo di utilizzare i due termini tenendo conto
delle funzioni da loro svolte.
■ Il MAC address è un codice univoco inserito nella scheda di rete. È composto da 48 bit, 24
dei quali sono assegnati dall’IEEE e vengono conservati in un registro mondiale così da
evitare duplicazioni e 24 dal produttore della scheda. Ogni scheda di rete ha, pertanto, un
MAC address diverso da tutti gli altri.
■ Il nome del computer viene definito da colui che installa la rete. È fondamentale, prima di
procedere con l’implementazione della LAN, definire una valida e rigorosa politica di de
nominazione e tenerne traccia. Le reti, infatti, tendono a crescere rapidamente non appena
gli utenti ne comprendono l’utilità. L’amministratore della rete deve sempre disporre di
un’attenta documentazione di riferimento gestibile attraverso:
• un semplice documento che riporti il nome di ogni computer e di tutte le periferiche
collegate;
• un database;
• un diagramma aggiornato della rete.
11000000.10101000.00000001.00101101 IP Binario
{
{
{
{
Il meccanismo è simile a quello del numero telefonico in cui la prima parte del numero, il pre
fisso, definisce la zona, ovvero il distretto telefonico, mentre il resto identifica l’apparecchio
telefonico specifico di quella zona. In pratica, quando viene richiesto un indirizzo IP, si ottiene
un indirizzo di rete in funzione della quantità di nodi che si devono connettere. Gli indirizzi
disponibili sono stati distribuiti in cinque classi.
■ Classe A: comprende tutti gli indirizzi in cui il primo ottetto (o byte) ha un valore decimale
da 0 a 126; nella classe A il primo byte identifica la rete (come il prefisso telefonico identifica
il distretto), i tre successivi le macchine. Gli indirizzi di classe A hanno il primo bit a zero.
0nnnnnnn.hhhhhhhh.hhhhhhhh.hhhhhhhh
La classe A è riservata alle reti molto grandi (possono essere composte da più di 16.000.000
di macchine). Gli indirizzi di classe A validi vanno da x.0.0.1 a x.255.255.254 dove x può
assumere qualsiasi valore da 0 a 126.
Per esempio, data la serie 10.0.0.0 – 10.255.255.255 è possibile utilizzare gli indirizzi che
vanno da 10.0.0.1 a 10.255.255.254.
■ Classe C: comprende tutti gli indirizzi in cui il primo byte ha un valore da 192 a 223. I
primi tre byte identificano la rete, l’ultimo le macchine che appartengono a quella rete. Se
un indirizzo IP inizia per 200 si intuisce immediatamente che è di classe C. Gli indirizzi di
classe C iniziano con 110 e utilizzano i 21 bit successivi per identificare la rete e i restanti
8 per gli host
110nnnnn.nnnnnnnn.nnnnnnnn.hhhhhhhh
Gli indirizzi di classe C validi vanno da x.x.x.1 a x.x.x.254, per la solita ragione che il primo
e l’ultimo sono riservati. Una rete di classe C può comprendere, al massimo, 254 host.
■ Le classi D ed E sono classi particolari. La classe D viene utilizzata per trasmissioni multi
cast, come operazioni streaming (l’invio di un video in tempo reale su destinazioni multi
ple). La classe E, invece, i cui indirizzi iniziano con 4 bit a 1111, è destinata a usi sperimen
tali e, quindi, non è utilizzabile all’interno di una rete.
Ricapitolando, il valore del primo byte è:
CLASSE DA A
A 1 127
B 128 191
C 192 223
D 224 239
E 240 255
15 La subnet mask
Indirizzi IP pubblici e privati
Per identificare i singoli host all’interno di una LAN è necessario utilizzare gli indirizzi IP pri
vati, mentre se si desidera esporre la macchina su Internet, per esempio, per pubblicare un sito
web, c’è bisogno di un indirizzo IP pubblico.
Indirizzi IP
Pubblici Privati
Sono unici al mondo in Internet e sono Sono indirizzi utilizzabili per le reti private.
stabiliti da enti internazionali GARR/IANA Come tali vengono eliminati in Internet
La maschera di sottorete
Analizziamo la seguente figura. La LAN di un’azienda, il cui Net ID è 192.168.0.0, è stata suddi
visa in tre sottoreti logiche, rispettivamente una per il reparto magazzino (Net ID 192.168.10.0),
una per l’amministrazione (Net ID 192.168.20.0) e una per il reparto vendite (Net ID 192.168.30.0)
Magazzino
Net ID: 192.168.10.0
Reparto contabilità
Net ID: 192.168.20.0
La scomposizione di una rete locale in sottoreti è una pratica usuale il cui obiettivo è quello di
evitare eventuali fastidiosi intasamenti. La scomposizione consiste nel creare apposite sotto
reti, ognuna formata da tutti quegli host che hanno necessità di condividere specifiche attività
e risorse. Le sottoreti, quindi, possono essere immaginate come raggruppamenti di computer
separati che, di tanto in tanto, hanno la necessità di accedere a computer situati al di fuori del
loro gruppo.
Affinché i singoli host di una sottorete possano comunicare tra loro, devono avere, ovvia
mente, lo stesso Net ID e un Host ID diverso, ma sempre compreso tra quelli previsti dalla
combinazione dei bit destinati agli host.
Nella figura sotto, per esempio, riportiamo la situazione della sottorete del Magazzino con i
singoli Host ID.
Magazzino
Net ID: 192.168.10.0
Il collegamento fisico delle varie sottoreti avviene 192.168.10.2
192.168.10.10
192.168.10.6
La funzione di una maschera di rete è quella di mascherare una parte dell’indirizzo IP, in
modo che il protocollo TCP/IP riesca a distinguere il Net ID dall’Host ID.
Per comunicare all’interno di una rete tutti i computer (compresi i router) devono disporre
della medesima subnet mask.
Si deve notare, inoltre, che la subnet mask non è una sequenza qualsiasi di 0 e 1: i bit impostati
a 1, che rappresentano il Net ID, devono essere tutti contigui.
Indirizzo IP Subnet mask Subnet mask
CLASSE Net ID
di broadcast (formato decimale) (formato binario)
Se, a risultato ottenuto, i due Net ID coincidono, allora gli host si trovano sulla stessa sottorete
e la comunicazione può avvenire direttamente.
Nel caso in cui ciò non accada, la trasmissione del pacchetto avverrà tramite il router che prov
vederà a instradare il pacchetto nella sottorete del destinatario.
Host 192.168.10.3 11000000.10101000.00001010.00000011 AND
Subnet mask 11111111.11111111.11111111.00000000 =
11000000.10101000.00001010.00000000
⎧
⎨
⎩
Net ID
⎧
⎨
⎩
Net ID
I due Net ID dell’esempio coincidono: gli host si trovano sulla stessa sottorete. Ovviamente,
per ottenere l’Host ID è sufficiente porre in AND l’indirizzo di un host con la maschera di rete
invertita.
Un’ulteriore ripartizione della rete può essere effettuata utilizzando una parte dei bit inizial
mente destinati a contenere la parte host.
Prendiamo ancora in esame un generico indirizzo IP di classe C e facciamo uso dell’Host ID per
creare due sottoreti utilizzando i primi 2 bit che seguono l’indirizzo di rete originario:
xxxxxxxx.xxxxxxxx.xxxxxxxx.00000000 indirizzo di rete
xxxxxxxx.xxxxxxxx.xxxxxxxx.01000000 indirizzo della prima sottorete
xxxxxxxx.xxxxxxxx.xxxxxxxx.10000000 indirizzo della seconda sottorete
xxxxxxxx.xxxxxxxx.xxxxxxxx.11111111 indirizzo broadcast.
■ Si parla di rete peertopeer quando tutti i computer hanno uguale importanza e tutti
possono accedere alle risorse comuni.
INFOGR AFICA
I DISPOSITIVI
di RETE
COS’È UN DISPOSITIVO DI RETE
Un dispositivo di rete è un hardware con funzione di nodo
telecomunicativo tra altri dispositivi. Oltre a permettere la comunicazione
all'interno della rete, deve anche assicurarne stabilità ed efficienza.
L'evoluzione dei dispositivi di rete si è spinta nella direzione di permettere
connessioni più veloci e stabili, nonostante l’aumentare della complessità
del sistema. Rispetto a quando un dispositivo doveva gestire solo poche
connessioni tra computer, oggi deve amministrare pc, smartphone,
tablet ed elettrodomestici intelligenti.
I proxy e i firewall
Questi strumenti servono a limitare l’accesso a Internet o a veicolarlo secondo
regole specifiche.
Il proxy server è un programma, installato sul computer con la connessione
remota, che riesce a soddisfare tutte le richieste Internet dei client della rete locale,
instradandole verso il modem.
Nell'uso comune, i firewall vengono tipicamente usati per mantenere più sicuro
un sistema: per esempio, in un ufficio si possono limitare le connessioni in entrata
o in uscita per impedire che i dispositivi siano colpiti da attacchi hacker.
Un altro esempio molto comune si trova nelle università, dove gli studenti vengono
autorizzati a collegarsi da casa propria alla rete istituzionale (tramite proxy)
per poter accedere a contenuti ai quali l’ente è abbonato (tipicamente, articoli
di riviste scientifiche).
I router
Si tratta di dispositivi sui quali viene eseguito
un programma che esamina ogni intestazione
dei pacchetti di dati in arrivo per poi inviare
questi pacchetti alla corretta LAN collegata.
Per permettere a qualsiasi dispositivo che si trova
su una delle LAN di scambiare dati con uno
qualsiasi degli altri dispositivi presenti sulle altre
reti, spesso è necessario collegare insieme più reti
LAN. Quando si hanno a disposizione due o più bus LAN,
è possibile semplicemente collegarli insieme: a questo punto,
si ottiene semplicemente un bus LAN più grande.
Riunire due LAN più piccole in una LAN più grande risulta efficace, a patto che abbiano
lo stesso indirizzamento IP e che siano abbastanza vicine fisicamente da supportare
il collegamento: tuttavia, è meglio collegare le due LAN per mezzo di un tipo
di dispositivo chiamato router. Questa tecnica è particolarmente importante se si
vogliono collegare LAN di tipo diverso (LAN a stella con LAN ad anello): in questo
caso, infatti, è assolutamente necessario avere una tecnologia di traduzione/inoltro per
far passare i segnali da una LAN all’altra. Questa funzione di instradamento garantisce
che le reti non coinvolte nel traffico di dati non vengano interessate nel trasferimento
dei pacchetti, permettendo di ottimizzare i canali di comunicazione: si evita il
cosiddetto broadcast storm, un improvviso fiume di messaggi che ostruisce il mezzo
trasmissivo. Il router mette in connessione due o più reti intervenendo al terzo livello
del modello ISO/OSI: in altri termini, si può dire che il router è in grado di connettere
reti separate che hanno schemi di indirizzamento differenti ma che utilizzano lo stesso
tipo di protocollo al terzo livello TCP/IP.
10.60.5.2
10.60.5.3
10.60.5.1
LAN 1
ROUTER 192.168.10.3
10.60.5.254
192.168.10.1
192.168.10.4
LAN 2
192.168.10.6 192.168.10.5
L’utilizzo di Internet
Vediamo come comunicano due reti differenti che devono condividere Internet. Condividere
l’accesso a Internet significa disporre di un’unica connessione che viene resa disponibile a tutti
i computer. Tenendo conto della suddivisione della banda, la soluzione migliore a oggi è quel
la di una connessione a banda larga. La condivisione può avvenire sfruttando un software di
proxy server oppure attraverso un router. Consideriamo, per esempio, due reti paritetiche dei
laboratori di informatica della scuola. Analizziamo la figura della pagina seguente.
10.60.5.3 10.60.5.2
LAN 1
10.60.5.1
10.60.5.200
PROXY ADSL
10.60.5.4 10.60.5.5 10.60.5.6
192.168.10.2
ROUTER 192.168.10.3
10.60.5.254
192.168.10.4
192.168.10.1
LAN 2
192.168.10.6 192.168.10.5
Anche in questo caso la funzione di router è svolta da un computer con due schede di rete che,
pertanto, ha due indirizzi IP. Per configurarlo, dobbiamo procedere esattamente come affer
mato nel paragrafo precedente. È necessario configurare l’indirizzo del proxy server agendo
attraverso le Proprietà del browser. Nel caso di Windows, per esempio, occorre:
• fare clic sul pulsante Strumenti di Internet Explorer;
• dal menu selezionare la voce Opzioni Internet;
• selezionare la scheda Connessioni;
• fare clic sul pulsante Impostazioni LAN;
• viene visualizzata la finestra di dialogo Impostazioni rete locale (LAN), all’interno della
quale è necessario spuntare la casella Utilizza un server proxy…;
• all’interno della casella Indirizzo inserire l’indirizzo IP del computer che svolge funzioni
di proxy.
Il computer che funge da proxy server può anche essere utilizzato come web server, per esem
pio per consentire l’accesso al nostro sito web personale. In tal caso, il computer dovrà essere
caratterizzato da due indirizzi IP, uno pubblico (per la connessione alla rete Internet) e uno
privato (per la connessione alla rete LAN e/o all’eventuale Intranet).
La diagnosi TCP/IP
Due utili strumenti di diagnosi TCP/IP sono rappresentati dai comandi DOS ping e ipconfig
che verificano rispettivamente la connessione tra due host in rete e la configurazione del proto
collo TCP/IP. Essendo comandi DOS, possono essere impostati soltanto richiamando il prompt
dei comandi DOS.
La sintassi del comando ping è la seguente: ping <Indirizzo IP>.
“Pingando” l’indirizzo IP di un computer si verifica, quindi, la connessione tra il proprio com
puter e quello “pingato”. Se il comando ping non viene eseguito correttamente e viene visualiz
zato il messaggio Richiesta scaduta, occorre verificare che l’indirizzo IP dell’host sia corretto
e che l’host e tutti i gateway (router) tra il computer e l’host siano operativi. Supponiamo che il
comando impartito sia ping 172.18.20.2. Le risposte possono essere le seguenti:
Reply from 172.18.20.2: byte=…….. collegamento OK
Destination host unreachable host non trovato
Time out collegamento interrotto
Nel caso in cui si voglia soltanto visualizzare l’impostazio
ne TCP/IP del computer è sufficiente digitare al prompt il
comando ipconfig, eventualmente seguito dall’opzione /all
nel caso in cui si desiderino informazioni più dettagliate.
RIPASSIAMO INSIEME C1
PROTOCOLLI DI RETE
AUDIO
Tecniche di commutazione e protocolli ISO/OSI, quella del modello TCP/IP prevede 4 livelli
di rete soltanto. L’esempio più noto è Internet.
Per superare inconvenienti come i costi
I compiti dei sette livelli funzionali
di implementazione, per collegare delle reti
del protocollo ISO/OSI
è meglio utilizzare collegamenti commutati,
Il livello fisico (physical) si occupa della
invece che dedicati (cioè fissi). I collegamenti
trasmissione corretta dei bit.
commutati si possono realizzare secondo
Il livello di linea (data link) organizza i dati
tre tecniche: per commutazione di circuito
in strutture di bit chiamate frame. Il livello di rete
(percorso fisico), di messaggio (percorso logico)
(network) instrada i frame dalla sorgente al
o di pacchetto (spezzettamento del messaggio
destinatario. Il livello di trasporto (transport)
in pacchetti, ciascuno dei quali segue un percorso
stabilisce se suddividere o meno i frame in percorsi
autonomo).
per ciascuno diversi. Il livello di sessione (session)
Per funzionare, le componenti hardware hanno
consente a sistemi diversi di stabilire una sessione
bisogno di componenti software chiamate
di dialogo completa. Il livello di presentazione
protocolli di comunicazione, che gestiscono
(presentation) analizza il significato del
il modo in cui sono scambiati i dati e fanno sì che
messaggio.
i computer parlino la stessa lingua.
Il livello di applicazione (application) fa in modo
I modelli architetturali ISO/OSI e TCP/IP che al destinatario il messaggio sia proposto nel
Reti diverse collegate fra loro – con dispositivi modo richiesto dai dispositivi di cui il destinatario
di tre possibili tipi: bridge, router o gateway – dispone.
danno luogo a un’internetwork.
La correzione degli errori di trasmissione
I sistemi di elaborazione che, pur avendo sistemi
Le tecniche di controllo degli errori di trasmissione
operativi diversi, in accordo con standard
più utilizzate sono due: il controllo di parità
predefiniti sono capaci di interagire tra loro, sono
e la tecnica del codice a ridondanza ciclica
chiamati sistemi aperti.
o CRC (Ciclic Redundant Code).
Lo standard di riferimento dei sistemi aperti
è l’OSI (Open Systems Interconnection), definito Reti peer-to-peer e reti client-server
dall’agenzia dell’ONU ISO (International In base all’organizzazione, le reti si classificano
Organization for Standardization). L’ISO ha stabilito in due tipi: reti peer-to-peer o paritetiche
che un sistema aperto debba avere sette livelli (nelle quali tutti i computer hanno uguale
funzionali, chiamati layer (livelli) o sottosistemi. importanza) e reti client-server
Un secondo standard, di fatto diffusissimo, fa (in cui un computer, detto server, mette a
riferimento all’insieme di protocolli chiamato disposizione le sue risorse agli altri computer,
TCP/IP. Contrariamente all’architettura del modello chiamati client).
RIPASSIAMO INSIEME C1
MAPPA
MODIFICABILE
PROTOCOLLI
DI RETE
reti diverse
preferibilmente
mediante
collegamenti
commutati
dando luogo a
una
internetwork
14. Il comitato ISO ha stabilito un modello 20. La tecnica stop and wait (2 risposte corrette):
di riferimento secondo il quale un sistema aperto
A richiede un collegamento tra gli interlocutori di tipo
è costituito da:
full duplex
A 5 strati funzionali C 7 strati funzionali B consiste nel trasmettere un frame e attendere
B 5 strati funzionali D 8 strati funzionali un segnale di riscontro dal destinatario
C impone un buffer di memoria in ingresso
15. Chiarisci con un esempio la tecnica al destinatario
dell’imbustamento multiplo. D richiede un collegamento tra gli interlocutori di tipo
half duplex
16. Nel modello ISO/OSI, il livello di linea:
A riguarda le reti locali e si occupa di organizzare 21. Nel protocollo TCP/IP:
i dati in strutture di bit (possibilmente esenti A il protocollo IP si colloca al quinto livello ISO/OSI,
da errori) chiamate frame mentre TCP si colloca al quarto e utilizza IP
B è il più basso dell’architettura e, come tale, il più a livello inferiore
vicino al canale fisico di trasmissione dei dati B il protocollo IP si colloca al secondo livello
C è quello che conclude il controllo sul ISO/OSI, mentre TCP si colloca al primo e utilizza
funzionamento della sottorete di comunicazione IP a livello inferiore
D consente il trasferimento dei messaggi lungo C il protocollo IP si colloca al quarto livello ISO/OSI,
la rete stabilendo e sciogliendo le connessioni mentre TCP si colloca al terzo e utilizza IP a livello
che definiscono il percorso nella rete che va superiore
dal mittente al destinatario D il protocollo IP si colloca al terzo livello ISO/OSI,
mentre TCP si colloca al quarto e utilizza IP
17. Nel modello ISO/OSI, il livello di trasporto: a livello inferiore
A riguarda le reti locali e si occupa di organizzare
i dati in strutture di bit (possibilmente esenti 22. Il MAC address:
da errori) chiamate frame A è un documento che riporta i nomi di ogni
B è il più basso dell’architettura e, come tale, il più computer e di tutte le periferiche collegate
vicino al canale fisico di trasmissione dei dati B è un codice univoco inserito nella scheda di rete
C è quello che conclude il controllo sul C è definito da colui che installa la rete
funzionamento della sottorete di comunicazione
D è un’etichetta numerica che identifica
D consente il trasferimento dei messaggi lungo univocamente un dispositivo (host) collegato
la rete stabilendo e sciogliendo le connessioni a una rete informatica
che definiscono il percorso nella rete che va
dal mittente al destinatario
23. Il MAC address (2 risposte corrette):
18. La modalità di accesso al canale si dice A è composto da 48 bit, 24 dei quali sono assegnati
“a scansione” quando: dall’IEEE e 24 dal produttore della scheda
A ogni stazione cerca di capire se può trasmettere B non esistono MAC address uguali
o no C è composto da 24 bit, 12 dei quali sono assegnati
B in base a un determinato ordine, vengono dall’IEEE e 12 dall’installatore della rete
interrogate tutte le stazioni e, nel momento D possono esistere MAC address uguali anche
in cui una di esse segnala di voler trasmettere, all’interno di una stessa rete
le viene assegnato il canale
27. Qual è il range IP della classe A? 36. Come fa il protocollo IP a verificare che due host
appartengono alla stessa sottorete?
A Da 240.0.0.0 a 254.255.255.255
A Pone in AND gli indirizzi del mittente
B Da 224.0.0.0 a 239.255.255.255
e del destinatario con le rispettive subnet mask
C Da 1.0.0.0 a 126.255.255.255 B Pone in OR gli indirizzi del mittente
D Da 128.0.0.0 a 191.255.255.255 e del destinatario
C Pone in AND le subnet mask del mittente
28. Una rete di classe A può essere composta: e del destinatario
A da più di 65.000 host D Pone in OR le subnet mask del mittente
B da più di 16 milioni di host e del destinatario
C da non più di 254 host
37. Si parla di rete peer-to-peer:
D da un numero di host sufficiente per realizzare
il multicasting A quando tutti i computer hanno uguale importanza
e tutti possono accedere alle risorse comuni
29. Una rete di classe B può essere composta: B quando tutti i computer non hanno uguale
importanza e non tutti possono accedere
A da più di 65.000 host
alle risorse comuni
B da più di 16 milioni di host
C quando i computer hanno ruoli distinti
C da non più di 254 host
D quando ogni singolo computer ha ruoli distinti
D da un numero di host sufficiente per realizzare e non tutti possono accedere alle risorse comuni
il multicasting
E quando non vi è struttura gerarchica fra i vari nodi
30. Una rete di classe C può essere composta: F quando le informazioni sono gestite dai vari
server della rete
A da più di 65.000 host G quando client e server si alternano i ruoli
B da più di 16 milioni di host all'interno della comunicazione
IMPARERAI…
1 La sicurezza: introduzione
Uno dei primi obiettivi di un gestore di sistemi informatici è certamente la sicurezza del siste-
ma. In attesa di arrivare a una definizione più completa di sicurezza di un sistema informa-
tico, possiamo affermare quanto segue:
■ Integrità dei dati. È la protezione dei dati realizzata in modo da evitare la loro corruzione.
In particolare, nella trasmissione i dati devono arrivare così come sono stati inviati, mentre
nella memorizzazione i dati devono coincidere in ogni istante con quelli memorizzati in
origine. L’integrità riguarda la protezione da modifiche non autorizzate. Esempi di viola-
zione di integrità sono:
• cancellazione non autorizzata di un file;
• modifica non autorizzata di un file.
■ Confidenzialità o riservatezza. È la protezione dei dati realizzata in modo che essi siano
accessibili “in lettura” solo dai legittimi destinatari. La riservatezza riguarda la protezione
da letture non autorizzate. Esempi di violazione della riservatezza sono:
• intercettazione dei dati durante la loro trasmissione;
• accesso non autorizzato ai dati memorizzati su un server.
■ Non ripudio. È la protezione che offre la certezza che chi trasmette (non ripudio del mit-
tente) e chi riceve (non ripudio del destinatario) non possano negare di avere, rispettiva-
mente, inviato e ricevuto i dati. Esempi di non ripudio, presi dalla vita di tutti i giorni in
situazioni analoghe a quelle informatiche, sono:
• in una raccomandata con ricevuta di ritorno, il sistema postale garantisce il non ripu-
dio da parte del destinatario, in quanto quest’ultimo deve firmare di persona la ricevu-
ta di ritorno (è garantita, pertanto, anche la sua autenticità);
• con l’autenticazione della firma da parte di un pubblico ufficiale si garantisce, invece, il
non ripudio del mittente (oltre alla sua autenticità).
Esempi di violazione del non ripudio sono:
• carta intestata falsa
• firma falsa
• e-mail falsa.
Un caso di violazione di più aspetti relativi alla sicurezza può essere il seguente: la rottura di
un disco fisso può violare l’integrità, in quanto le informazioni sulle tracce sono state sicura-
mente modificate o cancellate. Viola anche l’affidabilità, in quanto le informazioni non sono
più accessibili all’utente.
Se, invece, si rompe solo la parte elettronica di un disco fisso, allora si viola solo l’affidabilità
ma non l’integrità, in quanto sostituendo tale parte elettronica si può accedere alle informa-
zioni originarie.
Nella figura seguente rappresentiamo gli aspetti riguardanti la sicurezza di un sistema infor-
matico.
Integrità
Affidabilità Riservatezza
Un buon gestore di sistemi informatici deve, quindi, mettere in atto un’adeguata politica della
sicurezza del sistema. Qualora, infatti, l’intrusione nel sistema informatico, o il suo danneg-
giamento, siano riconducibili alla scarsa diligenza del responsabile di sistema, questi potrà es-
sere chiamato a risarcire il danno nei confronti dell’azienda e dell’eventuale terzo danneggiato.
Con il termine attacco, nell’ambito informatico, si intende qualsiasi atto accidentale o in-
tenzionale finalizzato a sovvertire le misure di sicurezza di un sistema informatico.
La prevedibilità di questi attacchi è di importanza decisiva per delimitare i profili della respon-
sabilità del personale addetto alla sicurezza.
Un attacco è un “agente” qualsiasi; non è detto che sia sempre legato a un essere umano. Pos-
siamo classificare gli agenti responsabili di attacchi in agenti attivi e agenti passivi, e anche
in agenti umani e agenti non umani.
Un agente attivo è qualsiasi agente (umano o non umano) che può violare tutti gli aspetti
relativi alla sicurezza.
Un agente passivo è qualsiasi agente (umano o non umano) che può violare solo la riserva-
tezza di un sistema informatico.
Un fulmine è un agente attivo che viola l’integrità e l’affidabilità dei dati; un pirata che “ascol-
ta” in rete messaggi riservati è un agente passivo, in quanto viola solo la riservatezza.
Agente
passivo attivo
Agente umano
INFOGR AFICA
HACKER e strumenti
per VIOLARE la SICUREZZA
AMICI E NEMICI
DELLA SICUREZZA L’HACKER
INFORMATICA L’hacker è una persona
che sfrutta le proprie
I termini hacker, cracker, pirati informatici
conoscenze per testare le
o criminali informatici sono spesso usati
misure di sicurezza adottate
dai media come sinonimi, ma hanno in
dagli amministratori di
realtà un significato molto diverso.
sistema, al fine di verificarne
la stabilità: nel caso trovi
una falla, informa i diretti
responsabili sul tipo di
attacco possibile e su come
prendere provvedimenti.
IL CRACKER
Il cracker, invece, si serve di tali
falle per commettere crimini o
danneggiare il sistema di cui
ottiene il controllo: è un vero L’hacker agisce a fin di bene, ma non
e proprio criminale moderno. è escluso che penetri nei sistemi altrui:
Tipicamente, infetta sistemi se ciò rientra nel suo specifico codice
(intere reti o singoli dispositivi) etico, l'hacker può anche commettere
chiedendo un riscatto al reati informatici nel perseguimento
proprietario per il loro ripristino. del suo obiettivo.
In generale, è sempre più importante
conoscere i principali sistemi di attacco,
per potersene difendere efficacemente.
Sniffing
È una delle tecniche più comuni: permette di intercettare, o meglio “annusare”
(to sniff, in inglese), il passaggio dei dati lungo la rete, per catturare quelli sensibili.
Quando un dispositivo deve inviare un’informazione a un altro dispositivo, costruisce
un “pacchetto” con l’indirizzo di quest’ultimo e lo spedisce in rete: tutte le macchine
che sono attraversate dal pacchetto lo ignorano, tranne il destinatario. Uno sniffer è un
programma che permette a un computer di leggere automaticamente tutti i pacchetti
che transitano sulla porzione di rete alla quale è connesso, estraendone le informazioni
più interessanti (come, per esempio, nome utente e password).
DOS
Spoofing (Denial Of Service)
Con questa tecnica il Traducibili come
criminale informatico "negazione di
invia pacchetti
modificando l’indirizzo SISTEMI servizio", questi
attacchi non sono
DI
IP dell’origine: così finalizzati a violare
facendo, l’host di la sicurezza dei dati
destinazione e i vari
nodi che il pacchetto ATTACCO di un sistema, bensì
a impedire che
attraversa (firewall, quest’ultimo possa
router e così via) erogare dei servizi. Un
penseranno che la attacco di questo tipo
richiesta provenga da è il network flooding,
un’altra origine. il quale agisce
saturando la capacità
di gestire il traffico in
Backdoor entrata.
Spamming La gravità di un incidente
Consiste nell’invio informatico non si limita
di posta elettronica ai danni arrecati a dati
a chi non vuole e programmi presenti
riceverla: tipicamente, sul sistema attaccato,
ma comprende anche le
Malware
viene usato a scopo
operazioni eseguite dal Questo termine
pubblicitario. Qualsiasi
cracker per garantirsi un racchiude vari tipi
interazione con la mail
eventuale accesso futuro. di programmi: per
spam (anche solo la
L’operazione più comune esempio virus, worm,
sua ricezione e lettura)
per raggiungere tale trojan horse. Questi
certifica al cracker che
scopo è la creazione di piccoli software
l’indirizzo di posta
una backdoor, una sorta possono entrare in
elettronica è attivo.
di entrata di servizio un sistema attraverso
nascosta agli occhi di varie vie (file infetti,
tutti tranne che a quelli e-mail e via dicendo)
del cracker, il quale potrà per danneggiare il
così ripetere l’attacco a sistema in vari modi,
suo piacimento. più o meno evidenti.
Malware
Virus di file Virus di boot Virus polimorfici Virus stealth Virus TSR
Come si evince dallo schema, worm, trojan e backdoor non sono considerati veri e propri virus,
in quanto agiscono in maniera diversa.
Worm
I worm o vermi sono programmi che si inseriscono nella memoria (sia quella centrale sia
quella di massa), cercando aree libere per replicarsi fino a saturare il sistema.
Sono in genere veicolati attraverso le reti e sono molto diffusi nei sistemi Windows. I worm
assumono il controllo delle funzioni del computer destinate al trasporto dei file o delle infor-
mazioni. Molti, infatti, agiscono sulle trasmissioni di rete, saturando la banda disponibile con
propri messaggi e rendendo difficile la comunicazione; altri agiscono sulla posta elettronica,
generando migliaia di e-mail fasulle e saturando i server di posta.
Il pericolo maggiore dei worm è proprio questa loro capacità di riprodursi in numero sempre
maggiore ed estremamente rapido. Intasano la rete e sono la causa di lunghe attese per l’aper-
tura delle pagine web in Internet.
Cavalli di Troia
Alle funzioni legittime del programma che lo ospita, questo tipo di virus aggiunge altre fun-
zioni indesiderate.
Il nome è, ovviamente, riferito al leggendario cavallo di legno usato come espediente dai Greci
per consentire alle proprie truppe, nascoste nel suo ventre, di entrare nella città di Troia ed
espugnarla.
Per analogia, il cavallo di Troia è un programma apparentemente innocuo, ma in realtà è in
grado di sferrare un attacco distruttivo, trasportando i virus all’interno dell’elaboratore da
infettare.
Un virus è un programma autonomo che, a differenza degli altri malware, non ha bisogno di
un altro programma che lo ospiti. Ha, inoltre, un meccanismo di replica.
I virus possono avere caratteristiche diverse in base al punto di attacco o a proprietà intrinse-
che. Si hanno tra l’altro:
■ Virus di file: sono quei programmi maligni che, per nascondersi o per fare in modo di
essere eseguiti più facilmente, si sostituiscono completamente a un programma (file con
estensione .exe, .com, .scr, .bat, e così via) e, nel momento in cui il sistema operativo o l’u-
tente richiederà di eseguire quel programma, in realtà verrà eseguito il virus. In altri casi, i
virus di file si copiano all’interno di un altro programma, di solito alla fine, senza sostituir-
lo completamente, ma “infettandolo”. Quindi, nello stesso programma saranno presenti sia
il codice originale, sia il codice virale. Al momento dell’esecuzione dell’applicazione infetta
verrà eseguito il virus che, a sua volta, provvederà a eseguire anche il programma legittimo,
simulando così un corretto funzionamento. In conseguenza dell’infezione, il programma
originale aumenta solitamente di dimensione.
■ Virus di boot: infettano il settore di boot e l'MBR (Master Boot Record) dei dischi, due zone
speciali che contengono le informazioni necessarie al caricamento e all’avvio del sistema
operativo. I virus di boot erano molto diffusi in passato; oggi, grazie a una maggior atten-
zione e a un maggior controllo dedicati a queste zone del disco, i programmatori di virus
stanno tralasciando questa tecnica, considerata ormai inefficace.
■ Virus polimorfici: si moltiplicano producendo cloni sempre diversi tra loro e, nasconden-
dosi dietro queste nuove forme, tentano di sfuggire alla cattura.
■ Virus stealth (“nascosti”): sono progettati in modo da non essere riconosciuti neppure
dagli antivirus. Per questa micidiale caratteristica, provocano danni quasi sempre senza
possibilità di difesa.
■ Virus TSR (Terminate and Stay Resident): si attivano quando viene eseguito il programma
infetto. Installandosi nella memoria RAM, infettano tutti gli altri programmi in esecuzio-
ne, propagando il contagio. Sono programmi che, una volta terminata la loro esecuzione,
restituiscono il controllo al sistema operativo restando però residenti in memoria.
Cookie
I cookie (termine inglese che significa “biscotto”) sono piccoli file di testo che i web server
creano, e memorizzano, sui computer dei visitatori, per poterli identificare nelle visite suc-
cessive o, più in generale, per archiviare sul client informazioni utili al server.
Quando navighiamo nel Web, dobbiamo essere consapevoli che i siti che frequentiamo regi-
strano alcune informazioni su di noi. Per farlo, installano sui singoli dispositivi i cosiddetti co-
okie. Oggi, la Legge europea sulla Privacy (Regolamento UE 2016/679) consente di accettare o
meno l'installazione dei cookie sul proprio dispositivo di navigazione. Tutti i i siti hanno infatti
l'obbligo di richiedere il consenso agli utenti per poterli installare. Se un utente non concede il
consenso, potrà accedere al sito solo in forma parziale.
I cookie sono necessari a semplificare una serie di procedure, come la memorizzazione delle
credenziali di accesso al proprio account (nome utente e password) e la memorizzazione delle
pagine visitate, in modo che l'utente possa tornare indietro a una pagina già visitata in pre-
cedenza senza cercarla di nuovo. I cookie servono anche a conoscere quali pagine un utente
ha visitato, quali sono le sue abitudini di navigazione e i suoi interessi. Questo serve sia agli
sviluppatori dei siti per migliorarli in base al tempo impiegato dagli utenti sulle varie pagine
(se, per esempio, un utente visita un sito o una pagina solo per pochi secondi, vuol dire che il
contenuto non rispondeva ai suoi interessi), sia per proporre ai navigatori una comunicazione
pubblicitaria personalizzata (se, per esempio, un utente cerca un prodotto da acquistare, si
vedrà riproporre quel prodotto come forma di pubblicità, ogni volta che naviga).
4 La crittografia
La crittografia è quella branca della matematica che studia i metodi per trasformare un
messaggio, in modo da renderlo visibile solo a un ristretto gruppo di persone. In particolare,
possiamo dire che il messaggio dev’essere visibile solo al suo mittente e al suo destinatario.
Un buon sistema di crittografia risolve molti dei problemi finora visti e cioè garantisce:
• autenticazione e non ripudio del mittente e del destinatario;
• confidenzialità o riservatezza e integrità dei dati.
Mittente Destinatario
Attualmente, esistono due tecniche di crittografia che garantiscono una notevole efficacia e
sicurezza, e che sono largamente utilizzate in ambiente Internet:
• la crittografia a chiave privata o crittografia simmetrica;
• la crittografia a chiave pubblica o crittografia asimmetrica.
La crittografia simmetrica
Nella crittografia simmetrica (detta anche “a chiave segreta” o “a chiave privata”) si utilizza
una sola chiave, detta cifrario, sia per cifrare sia per decifrare i messaggi. La chiave è conosciu-
ta sia al mittente sia al destinatario, pertanto dev’essere mantenuta segreta e condivisa. La
situazione è rappresentata nella seguente figura.
Messaggio M Messaggio M
“in chiaro” “in chiaro”
Cifratura Decifratura
con chiave C con chiave C
Sistema Sistema
mittente destinatario
Canale insicuro
Usando una notazione matematica (dove Ec sta per Encryption, ovvero crittografia), possiamo
dire:
Solo chi conosce C può decifrare (cioè applicare) la funzione inversa, che chiamiamo Ec–1() al
messaggio cifrato. Riassumendo:
M → (cifratura) → Ec(M) → (spedizione su canale insicuro)
→ (decifratura) Ec–1(Ec(M)) = M
Esempi di algoritmi di cifratura a chiave simmetrica sono DES, RCn e IDEA (con chiave a
128 bit).
La cifratura a chiave simmetrica è nata in ambienti militari, con organizzazioni ordinate ge-
rarchicamente in modo piramidale (ambienti che vedono le informazioni fluire dal vertice ver-
so la base): infatti, vi è un solo mittente del messaggio (il comando) e molti destinatari
che ricevono ordini e li eseguono.
I limiti di questa tecnica di crittografia sono riassunti nella segretezza della chia-
ve. Infatti, chi possiede la chiave di cifratura può sostituirsi facilmente al mit-
tente del messaggio, e chi possiede il cifrario può sostituirsi altrettanto facil-
mente al destinatario (per intercettare il messaggio).
Pensa a un ambiente come Internet. Per decifrare il messaggio, il destinata-
rio deve conoscere la chiave, e tale chiave dev’essere comunicata attraverso
un canale sicuro. Ma lo scopo della crittografia è proprio quello di creare un
canale sicuro; non possiamo quindi permetterci di inviare la chiave attra-
verso un canale insicuro. Si ricorre dunque ai sistemi di crittografia a chiave
asimmetrica.
La crittografia asimmetrica
La crittografia asimmetrica è stata formulata per la prima volta da Diffie ed Hellman, due crit-
tografi statunitensi, nel 1976.
Nella crittografia asimmetrica esiste una coppia di chiavi asimmetriche: una chiave di-
retta e una inversa, legate da una relazione matematica.
Canale insicuro
Messaggio criptato MC
■ Schema 2: autenticazione della sorgente. Nella fase precedente, il mittente S è certo che
solo il destinatario D potrà leggere il messaggio. Ma D non è ancora certo che il messaggio
sia stato spedito proprio da S, poiché la chiave di quest’ultimo è pubblica, e chiunque può
cifrare un messaggio e spedirglielo. Supponiamo ora, per semplicità, che S debba inviare a
D un messaggio che non debba rimanere riservato, ma che dev’essere attribuito con sicu-
rezza alla sorgente S. Per fornire a D la certezza che il messaggio inviato provenga proprio
da S, la sorgente deve cifrare il messaggio con la propria chiave privata prima di trasmet-
terlo. In questo modo, infatti, la destinazione D potrà leggere il messaggio solo attraverso la
chiave pubblica di S (e, quindi, essere certo che provenga da S). Ovviamente, chiunque sarà
in grado di decifrare il messaggio utilizzando la chiave pubblica di S, ma abbiamo imma-
ginato per semplicità che il messaggio non fosse riservato. La situazione è rappresentata
nella seguente figura.
Canale insicuro
Messaggio criptato MC
D
ra da ecifr
a tu
cif
r E pa atu
Sistema r te ra Sistema
da di S )=M C C
pr
iva
mittente S n te di destinatario D
co r te M C ke
yD (
M D
Se pa y D(
da blic ke C =M
C )
Prima cifratura Seconda
da parte di S E pu C decifratura
Eprivate key S(M)=MC da parte di D
Messaggio Epublic key S(MC)=M
criptato MC
Chiave pubblica di D
Chiave pubblica di S
Ricordiamo che, per come è stato concepito il metodo di crittografia a chiave asimmetrica, il
messaggio non è ripudiabile da parte del mittente (firmatario). Quindi il sistema garantisce:
• l’inviolabilità del messaggio (riservatezza);
• l’effettiva provenienza del messaggio da chi appare come mittente (autenticazione del
mittente);
• la garanzia che il messaggio sia ricevuto solo dal destinatario (autenticazione del desti-
natario).
Esempi di algoritmi di cifratura a chiave asimmetrica sono RSA, Diffie-Hellman, ElGamal, cur-
ve ellittiche e altri ancora.
5 La firma digitale
I principi di crittografia, precedentemente illustrati, vengono applicati alla generazione e alla
gestione della firma elettronica (detta anche firma digitale).
Vediamo in che cosa consiste la generazione della firma digitale di un qualsiasi documento
che, per esempio, si deve trasferire su Internet.
■ Il primo passo consiste nel generare, con una funzione detta one-way hash, un riassunto
del contenuto del messaggio in una stringa di lunghezza relativamente limitata, detta an-
che impronta digitale (o fingerprint). Queste funzioni sono state pensate in modo che
ogni cambiamento nel messaggio si rifletta sul valore di tale stringa. In genere, sono utiliz-
zate stringhe di 128 bit o multipli.
■ Il secondo passo è quello di crittografare l’impronta digitale, utilizzando un algoritmo
a chiave asimmetrica e la chiave privata del mittente (in modo che possa essere decritto-
grafata con la chiave pubblica del mittente). Si ottiene così la firma digitale del mittente
(relativamente al messaggio inviato).
■ La firma elettronica viene allegata in calce al messaggio (che non è stato crittografato) e il
messaggio viene spedito.
■ Il destinatario, ricevuto il messaggio e la firma elettronica, decrittografa quest’ultima con
la chiave pubblica del mittente, riottenendo l’impronta digitale originale.
■ A questo punto il destinatario confronta tale impronta digitale con quella che calcolerà in
modo autonomo, sempre con una funzione one-way hash.
■ Se le due impronte digitali corrispondono, il destinatario sarà sicuro che:
• il messaggio non è stato manomesso (integrità);
• chi ha spedito il messaggio è veramente chi dice di essere, perché è la sola persona che
conosce la chiave privata corrispondente alla chiave pubblica con cui il destinatario ha
decrittografato il messaggio (autenticazione del mittente);
• se, come abbiamo visto, il mittente è la sola persona che ha potuto “firmare” il messag-
gio, egli non potrà ripudiare quanto firmato (non ripudio del mittente).
S M
)=
(I
E
S
y
ke
pu
te
bli
iva
ck
pr
E
ey
(I
M .
S
3
+
2. S (M
Eprivate key S(IS(M)) ))
In questo modo il messaggio è comunque spedito “in chiaro”. Infatti, ciò che interessa alla
firma elettronica è l’autenticazione, il non ripudio del mittente e l’integrità del messaggio. Per
garantire anche la riservatezza, dobbiamo ricorrere a un’altra crittografia del messaggio più la
firma effettuata dal mittente con la chiave pubblica del destinatario.
Il metodo di cifratura a chiave asimmetrica, con autenticazione del mittente e del destinatario,
aiuta a comprendere il significato dell’Art. 8 del regolamento attuativo della Legge Bassanini 1,
che recita:
«Chiunque intenda utilizzare un sistema di chiavi asimmetriche di cifratura con gli effetti di cui
all’Articolo 2 deve munirsi di una idonea coppia di chiavi e rendere pubblica una di esse mediante
la procedura di certificazione».
Ciò significa che, una volta risolto il problema dell’identificazione dell’autore, con l’adozione
della firma digitale, un atto o documento, realizzato su supporti informatici, ha il valore di
atto originale, al quale la Legge attribuisce piena efficacia giuridica. Risulta evidente che, ai
fini del funzionamento dell’intero sistema della firma digitale, è di fondamentale importanza
l’identificazione di chi effettua il deposito delle chiavi nel loro registro; tale processo prende il
nome di certificazione.
Nella tabella che segue vengono confrontati i due tipi di firma: autografa e digitale (come pos-
siamo vedere, la firma digitale per molti aspetti risulta addirittura più attendibile).
La normativa in materia di firma digitale è stata ulteriormente aggiornata con il DPR n. 445 del
28 dicembre 2000, meglio noto come TUDA (Testo Unico sulla Documentazione Amministrativa).
Il TUDA, tra l’altro:
• dà una nuova definizione di documento informatico;
• stabilisce che le regole tecniche per la formazione, trasmissione, conservazione, duplicazio-
ne, riproduzione, validazione (anche temporale) dei documenti informatici siano aggior-
nate almeno ogni due anni, con Decreto del Presidente del Consiglio dei Ministri (DPCM);
• attribuisce al documento informatico (redatto in conformità con le regole tecniche stabili-
te dal DPCM del punto precedente) la stessa validità di riproduzione meccanica (fotocopia
o fotografia) o di scritture private.
Certificatori e certificati
Il sistema di cifratura a chiave asimmetrica funziona, a patto che la chiave pubblica sia certi-
ficata quale originale e che la coppia di chiavi (pubblica e privata) sia di lunghezza adeguata,
in modo che, data una chiave della coppia, sia pressoché impossibile risalire all’altra chiave.
Oggi, le lunghezze delle chiavi vanno da 128 a 512 bit, garantendo una buona robustezza com-
putazionale sulla base delle potenze di calcolo attualmente disponibili.
Il deposito della chiave pubblica dev’essere effettuato presso un soggetto in grado di assicurare
la corretta manutenzione del registro di chiavi pubbliche, e di garantire l’accesso telematico a
tale registro. Tale ente prende il nome di ente certificatore o Certification Authority.
L’Art. 8 della Legge 59/97 stabilisce che le attività di certificazione devono essere effettuate da
certificatori inclusi in un apposito elenco pubblico, consultabile online, predisposto a cura
dell’Autorità per l’Informatica nella Pubblica Amministrazione (AIPA).
La richiesta di certificazione deve contenere, oltre ai dati personali dell’utente, anche la chiave
pubblica da lui generata.
L’AIPA con il D.lgs. 196/2003 (nuovo codice in materia di protezione dei dati personali) è stata
trasformata in CNIPA (Centro Nazionale per l'Informatica nella Pubblica Amministrazione). Il
CNIPA è una struttura di supporto per l’utilizzo dell’informatica nell’attività della pubblica
amministrazione, con la finalità di migliorare la qualità dei servizi e di ridurne i costi di gestio-
ne. Dal 2012, il CNIPA è stato sostituito dall'Agenzia per l'Italia Digitale (AgID). I compiti più
importanti dell’(AgID) sono:
• fornire consulenza sull’adozione di normative nel settore informatico;
• emanare norme e criteri per la realizzazione e la gestione dei sistemi informatici nelle pub-
bliche amministrazioni (attraverso un piano triennale che detta le linee strategiche per il
miglioramento dei servizi: maggiore trasparenza, riduzione dei costi ecc.);
• definire criteri e regole per la sicurezza e l’interoperabilità dei sistemi informatici;
• curare la formazione e l’aggiornamento dei dipendenti pubblici nel settore informatico.
Con opportuni
programmi produce Chiave privata
una coppia di chiavi
Custodia
Utente chiave privata
Chiave pubblica
Consulta elenco
AgID certificatori presso AgID
e sceglie un certificatore Certification
Authority
Richiesta di
certificazione
Effettua richiesta Inserisce la chiave
di certificazione pubblica dell’utente
Elenco all’ente scelto
dei certificatori nel registro e invia
all’utente il certificato
Utilizza i certificati
per crittografare Certificato
Posta
elettronica Collegamenti Elenco delle
sicuri attraverso chiavi pubbliche
il browser
Backup
Per ogni azienda dotata di un sistema informatico, anche di piccole dimensioni, la perdita di
dati (per qualunque causa) si trasforma in un danno economico. La protezione dei dati e il
tempo di ripristino degli stessi, diventano addirittura vitali nelle aziende che dipendono di-
rettamente dalla struttura informatica. L’operazione da effettuare è il backup, un processo
che prevede la realizzazione di una copia di sicurezza dei dati. Il backup dev’essere una prassi
per l’azienda, svolta in maniera periodica o addirittura giornalmente. Fortunatamente, questo
avviene in maniera del tutto automatica, previa configurazione di semplici regole.
Le filosofie del backup all’interno della rete aziendale sono due:
• backup in locale
• backup in remoto.
■ La prima prevede che la copia dei dati, di ogni singolo computer della rete, venga eseguita
sul computer stesso, dotato di hardware adeguato, che consenta la scrittura simultanea su
due differenti hard disk. Il mirroring (copia a specchio) ha lo svantaggio di richiedere una
soluzione più costosa, in quanto ogni macchina dev’essere dotata dell’hardware necessa-
rio e inoltre, in presenza di virus, il sistema riporterebbe gli stessi dati corrotti anche sul
secondo hard disk, non garantendone il recupero.
■ Nella seconda filosofia, le procedure di backup sono gestite da un dispositivo dedicato e
autonomo collocato all’interno della rete aziendale, che coordina le operazioni di archivia-
zione dati dei terminali attraverso la connessione di rete. Un NAS (Network Attached Sto-
rage) è un dispositivo che ha il compito di immagazzinare i dati dei computer della rete. Il
vantaggio è che si tratta di un servizio centralizzato, non richiede hardware aggiuntivo sui
singoli computer, e prevede un unico dispositivo da gestire e controllare. Di contro, però, il
guasto o il malfunzionamento di un NAS provocherebbe la perdita di tutti i dati della rete.
Firewall
Il termine firewall (letteralmente “parete tagliafuoco”) è l’incarnazione moderna del fossato
pieno d’acqua e del ponte levatoio che proteggevano gli antichi castelli. Il principio è lo stesso:
costringere il passaggio di tutto ciò che transita (esseri umani nell’antichità, traffico di rete
oggi) attraverso un unico punto di ingresso e uscita, dove si provvede a effettuare gli opportuni
controlli.
La sicurezza perimetrale provvede alla protezione della rete nei punti in cui essa è a contatto
con il mondo esterno. In base al tipo di traffico e alla funzione, si identificano diverse zone. Nei
casi più semplici le uniche due zone, LAN e WAN, sono attestate sui due lati del firewall.
Il lato LAN è il segmento privato e protetto a cui appartengono tutti gli host e i server, i cui
servizi sono riservati all’uso interno. La zona WAN è la parte esterna, a cui appartengono uno
o più apparati di routing che sostengono il traffico da e per la rete locale sia verso Internet, sia
verso eventuali sedi remote dell’azienda.
Sui firewall vengono eseguiti particolari programmi che esaminano tutti i messaggi in transito
e decidono se lasciarli passare o fermarli. Tipicamente, vengono lasciati entrare nella zona pro-
tetta soltanto i messaggi provenienti da persone o computer autorizzati. Non appena l’archi-
tettura della rete comincia a evolversi, tuttavia, ci si trova nella necessità di esporre all’esterno
della rete alcuni servizi. Il caso più comune è quello di un server web dove l’azienda pubblica il
suo sito, o quello di un server di posta per la gestione delle e-mail dei dipendenti.
I server appena citati fanno parte della rete interna aziendale, ma entrambi hanno bisogno di
interfacciarsi con la rete WAN. In questi casi, è fortemente consigliata la creazione di una terza
zona detta DMZ (De-Militarized Zone). Tale configurazione viene normalmente utilizzata per
permettere, ai server posizionati nella DMZ, di fornire servizi all’esterno, senza compromette-
re la sicurezza della rete aziendale interna, nel caso in cui una di tali macchine sia sottoposta
a un attacco informatico: per chi si connette dall’esterno dell’organizzazione, infatti, la DMZ è
una sorta di strada “senza uscita” o “vicolo cieco”. È un’area in cui sia il traffico WAN sia quello
LAN sono fortemente limitati e controllati.
NAS
DMZ
Router
Rete locale Firewall Internet
Proxy
Quando ogni singolo computer della rete interna accede alla rete WAN, si instaura un dialogo
diretto, fatto di richieste da una parte e risposte dall’altra. Supponiamo che tutti i computer
di una LAN abbiano l’esigenza di collegarsi alla stessa pagina di un sito; ogni computer effet-
tuerà la richiesta per proprio conto, e dalla rete esterna si riceveranno altrettante risposte: in
definitiva, la stessa identica informazione viene ricevuta più volte. La soluzione per ovviare
a questo problema consiste nell’interfacciare la rete interna e quella esterna attraverso un
proxy server, il quale si fa carico di effettuare le richieste per conto di tutti i computer della
rete, ricevere la risposta e indirizzarla al richiedente. Nel momento in cui un altro computer
effettua la stessa richiesta, il proxy non ha più la necessità di andarla a reperire all’esterno:
Azienda
Application gateway
Server Proxy
1
4 3 Nodo
interno
RIPASSIAMO INSIEME C2
LA SICUREZZA DELLE RETI
E LA CRITTOGRAFIA DEI DATI AUDIO
RIPASSIAMO INSIEME C2
MAPPA
MODIFICABILE
SICUREZZA
DELLE RETI
allora
• riservatezza
• integrità
• affidabilità
violazione
• autenticazione
di domicilio
• non ripudio
2. In che cosa consiste il concetto giuridico 15. Quali operazioni svolgono i virus polimorfici?
di sicurezza informatica?
16. Quali sono le finalità per cui sono stati progettati
3. A quale aspetto attiene l’impossibilità di i codici malefici?
accedere a dei dati pur avendone il permesso?
A Affidabilità
17. Qual è la differenza tra worm e trojan?
8. Qual è la differenza tra hacker e cracker? 27. Quali nuove regole detta il codice
dell’amministrazione digitale?
9. In che cosa consiste lo sniffing?
28. Quando si desidera evitare che ogni singolo
10. Che cos’è lo sniffer? computer della LAN acceda a Internet si utilizza:
A Un router
11. In che cosa consiste lo spoofing?
B Un proxy
12. Che cosa sono le backdoor? C Un computer dedicato
D Un web server
13. Descrivi il concetto di sicurezza relativo
a un sistema informatico
51. • Verifica la presenza di certificati digitali 58. ••• All’interno di un foglio di calcolo simula
all’interno del tuo browser, individua la data la trasmissione (cifratura e decifratura) della
di emissione e quella di scadenza. parola “riservatezza” utilizzando un tuo algoritmo
di cifratura a chiave asimmetrica.
52. • Verifica la presenza di un firewall all’interno del
tuo sistema operativo; in caso positivo, riscontra Suggerimento: utilizza la conversione ASCII
eventuali azioni intraprese per difendere il tuo pc. del carattere.
CLIL ASCOLTA
LA PRONUNCIA
GLOSSARIO
CLIL
Sezione D
INTERNET: SERVIZI,
PRIVACY E SICUREZZA
NELLA SOCIETÀ DIGITALE
D1 D2 D3
Il livello applicativo Il Web e i suoi sviluppi L’informatica giuridica
Il livello applicativo rappresenta futuri nella società digitale
l'interfaccia di Internet all’utente Il Web ha subito, negli anni, notevoli Tutti usano Internet, ma non tutti
finale e racchiude i servizi che sviluppi, portando i suoi servizi sanno che dietro i suoi servizi
operano sui principali protocolli a essere sempre più vicini alle esiste una specifica normativa che
di questo livello come HTTP e FTP. esigenze della vita moderna e della dev’essere rigorosamente rispettata
professione. Questa rivoluzione ha per tutelare la Privacy e navigare in
coinvolto qualunque settore della modo sicuro. Anche l’accesso ai servizi
vita lavorativa: dalla progettazione, della Pubblica Amministrazione sono,
alla previsione, alla diagnosi. ormai, totalmente digitalizzati e la
loro fruizione richiede l’utilizzo e la
conoscenza di specifici strumenti
software da cui non si può più
prescindere.
PREREQUISITI OBIETTIVI
Conoscenze Conoscenze
• La pila protocollare TCP/IP • Principali protocolli e servizi del livello applicativo
• Concetti di sicurezza • L'evoluzione del Web
Abilità • La realtà virtuale e la realtà aumentata
• Internet of Things e Big Data
• Riconoscere le varie tipologie • Normativa sulla Privacy e trattamento dei dati
e topologie di reti • Il GDPR e il Codice dell'Amministrazione Digitale (CAD)
• Riconoscere le caratteristiche
e le potenzialità di una rete Abilità
• Saper individuare i principali servizi e protocolli del livello applicativo
• Riuscire a inquadrare le potenzialità offerte dall'uso della realtà virtuale
e aumentata nei contesti ludici e professionali
• Saper riconoscere le tipologie di software
• Saper inquadrare i problemi legati alla sicurezza e alla Privacy
quando si naviga in Internet
Competenze
• Acquisire la padronanza degli strumenti dell’informatica e utilizzare tali
strumenti per la soluzione di problemi significativi in generale
311
Codice Fiscale: nctgrl03r12e156z
Cognome: Nicotra
Nome: Gabriele
D1 Il livello applicativo
ESERCIZI COMMENTATI
Web design
I Tag HTML
La programmazione Internet
I fogli di stile CSS
IMPARERAI…
Che cosa sono e a cosa servono Che cosa sono i servizi di hosting Che cosa sono i CMS
i sistemi client/server e di housing
Server
Client
Richiesta
Pagina web
prelevata dal server
e inviata al client
Pagine web
Due studenti
dell’Università di
Stanford, David Filo e
Jerry Yang, ebbero l’idea
di costruire una sorta
Siti dinamici di indice generale del
Web e cominciarono a
Un sito dinamico utilizza una strategia modulare costruendo le pagine lavorarci nell’aprile 1994,
direttamente sul server. definendo uno dei più
Il client effettua la richiesta di una pagina web, eventualmente anche famosi strumenti per
fornendo al server alcune indicazioni; il server non dispone direttamen l’indicizzazione: Yahoo!
Esso divenne un punto
te della pagina nelle condizioni richieste dal client, pertanto si mette di riferimento per tutto
al lavoro producendola e confezionandola in tempo reale, per inviarla il popolo di Internet
quindi al client che ne ha fatto richiesta. A tutti gli effetti, le pagine che e diede lo spunto per
risiedono sul server contengono un codice che viene eseguito al momen la costruzione di altri
sistemi, detti motori
to della richiesta. Le informazioni non sono quindi contenute diretta di ricerca.
mente nelle pagine, ma vengono prelevate da archivi (database) con cui
il server interagisce.
Questa soluzione è l’unica che consente di gestire con efficienza e a basso costo gli aggiorna
menti di un sito.
Server
Web server
Client
Richiesta
Linguaggio
di programmazione
Pagina web
generata dal server
al momento della
richiesta e inviata
al client
Database
2 Struttura e rappresentazione
Contenuto e presentazione
Il requisito di partenza per lo sviluppo di un sito ben progettato è la separazione del contenu-
to del documento dalla sua presentazione.
■ Il contenuto di un documento è ciò che questo comunica all’utente attraverso il linguag
gio naturale: immagini, suoni, filmati, animazioni e così via.
■ La presentazione di un documento è il modo in cui questo viene riprodotto attraverso i
differenti dispositivi (computer, palmari, tablet, smartphone, smart
TV, browser vocali e così via).
Il punto fondamentale è che tutti i possibili tipi di presentazione di un
documento riescano a mostrare all’utente, se non proprio lo stesso con L’alt text è una breve
tenuto, almeno un suo valido equivalente. Perché ciò avvenga, sono ne descrizione che viene
cessarie due condizioni: aggiunta alle immagini
affinché i motori di ricerca
■ che siano stati preparati degli equivalenti per quei contenuti che, per possano indicizzarle.
L’alt text, inoltre, ha
loro natura, si rivolgono a un solo canale sensoriale: per esempio, dei
lo scopo di sostituire
testi alternativi che sostituiscano le immagini (alt text); l'immagine quando il
programma non riesce
■ che non vi siano vincoli tali che il documento possa essere letto solo a caricarla. Funziona,
con certi programmi utente (per esempio, browser di un certo pro pertanto, come ausilio
duttore o piattaforme particolari), e con determinate condizioni d’u per i non vedenti, che
so (per esempio, una data risoluzione e una certa dimensione dei ca possono accedere solo al
testo che viene letto dal
ratteri), con esclusione, parziale o totale, di tutti gli altri programmi loro programma.
utente e di tutte le altre possibili condizioni.
La separazione di questi due elementi prevede pertanto l’uso di linguaggi differenti, che trat
tino e gestiscano i diversi aspetti, ma nello stesso tempo concorrano alla realizzazione finale
delle pagine.
La gestione del contenuto è demandata al linguaggio HTML (con tutte le sue varianti disponi
bili nel tempo), il quale deve unicamente stabilire quali sono gli elementi che compongono un
documento, senza preoccuparsi di come tali elementi debbano essere visualizzati.
L’aspetto della visualizzazione, quindi, viene delegato a un altro linguaggio, il CSS (Cascading
Style Sheet, “fogli di stile a cascata”), che, attraverso i suoi fogli di stile, imprime ai contenuti
una specifica forma di presentazione.
Alla luce di ciò, è necessario “ripulire” il codice HTML dagli elementi e dagli attributi di pre
sentazione, quelli che chiaramente si riferiscono a come un contenuto debba essere presentato.
Tutti questi criteri di formattazione possono oggi, tranquillamen
te, essere applicati per mezzo dei fogli di stile CSS.
Le specifiche che regolamentano i linguaggi per il Web sono gestite Il World Wide Web
dal W3C (WWW Consortium). A dire il vero, il W3C ha sempre predi Consortium, anche
conosciuto come W3C,
cato fin dall’inizio la necessità di questa separazione, ma le speci
è un'organizzazione non
fiche delle prime versioni di HTML sono venute meno a questa esi governativa internazionale
genza, fornendo al linguaggio HTML la possibilità di gestire anche che ha come scopo quello di
aspetti di presentazione (per esempio, gli attributi di colore, dimen sviluppare tutte le potenzialità
del World Wide Web. Al fine
sione e stile di alcuni elementi non avrebbero dovuto essere presenti). di riuscire nel proprio intento,
A partire dalla versione 4 delle specifiche HTML, l’uso di elementi e la principale attività svolta dal
attributi di presentazione è stato deprecato dal W3C a favore dell’uso W3C consiste nello stabilire
dei fogli di stile. standard tecnici per il World
Wide Web, inerenti sia ai
Al linguaggio HTML è stato dato inoltre il compito di realizzare la linguaggi di markup che ai
struttura del documento, all’interno della quale disporre i vari con protocolli di comunicazione.
tenuti.
Comportamento
Presentazione
Struttura e contenuto
• Il linguaggio HTML, più rigido, ha avuto negli anni diverse evoluzioni, passando per
varie sfumature quali XHTML (eXtensible HyperText Markup Language) e DHTML (Dy-
namic HTML).
• Il linguaggio XML (eXtensible Markup Language), più flessibile, nasce dalla necessità
di superare la semplice descrizione interna al documento HTML (metatag), definendo
con appositi marcatori i linguaggi con cui il documento potrà successivamente essere
letto.
■ Il livello di presentazione stabilisce come i contenuti definiti nel livello sottostante devo
no essere visualizzati all’esterno. Pertanto i fogli di stile (CSS) rappresentano la soluzione,
al momento, più diffusa e consolidata.
■ Un ulteriore livello è dato dal comportamento; tale livello, eventualmente assente in pagi
ne semplici, conferisce aspetti di dinamicità e di cambiamento delle pagine, grazie all’uti
lizzo di linguaggi di scripting come JavaScript, VBscript e così via.
3 Hosting e housing
Hosting
Il nostro sito, una volta creato, sarà disponibile e visibile solo dal nostro computer. Per poterlo
rendere visibile a tutti vi è la necessità di pubblicarlo.
Occorre, pertanto, uno spazio su Internet dove depositare i nostri file. Questo servizio esterno
prende il nome di hosting (termine inglese che significa “ospitare”), ed è offerto da aziende
dette hosting provider o anche hoster.
Tali spazi sono accessibili da Internet in qualsiasi istante e vengono gestiti da server con hard
ware potenziati e connessioni velocissime per soddisfare rapidamente le richieste dei client.
Acquisire uno spazio significa avere ben chiara la tipologia di hosting di cui abbiamo bisogno
per poter valutare le offerte disponibili. Il mercato offre numerose proposte, gratuite o a paga
mento: la scelta primaria, quindi, non può prescindere da questo aspetto.
■ Se siamo alle prese con un sito personale, o con un sito che non richiede un grosso impegno
in termini di funzionalità richieste, molto probabilmente ci orienteremo verso uno spa-
zio gratuito offerto da un provider di hosting, il quale pretenderà uno scambio di servizi
inserendo, per esempio, della pubblicità all’interno delle nostre pagine. Oggi, sono molti i
provider che offrono questo tipo di servizio; rintracciarli non è per niente difficile: basta di
gitare le parole “hosting gratuito” o “spazio web gratuito” su un qualsiasi motore di ricerca
per trovare centinaia di risultati.
■ La scelta di un hosting a pagamento è più laboriosa. Il tutto è legato ai servizi richiesti
e indispensabili per il funzionamento del sito. Visto l’elevato numero di aziende che for
niscono tale servizio, scegliere la soluzione migliore per il proprio sito non è cosa facile,
soprattutto se si vuole essere certi di avere i servizi adeguati alle proprie necessità al prezzo
più conveniente. In questo caso, sono importanti le scelte progettuali, che influenzeranno
a loro volte la scelta delle tecnologie e dei servizi necessari alla realizzazione finale del sito.
Per prendere una decisione, occorre sicuramente tener presente, in primo luogo, la dimensione
del sito e il traffico dei visitatori e, subito dopo, la scelta del sistema operativo del server su cui
verrà ospitato il sito. Il mercato è diviso sostanzialmente tra due tipologie, o forse sarebbe più
opportuno parlare di filosofie, di sistemi operativi: Windows e Linux. Chi acquista uno spazio
e lo gestisce, raramente entrerà nel merito della scelta del sistema operativo, anche perché gli
stessi provider mettono a disposizione, attraverso interfacce web, degli strumenti per gestire lo
spazio in modo semplice e indolore.
La scelta del sistema operativo dipende, quindi, dalle strategie progettuali previste durante la
fase di sviluppo del sito.
Sistema operativo Server web DBMS Linguaggio di programmazione
Linux Apache Mysql PHP
Windows IIS Sql server ASP
L’insieme delle tecnologie proposte nella tabella spesso viene indicato con le sigle LAMP e
WISA, dalle iniziali delle singole tecnologie utilizzate, nell’ordine in cui sono state riportate.
I fattori che concorrono alla scelta sono: velocità di connessione, dislocazione fisica del
server, strumenti forniti, supporto, assistenza, velocità di soluzione dei problemi.
La velocità di connessione e la dislocazione fisica del server sono due aspetti strettamente col
legati.
Il server su cui risiede il nostro spazio è posto all’interno della fitta maglia della rete Internet,
pertanto raggiungere lo spazio potrebbe significare attraversare più di una rete fisica, e i salti
(hop) da una rete all’altra allungano inevitabilmente i tempi di risposta.
Il comando ping effettua il test sulla velocità di reazione del server dove un sito è ospitato. In
pratica, viene spedito un piccolo pacchetto di dati all’indirizzo specificato e viene restituito un
valore in millisecondi, che indica il tempo che il pacchetto impiega ad andare e tornare.
Questo test è influenzato da vari parametri tra cui: la lontananza, la configurazione del server
e la larghezza di banda concessa al server e ai vari nodi di passaggio tra noi e il provider.
Per server italiani, la media è di 100 millisecondi a pacchetto inviato e ricevuto. Il risultato è
ottimo per valori più bassi, pessimo se si superano i 200 millesecondi. Per server esteri, i valori
tipici si aggirano intorno ai 250 millisecondi.
INFOGR AFICA
Eseguire RICERCHE
nel WWW
CHI CERCA, TROVA
Nel World Wide Web – quello che nel linguaggio comune
viene chiamato “Internet” – vengono attivati ogni giorno
migliaia di siti, che nel giro di poco tempo vengono indicizzati
dai motori di ricerca. In quest’abbondanza di materiale, la
questione non è trovare ciò che stiamo cercando, ma mostrarcelo
tra i primi risultati in un ordine che rifletta le nostre necessità specifiche:
sono infatti pochissime le persone che vanno oltre le prime voci prodotte dalla ricerca.
Quando il motore di ricerca ci informa di aver trovato decine di migliaia di risultati
per le parole chiave che abbiamo inserito nella barra della ricerca, la lista che ci
viene fornita – di cui consulteremo solo una minima parte – dev’essere orientata
il più possibile verso le nostre necessità. Per farlo, vengono usate una quantità di
informazioni che solitamente non siamo neanche consapevoli di fornire (i cosiddetti
“Big Data”): la nostra posizione, la nostra lingua, la nostra età, i nostri interessi, la
cronologia delle ricerche effettuate precedentemente e via dicendo.
Tuttavia, questo può non essere ancora sufficiente: è quindi importante conoscere
gli strumenti che ci vengono messi a disposizione per affinare le nostre ricerche.
La ricerca scientifica
Nell’ambito della ricerca scientifica, la bibliografia si fonda sugli
articoli pubblicati da riviste del settore. Tali articoli vengono indicizzati
in appositi motori, che spesso si appoggiano a un organo istituzionale
o a un potente editore che ne garantisce l’autorevolezza.
GOOGLE
Fin dalla sua creazione, Google è nettamente
il motore di ricerca più versatile e potente: è in
grado di valutare l’importanza di ogni pagina web
con metodi matematici, in base a un controllo di
oltre 500 milioni di variabili e di più di 2 miliardi
di termini. Sfruttando i Big Data è in grado di
orientare i risultati presentandoci quelli per noi
più interessanti. Fornisce, inoltre, filtri di ricerca
oltremodo precisi.
Di seguito, verranno mostrati vari modi di cercare contenuti che riguardano
I promessi sposi di Alessandro Manzoni: dopo essere andato su www.
google.it, in basso a destra clicca su “Impostazioni” e “Ricerca avanzata”,
poi segui le istruzioni che leggi negli esempi.
Housing
Mentre l’hosting prevede uno spazio fisico sull’hard disk di un server del quale è proprieta
rio il provider, l’housing è un servizio che collega un computer di proprietà del cliente alla
rete Internet, direttamente nei locali del provider.
Server dedicato
In molti casi, l’housing viene confuso con il servizio di fornitura di un server dedicato. Pur
utilizzando nei due casi una macchina a uso esclusivo, la differenza consiste proprio nel fatto
che nell’housing il server è di proprietà del cliente, mentre il server dedicato è di proprietà
dell’hosting provider che lo concede in uso al cliente in una forma che ricorda essenzialmente
il noleggio.
4 Pubblicare un sito
Per poter pubblicare un sito su Internet e renderlo visibile a chiunque, come dicevamo, è ne
cessario trasferire le cartelle che lo compongono su uno spazio web registrato in precedenza.
Il dominio
La struttura del dominio è ad albero gerarchico. Ogni nodo dell’albero ha un etichetta
(label), tranne il nodo radice (root) che non ha nome (ha cioè una null label).
Per esempio, il dominio .it (Italia) ha come sottodomini unimi (Università di Milano), cnr
(CNR, Centro Nazionale delle Ricerche), unisalento (Università del Salento) e altri ancora.
Un nome di dominio è formato da una concatenazione di
label. I nomi sono letti da sinistra a destra, dal meno signi
ficativo al più significativo, e le label vengono rappresentate
separate dal carattere “.” (punto). Così ingegneria.unisalen- • Protocollo: specifica il protocollo
to.it è un nome di dominio, dove ingegneria (facoltà di inge da utilizzare per accedere a quella
risorsa, solitamente http (usato
gneria) è un sottodominio di unisalento. Un nome che arriva per il trasporto delle pagine web in
fino alla radice è anche detto nome assoluto, o FQDN (Fully chiaro) o https (usato per quelle
Qualified Domain Name). Un dominio come .it non è sotto crittografate).
dominio di alcuno, ma dipende direttamente dalla radice; si • NomeLogico: è il nome logico
assegnato al computer server su cui
dice che è un dominio di primo livello, o di livello massimo risiede la risorsa interessata.
(TLD, Top Level Domain). • Dominio: è la sigla che
La registrazione del dominio esula dallo spazio web, ma le contraddistingue la nazione (.it, .de,
.uk, .us, ...) o la tipologia del sito
cose vanno talmente a braccetto che, molto spesso, il provi
(.com, .info, .gov, .net, ...).
der si occupa anche di effettuare la registrazione presso l’au • Percorso: specifica la cartella sul
torità competente. computer server per raggiungere la
Detto ciò, ogni risorsa all’interno di un sito viene rappresen risorsa.
• NomeFile: è il nome del file (risorsa)
tata dalla sua URL (Uniform Resource Locator), il percorso completo di estensione. Può
che individua in modo univoco una risorsa sul Web, compo essere omesso se si è interessati
sto come di seguito: a visualizzare il contenuto di una
directory.
Protocollo://NomeLogico.Dominio/Percorso/NomeFile
FTP
Ora non ci resta altro da fare che trasferire il sito, confezionato e funzionante all’interno del
nostro computer, nello spazio web, gratuito o a pagamento, che abbiamo scelto. A questo scopo
si utilizza il protocollo di trasferimento dei file FTP (File Transfer Protocol).
Poiché il sito non è altro che un insieme di file e cartelle all’interno del nostro file system, per
mezzo di questo protocollo abbiamo la possibilità di inviarlo sul file system del provider. Per
effettuare tale trasferimento si rende necessario, da parte del provider, attivare il servizio FTP,
che attraverso opportune credenziali, ci permette di accedere alla porzione del file system re
lativa al nostro spazio.
La specifica originale di FTP non prevede alcuna cifratura per i dati scambiati tra client e ser
ver. Questo comprende nomi utenti, password, comandi, codici di risposta e file trasferiti, i
quali viaggiavano in Internet in chiaro e pertanto sono facilmente identificabili.
Il problema è comune a diversi altri protocolli (HTTP, Hypertext Transfer Protocol, TELNET e
SMTP, Simple Mail Transfer Protocol) utilizzati prima della diffusione di SSL (Secure Sockets
Layer) uno dei protocolli crittografici che permette la comunicazione sicura dalla sorgente al
destinatario. Per ovviare al problema, è stata definita una nuova specifica che aggiunge al pro
tocollo FTP originale un layer di cifratura SSL/TLS (Transport Layer Security), e una nuova serie
di comandi e codici di risposta. Il protocollo prende il nome di FTPS (dove la S sta per Secure).
Esistono differenti software (client FTP) che permettono di effettuare il trasferimento in modo
intuitivo e immediato; solitamente, si presentano con una schermata divisa in due aree: da una
parte il nostro file system e dall’altra il file system remoto (quello relativo al nostro spazio): non
resta che trasferire da una zona all’altra i file: il trasferimento può avvenire in entrambi i sensi.
5 CMS
Negli ultimi anni, in Internet si è molto parlato dei software CMS, che sono diventati la base
di funzionamento per la maggior parte dei siti web. La sigla CMS sta per Content Management
System, ossia sistema di gestione di contenuti. È quindi essenziale chiarire che cosa si intende
per contenuto.
Il contenuto è qualsiasi unità di informazione, quindi testo, grafica, immagini, suoni, mu
sica, documenti, registrazioni e, in generale, qualsiasi informazione in formato digitale o
adatta a essere trasferita su supporto informatico.
Contenuto e dato sono due concetti completamente diversi: un contenuto, infatti, può essere
un insieme di dati, costituendo un’informazione completa e utile per l’utente. Per esempio,
il titolo di un articolo viene considerato un singolo dato nella struttura tecnica della maggior
parte dei database; mentre il contenuto è costituito, oltre che dal titolo, dal testo dell’articolo,
dalla data di pubblicazione, dall’autore e così via. La nozione di contenuto non può quindi
trascurare l’interpretazione che l’uomo le dà, ovvero la considerazione delle necessità proprie
dell’utenza che farà uso delle informazioni.
L’idea alla base di ogni CMS comprende, in particolare, procedure per la gestione, l’inserimen
to, la modifica, l’eliminazione e la catalogazione di tali informazioni, in base a regole e processi
prestabiliti. Un CMS, quindi, è uno strumento atto a facilitare e controllare la gestione e la
pubblicazione dei contenuti in modo semplice, pratico ed efficiente.
Verifica
Pubblica
Amministratore
Gestione template
Gestione utenti
Gestione moduli
Database e template
Anche nei CMS è importante il concetto di separazione dei dati dalle loro modalità di presen
tazione.
■ I dati sono registrati in un database, e questo comporta notevoli vantaggi rispetto alla
memorizzazione di pagine web statiche.
■ I contenuti vengono presentati attraverso delle “pagine modello”, chiamate template, dove
i dati vengono elaborati e visualizzati nello schema richiesto; è quindi sufficiente variare
template per ottenere, a partire dagli stessi dati, diverse modalità di presentazione.
Nei siti web statici, composti da pagine HTML e stili CSS, i dati sono fortemente legati alla loro
presentazione grafica.
In passato, per realizzare un sito bisognava conoscere linguaggi per svilupparlo. Dando vita a
un software che consente a chiunque di gestire documenti, notizie, immagini, forum e quanto
può essere utilizzato in un sito web, si è aggirato il requisito di conoscere il linguaggio HTML.
Da un sistema statico (basato sul concetto di pagina per pagina) i CMS hanno permesso di
passare a un sistema dinamico (basato sul concetto di struttura personalizzabile). Scindere
il codice dal contenuto, significa velocizzare la pubblicazione dei contenuti. Il codice fornisce
la struttura, ma la gestione si libera di quelle complessità che in passato ne limitavano l’uso e
l’usabilità. Un esempio è la diffusione dei blog, fenomeno comparso nel Web 2.0, che si deve alla
loro facilità d’uso. Ma dietro a un blog si nasconde sempre un CMS.
Modularità
Una caratteristica importante dei CMS è la modularità.
Il CMS è un contenitore con la possibilità di aggiungere non solo contenuti, ma anche ulte
riori funzionalità e servizi, in base alle esigenze del sito e dell’amministratore.
A partire dallo stesso CMS, si possono sviluppare siti completamente diversi e con funzioni
totalmente differenti. Un sito di commercio elettronico, per esempio, avrà bisogno del compo
nente software relativo all’acquisto e al pagamento. Il sito di un ristorante necessiterà, invece,
di un modulo per la presentazione del menu e per la prenotazione dei tavoli.
Le prospettive di un CMS diventano quindi illimitate. L’aggiunta di nuovi moduli diventa indi
pendente dalla struttura del sito che non ha bisogno quindi di essere rielaborato, reingegneriz
zato o, addirittura, ricostruito.
Utenti e privilegi
Il CMS prevede la possibilità di diversificare i livelli di accesso alla piattaforma. Generalmente,
il riconoscimento dell’utente avviene tramite l’immissione di credenziali (nome utente e pas-
sword), scelte dall’utente stesso nella fase in cui esegue la registrazione.
Gli utenti del sistema sono suddivisi in gruppi, ognuno dei quali ha specifiche autorizzazioni
di accesso.
■ Pubblico: un gruppo al quale non viene concesso l’accesso come utente; l’utente di questo
gruppo è da considerarsi “ospite”, e come semplice visitatore gli è consentita la sola visua
lizzazione dei contenuti, senza alcuna possibilità di interazione.
■ Utenti registrati: gruppo che caratterizza ogni utente che abbia ricevuto delle credenzia
li per l’accesso al sito senza, tuttavia, particolari autorizzazioni; questo livello può essere
adottato per limitare l’accesso ad aree riservate, oppure per consentire un primo livello di
interazione (inserimento di commenti, messaggi e così via).
■ Autori: gli utenti di questo gruppo, hanno la possibilità di inserire, modificare, eliminare
autonomamente i contenuti nel CMS.
■ Amministratori: gli utenti di tipo amministratore sono autorizzati, oltre che alla gestione
dei contenuti, anche alla configurazione e alla gestione dell’intera piattaforma in tutte le
sue funzioni, come aggiunta di nuovi moduli, cambio del template, configurazione dei pa
rametri, gestione delle autorizzazioni e così via.
Solitamente, per gli amministratori il CMS offre un’interfaccia di gestione differente (Back-
End) rispetto agli altri utenti (Front-End) per il controllo completo della piattaforma.
RIPASSIAMO INSIEME D1
IL LIVELLO APPLICATIVO
AUDIO
RIPASSIAMO INSIEME D1
MAPPA
MODIFICABILE
INTERNET
client-server
il client
si occupa di
effettuare
la richiesta
che avviene
tramite
URL
17. • Ricerca in Google informazioni su un fatto di 26. • Effettua una ricerca su Internet per stabilire
cronaca appena accaduto. Successivamente, quali sono stati i CMS più utilizzati nello scorso
affina la ricerca. L’obiettivo è quello di sapere anno nel mondo e in Italia.
quali sono i fatti di cronaca più rilevanti del
giorno accaduti a Venezia o nella tua città. 27. •• Utilizza Google per effettuare una ricerca
sul servizio di podcasting, trova quali sono i
18. • Fai una ricerca su Internet utilizzando le podcatcher gratuiti ed effettua il download di uno
stesse parole chiave su motori differenti (Google, compatibile con il tuo sistema operativo.
AltaVista, Lycos, Excite) e confronta il risultato.
28. •• Utilizza il motore di ricerca Google per
19. • Verifica se sono presenti, ed eventualmente effettuare una ricerca sul CERN, concentrando
scarica, i podcast di un cantante di tuo la tua attenzione sulla sua storia, il suo ruolo, la
gradimento. sua ubicazione, le attività svolte e su ciò che,
leggendo di volta in volta, incuriosisce la tua
20. • Esegui i seguenti passi: mente. Dopo aver raccolto tutto il materiale,
• effettua una registrazione su Gmail per creare predisponi una presentazione in PowerPoint in cui
un nuovo account di posta (se possiedi già un strutturi la tua ricerca, corredata di immagini ed
account Gmail salta al passaggio successivo); eventuali video.
• crea una mailing list in cui includere tutti i tuoi
compagni di classe; 29. •• Effettua una ricerca sul termine cookie legato
• invia una mail di benvenuto a tutti. al browser. Comprendi il significato del termine e
verifica la presenza di cookie all’interno del tuo
21. • Collegati al motore di ricerca di Google. computer.
Inserisci il motore di ricerca nell’elenco dei
siti preferiti. Devi cercare informazioni relative 30. ••• Scarica un programma aggregatore gratuito
all’Amazzonia e affinare la ricerca. L’obiettivo per il tuo sistema operativo. Iscriviti al servizio
è quello di trovare un elenco di siti che parlino RSS di un quotidiano a tua scelta. Utilizza
della deforestazione dell’Amazzonia (più di 800 l’aggregatore per ricevere gli aggiornamenti su
risultati). Salva l’articolo che ti interessa in un un determinato argomento tra quelli disponibili.
documento di Word.
31. ••• Scarica un podcatcher per il tuo sistema
22. • Effettua una ricerca sui piatti tipici della zona operativo. Iscriviti al servizio podcasting di un
in cui vivi al fine di salvare in un documento di distributore di contenuti a tua scelta. Utilizza
Word una ricetta di cucina che desideri stampare il podcatcher per scaricare periodicamente i
e successivamente realizzare. Sarebbe utile podcast di tuo interesse.
realizzare la ricetta corredandola di immagini
specifiche in modo che si evidenzino i processi 32. ••• Effettua una ricerca di un provider hosting
intermedi di realizzazione e il risultato finale del gratuito, effettua la registrazione e attiva il tuo
prodotto. spazio. Successivamente crea (o scarica da
Internet) un semplice file html e utilizzando un
23. • ll browser salva nella cronologia i siti visitati. client FTP trasferiscilo sul tuo spazio. Attraverso
Sapresti eliminare la cronologia dell’ultima l'URL del tuo spazio verifica la visualizzazione nel
settimana? E quella complessiva? browser del file HTML appena caricato.
IMPARERAI…
Come si è evoluto il Web Cosa sono la realtà virtuale Cosa sono Internet of Things Cos’è l’Industria 4.0
e la realtà aumentata e Big Data
Web 1.0
La prima fase di Internet è nota come Web 1.0, caratterizzata dal fatto che le informazioni
venivano pubblicate online in maniera statica e l’utente era un semplice fruitore di conte-
nuti.
Web 1.0
Web 2.0
Il Web 2.0 non è un software specifico, né un marchio registrato dalle software house, ma un
insieme di approcci per usare la rete in modo nuovo e innovativo. Il Web 2.0 ha determinato
una nuova visione di Internet, che ha influenzato il modo di lavorare e di interagire con le in-
formazioni in rete. In termini più generali:
Il Web 2.0 indica un insieme di tecnologie che permette ai dati di diventare indipendenti
dalla persona che li produce o dal sito in cui vengono creati.
Web 2.0
Web 3.0
Il potere del Web e le sue possibilità concrete di agire direttamente sulla realtà sono molto
aumentati e continuano ad aumentare. I fattori alla base di tale aumento sono moltissimi: la
diffusione delle reti social, delle tecnologie per tracciare le preferenze degli utenti, la satura-
zione dei mercati tradizionali, l’esigenza per le aziende di una comunicazione sempre più one-
to-one, la geolocalizzazione, la fruizione del Web su dispositivi mobile, la tendenza a cercare
referenze sui contenuti per districarsi nell’enorme mole di materiale presente sul Web, la velo-
cità con cui si dà o si riceve una referenza e tante altre concause ancora di livello tecnologico
e sociologico.
Le parole d’ordine del Web 3.0 sono dati e semantica. La differenza, in
questo caso, non è l’introduzione di nuove tecnologie, ma di differenti
RSS (Really Simple
fattori. Syndication) è uno dei
più popolari formati per la
■ La rete diviene un enorme database: l’introduzione dei formati distribuzione di contenuti
RSS, dei file XML e dei file metadata, offre la possibilità di utiliz- web; è basato su XML,
zare Internet proprio in questo modo. Il Data Web, come viene chia- da cui ha ereditato la
mata la nuova versione del Web, si presta a essere utilizzato dalle più semplicità, l’estensibilità
e la flessibilità.
diverse applicazioni come un deposito dal quale recuperare dati da L’applicazione principale
fornire all’utenza. per cui è noto è la sua
capacità di generare
flussi di informazioni
che permettono di essere
aggiornati, in relazione a
nuovi articoli o commenti
pubblicati nei siti di
interesse, senza dover
rivisitare manualmente
uno a uno i siti.
Web 3.0
Possiamo definire il Web 3.0 come Web semantico. L’aggiunta della semantica ai conte-
nuti Web richiede tecnologie e linguaggi in grado di ricavare significati da informazioni ed
esprimere dati e regole per ragionamenti. Il Web 3.0 deve connettere i contenuti del Web
attraverso la definizione di opportuni standard.
tenu
ti generati dagli utenti
conten
Web 4.0
Scopo della fase 4.0 del Web è quella di integrare pienamente le due fasi precedenti. L’o-
biettivo finale è quello di far sì che le applicazioni presenti sul Web mettano in connessione
in modo automatico le persone, così come il Web semantico mette in connessione in modo
automatico i contenuti.
Le applicazioni presenti sul Web, in base alle attività che stanno svolgendo, dovrebbero essere
in grado di aiutare le persone a collaborare, cioè a mettere insieme le loro risorse e le loro com-
petenze, per raggiungere scopi condivisi.
Il Web 4.0 è pienamente integrato con la realtà fisica e al servizio delle relazioni interperso-
nali, per moltiplicarle e potenziarle.
La realtà virtuale non immersiva sostituisce il casco con un normale monitor. In questo caso,
l’impressione dell’utente è quella di vedere il mondo tridimensionale creato dal computer at-
traverso una sorta di finestra. Inoltre, nei sistemi di realtà virtuale non immersiva, il soggetto
interagisce con l’ambiente tridimensionale attraverso un joystick.
La realtà aumentata
Con l’espressione realtà aumentata (AR, Augmented Reality) si intende la sovrapposizione
di elementi virtuali generati dal computer alla percezione, non solo visiva, del mondo reale,
ottenuta attraverso una telecamera o attraverso occhiali speciali.
Il fruitore di applicazioni in realtà aumentata, quindi, vedrà sovrapposti alla realtà oggetti vir-
tuali o filmati, sentirà suoni, percepirà sensazioni tattili o, addirittura, olfattive. Un manuten-
tore, per esempio, tramite la realtà aumentata potrà vedere comparire sull’area di lavoro uten-
sili e componenti animati che mostrino come dev’essere eseguita un’operazione direttamente
sull’apparecchiatura oggetto dell’intervento, guidando passo passo la sua attività. Un turista,
puntando un tablet o uno smartphone verso un’opera d’arte, può veder comparire informazio-
ni utili. Un lettore, posizionando una pagina di un libro davanti alla webcam del suo pc, potrà
veder comparire sul libro stesso, “riflesso” nello schermo del pc, animazioni 3D, filmati o con-
tenuti multimediali.
Attraverso applicazioni web-based di ultima generazione è possibile visualizzare direttamen-
te in streaming una sovrapposizione fra elementi reali e virtuali (animazioni 3D, filmati, ele-
menti audio e multimediali). La realtà aumentata può essere fruita attraverso i monitor del pc
dotati di webcam, grazie all’utilizzo di marker stampati.
I marker sono disegni stampati su carta, che la webcam riconosce e ai quali vengono imme-
diatamente sovrapposti elementi multimediali sullo schermo del computer. Questa sovrap-
posizione avviene direttamente davanti agli occhi dell’osservatore, generando un effetto sor-
prendente, per la particolare sensazione di avvicinarsi concretamente, come mai prima, a una
dimensione virtuale, con la possibilità di interagire attivamente con essa.
Attraverso i Google Glass indossati dal chirurgo Brent Ponce è stato possibile trasmettere in
tempo reale le immagini di un’operazione di protesi alla spalla a un chirurgo non presente in
sala operatoria, permettendogli di vedere sul suo monitor esattamente quello che Ponce vedeva
in sala operatoria, e addirittura di introdurre una mano “virtuale” nel campo visivo di quest’ul-
timo: una mano che Ponce visualizzava come un’immagine fantasma nel proprio display.
I vantaggi sono ovviamente innumerevoli. Un chirurgo “in remoto” può fornire assistenza e
collaborazione a quello che sta operando, nonostante si trovi a centinaia di chilometri di di-
stanza (o dall’altro lato del globo). I due medici possono discutere il caso in tempo reale, e la
mano fantasma può indicare al chirurgo che effettua l’operazione eventuali imprecisioni, illu-
strare procedure nuove, mostrare come utilizzare gli strumenti posizionandoli nella modalità
più corretta, e così via.
Il termine IoT identifica tutti quegli oggetti che, collegati alla rete, permettono di unire
mondo reale e mondo virtuale, essendo capaci di comunicare tra loro e di interagire con gli
esseri umani.
Se fino a poco tempo fa un dispositivo collegato a Internet poteva essere un pc, un tablet, uno
smartphone e poco altro, ora invece qualsiasi tipo di oggetto può diventare smart (intelligen-
te). Si tratta di oggetti tradizionali, che diventano smart grazie alla capacità di acquisire infor-
mazioni e di accedere alla rete.
La novità consiste nel prendere un oggetto tradizionale e installarvi dei rilevatori capaci, da
una parte, di acquisire preziose informazioni sull’ambiente circostante o sul suo utilizzo,
dall’altra, di raccogliere dati, con la possibilità di trasmetterli via Internet a un’applicazione
che possa processarli e restituirli all’utente sotto forma di informazioni importanti.
L’obiettivo finale è quello di ottenere in maniera semplice e immediata il monitoraggio di qual-
siasi attività desiderata, grazie all’oggetto intelligente dedicato allo scopo, ma anche quello di
semplificare il controllo a distanza e di incentivare l’automazione, come avviene già da tempo
in ambito domestico con la domotica.
In realtà, i sensori per misurare ogni aspetto della realtà sono disponibili già da tempo. Il valo-
re aggiunto all’oggetto smart è dato proprio dalla connessione a Internet, che consente all’og-
getto di dialogare con banche dati, altri dispositivi e applicazioni specifiche.
Gli ambiti di utilizzo e le applicazioni di questa nuova frontiera sono davvero innumerevoli. Si
stima che da qui a un anno saranno oltre 25 miliardi i dispositivi smart connessi a Internet.
sicurezza
gestione
gestione energia
energia
gestione impianti Wi-Fi gestione impianti logistica
elettrodomestici
smart robotica
sicurezza buildings smart
manufacturing
vendita
gestione impianti on-line
domotica ne t de l l e co remote
t er s e
care
In
sorveglianza pronto
smart health intervento
ecc. ecc.
mobile monitoraggio
wearable pazienti
fissa
ricoveri
smart smart agrifood
mobility
collari smart
previsioni
meteo
posteggi
traffico urbano
programmazione
traffico extraurbano lavorazioni
orologi smart prenotazioni
irrigazione
I contesti nei quali ci sono “cose” che possono comunicare e generare informazioni sono, per
esempio:
• la casa e la domotica;
• gli edifici intelligenti (smart building) e la bulding automation;
• lo smart manufacturing (la fabbricazione intelligente), il monitoraggio in ambito indu-
striale, la robotica;
• l’industria automobilistica, l’automotive, la self driving car (macchina con pilota auto-
matico);
• la smart health (sanità intelligente), il mondo biomedicale;
• tutti gli ambiti della telemetria;
• tutti gli ambiti della sorveglianza e della sicurezza;
• smart city, smart mobility;
• smart agrifood, precision farming, sensori di fields;
• wearable (tecnologie indossabili) per animali;
• wearable per gli esseri umani.
Una coltivazione gestita tramite dispositivi smart, per esempio, permetterebbe di razionaliz-
zare tutte le risorse del settore regolando l’irrigazione in base alle reali e istantanee necessità
delle piante. Questo permetterebbe un notevole risparmio all’azienda agricola, che utilizzereb-
uso industriale
N e t w o r k
Gestione
be molta meno acqua, avvantaggiando l’ambiente e riducendo lo spreco di una risorsa prezio-
sissima.
Internet delle Cose è una vera e propria “Nuova Internet”, perché apre prospettive un tempo
inimmaginabili, in cui gli oggetti assumono un ruolo attivo grazie al fatto di essere in rete e di
poter inviare e ricevere dati dalla rete.
Annualmente 5%
Sporadicamente 7%
Fonte:
Nessun test 48% Ponemon Institute©
Research Report
Se a questo aggiungiamo l’elevata crescita, negli ultimi anni, di attacchi malware nel campo
IoT, ci rendiamo conto che bisogna subito correre ai ripari per evitare gravi conseguenze.
World Wide Iot Malware 2019 – 111% in più rispetto allo stesso periodo del 2018
5 Big Data
Per poter funzionare, lo IoT ha bisogno di raccogliere e archiviare una grossa mole di dati.
Tutti questi dati raccolti servono a farlo funzionare correttamente. Affinché sia davvero utile,
è infatti importante processare, raccogliere e analizzare grandi volumi di dati in tempo reale,
relativi agli ambiti cui tale tecnologia è applicata. Per questo, i dati dello IoT vanno integrati
con le tecnologie con cui si analizzano i cosiddetti Big Data.
L’espressione Big Data è oggi molto usata in differenti settori. Ma che cosa significa Big Data?
Non deve trarci in inganno la traduzione letterale del temine; Big Data non significa “grandi
dati” o “grandi quantitativi di dati”, come i più intendono; dietro a tale termine c’è ben altro.
Ciò che porta ad assumere tale interpretazione imprecisa, oltre al termine fuorviante, è l’effet-
tiva enorme quantità di dati che vengono prodotti quotidianamente dai sensori digitali, dagli
smartphone, dallo IoT, dal cloud computing, dalle transazioni online ecc. I dati vengono gene-
rati con un flusso così crescente che tutte le informazioni immagazzinate nel corso degli ultimi
due anni ha superato l’ordine degli zettabyte (1021 byte), cioè l’ordine di un triliardo di byte.
Lo zettabyte (termine composto dal prefisso zetta-, che deriva dal greco sept e indica la settima
potenza di 1000, e byte) è un’unità di misura dell’informazione o della quantità di dati.
Quando si parla di Big Data ci si riferisce in realtà all’analisi, tramite strumenti appropriati,
di una quantità immensa di informazioni da cui trarre indicazioni utili al miglioramento
dei servizi e dei prodotti dei diversi settori.
Le 3 V
Alla base della realtà indicata con Big Data, ci sono gli sviluppi tecnologici che hanno reso
possibile tutto questo: le reti telematiche sempre più veloci, i processori sempre più potenti in
grado di svolgere complessi algoritmi di analisi in tempi brevissimi e le memorie sempre più
veloci e performanti. Ma già dal 2000 era chiaro che il concetto di Big Data ruotava attorno alle
cosiddette 3 V:
■ volume: non si può prescindere dalla risorsa costituita dai dati. Ormai le organizzazioni
raccolgono dati da una grande varietà di sorgenti: transazioni finanziarie, social media,
sensori. In passato lo storage (immagazzinamento) sarebbe stato un problema, ma le nuove
tecnologie hanno ridimensionato, se non addirittura eliminato, tale problema;
■ velocità: i dati viaggiano a una velocità sempre più elevata e questo fatto obbliga a una
gestione tempestiva degli stessi. L’uso sempre più comune di sensori ambientali, sistemi di
telelettura, lettori di informazioni biomediche e altro ancora sta aumentando la necessità
di gestire fiumi di dati in tempo reale o quasi;
■ varietà: i dati, poiché arrivano da di-
Volume Devices
spositivi e protocolli di comunicazione
differenti, hanno formati differenti; si
può trattare infatti di dati strutturati e
numerici provenienti da database tra-
dizionali e di dati non strutturati, quali Velocità Analytics
documenti di testo, e-mail, video, audio,
dati generati da sensori e da transazioni
finanziarie.
La fase analitica è una delle più importanti Varietà Cloud
dell’intero processo di esame dei Big Data;
non tanto perché consente di presentare e
cercare le informazioni volute, ma perché
fornisce le soluzioni strategiche per poter
intervenire nel contesto applicativo e operare le opportune decisioni. Non va dimenticato che
le soluzioni strategiche in questo ambito hanno ricadute nella vita reale, perché da esse un’a-
zienda ricava valore.
6 L’Industria 4.0
L’Industria 4.0 (conosciuta anche come Smart Manufacturing) è stata sicuramente un pre-
cursore del mondo IoT. Le applicazioni a essa relative sono attive da diversi anni, addirittura
da prima che si iniziasse a parlare di Internet delle Cose. Questo ha consentito di considerare
questo settore uno dei più maturi. L’Industria 4.0 coniuga tematiche legate all’automazione
con tematiche legate al settore della robotica.
L’Industria 4.0 è caratterizzata dalla maggiore flessibilità della produzione e dall’unione e con-
certazione delle tecnologie chiave per fornire la flessibilità, la semplicità, la connettività e l’a-
pertura necessarie per una nuova operatività industriale.
Dai robot che autoapprendono, all’utilizzo di una sensoristica avanzata in grado di potenziare
il monitoraggio e il controllo lungo tutta la filiera produttiva, insieme a una potenza elabora-
tiva e a connessioni sempre più affidabili e sicure; dall’uso di stampanti 3D a una programma-
zione orientata a strumenti di simulazione e ad applicazioni di realtà aumentata, il digitale
favorisce l’integrazione e la cooperazione aziendale e interaziendale, migliorando la qualità dei
flussi informativi. Da tutto ciò nasce non solo lo smart manufacturing, ma anche la smart
supply chain (la gestione intelligente della catena di distribuzione), entrambi declinazioni del
paradigma IoT, che sta portando più efficacia e più intelligenza in molteplici settori e ambiti
aziendali.
Un ulteriore termine affine a quello dell’Industria 4.0 è Fabbrica 4.0. Figlia anch’essa della
quarta rivoluzione industriale, la Fabbrica 4.0 contempla però esclusivamente i macchinari,
lasciando fuori altri processi industriali.
Backup
Interconnessione
Industria 4.0
Invece tutti i sistemi interni a un’unità produttiva devono agire in modo integrato. È pertanto
indispensabile che le macchine si interconnettano ai sistemi aziendali (ERP, BI, …) attraverso
un’integrazione degli standard di fabbrica con quelli ICT.
RIPASSIAMO INSIEME D2
IL WEB E I SUOI SVILUPPI FUTURI
AUDIO
RIPASSIAMO INSIEME D2
MAPPA
MODIFICABILE
IL WEB
LE FASI
SVILUPPI
DEL WEB
Realtà
Immersiva
Realtà Virtuale
Contenuti solo
Web 1.0
da leggere
Volume
Web 2.0
Big Data
Web 3.0
Web 4.0
3. Quale delle seguenti caratteristiche non è A dispositivi connessi alla rete in grado di produrre
direttamente correlata ai Big Data: informazioni
B oggetti in grado di elaborare una grande mole
A memorie sempre più grandi ed evolute
di informazioni
B velocità delle reti C computer con prestazioni sempre più elevate
C grandi quantitativi di dati prodotti D fasi elaborative sempre più complesse
D Privacy sui dati
10. Completa la seguente frase. 13. Le tecnologie IoT prevedono che i dispositivi
I Big Data caratterizzano una nuova tecnologia abbiano:
di acquisizione, gestione, ______________ A un pc collegato
e trattamento dei ______________ in grandi B dei software potenti
______________ e in diversi ______________.
C una connessione a Internet
(volumi, formati, analisi, dati)
D degli strumenti di analisi
11. La realtà virtuale si differenzia da quella
aumentata per: 14. Si parla di Big Data quando:
D3 L’informatica giuridica
nella società digitale
IMPARERAI…
Il Diritto d’Autore o Copyright può essere definito come il diritto riconosciuto all’autore
di un’opera dell’ingegno di carattere creativo, a discapito della libera utilizzazione da parte
della collettività.
Nell’ordinamento italiano, la normativa a tutela del software è stata codificata dal D.lgs. n. 518
del 1992, che ha esteso al software la tutela già prevista per le altre opere dell’ingegno con la
Legge 633 del 1941 sul Diritto d’Autore: legge già dichiarata applicabile al software da nume-
rose sentenze.
L’approvazione della Direttiva 2009/24/CE del Parlamento e del Consiglio europeo, del 23 aprile
2009, relativa alla tutela giuridica dei programmi per elaboratore, che codifica e sostituisce la
direttiva 91/250/CEE del Consiglio europeo del 14 maggio 1991, offre l’occasione di ripercorrere
brevemente l’evoluzione della tutela del software in Europa alla luce della rilevante normativa
internazionale e comunitaria.
È infatti opportuno sottolineare come la direttiva in esame, nonostante apporti solo modifiche
di carattere formale, senza incidere sul contenuto sostanziale delle norme della direttiva del
1991, sia nondimeno indice della volontà delle istituzioni comunitarie di mantenere l’originaria
impostazione, con riferimento soprattutto alla forma di tutela adottata per questa particolare
categoria di beni immateriali. La direttiva 2009/24/CE, come si dirà, conferma infatti la scelta
per una tutela del software basata sul paradigma del Diritto d’Autore e non invece, come pure
è stato proposto nel recente passato, secondo il sistema brevettuale.
Per software si intende “un programma per elaboratore in qualsiasi forma espresso purché
originale, quale risultato di creazione intellettuale dell’autore” (Art. 2, comma 8, Legge sul
Diritto d'Autore modificata dal D.lgs. n. 518 del 1992).
Delibera del 14 maggio 1991 Il Consiglio della Comunità Europea approva la Direttiva 91/250 relativa
alla tutela giuridica dei programmi per elaboratore
Art. 7 della Legge n. 489 Viene posta in attuazione la precedente direttiva comunitaria
del 19 dicembre 1992
D.lgs. n. 518 del 29 Viene recepita la direttiva comunitaria e viene modificata la Legge del
dicembre 1992 22 marzo 1941 sul Diritto d’Autore, inserendo anche la tutela giuridica
dei programmi per elaboratore
D.lgs. n. 169 del 1999 La Legge sul Diritto d’Autore è estesa anche alle banche dati
Legge n. 248 del 2000 Viene inasprito il regime sanzionatorio per la duplicazione e diffusione
di software pirata
Direttiva 2009/24/CE Viene confermata la scelta di basare la tutela del software sul paradigma
del Diritto d’Autore
È stata prevista per la prima volta nell’ordinamento italiano la possibilità di perseguire pe-
nalmente chiunque acquisti o detenga software pirata, anche per uso strettamente personale
(“costituirebbe” reato anche la duplicazione di un videogioco originale di un amico).
L’Art. 103 comma 4 della Legge sul Diritto d’Autore ha istituito il pubblico registro speciale
presso la SIAE (Società Italiana Autori ed Editori), nel quale è possibile registrare software a
pagamento. Tale registrazione non è obbligatoria, come per le opere letterarie o le altre opere
dell’ingegno, ma offre una maggiore tutela all’autore sia dal punto di vista penale, perché sono
previste sanzioni più severe per la violazione del Diritto d’Autore del software registrato, sia dal
punto di vista civilistico, perché costituisce prova della paternità della creazione del software e
garantisce una data certa della creazione.
La legge tutela la forma espressiva del programma, non le idee o i principi che ne sono
alla base: ciò che non si può imitare o copiare è la forma finale, il “confezionamento” (che va
distinto dalla “confezione”).
È l’autore che decide che cosa permettere a chi acquista o detiene il suo software.
■ I diritti morali mirano a tutelare la personalità dell’autore, il suo onore e la sua reputazio-
ne con una corretta comunicazione agli altri delle sue opere.
■ I diritti di utilizzazione economica, detti anche diritti patrimoniali, stabiliscono l’utiliz-
zo economico dell’opera, che può avvenire in ogni forma e modo.
2 Software e licenze
“Acquistare un software” è un’espressione abbastanza comune, ma nel-
la stragrande maggioranza dei casi è sbagliata. Quello che si acquisisce, Il software rientra
nell’ambito del Diritto
a pagamento o a titolo gratuito, è la licenza d’uso di un software e non d’Autore per quel che
il software in sé. In pratica, si acquista il diritto d’uso del software en- riguarda la tutela giuridica,
tro i termini della licenza fornita dall’autore. un po’ come un quadro
Finora abbiamo parlato di “generico” Diritto d’Autore relativo a un “ge- o un libro, anche se
con alcune differenze
nerico” software che è soggetto a tutela, o meglio i cui autori desiderano derivanti dalla natura
che sia tutelato. Ma non tutti gli autori desiderano sempre lo stesso tipo stessa dell’oggetto da
di tutela. Si hanno quindi software soggetti a diversi livelli di tutela. tutelare. Leggere, capire e
osservare la licenza di un
Prima di addentrarci nella classificazione d’uso dei tipi di software, oc- software è fondamentale
corre evidenziare, schematizzandole, le due differenti filosofie estreme per comprendere che
cosa esattamente
presenti attualmente nel mondo dell’informatica. si è acquistato e, di
■ Il software è un prodotto industriale i cui sorgenti sono segreti conseguenza, ciò che si
può o non si può fare con
industriali; chi copia, diffonde, modifica il software è un crimi- quel software.
nale informatico e va perseguito. Esempi di questa filosofia sono
tutte le licenze d’uso di software proprietari.
■ “Il software è un patrimonio inalienabile dell’umanità (di cui cioè non ci si può appro-
priare); chi copia, diffonde, modifica il software accresce tale patrimonio ed è quindi un be-
nefattore”. Esempi di questa seconda filosofia sono le licenze GPL (General Public License)
di alcuni software liberi, come per esempio il sistema operativo LINUX.
Ovviamente, tra queste due filosofie estreme si collocano tutte le differenti sfumature.
Il software semilibero
Il software semilibero è software non libero (quindi non è rilasciato con i sorgenti), ma di-
stribuito col permesso per i privati di usarlo, copiarlo, distribuirlo e modificarlo (incluse le
versioni distribuite con modifiche) senza scopo di lucro.
Il software proprietario
Il software proprietario non è libero né semilibero. Il suo utilizzo, ridistribuzione o modi-
fica sono proibiti oppure richiedono il permesso, o sono sottoposti a vincoli tali che in pratica
non si possono effettuare modifiche liberamente. Questo software non è rilasciato con i sorgen-
ti, la sua copia e distribuzione sono a pagamento.
Il software freeware
Il termine freeware non ha una definizione comunemente accettata, ma è comunemente uti-
lizzato per i pacchetti software che possono essere ridistribuiti, ma non modificati, e il cui
codice sorgente non è disponibile. Questi pacchetti non sono software libero, ma il loro uso e
distribuzione con o senza scopo di lucro è comunque gratuito.
Il software shareware
Lo shareware è software che dà la possibilità di ridistribuire copie, ma impone a chiunque
continui a usarne una copia di pagarne la licenza d’uso.
Generalmente, chi ha realizzato un programma ne concede l’utilizzo per un limitato periodo
di tempo, decorso il quale l’utente, se trova il prodotto di proprio gradimento, deve pagare una
somma per ottenere la licenza e continuare a utilizzarlo.
In qualche caso, viene fornita a scopo valutativo una vecchia release del programma o una sua
versione non completamente funzionante; in altri casi, vengono inserite delle limitazioni che
rendono impossibile un uso completo del software.
Lo shareware non è software libero né semilibero né gratuito, perché:
• il codice sorgente non è disponibile per la maggior parte dei software shareware, pertanto
non è possibile modificarli;
• non è distribuito con il permesso di utilizzarlo senza pagare la licenza d’uso, neanche se
l’utilizzo è senza fini di lucro.
Il software commerciale
Il software commerciale è software sviluppato da un’azienda allo scopo di trarne un guada-
gno. Quindi il suo uso o distribuzione sono a scopo di lucro. Può essere libero oppure no.
Il significato del termine “commerciale” è quindi diverso dal significato del termine “proprieta-
rio”. Se è infatti vero che la maggior parte del software commerciale è anche proprietario, esiste
sia software commerciale libero, sia software non commerciale non libero.
Possiamo riepilogare tale classificazione nella seguente tabella, che presenta sinteticamente le
principali licenze del software.
Proprietario NO NO NO NO NO NO Sì
Shareware NO Sì Sì NO NO NO Sì
Freeware NO Sì Sì Sì Sì NO NO
Semilibero NO NO Sì NO Sì Sì Sì/NO
Libero con
permesso Sì Sì/NO Sì/NO Sì/NO Sì/NO Sì Sì/NO
d’autore
Libero senza
permesso Sì Sì Sì Sì Sì Sì Sì/NO
d’autore
Puoi approfondire
la trattazione su
La criminalità
informatica
nel menu
Materiali aggiuntivi
del libro digitale.
È facile intuire che la strada sia stata molto più facile per coloro i quali (aziende, enti privati e
pubblici, professionisti) si erano già adoperati per garantire il massimo rispetto della normati-
va esistente in materia di riservatezza e protezione dei dati personali (non solo il D.lgs. 196/03,
ma anche i numerosi provvedimenti del Garante per la Privacy).
Il GDPR si rivolge a tutte quelle imprese che elaborano e raccolgono dati personali di cittadini
europei e offrono servizi o prodotti all’interno del mercato unico. Il GDPR ha effetto anche se
le aziende che possiedono i dati hanno sede al di fuori dei confini della UE, per esempio negli
USA, dove sono situate molte società informatiche.
La nuova normativa, pertanto, prevede che tutte le aziende si adeguino, allo scopo di garantire
una tutela diretta ai cittadini.
Il GDPR prevede che debbano necessariamente essere adottate, da parte delle aziende, le se-
guenti misure minime:
• definizione di una politica di conservazione dei dati;
• verifica delle condizioni di legalità dei trattamenti e delle fattispecie per cui è necessario
richiedere il consenso;
• revisione dei rapporti con tutti i responsabili esterni dei trattamenti; revisione/aggiorna-
mento dell’analisi dei rischi per la definizione di misure di sicurezza adeguate;
• per gli enti pubblici, l’obbligo di individuare e nominare un DPO (Data Protection Officer),
ovvero un Responsabile della protezione dei dati.
Dati personali
La definizione di dato personale e dato sensibile viene ampliata all’interno di questa nuo-
va normativa e, quindi, non solo circoscritta ai classici dati come indirizzo o numero di te-
lefono, ma anche agli identificativi online come cookie, indirizzi IP, geolocalizzazione ed
e-mail.
Il Regolamento, infatti, individua tre categorie di dati, elencati nella tabella che segue.
Dati personali Qualsiasi informazione che possa identificare la persona, incluso nome, cognome,
identificativi indirizzo, caratteristiche fisiche e anche identificativi online
Dati • Dati genetici: dati ottenuti tramite analisi di DNA o da un campione biologico
super sensibili • Dati biometrici: qualsiasi caratteristica fisica identificativa della persona, come
l’impronta digitale, l’iride o l’immagine facciale
Accountability
Il principio di accountability, tradotto in italiano con il termine “responsabilizzazione”, ri-
chiede al titolare del trattamento non solo il rispetto degli obblighi iniziali previsti nel Rego-
lamento, ma soprattutto una continua attività di controllo e verifica delle fasi di gestione dei
dati.
La norma prevede un ampliamento degli obblighi in materia di tutela dei dati personali da
parte del titolare e del responsabile del trattamento.
Bisogna dimostrare di aver adottato delle misure giuridiche, organizzative, tecniche, per la
protezione dei dati personali, anche attraverso la messa in atto di specifici modelli organizza-
tivi, pertinenti al settore di interesse in cui si svolge la propria attività.
La volontà di raccogliere i dati obbliga le aziende, per adeguarsi al nuovo Regolamento, all’os-
servanza dei seguenti punti specifici:
• consentire all’utente di fornire il proprio consenso in modo esplicito e tracciabile;
• realizzare e pubblicare un’informativa sul trattamento dei dati personali che sia traspa-
rente, chiara e facilmente accessibile;
• assicurarsi che i dati raccolti siano pertinenti, adeguati e limitati alle finalità per cui
vengono raccolti e gestiti.
Gli utenti, pertanto, devono fornire alle aziende un consenso esplicito per il trattamento dei
dati personali; inoltre, la società deve esprimere con chiarezza quali sono le finalità del tratta-
mento dei dati e se questi vengono utilizzati da società terze (nel caso di fini pubblicitari). La
richiesta, quindi, dev’essere presentata in modo che sia facilmente riconoscibile, chiara, com-
prensibile.
Nonostante abbia dato il consenso, l’utente ha il diritto di revocarlo se lo ritiene opportuno e di
esprimerlo nuovamente nel caso in cui venga effettuata una modifica del trattamento dei dati
o vengano implementati nuovi servizi o funzioni nel programma, nel sito web, nella app e in
qualsiasi altro strumento che prevede l’utilizzo dei dati personali degli utenti.
Non è più permesso alcun utilizzo dei dati per scopi non consentiti o per ogni altra iniziativa;
i dati potranno essere raccolti e utilizzati solo ed esclusivamente per gli scopi indicati esplici-
tamente nel consenso.
Il principio di responsabilizzazione per le aziende, nella fase di adeguamento al GDPR, diviene
un fattore determinante, dovendo garantire la massima sicurezza dal momento della raccolta
sino a quello dell’elaborazione e conservazione dei dati.
Data breach
Con l’espressione data breach viene indicata una violazione dei
dati personali. La tenuta del registro
costituisce uno dei
principali elementi di
Se si verifica la violazione, il titolare del trattamento è obbligato a noti- accountability del titolare,
ficarla tempestivamente all’Autorità Garante e all’interessato. Se non lo in quanto è utile per una
completa ricognizione e
fa, si espone alla possibilità di sanzioni amministrative.
valutazione dei trattamenti
Uno strumento fondamentale, di cui le aziende si devono dotare, al fine svolti e quindi è finalizzato
di garantire il corretto funzionamento di questo meccanismo normati- anche all’analisi del
vo è senz’altro il registro del trattamento dei dati personali. rischio e a una corretta
pianificazione dei
In caso di violazioni, il titolare dovrà informare anche tutti gli interes- trattamenti.
sati e offrire loro indicazioni su come intende limitare i danni.
DPO
Per alcune società (in particolar modo quelle della Pubblica Amministrazione) è previsto l’ob-
bligo di integrare all’interno del proprio organigramma per la Privacy la figura del DPO, il
responsabile della protezione dati.
Il DPO dev’essere in grado di controllare, gestire e valutare il processo di trattamento dei dati,
allo scopo di far rispettare la normativa. Per farlo, deve avere delle buone competenze trasver-
sali, che abbraccino l’informatica, il diritto, la gestione dei processi, e naturalmente le cono-
scenze tecniche, legislative e amministrative che caratterizzano il settore.
Il DPO, anche se non è il titolare del trattamento dei dati, proprio per il suo ruolo di garante e
responsabile della gestione relativa al trattamento dei dati, deve godere di un’autonomia de-
cisionale nello svolgimento delle sue funzioni, affinché queste ultime non vadano in conflitto
con quelle degli altri operatori coinvolti nella catena di gestione dei dati.
Misure tecniche
La normativa prevede che, per il trattamento dei dati personali, dovranno essere predisposte
e attuate delle misure tecniche e organizzative idonee a garantire un livello di sicurezza ade-
guato al rischio.
Alcune delle misure che il titolare o il responsabile del trattamento dei dati potranno concre-
tamente adottare sono:
• la pseudonimizzazione e la cifratura dei dati personali;
• la capacità di assicurare la continua riservatezza, integrità, disponibilità e resilienza
dei sistemi e dei servizi che trattano i dati personali;
• la capacità di ripristinare tempestivamente la disponibilità e l’accesso dei dati in caso di
incidente fisico o tecnico (disaster recovery);
• una procedura per provare, verificare e valutare regolarmente l’efficacia delle misure tecni-
che e organizzative al fine di garantire la sicurezza del trattamento.
Fonte: www.cloudwords.com
■ Sicurezza del trattamento Alla luce di tutto questo, sarà importante quanto indispen-
sabile per i titolari predisporre un programma specifico attraverso il quale analizzare in-
nanzitutto i rischi che potrebbero andare a colpire il sistema informatico e, di conseguen-
za, prevedere le adeguate misure da adottare per minimizzare i rischi e predisporre un
piano di emergenza che consenta di utilizzare un sistema alternativo in attesa della com-
pleta riattivazione di quello in uso.
Codice
dell’Amministrazione
Digitale
D.Lgs. 82/2005
Il documento informatico
Al centro dello scenario aperto dal rapporto tra Amministrazione e cittadino c’è il documento
informatico.
Il documento informatico è definito all’Art. 1 del CAD come “la rappresentazione informa-
tica di atti, fatti o dati giuridicamente rilevanti”.
Firmare Consultare e
e autenticare depositare atti,
atti, documenti documenti
e contratti e contratti
Interrogare Partecipare
online i servizi a bandi
della Pubblica e concorsi
Amministrazione
PROTOCOLLO
INFORMATICO
Gestione
Conservazione
ARCHIVIAZIONE
DIGITALE
5 Lo SPID
Il Codice dell’Amministrazione Digitale prevede che il Sistema Pubblico di Identità Digi-
tale, conosciuto meglio con l’acronimo di SPID, diventi l’unico modo per fornire accesso ai
servizi online delle Pubbliche Amministrazioni da parte di cittadini e imprese.
1 2 3
rappresentare la fase iniziale di una procedura unica attraverso la quale i Service Provider e
gli utenti potrebbero formalizzare la sottoscrizione di un servizio o l’apertura di un rapporto
contrattuale in modo totalmente digitalizzato.
2
SERVICE
PROVIDER (SP)
7
4
3 6
ATTRIBUTE
IDENTITY PROVIDER (AP)
PROVIDER (IP)
5
RIPASSIAMO INSIEME
L’INFORMATICA GIURIDICA NELLA SOCIETÀ DIGITALE
AUDIO
D3
MAPPA
MODIFICABILE
DIRITTO E INFORMATICA
Dati
Personali
3. La reputazione di un autore viene tutelata 10. Il rispetto degli obblighi previsti dal Regolamento
dal Diritto d’Autore all’interno del diritto: sulla Privacy attiene al concetto di:
A patrimoniale A accountability
B morale B portabilità
C di utilizzazione economica C pseudonimizzazione
D privato D disaster recovery
4. Una licenza software non stabilisce: 11. L’espressione data breach indica:
A il modo in cui il software deve essere utilizzato A la conservazione dei dati personali
B il numero di postazioni su cui installare il software B il consenso all’utilizzo dei dati personali
C un utilizzo parziale del software C il trattamento dei dati personali
D la possibilità di fare delle copie D la violazione dei dati personali
5. Il codice sorgente è fornito insieme al software: 12. La possibilità di preservare i dati da un incendio
viene definita:
A proprietario
B freeware A resilienza
C semilibero B disaster recovery
D libero C pseudonimizzazione
D phishing
CLIL ASCOLTA
LA PRONUNCIA
GLOSSARIO
CLIL