112
Analisi Numerica A.A. 2014-2015 Magistrale - Ingegneria Civile Nozioni Introduttive 1

Esercitazione tutori: 03-05-09, 03-05-12 - Università di Roma · Un’analisi più attenta agli elementi finiti, eseguita dopo l'incidente, ha stabilito che, con il disegno adottato,

Embed Size (px)

Citation preview

Analisi Numerica A.A. 2014-2015

Magistrale - Ingegneria Civile

Nozioni Introduttive

1

2

Docente: Vittoria Bruni

Email: [email protected]

Ufficio: Via A. Scarpa,

Pal. B, I piano, Stanza n. 16

Tel. 06 49766648

Ricevimento: Martedì 9.30-10.30

3

Obiettivi del corso

Fornire una panoramica dei metodi numerici fondamentali per la soluzione di

alcuni problemi di maggior interesse nel settore dell’ingegneria e di alcune

tecniche fondamentali della programmazione

Sviluppo di algoritmi risolutivi e relativa implementazione in un ambiente

di calcolo integrato

Risultati

- individuare un metodo numerico adatto a risolvere alcuni problemi test

- analizzarne e formularne la soluzione in modo algoritmico

- implementare tali algoritmi in Matlab/Octave

4

Programma sintetico

1. Nozioni introduttive dell’analisi numerica, classificazione degli errori,

condizionamento, stabilità

2. Introduzione alla programmazione in Matlab/Octave: tipi di dato primitivi,

variabili, espressioni e assegnazioni, array e matrici, funzioni e Script;

istruzioni condizionali e espressioni booleane, cicli

3. Metodi numerici per la soluzione di problemi a valori iniziali; errore di

troncamento locale, errore globale, consistenza e stabilità; convergenza

dei metodi

4. Metodi alle differenze finite per problemi ai limiti; convergenza, stabilità e

consistenza.

5. Metodi numerici per la soluzione di equazioni alle derivate parziali;

equazione del trasporto. equazione della propagazione del calore,

equazione di Poisson.

6. Soluzione di equazioni e sistemi di equazioni non lineari; errore di

troncamento, convergenza dei metodi, velocità di convergenza

7. Soluzione di sistemi di equazioni lineari: metodi diretti e iterativi

5

Testi consigliati:

Calcolo Numerico, L. Gori, Ed. Kappa, 2006

Esercizi di Calcolo Numerico, L. Gori, M.L. Lo Cascio, F. Pitolli,

Ed. Kappa, 2007

Il materiale didattico sarà disponibile sul sito

http://www.sbai.uniroma1.it/users/bruni-vittoria

nella pagina dedicata al corso Analisi Numerica

6 e che non possono essere risolti analiticamente

Cosa è il CALCOLO NUMERICO?

E’ quella branca della matematica che

costruisce e analizza

i metodi numerici

adatti a risolvere, con l’aiuto del calcolatore,

differenti problemi matematici

che nascono in varie discipline

(ingegneria, economia, biologia, ….)

7

Un ingegnere, durante la usa carriera, può aver necessità di usare

software commerciali che usano metodi numerici. E’ necessario

conoscere la teoria e i concetti alla base di questi metodi al fine di

poterli usare al meglio e saperne interpretare correttamente i

risultati

I metodi numerici offrono strumenti potenti per la soluzione di

problemi, soprattutto a seguito dello sviluppo del calcolatore

elettronico

E’ possibile scrivere un metodo numerico per un problema specifico

che non può essere risolto con i metodi esistenti

Perché conoscerlo

8

Disastri dovuti ad errori nelle simulazioni numeriche

La piattaforma è affondata nel mare del Nord al

largo della Norvegia a seguito di un’operazione

di zavorramento, provocando un effetto sismico

del terzo grado della scala Richter e una perdita

stimata in 700 milioni di dollari

Causa: Utilizzo incauto del codice elementi finiti

NASTRAN nella fase di progettazione (modello elastico lineare della tricella)

in cui gli sforzi di taglio sono stati sottostimati del 47%.

Alcune pareti di cemento non erano abbastanza spesse!!!

Un’analisi più attenta agli elementi finiti, eseguita dopo l'incidente, ha stabilito

che, con il disegno adottato, ci sarebbe stata una rottura ad una profondità di

62m, in buon accordo con la profondità (65m) a cui si è realmente verificata

Affondamento della piattaforma Sleipner A (23 Agosto 1991)

9

Sia U la velocità iniziale di swing,

calcolare l’angolo ottimo per cui la

distanza percorsa da una pallina da golf

prima che tocchi terra sia massima

Problema

10

Descrizione del problema fisico: - misura delle caratteristiche della pallina da golf: raggio, massa, geometria

- forze in gioco: peso della pallina, resistenza dell’aria, effetti del vento, ….

- approssimazioni: la palla è una sfera, assenza di vento

- caratteristiche del tiro (swing): velocità iniziale e angolo iniziale

Formulazione di un modello matematico: - tradurre il problema fisico in equazioni (per es. leggi di conservazione)

- usare le assunzioni fatte nel modello fisico per semplificare il modello

matematico

Soluzione del modello matematico (ben posto e ben condizionato!)

- soluzione analitica (raramente)

- soluzione numerica

Interpretazione e validazione - significato fisico del risultato

- identificare e stimare le “fonti” di errore

11

Parametri: massa M, raggio a,

coefficiente di resistenza dell’ aria

Variabili: posizione x = (x,y), velocità v = (ẋ, ẏ)

Legge della fisica: seconda legge di Newton

DCa

c2

2

)sin,cos()0( ),0,0()0(

||2

2

UUtt

cMgdt

dMF

dt

dM ext

vx

vvvx

Formulazione di un modello matematico

12

)sin,cos()0( ),0,0()0(

||2

2

UUtt

cMgdt

dMF

dt

dM ext

vx

vvvx

Trascurando la resistenza dell’aria

Le equazioni del moto diventano

di cui è possibile determinare la soluzione analitica

Da cui è possibile determinare la distanza D percorsa dalla pallina

nell’istante in cui tocca di nuovo il campo

0)(

)(

f

f

ty

Dtx

4

La velocità iniziale è uguale a quella finale !!!!!!

La resistenza dell’aria non può essere trascurata a velocità così alte

Formulazione di un modello matematico

13

Le equazioni del moto diventano

Di cui non è possibile determinare la soluzione analitica

Sono necessari metodi numerici per la soluzione di equazioni differenziali

Senza resistenza dell’aria la palla percorrerebbe 500m

prima di toccare terra

Considerando la resistenza dell’aria e usando un opportuno metodo numerico

per la soluzione di equazioni differenziali ordinarie, questa distanza si

riduce a 223m circa

Formulazione di un modello matematico

14

Un altro esempio:

Si vuole determinare la parte sommersa di una boa sferica di raggio

R = 0.055m e densità B=0.6 Kg/m3

Indicando con Fp la spinta idrostatica, con MB la massa della boa sferica, g

l’accelerazione di gravità e w=1 la densità dell’acqua, si ha

MBg = Fp

e quindi

4/3 R3 B= x2(R-x/3) wg da cui

x3-3x2R+4 R3 B=0

per calcolare il valore di x è necessario risolvere un’equazione non lineare

usando un opportuno metodo numerico

15

L’immagine plane.bmp ha dimensione: 384x256

La si vuole ingrandire, raddoppiandone la dimensione

Un altro esempio:

16

Un altro esempio:

17

Ora l’immagine plane.bmp ha dimensione: 768x512

Un altro esempio:

18

Un altro esempio:

Funzione

di interpolazione

19

Problema da risolvere: calcolo dell’angolo ottimo per cui la distanza

percorsa da una pallina da golf prima che tocchi terra sia massima

Schematizzazione sulla base

di ipotesi esemplificative

Modello matematico: Legge di Newton

Metodo numerico: (la scelta è un arte)

Metodo di Eulero, di Runge-Kutta, …

Algoritmo

Soluzione numerica

La soluzione numerica è accettabile solo se si sanno stimare gli

errori da cui è affetta!!!

errori inerenti

errori di troncamento

stabilità

errori di arrotondamento

20

Possibili fonti di errori

1. Errore di misura: precisione dello strumento

(condizionamento)

2. Errore inerente: semplificazioni del modello reale

(interpretazione del risultato)

3. Errore di troncamento: discretizzazione, iterazioni

(dall’infinito al finito)

4. Errore di arrotondamento:

il calcolatore “lavora in precisione finita”

(il calcolatore non conosce i numeri reali

ogni numero è una sequenza finita di numeri interi (cifre))

21

22

23

24

25

26

Procedimento di calcolo e accuratezza del risultato

27

Sia

01

01

)(

1

0

x

xx

edtexf

x

xt

Supponiamo che x sia dato con precisione 10-9 x=1.4 10-9

714.0104.1

000000001.0

104.1

1000000001.1)(

99

xf

Si perde l’accuratezza della misura! Dell’ordine di 10-1

L’errore sul dato iniziale viene amplificato dal procedimento

di calcolo

28

Consideriamo lo sviluppo in serie di Taylor di f(x) in un intorno di 0

10 62

1 32

xexx

xex

L’errore dell’approssimazione

data dallo sviluppo in serie è

dell’ordine di 10^-28

Procedimento di calcolo e accuratezza del risultato

29

107.01102

4.1 1

2 1

1 )( 99

x

x

exf

x

L’errore sulla misura di f(x) ha lo stesso ordine di grandezza

dell’errore sulla misura di x

Procedimento di calcolo e accuratezza del risultato

30

Un numero reale x si può rappresentare come una sequenza

di infinite cifre decimali (rappresentazione in base 10)

Rappresentazione dei numeri

Ma più in generale, scelta una base β

con

31

Ma i calcolatori hanno una memoria finita:

•è possibile usare solo una sequenza finita di cifre

•i numeri sono rappresentati in virgola mobile o floating point

•i numeri sono in base binaria (β = 2) --- sequenza di 0 e 1 (bits)

mantissa base esponente

(virgola mobile normalizzata)

Base 2

54.75 = 110110.11 =

1.1011011⋅ 25

Base 10

265.87 = 2.6587⋅ 102

0.002658 = 2.658⋅ 10-3

Rappresentazione dei numeri

32

Conversione da base decimale a base 2: parte intera

•Dividere per 2 il numero e conservare il resto

•Ripetere il passo precedente sul quoziente fino a quando il

quoziente diventa 1

•Leggere i resti dall’ultimo al primo

Esempio: convertire il numero11 in base 2

Quoziente Resto

11 / 2 5 1

5 / 2 2 1

2 / 2 1 0

1 / 2 0 1

quindi, (11)10 =(1011)2 = 1⋅23+0⋅22+1⋅21+1⋅20

Rappresentazione dei numeri

33

Conversione da base decimale a base 2: parte frazionaria

• Moltiplicare per 2 il numero e conservare il numero intero del

risultato

• Ripetere il passo precedente sulla parte decimale del risultato

fino a quando diventa 0

• Leggere i numeri interi conservati dal primo all’ultimo

Esempio: convertire il numero 0.25 in base 2

Parte frazionaria Numero prima

della virgola

0.25 ⋅ 2 = 0.5 0.5 0

0.5 ⋅ 2 =1.0 0.0 1

quindi, (0.25)10 =(0.01)2 = 1⋅2-1+0⋅2-2

Rappresentazione dei numeri

34

Esercizio

Convertire in base 2 i seguenti numeri:

0.1875

37.25

128.000625

Rappresentazione dei numeri

35

Esercizio

Non tutti i numeri decimali possono essere rappresentati con un

numero finito di cifre in base binaria!

Consideriamo il numero 0.3

Parte frazionaria Numero prima

della virgola

0.3 ⋅ 2 = 0.6 0.6 0

0.6 ⋅ 2 = 1.2 0.2 1

0.2 ⋅ 2 = 0.4 0.4 0

0.4 ⋅ 2 = 0.8 0.8 0

0.8 ⋅ 2 = 1.6 0.6 1

La sequenza si ripete

infinite volte

(0.3)10 ≈ (0.01001)2 ≈ 0⋅2-1+1⋅2-2+0⋅2-3+0⋅2-4+1⋅2-5=0.28125

Rappresentazione dei numeri

36

Un numero in virgola mobile nella rappresentazione IEEE si scrive

mantissa normalizzata t bits segno s=1 bit

0 se +

1 se - esponente in [L,U] n bits

La scelta di n e t determina il numero massimo

rappresentabile e la sua precisione (numero di cifre decimali)

s e e e e e e e e a a a a a a a a a a a a a a a a a a a a a a a

t bits n bits s=1 bit

Rappresentazione dei numeri

37

Nel sistema IEEE

s n t Numero totale

di bits

Singola precisione 1 8 23 32

Doppia precisione 1 11 52 64

s e e e e e e e e a a a a a a a a a a a a a a a a a a a a a a a

t=23 bits n=8 bits s=1 bit

Rappresentazione dei numeri

38

Nel sistema IEEE

s n t Numero totale

di bits

Singola precisione 1 8 23 32

Doppia precisione 1 11 52 64

L’esponente e può essere sia positivo che negativo

si modifica in modo da memorizzare sempre un numero positivo

aggiungendo la quantità b = 0111…11 = 1+2+22…+2n-2= 2n-1-1

n bits

Rappresentazione dei numeri

39

Vogliamo ora stabilire quali sono i valori massimo U e minimo L

dell’esponente e

Allo 0 è associata la sequenza 0000..00 di n bits

mentre al NaN (Not a Number --- per esempio 0/0)

è associata la sequenza 111..11 di n bits

Quindi il massimo di e+ b è 111..11 - 000..01 = 111…10 da cui e ≤ 111..10 - 011..11 = 011..11 = b = U

Mentre il minimo di e + b risulta > 000..00 da cui e > -b ovvero e ≥ -b +000..01

quindi L=-(b-1)

Rappresentazione dei numeri

40

Per n= 8 b = 127, L = -126 U=127

-126≤ e ≤127

Per n= 11 b = 1023, L = -1022 U=1023

-1022≤ e ≤1023

Rappresentazione dei numeri

41

Alla mantissa sono riservati t bits e quindi la precisione è di t+1 (considerando la normalizzazione)

il più grande numero rappresentabile è

(1.111..11)⋅2U =(2-2-t) ⋅2U = 2U+1 (1-2-t-1)

mentre il più piccolo è (1.000..00)⋅2L = 2L

Per tutti i numeri al di fuori dell’intervallo [2L,2U+1 (1-2-t-1)] si ha

underflow oppure overflow

t bits

t bits

Rappresentazione dei numeri

Massimo (2U+1 (1-2-t-1)) Minimo (2L)

Singola precisione

(U=127, t=23, L=-126)

3.4 ⋅ 1038 1.2 ⋅ 10-38

Doppia precisione

(U=1023, t=52, L=1022)

1.79 ⋅ 10308 2.2 ⋅ 10-308

Esercizio:

Scrivere il numero 5.75 in formato IEEE in singola precisione

e il numero 765.25 in doppia precisione

Rappresentazione dei numeri

Esercizio: Scrivere il numero 5.75 in formato IEEE in singola precisione

1. Conversione del numero in base 2

5.75 = 101.11

2. Rappresentazione in virgola mobile normalizzata

101.11 1.0111 ⋅ 22

3. Somma 127 all’esponente e trasformalo in base 2:

e = 2+127 = 129 = 10000001

4. Scrivi mantissa: 1.01110000000000000000000

5. Determina il segno: + 0

6. Scrivi il numero completo: (-1)0 ⋅(1.01110000000000000000000) ⋅2129

Parte

fraz.

n. prima

della

virgola

0.75 ⋅ 2 = 1.5 0.5 1

0.5 ⋅ 2 = 1.0 0.0 1

Quoziente Resto

5 / 2 2 1

2 / 2 1 0

1 / 2 0 1

0 1 0 0 0 0 0 0 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

s e e e e e e e e a a a a a a a a a a a a a a a a a a a a a a a

/2 = 5

Rappresentazione dei numeri

Precisione di macchina

≤ troncamento

troncamento

Rappresentazione dei numeri

46

La rappresentazione dei numeri può essere molto costosa!!!

Gli errori di arrotondamento e la rappresentazione dei numeri

non possono essere trascurati in quanto possono alterare in

modo disastroso il risultato finale

47

Imperfezioni nello Intel Pentium (1994)

Il Pentium FDIV bug è stato scoperto dal prof. Thomas Nicely del

Lynchburg College nell'estate del 1994, quando, calcolando la costante di

Brun, si accorse che il risultato ottenuto era ben lontano da quanto stimato

teoricamente, anche considerando possibili errori di arrotondamento. Al

contrario, il calcolo effettuato su una macchina con processore 486 risultò

corretto. Il processore sbagliava a calcolare espressioni semplici quali

x (1 / x) in quanto i numeri erano dati con precisione fino alla quinta cifra decimale.

La Intel fu costretta a sostituire tutti i chip affrontando una spesa di circa

475 milioni di dollari.

La rappresentazione dei numeri può essere molto costosa!!!

48

Ariane 5 Il primo volo dell'Ariane 5 (giugno 1996) fallì e il razzo si autodistrusse

dopo 40 secondi dal lancio a causa di un malfunzionamento del software

di controllo.

Ci vollero 10 anni e 7 bilioni di dollari per realizzarlo.

Un dato a 64 bit in virgola mobile venne convertito in un intero a 16 bit

con segno.

Questa conversione causò una operazione errata (trap) del processore: il

numero in virgola mobile era troppo grande per poter essere

rappresentato con un intero a 16 bit. Questo errore scatenò una reazione

a catena che causò danni meccanici ai quali seguì l’azionamento del

comando di autodistruzione.

Fu necessario quasi un anno e mezzo per capire quale fosse stato il

malfunzionamento che aveva portato alla distruzione del razzo!

La rappresentazione dei numeri può essere molto costosa!!!

49

Missile Patriot Il 25/02/1991 durante la Guerra del Golfo un missile Patriot fallì

l’intercettazione di un missile Scud iracheno a causa di errori di

arrotondamento.

Questo errore costò la vita a 28 soldati!

Il Patriot usava un’aritmetica a 24 bit; il tempo era memorizzato

dall’orologio interno in decine di secondi e quindi diviso per 10 per

ottenere i secondi.

Ma 1/10 in base 2 ha una rappresentazione periodica:

0.00011001100110011001100……..

La memorizzazione delle prime 24 cifre causò un errore di circa

0.000000095 secondi, che dopo cento ore introdusse un errore di 0.3483

secondi che causò un errore di 687 m sulla stima della posizione del

missile Scud

La rappresentazione dei numeri può essere molto costosa!!!

50

51

52

x1

53

Cancellazione numerica

Esercizi:

•Calcolare le radici dell’equazione di secondo grado x2-26x+1 lavorando con 5 cifre significative. Discutere i risultati

•Stabilire se per i numeri a=15.6 e b=15.7 vale la relazione

(a-b)2=a2-2ab+b2 lavorando con 3 cifre decimali esatte

54

Supponiamo di voler calcolare la somma di n numeri

decimali lavorando con 4 cifre significative

Per esempio, si vuole valutare nel punto x=-5 usando n+1

termini del suo sviluppo in serie di Taylor

1

n

k kn xS

n!

(-5).....

2!

(-5)

1!

(-5)1

n25- e

xe

Cancellazione numerica

55

0.006738 5 e mentre usando l’espressione precedente

al variare di n si ha grado Termine della

serie

Somma della

serie

0 1.000 1.000

1 -5.000 -4.000

2 12.50 8.500

3 -20.83 -12.33

4 26.04 13.71

5 -26.04 -12.33

6 21.70 9.370

7 -15.50 -6.130

… … …

… … …

Cancellazione numerica

56

0.006738 5 e mentre usando l’espressione precedente

al variare di n si ha grado Termine della

serie

Somma della

serie

16 0.7293E-1 0.1166

17 -0.2145E-2 0.009518

18 0.5958E-3 0.01011

19 -0.1568E-3 0.009932

20 0.3920E-3 0.009916

21 0.9333E-5 0.009912

22 0.2121E-5 0.009911

23 0.4611E-6 0.009911

24 0.9607E-7 0.009911

25 0.1921E-7 0.009911

Cancellazione numerica

57

3679.01

e

Calcolando, invece, prima

e poi moltiplicandolo per se stesso 5 volte si ha

che risulta prossimo a

|0.006738-0.006736|=2⋅10-6

0.006736 11

111

eeeee

0.006738 5 e

10 2.90.006738

|0.006736-0.006738| 4-

Cancellazione numerica

58

Considerare tre forme equivalenti di uno stesso polinomio:

Stabilire se, valutate al calcolatore in uno stesso punto,

forniscono lo stesso risultato

Esercizio

Cancellazione numerica

59

Propagazione degli errori di arrotondamento

Sia fl(x) il numero x rappresentato in floating point e arrotondato e

l’errore corrispondente

Sia fl(y) il numero y rappresentato in floating point e arrotondato e

l’errore corrispondente

Errore del prodotto exy:

fl(x)fl(y)=x(1+ex) y(1+ey) = xy (1+ex+ey+exey) ≈ xy (1+ex+ey)

)(

x

xxflex

)(

y

yyfley

exy

)1()( xx exxxexfl

)1()( yy eyyyeyfl

60

Errore della divisione ex/y:

ex/y

)1( ...)1)(1( )1(

)1(

)(

)( 2

yxyyx

y

x eey

xeee

y

x

ey

ex

yfl

xfl

Errore della somma ex+y:

1)( )1()1(

)()(

eyx

ye

yx

xyxyeexyxeyex

yflxfl

yxyxyx

ex+y

Se xy>0 allora |ex+y|≤ |ex|+|ey|

Se xy<0 le quantità possono essere molto grandi e yx

y

yx

x

Propagazione degli errori di arrotondamento

61

62

Per esempio, è accettabile un errore relativo che cresce

secondo la legge lineare

con c0 non molto grande

Mentre l’algoritmo è instabile se la crescita dell’errore è di

tipo esponenziale; per esempio

Stabilità di un algoritmo

00ne cen

63

00e ce n

n

64

65

1

66

67

68

69

Esercizio :

Mostrare che

non è adatto per il calcolo del seguente integrale

Propagazione dell’errore di arrotondamento

0)5

6log(

051

1

n

nInI

n

n

5

1

0

dx

x

xI

n

n

70

La funzione integranda è non negativa nell’intervallo di

integrazione. Inoltre

come si osserva anche dal grafico della funzione integranda

05

1

0

1

0

dxxdxx

x nn

71

Propagazione dell’errore di arrotondamento

N=15

N=30

72

Propagazione dell’errore di arrotondamento

Avendo solo un errore di arrotondamento sul dato iniziale

I0 = log(6/5) , risulta

)1()(~

0000 IIflI

001

00

2

200

2

112

0010000001

)5(~

51~

.

.

5)5(52

1~5

2

1~

55)51()1(51~

51~

IIIn

I

IIIIII

IIIIIII

n

nnn

Cresce in

valore assoluto

al crescere di n

73

Propagazione dell’errore di arrotondamento

0348)5(

1054.9)5(

20

10 2.

00

20

1320

-10

0

I

n

Dopo 20 passi l’errore è dell’ordine delle centinaia e la misura

dell’integrale è inattendibile 74

Propagazione dell’errore di arrotondamento

75

76

77

• Se il problema è molto sensibile alle variazioni dei

dati di input, allora nessun algoritmo, anche se

robusto e stabile, può dare una soluzione robusta

e stabile al problema

78

79

80

Studiare il condizionamento delle seguenti funzioni

0,0 ,)(

1

2)(

1)(

)log()(

)sin()(

)(

2)(

/1

2

2

xxxf

x

xxf

xxxf

xxf

xxf

xxf

xxf

Esercizi

81

Riferimenti bibliografici L. Gori Calcolo Numerico

Cap. 1. Par. 1.1, 1.2, 1.3, 1.4, 1.5 (escluso caso bidimensionale e condizionamento del calcolo di una radice), 1.6 (concetto di stabilità ed esempio 1.6.1)

Elementi di Programmazione Nozioni Introduttive

82

83

Per risolvere numericamente un problema è necessario

1. Comprendere il problema da risolvere

2. Costruire un algoritmo stabile, robusto ed efficace

3. Conoscere lo strumento computazionale utilizzato (per

es. il calcolatore elettronico)

84

Il computer è diventato uno strumento di calcolo molto potente che ha

favorito lo sviluppo di metodi numerici e algoritmi sempre più sofisticati e

potenti in grado di affrontare problemi complessi

SOLUZIONE

Metodi elaborati e complicati per

rendere il problema trattabile

SOLUZIONE

Metodi (anche elaborati e complicati)

facili da usare

Formulazione del problema

Prima Dopo

INTERPRETAZIONE

Analisi approfondita limitata da

soluzioni troppo costose

(in termini di tempo di calcolo)

INTERPRETAZIONE

La facilità di calcolo favorisce:

- sviluppo e verifica di intuizioni

- simulazioni

- studio della sensibilità del sistema

85

Risolvere un problema con il calcolatore

• Descrivere il

problema

• Individuare le

informazioni e i

dati noti (input) e i

risultati desiderati

(output)

• Individuare

un metodo

risolutivo

adeguato

• Scomporre il

procedimento in

una sequenza di

azioni elementari e

univoche

(algoritmo)

• Scrivere un programma:

esprimere le istruzioni con un

opportuno formalismo

(linguaggio di programmazione)

comprensibile all’ elaboratore

86

Problema

Algoritmo

Programma Dati di input Dati di output

Risolvere un problema con il calcolatore

87

La programmazione è l’attività con cui si predispone l’elaboratore ad

eseguire un insieme di azioni elementari su un insieme di dati di

ingresso al fine di risolvere un certo problema

(la soluzione è data in forma di dati di output)

Il programma è quindi la formulazione testuale di un algoritmo in un

linguaggio di programmazione

L’ algoritmo è un insieme finito di istruzioni elementari

univocamente interpretabili che, eseguite in un ordine stabilito,

forniscono la soluzione ad un problema in un numero finito di passi

Alcune definizioni

88

• Eseguibilità: ogni istruzione deve poter essere eseguita dalla

macchina

• Non ambiguità: ogni azione deve essere univocamente

interpretabile

• Finitezza: il numero totale di azioni da eseguire per ogni insieme

di dati deve essere finito

Proprietà di un algoritmo

89

Problema: si vuole trasportare un lupo, una capra e un cavolo

da una sponda all’altra di un fiume senza «perdere i

passeggeri»

Algoritmo:

1. Trasporta la capra sull’altra sponda

2. Torna indietro

3. Trasporta il cavolo sull’altra sponda

4. Torna indietro portando anche la capra

5. Lascia la capra e Trasporta il lupo sull’altra sponda

6. Torna indietro

7. Trasporta la capra sull’altra sponda

Esempi di algoritmi

90

Problema: si vuole calcolare il massimo tra due numeri a e b e

assegnarlo alla variabile m

Algoritmo:

1. Leggi il valore di a e b

2. Se a > b allora poni m=a

altrimenti poni m=b

3. Output: m

Esempi di algoritmi

91

Problema: moltiplica per 2 ogni elemento di un insieme L

Algoritmo:

1. Leggi L

2. Per ogni elemento k dell’insieme L, poni k=2*k

3. Output: L

Esempi di algoritmi

92

Problema: si vuole calcolare il massimo di un insieme L di

numeri e assegnarlo alla variabile m

Algoritmo:

1. Leggi L

2. Seleziona il primo elemento dell’insieme L e ponilo in m

3. Per ogni elemento k dell’insieme, se k > m allora poni m=k

4. Output: m

Esempi di algoritmi

93

Ogni algoritmo è una combinazione di strutture

Ogni struttura ha un unico punto di ingresso e un unico punto di uscita

TEOREMA DI BOEHM-JACOPINI:

Un qualunque algoritmo può essere descritto unicamente attraverso le

tre strutture:

• Sequenza

• Diramazione

• Ciclo o Iterazione

Teorema di Boehm-Jacopini

94

Sequenza: costituita da istruzioni di lettura e scrittura, istruzioni di

assegnazione (leggi, scrivi, assegna,…)

Diramazione: permette di eseguire certe istruzioni al verificarsi di una

certa condizione; oppure di eseguire certe istruzioni al

verificarsi di una certa condizione ed altre istruzioni se

non si verifica (Se …. Allora …. Altrimenti)

Ciclo: è una struttura che permette di ripetere una o più operazioni in

sequenza per un numero finito di volte. La ripetizione del

gruppo di istruzioni soggette alla iterazione (o ciclo) è soggetta

al verificarsi di una certa condizione ed il controllo su di essa

può essere in testa alla struttura oppure in coda alla stessa

(Per ogni elemento fai/esegui…. Finché…. esegui…)

Teorema di Boehm-Jacopini

95

Stabilire se un numero N è un quadrato perfetto

INIZIO

Leggi il numero N

Calcola la radice quadrata di N e assegna a Q il risultato

Calcola la parte intera di Q e assegna a Y il risultato

Se Y2 = N allora visualizza il messaggio ‘N è un quadrato perfetto’

altrimenti visualizza il messaggio ‘N non è un quadrato perfetto’

FINE

Esempio

96

Si consideri la successione definita come segue

xn = a xn-1, n0

con a parametro reale. Stampare 100 elementi della successione con

x0 valore assegnato

INIZIO

Leggi x0, a

Esegui 100 volte le seguenti istruzioni

Calcola il prodotto a⋅x0 e assegna a x1 il risultato

Stampa x1

Assegna a x0 il valore di x1

FINE

Esempio

97

Si consideri la successione definita come segue

xn = a xn-1, n0

con a parametro reale assegnato.

Assegnati x0 e M,

se a<1, stampare gli elementi della successione tali che xn>aMx0;

se a>1, stampare gli elementi della successione tali che xn<aMx0;

se a=1, stampare il messaggio ‘la successione ha tutti gli elementi

uguali a x0’

Esempio

98

Scrivere un algoritmo e il relativo diagramma di flusso per risolvere i

seguenti problemi:

1. Risolvere l’ equazione lineare di primo grado ax-b=0 2. Calcolare le radici di una equazione di secondo grado

3. Calcolare il fattoriale di un numero intero n 4. Approssimare il valore di ex in un punto x0 con i primi n termini dello

sviluppo in serie di Mac Laurin

5. Trovare gli elementi maggiori di zero di un insieme ordinato di

numeri

6. Trovare gli elementi maggiori di zero di un insieme non ordinato di

numeri

7. Calcolare la media aritmetica degli elementi di un vettore di numeri

8. Calcolare la media aritmetica degli elementi di una matrice di numeri

Esercizi

99

• Risolvere l’ equazione lineare di primo grado ax-b=0

Start

1. Leggi a e b

2. Se a0 allora poni x=b/a

output: x

altrimenti se b 0 allora stampa ‘equazione impossibile’

altrimenti stampa ‘equazione indeterminata’

Stop

Esercizi

100

• Calcolare le radici dell’ equazione di secondo grado ax2+bx+c=0

Start

Leggi a, b e c

Se a=0 allora stampa ‘equazione di primo grado’

altrimenti poni D = b⋅b-4 ⋅ a ⋅ c

se D < 0 allora stampa ‘non esistono radici reali’

altrimenti se D=0 allora poni x1=-b/(2 ⋅ a)

Output: x1

altrimenti poni x1=(-b-sqrt(D))/(2 ⋅ a)

poni x2=(-b+sqrt(D))/(2 ⋅ a)

Output: x1, x2

Stop

Esercizi

101

Calcolare il fattoriale di un numero intero n

Start

Leggi n

Poni f = 1

Finché n1 esegui le seguenti istruzioni

poni f = f ⋅ n

poni n = n-1

Output: f

Stop

Esercizi

102

Approssimare il valore di ex in un punto x0 con i primi n termini dello sviluppo in

serie di Mac Laurin

Start

1. Leggi n e x0

2. Se n>0 allora

poni T=1

poni i =1

Finché i<n esegui le seguenti istruzioni

calcola il fattoriale di i e assegna ad f il risultato

assegna a T il valore T+x0i / f

incrementa i di una unità

Output T

altrimenti stampa il messaggio ‘n deve essere un numero positivo’

Output: f

Stop

Esercizi

Esercizi:

- generalizzare al caso di sviluppo in serie di Taylor attorno ad

un punto y assegnato

103

Due algoritmi sono equivalenti se:

• hanno le stesse variabili di input

• hanno le stesse variabili di output

• in corrispondenza degli stessi valori delle variabili di input producono gli

stessi valori delle variabili di output

Algoritmi equivalenti:

• possono avere differente efficienza (velocità e risparmio di risorse)

• possono essere profondamente diversi

Osservazioni:

• Un algoritmo semplice può essere meno efficace, soprattutto in

termini di velocità

• La semplicità può facilitare la comprensione e la correzione

• Non necessariamente un algoritmo “furbo” è più efficiente o affidabile

Algoritmi equivalenti

104

Linguaggi di programmazione

Un linguaggio di programmazione è un linguaggio formale

costituito da simboli (alfabeto), combinati in sequenze in base

a regole precise (sintassi) e a cui viene associato un

determinato significato (semantica)

• Con il termine sintassi si intende l’insieme delle regole che consentono

di legare gli elementi lessicali (parole, simboli, punteggiatura, etc.) in

modo da comporre enunciati dotati di senso nell’ambito del linguaggio

• Le regole sintattiche (o grammaticali) si propongono di collegare gli

enunciati semplici producendo enunciati composti

• La semantica disciplina il significato da attribuire alle costruzioni

linguistiche

105

Esistono diverse famiglie di linguaggi di programmazione:

• Linguaggi assembler

• Linguaggi funzionali

• Linguaggi imperativi (BASIC)

• Linguaggi a oggetti (Java) etc…

Linguaggi di programmazione

106

• Primi calcolatori (anni ‘40): istruiti ad eseguire una certa azione,

utilizzando un codice costituito solo dalle cifre binarie (bit) 0 e 1

I linguaggi consentono di descrivere le operazioni da far compiere al

calcolatore in maniera più semplice

• Linguaggi di tipo assembler (assemblatori): basati su semplici

forme mnemoniche che attribuiscono una sequenza di caratteri al

codice operativo in linguaggio macchina

• Linguaggi di programmazione ad alto livello (Fortran, C/C++,

Basic, Pascal, ….): evoluti in direzione dell’utente con la

definizione di standard in modo che un programma potesse

essere eseguito su diversi tipi di calcolatore senza cambiamenti

significativi

Linguaggi di programmazione

107

Ma la macchina utilizza esclusivamente l’alfabeto binario!

E’ necessaria un’operazione di traduzione dal codice scritto secondo

un linguaggio di programmazione (codice sorgente) al codice

comprensibile dal calcolatore (codice oggetto)

Tale operazione è effettuata per mediante opportuni programmi,

detti traduttori

I traduttori si dividono in due categorie:

• compilatori: la traduzione viene eseguita una volta sola ed è

permanente --- si produce il codice oggetto (file eseguibile) da cui

non è facile risalire al codice sorgente

• interpreti: la traduzione è necessaria ogni volta che intendiamo

usare un programma

Linguaggi di programmazione

108

Variabili

I calcolatori utilizzano esclusivamente numeri, mentre il linguaggio

gestisce più facilmente i nomi

I linguaggi di programmazione permettono di fare riferimento ai dati

utilizzando dei nomi, detti variabili

Una variabile è un contenitore etichettato da un nome e

caratterizzato da un contenuto

Il contenuto di una variabile può cambiare !

pluto

109

Variabili

Il contenuto di una variabile può cambiare a seguito di una

assegnazione

pluto

pluto

il contenuto della variabile

è il numero decimale 5.7

pluto := 5.7 5.7

il contenitore è vuoto

pluto

pluto := 5.7*5

il contenuto della

variabile ora è il

numero decimale 38.5

38.5

110

Variabili e Tipi di dato

Il contenuto di una variabile in un calcolatore è una sequenza di bit

è necessario determinare quale valore contiene la variabile (interpretare

la sequenza di bit)

I linguaggi di programmazione associano ad ogni variabile informazioni

anche sul tipo di valore che essa contiene

L’attribuzione di un significato particolare alla sequenza binaria è fatto

attraverso il concetto di tipo di dato

111

Un insieme minimo di tipi di dato può essere composto da:

• numeri interi • numeri in virgola mobile • caratteri

Una stringa è rappresentabile come una sequenza di caratteri

E’ possibile convertire un dato da un tipo ad un altro

Nei linguaggi di programmazione ad alto livello esistono

tipi di dato predefiniti Nei linguaggi di programmazione ad alto livello è possibile definire tipi

di dato per rappresentare informazioni specifiche per una data

applicazione

Variabili e Tipi di dato

112

Variabili e Tipi di dato: vettori

Un vettore è un insieme ordinato di variabili dello stesso tipo

Ogni elemento del vettore è caratterizzato dalla posizione

Esempio:

v = [2, 14, 13, 44, 142, -2]

v(3) = 13

v(6) = -2

Una matrice è un “vettore di vettori” Ogni elemento è caratterizzato dalla posizione: (indice riga, indice colonna)

Si possono definire anche vettori n-dimensionali