83
Introduzione ad attivit` a di laboratorio di Calcolo Scientifico con OCTAVE per insegnanti delle scuole superiori Luca Bonaventura MOX - Modellistica e Calcolo Scientifico Dipartimento di Matematica ’Francesco Brioschi’ Politecnico di Milano [email protected] Anno Accademico 2008-09

Introduzione ad attivit`a di laboratorio di Calcolo ...bonavent/archive/sis_010409.pdf · 7.5 Metodo dei trapezi con controllo sulla tolleranza d’errore . . . 75 7.6 Metodo di Eulero

  • Upload
    lamtruc

  • View
    218

  • Download
    0

Embed Size (px)

Citation preview

Introduzione ad attivita di laboratorio di

Calcolo Scientifico con OCTAVE per

insegnanti delle scuole superiori

Luca Bonaventura

MOX - Modellistica e Calcolo Scientifico

Dipartimento di Matematica ’Francesco Brioschi’

Politecnico di Milano

[email protected]

Anno Accademico 2008-09

2

1

1.5

2

2.5

3

0 0.5 1 1.5 2

Sol. numericaSol. esatta

....be wise, discretize!

Mark Kac

Introduzione

Lo scopo di queste note e quello di fornire una guida allo svolgimento diattivita didattiche di Calcolo Scientifico in laboratorio informatico mediantel’utilizzo di un software scientifico avanzato. Non vi e pretesa di completez-za ne di esaustivita per quanto riguarda la presentazione teorica dei metodiutilizzati, per cui si puo fare riferimento a numerosi testi universitari. Inparticolare, una presentazione piu completa dei metodi introdotti puo esseretrovata ad esempio nei testi [2], [6], [8] mentre una ampia panoramica suglialgoritmi di calcolo scientifico e sui relativi problemi di implementazioneepresentata in [4]. Per i necessari richiami di Analisi Matematica si puo farriferimento ai manuali [1],[3], [5]. I temi affrontati sono comunque tutti con-tenuti nei programmi previsti per gli istituti che applicano il Piano Nazionaleper l’Informatica. Piu in dettaglio, si presenteranno, a livello introduttivo,alcuni aspetti dei seguenti argomenti:

• uso didattico del software scientifico OCTAVE

• calcolo approssimato di costanti e funzioni fondamentali

• simulazione di variabili aleatorie

• calcolo numerico di zeri di funzioni

• calcolo numerico di integrali definiti

• soluzione numerica di equazioni differenziali ordinarie.

L’impostazione delle note consiste nella presentazione di alcuni brevi ri-chiami teorici alla problematica e ai metodi numerici considerati, come in-troduzione ad una sessione di esercitazione specificamente finalizzata allaimplementazione dei metodi stessi. L’obbiettivo didattico del corso che siriassume in queste note consiste

3

4

• nel favorire lo sviluppo da parte del docente di una capacita autonomadi utilizzo dello strumento informatico, che consenta di predisporre latraccia di esercitazioni al calcolatore da svolgere con gli allievi;

• nel fornire esempi di implementazioni che possono essere utilizzati nelcontesto di esercitazioni al calcolatore.

Per la redazione di questa dispensa si e utilizzato in parte materiale relativoall’attivita di laboratorio didattico nell’ambito del corso di Analisi Matema-tica e Geometria tenuto dalla prof.ssa Clelia Marchionna nel corso di Laureain Ingegneria Ambientale del Politecnico di Milano e nel corso di CalcoloNumerico tenuto dal prof. Riccardo Sacco nel corso di Laurea in Ingegne-ria Civile del Politecnico di Milano fino al 2006. Si ringraziano la prof.ssaMarchionna ed il prof. Sacco per avere permesso di utilizzarlo. Si ringraziainoltre la prof.ssa Cristina Turrini per i numerosi consigli forniti nella fase dipreparazione del materiale e tutti i docenti che hanno partecipato al corso’Analisi Numerica’ del II semestre dell’a.a. 2008-09 della SILSIS - Milanoper le segnalazioni di errori e imprecisioni nelle stesure preliminari di questenote.

Indice

Introduzione 3

1 Il software OCTAVE 7

1.1 Comandi in linea . . . . . . . . . . . . . . . . . . . . . . . . . 8

1.2 Vettori e operazioni sui vettori . . . . . . . . . . . . . . . . . . 11

1.3 Grafici di funzioni . . . . . . . . . . . . . . . . . . . . . . . . . 14

1.4 Scripts di OCTAVE . . . . . . . . . . . . . . . . . . . . . . . . 15

1.5 Definizione di funzioni in OCTAVE . . . . . . . . . . . . . . . 18

1.6 Istruzioni di programmazione in OCTAVE . . . . . . . . . . . 19

2 Numeri reali e calcolo approssimato 23

2.1 Concetti di errore assoluto e relativo . . . . . . . . . . . . . . 23

2.2 Numeri interi e reali . . . . . . . . . . . . . . . . . . . . . . . 25

2.3 Divisione e radice quadrata . . . . . . . . . . . . . . . . . . . 29

2.4 Calcolo di costanti fondamentali . . . . . . . . . . . . . . . . . 32

2.5 Calcolo di funzioni fondamentali . . . . . . . . . . . . . . . . . 33

3 Statistica e campioni casuali 37

3.1 Elementi di statistica descrittiva . . . . . . . . . . . . . . . . . 37

3.2 Numeri pseudocasuali . . . . . . . . . . . . . . . . . . . . . . . 40

3.3 Teoremi asintotici . . . . . . . . . . . . . . . . . . . . . . . . . 42

4 Equazioni nonlineari 45

4.1 Metodo di bisezione . . . . . . . . . . . . . . . . . . . . . . . . 47

4.2 Metodo di Newton e le sue varianti . . . . . . . . . . . . . . . 48

4.3 Metodo del punto fisso . . . . . . . . . . . . . . . . . . . . . . 51

5

6 INDICE

5 Integrali 535.1 Alcuni metodi di integrazione numerica . . . . . . . . . . . . . 545.2 Semplice tecnica di stima dell’errore . . . . . . . . . . . . . . . 57

6 Equazioni differenziali 596.1 Discretizzazione delle ODE: il metodo di Eulero . . . . . . . . 606.2 Misure dell’ errore nella soluzione numerica di ODE . . . . . . 616.3 Discretizzazione delle ODE: altri metodi ad un passo . . . . . 636.4 Stabilita numerica . . . . . . . . . . . . . . . . . . . . . . . . 66

7 Appendice A 697.1 Calcolo approssimato di π . . . . . . . . . . . . . . . . . . . . 697.2 Generatore lineare congruente di numeri pseudocasuali . . . . 707.3 Teorema del limite centrale . . . . . . . . . . . . . . . . . . . . 727.4 Metodo di bisezione . . . . . . . . . . . . . . . . . . . . . . . . 737.5 Metodo dei trapezi con controllo sulla tolleranza d’errore . . . 757.6 Metodo di Eulero in avanti per ODE . . . . . . . . . . . . . . 777.7 Solutore lsode per ODE . . . . . . . . . . . . . . . . . . . . . 79

Capitolo 1

Il software OCTAVE

OCTAVE e un programma per il calcolo scientifico non coperto da licenza(free software). Una documentazione completa su tale software puo esserereperita sul sito webhttp://www.octave.org,insieme agli eseguibili del programma per vari sistemi operativi. OCTAVEcostituisce uno strumento particolarmente interessante perche riproduce difatto le funzionalita di un sottoinsieme del software MATLAB, sviluppatodalla azienda Mathworks e coperto da licenza, si veda il sitohttp://www.mathworks.com.L’uso sempre piu ampio di MATLAB in ambito scientifico e ingegneristi-co rende OCTAVE molto indicato per fornire agevolmente anche a studentidelle scuole superiori un primo approccio con uno strumento moderno di cal-colo scientifico. Si deve pero tenere presente che OCTAVE riproduce solo lefunzionalita base di MATLAB. In particolare, la grafica non e supportata di-rettamente. Per poter utilizzare le funzioni grafiche di OCTAVE e necessariodisporre anche del software grafico GNUPLOT, anche esso disponibile senzalicenza per molti sistemi operativi, si veda il sitohttp://www.gnuplot.info.Nel resto di questa sezione saranno introdotti i principali comandi di OC-TAVE ed alcuni elementi di programmazione con tale software, allo scopodi disporre degli strumenti necessari per implementare gli algoritmi numericiche saranno considerati in seguito. Tutti i comandi utilizzati si riferisconoalla versione OCTAVE 3.0.1 e la funzionalita dell’implementazione e stataverificata, per quanto possibile, nella versione di OCTAVE per il sistemaoperativo LINUX.

7

8 CAPITOLO 1. IL SOFTWARE OCTAVE

1.1 Comandi in linea

Nella modalita piu semplice, OCTAVE puo essere utilizzato introducendocomandi in linea dalla finestra principale del programma. Dopo il promptdei comandi >> e possibile digitare semplici operazioni aritmetiche come

>> 7+5

ottenendo come risultato

ans=

12

Tale risultato puo essere poi assegnato come valore ad una variabile il cuinome puo essere scelto arbitrariamente, tenendo conto che il programmadistingue lettere maiuscole dalle minuscole:

>> a= 7+5

fornisce come risultato

a=

12

mentre

>> A= 7-5

fornisce come risultato

A=

2

Il valore di una variabile (che sia stata gia definita) puo essere visualizzatosemplicemente digitando il suo nome:

>> A

A=

2

>> a

a=

12

OCTAVE permette di lavorare sia con numeri interi che numeri reali. Alcunecostanti reali di uso comune sono predefinite, ad esempio

>> pi

ans=

3.1416

I numeri reali vengono rappresentati in OCTAVE utilizzando fino a 16 cifresignificative. Per default, come visto nell’esempio precedente, si visualizzano

1.1. COMANDI IN LINEA 9

solo 4 cifre dopo la virgola. Per visualizzare il valore completo di una variabilereale si deve utilizzare il comando format. In particolare con il comando

>> format long

si ottiene

>> pi

ans=

3.141592653589793

oppure

>> e

ans=

2.71828182845905

Se si vuole conoscere piu in dettaglio la sintassi del comando format (o diun qualsiasi altro comando OCTAVE) si possono utilizzare i comandi helpe doc. Digitando

>> help format

si ottengono direttamente nella finestra principale di OCTAVE una sintesidelle finalita e della sintassi del comando. Digitando invece

>> doc format

viene visualizzata invece la voce del manuale di OCTAVE corrispondenteal comando stesso, che e in generale piu completa e dettagliata rispetto aquanto fornito dal comando help.

Le variabili intere e reali possono essere utilizzate in calcoli in cui inter-vengano tutte le operazioni aritmetiche. Un sommario della sintassi delleprinicipali operazioni aritmetiche in OCTAVE e riportato nella tavola 1.1.

Si noti che se si vuole svolgere una operazione senza farne visualizzare ilrisultato, e sufficiente terminare la riga di comando con il simbolo ; di puntoe virgola, come si vede dall’esempio

Simbolo Operazione Sintassi

+ Somma a+b

- Sottrazione a-b

* Moltiplicazione a*b

/ Divisione a/b

\ Divisione inversa a \ b

ˆ Elevazione a potenza a ˆ b

Tabella 1.1: Principali operazioni aritmetiche in OCTAVE.

10 CAPITOLO 1. IL SOFTWARE OCTAVE

Funzione Sintassi Funzione Sintassi

Radice quadrata sqrt(x) Esponenziale di base e exp(x)

Logaritmo naturale log(x) Logaritmo in base 10 log10(x)

Logaritmo in base 2 log2(x) Valore assoluto abs(x)

Coseno cos(x) Arcocoseno acos(x)

Seno sin(x) Arcoseno asin(x)

Tangente tan(x) Arcotangente atan(x)

Cos. iperbolico cosh(x) Arcocos. iperbolico acosh(x)

Seno iperbolico sinh(x) Arcoseno iperb. asinh(x)

Tang. iperbolica tanh(x) Arcotang. iperbolica atanh(x)

Tabella 1.2: Principali funzioni matematiche in OCTAVE.

>> a= 7+10;

In OCTAVE sono anche predefinite le principali funzioni dell’Analisi Ma-tematica. Un riassunto dei nomi (che utilizzano le convenzioni anglosassoni)e della sintassi delle prinicipali funzioni matematiche in OCTAVE e riportatonella tavola 1.2.

Esercizio

Calcolare con OCTAVE le seguenti espressioni:

a) 45 − 122 + 56 = 16505;

b)

3 · 52

10 + 5 · 8 = 1.5;

c)e5 − 1

ln 4 + e2 + 3= 12.5188;

d)√

3 ln 5

2 + e2= 0.7171;

e)

sin3

2

3

)

− cos2

3

4

)

= 0.0122;

1.2. VETTORI E OPERAZIONI SUI VETTORI 11

Comando Azione

clc Cancella contenuto della finestraclear Cancella valori immagazzinati in tutte le variabili definite

clear elenco variabili Cancella valori immagazzinati nelle variabili dell’elencowho Elenca le variabili presenti in memoriawhos Elenca le variabili, il loro tipo e la memoria occupata.

Tabella 1.3: Principali comandi in linea OCTAVE.

f)

arcsin(

− 23

)

sin(

π3

)

− 5= 0.1765.

Esercizio

Porre x = 3, y = −2 e valutare con OCTAVE le seguenti espressioni:

a)xy3

x − y= −4.8;

b) 2x ln (|y|+ 1) − y ln (x + 2) = 9.8105;

c)

arctan(y

x

)

− sin2 (x√

|y|) = −1.3831;

d) cos (x + y) + exy = 0.5428.

Vari comandi possono poi essere utili nel corso di una sessione di lavoro.I principali sono riportati nella tabella 1.3.

1.2 Vettori e operazioni sui vettori

Sebbene finora si siano considerate solo variabili scalari, OCTAVE in realtapuo naturalmente operare con tabelle di numeri (matrici) formate da un certonumero di righe e colonne. In queste esercitazioni ci si limitera a introdurree utilizzare vettori, ovvero tabelle di numeri costituite da una sola riga ocolonna, e denominate corrispondentemente vettori riga e vettori colonna.Un vettore riga si definisce con il comando

12 CAPITOLO 1. IL SOFTWARE OCTAVE

>> x=[1 2 3]

x=

1 2 3

mentre un vettore colonna si definisce con il comando>> y=[3 ; 2 ; 1]

y=

3

2

1

L’operazione di trasposizione, denotata da un apice apposto dopo la va-riabile vettoriale, trasforma un vettore riga in un vettore colonna e viceversa>> z=y’

z=

3 2 1

Esercizio

Definire in OCTAVE i seguenti vettori

a) y=[2 7 12]

b) y=

-1

-2

3

Con il comando [n:p:m] si genera un vettore riga avente come primoelemento n e come elementi successivi i numeri n + p, n + 2p, . . . , fino adarrivare al massimo valore ≤ m se p > 0 o al minimo valore ≥ m se p < 0.Ad esempio:

>> x=[1:3:8]

genera il vettore x=[1 4 7], mentre>> y=[10:-3:3]

genera il vettore y=[10 7 4]. Se il passo p viene omesso, il programmaassume per default che sia uguale a 1; ad esempio, il comando

1.2. VETTORI E OPERAZIONI SUI VETTORI 13

Operazione Operandi Sintassi Descrizione

Prodotto con scalare k scalare, x vettore k*x Moltiplica elementi di x per k

Somma di vettori x, y vettori x+y Somma elementi di uguale indice.Differenza di vettori x, y vettori x-y Sottrae elementi di uguale indice.Prodotto di vettori x, y vettori x.*y Moltiplica elementi di uguale indice.Potenza di vettori x vettore, k scalare x.^k Eleva elementi di x a potenza k.

Tabella 1.4: Principali operazioni vettoriali in OCTAVE.

Sintassi Descrizione

zeros(1,n) Definisce vettore riga con n elementi 0ones(1,n) Definisce vettore riga con n elementi 1size(x) Calcola n. di righe e colonne di xsum(x) Calcola la somma degli elementi di xnorm(x) Calcola la norma euclidea di x

Tabella 1.5: Principali funzioni vettoriali in OCTAVE.

>> [2:5]

genera il vettore >> [2 3 4 5].

Esercizio

a) Generare il vettore riga dei numeri pari compresi tra 0 e 21.

b) Creare un vettore con gli stessi elementi del precedente in ordine inverso(dall’ultimo al primo).

Le variabili vettoriali possono essere utilizzate in calcoli in cui intervenga-no tutte le operazioni aritmetiche, che vengono effettuate su tutti gli elementidei vettori considerati. Se si eseguono operazioni su vettori, questi devonoessere tutti della stessa lunghezza e dello stesso tipo (riga o colonna). Unsommario della sintassi delle principali operazioni aritmetiche su vettori inOCTAVE e riportato nella tavola 1.4. Si noti che alcune operazioni sonoindicate dallo stesso operatore usato per le operazioni tra scalari, mentre peraltre e necessario far precedere l’operatore da un punto (operazioni puntate).Vi sono inoltre una serie di utili comandi con cui e possibile generare par-

ticolari vettori o calcolare grandezze associate al vettore dato, elencati nellatabella 1.5.

14 CAPITOLO 1. IL SOFTWARE OCTAVE

Comando Azione

grid on Visualizza una griglia di riferimento sul graficogrid off Cancella la griglia di riferimento

title(’stringa’) Visualizza il titolo del graficoxlabel(’stringa’) Visualizza una scritta sull’asse orizzontaleylabel(’stringa’) Visualizza una scritta sull’asse verticale

axis([xmin,xmax,ymin,ymax]) Imposta intervalli delle ascisse e delle ordinatehold on Mantiene i grafici della finestra grafica attivahold off Disattiva la modalita hold on

clf Cancella il contenuto della finestra grafica attivafigure Apre una nuova finestra grafica

figure(n) Rende attiva la finestra grafica di numero progressivo nprint Salva il contenuto della finestra grafica attiva in un file

Tabella 1.6: Principali comandi grafici.

1.3 Grafici di funzioni

Dati due vettori riga x = [x1, ..., xn] e y = [y1, ...yn] della stessa dimensione,il comando >> plot(x,y) apre una finestra nella quale i punti del pianocartesiano di coordinate (xi, yi) con i = 1, 2, . . . , n vengono raccordati consegmenti di retta.

Esempio

Disegnare la spezzata poligonale che congiunge i 4 punti A = (0, 1) , B =(1, 0), C = (2, 1), D = (3,−2) :>> x=[0 1 2 3];

>> y=[1 0 1 -2];

>> plot(x,y)

Il comando plot supporta vari argomenti opzionali con i quali si posso-no variare alcune caratteristiche del grafico risultante; si utilizzi il comandohelp plot per visualizzare le opzioni consentite. Sono inoltre disponibili inumerosi comandi per modificare l’aspetto del grafico, riassunti nella tabella1.6.

Esempio

Disegnare il grafico della funzione y = x3 − 3x2 +2x− 1 nel’intervallo [−3, 3]campionando la x con passo h = 0.1 e facendo comparire il titolo Grafico di

1.4. SCRIPTS DI OCTAVE 15

xˆ3-3*xˆ2+2*x-1 e la legenda della curva y=xˆ3-3*xˆ2+2*x-1 :>> x=[-3:.1:3];

>> y=x.^3-3*x.^2+2*x-1;

>> plot(x,y)

>> title(’Grafico di x^3-3*x^2+2*x-1’)

>> legend(’y=x^3-3*x^2+2*x-1’)

Si osservi che la moltiplicazione va sempre indicata e che deve essere usatala sintassi vettoriale delle operazioni puntate. Il risultato di questa sequenzadi comandi e visibile nella figura 1.1.

Esercizio

Tracciare con OCTAVE i grafici delle seguenti funzioni negli intervalli indi-cati:

a) y =√

x2 + 1, x ∈ [−10, 10]

b) y = xex, x ∈ [−3, 4]

c) y = sin(x) x ∈ [−2π, 2π]

d) y = sin(2x + π/3) x ∈ [−2π, 2π]

e) y = sin2(x) x ∈ [−2π, 2π]

f) y = x2 sin(x) x ∈ [−2π, 2π]

g) y = sin(x)/x x ∈ [−2π, 2π].

1.4 Scripts di OCTAVE

OCTAVE puo essere utilizzato, come si e visto, in modalita interattiva, maquesto puo risultare poco conveniente qualora sia necessario impartire lunghesequenze di comandi per ottenere un certo risultato. Per ovviare a questoproblema, e possibile far eseguire a OCTAVE liste di comandi precedente-mente preparate in un opportuno file. Un file di questo tipo e denominatom-file e consiste di un file di testo il cui nome abbia l’estensione .m e chesia salvato nella stessa directory in cui ci si colloca per eseguirlo, o in unadirectory il cui path sia presente nella lista di indirizzi a cui OCTAVE accede

16 CAPITOLO 1. IL SOFTWARE OCTAVE

-60

-50

-40

-30

-20

-10

0

-3 -2 -1 0 1 2 3

Grafico di x3-3*x2+2*x-1

y=x3-3*x2+2*x-1

Figura 1.1: Grafico della funzione y = x3 − 3x2 + 2x − 1 ottenuto con leistruzioni OCTAVE di questa sezione

automaticamente. Tale tipo di file puo essere creato con un qualsiasi editor

di testi. Se il programma e stato configurato opportunamente, digitando ilcomando edit viene richiamato da OCTAVE un editor di testo.

Un esempio di contenuto di un file vectors.m che assegna un valore adei vettori ed effettua su di essi delle operazioni e il seguente:% Header di commento sul file vectors.m

% Creato il xx.yy.zz da AA.BB

% Calcola la somma di due vettori

x=[2 3 4];

y=[4 3 2];

z= ones(1,3)+x+y

Esercizio

Creare uno script che calcoli la lunghezza di una circonferenza di raggio R el’area del cerchio inscritto.

Un altro esempio di e quello di un file graph.m che permette di trac-ciare il grafico di una funzione con alcune modifiche alla modalita grafica didefault:

1.4. SCRIPTS DI OCTAVE 17

% Header di commento sul file graph.m

% Creato il xx.yy.zz da AA.BB

% Traccia il grafico di x^3-3*x^2+2*x+1

x=[-3.:0.1:3.];

y=x.^3-3*x.^2+2*x+1;

plot(x,y,’r’)

grid on

title(’Grafico di x^3-3x^2+2x+1’)

xlabel(’x’)

ylabel(’y’)

Un esempio piu elaborato e quello di un file potenzepari.m che permet-te di tracciare il grafico di alcune potenze pari di x:% Header di commento sul file potenzepari.m

% Creato il xx.yy.zz da AA.BB

% Traccia il grafico delle potenze pari con esponente da 2 a 10

figure(1)

clf

hold on

x=[-4.:0.1:4.];

for k=2:2:10

y=x.^k;

plot(x,y)

end

grid on

axis([-4 4 0 10])

title(’Potenze pari di x’)

Esercizio

Creare uno script che tracci su di un’unica finestra grafica il grafico di

cos (3x), sin (4x), 2 cos (3x) − 3 sin (4x)

rispettivamente in rosso, verde e nero, con il titolo Polinomi trigonometrici.Ripetere l’esercizio con i grafici tutti dello stesso colore e in un’ unica finestra.

18 CAPITOLO 1. IL SOFTWARE OCTAVE

Esercizio

Creare uno script che tracci su di un’unica finestra grafica il grafico di

sin(10x) e−x2

x

calcolata:a) nei punti xi = i0.1, i = 0, . . . , 10 rappresentando i valori della funzionecon cerchietti rossib) nei punti xi = i0.01, i = 0, . . . , 100 rappresentando i valori della funzionecon una linea continua blu.

1.5 Definizione di funzioni in OCTAVE

A differenza degli script, che sono successioni di comandi che OCTAVE esegue(se sono sintatticamente corretti) come se fossero composti sulla linea dicomando l’uno dopo l’altro, le funzioni necessitano una serie di argomentiche devono essere esplicitamente assegnati al momento in cui la funzionestessa viene richiamata.

Anche le funzioni devono essere definite in appositi files con estensione .mche devono trovarsi nella stessa directory da cui vengono richiamate, in unadirectory il cui nome completo sia stato inserito nel search path di OCTAVE.Tale file deve contenere il testo della funzione stessa, che deve avere lo stessonome del file. Ad esempio, il file fun.m con il seguente contenuto:function y=fun(x)

y=x^2;

end

definisce una implementazione della funzione reale di variabile reale y = x2.La funzione fun puo essere richiamata da OCTAVE nel modo seguente:c=fun(3)

c=

9

Analogamente possono essere definite funzioni a valori vettoriali e ad argo-menti vettoriali. Ad esempio,la funzione vfun definita da:function y=vfun(x)

y(1)=x(1)+x(2)^2-x(3);

y(2)=x(2)+sin(x(3));

1.6. ISTRUZIONI DI PROGRAMMAZIONE IN OCTAVE 19

y(3)=-exp(x(1))+2*x(2)-x(3)^4;

end

costituisce una implementazione OCTAVE della funzione vettoriale y = f(x)dove y,x ∈ R3 e

y1 = f1(x1, x2, x3) = x1 + x22 − x3

y2 = f2(x1, x2, x3) = x2 + sin (x3)

y2 = f3(x1, x2, x3) = −ex1 + 2x2 − x43.

Si tenga presente che il risultato della funzione vfun definisce un vettore riga.Infatti, ad esempio, sia che si sia definito x=[0 1 2] o x=[0; 1; 2], si ha>> vfun(x)

ans =

-1.0000 1.9093 -15.0000

Se fosse necessario ottenere come risultato un vettore colonna, la funzionepuo essere modificata nel modo seguente:function y=vfun(x)

y(1)=x(1)+x(2)^2-x(3);

y(2)=x(2)+sin(x(3));

y(3)=-exp(x(1))+2*x(2)-x(3)^4;

y=y’;

end

1.6 Istruzioni di programmazione in OCTA-

VE

Nell’ambito degli scripts e delle funzioni di OCTAVE possono essere usateuna serie di istruzioni tipiche dei principali linguaggi di programmazione. Sirichiama qui solo brevemente la sintassi degli operatori di confronto e deicomandi disp, for, if, break e continue.

Gli operatori di confronto presenti in OCTAVE sono riassunti nella tabella1.7.

Le espressioni in cui sono presenti operatori di confronto vengono usual-mente racchiuse da parentesi per evidenziare il fatto che l’intera espressionerestituisce un unico valore. Ad esempio ha senso digitare il comando>> (3>2)+(pi<e)

20 CAPITOLO 1. IL SOFTWARE OCTAVE

Sintassi Valore restuito

x==y Vero (1) se x = y, falso (0) altrimentix!=y Vero (1) se x 6= y, falso (0) altrimentix =y Vero (1) se x 6= y, falso (0) altrimentix>y Vero (1) se x > y, falso (0) altrimenti

x>= y Vero (1) se x ≥ y, falso (0) altrimentix<y Vero (1) se x < y, falso (0) altrimentix<=y Vero (1) se x ≤ y, falso (0) altrimenti

Tabella 1.7: Operatori di confronto in OCTAVE.

ans = 1

Il comando disp permette di far visualizzare una stringa di caratteri, comenell’esempio seguente>> disp(’Hello World’)

Hello World

Il comando for permette di eseguire dei cicli di operazioni ripetute, che pos-sono essere funzioni di un indice discreto. Un esempio e il seguentea=pi;

for i = 1:10

b= a*i+e

end

I valori dell’indice possono essere considerati anche in ordine decrescentea=pi;

for i = 10:-1:1

b= a*i+e

end

o possono assumere valori non consecutivia=10;

for i = 1:3:20

b= i+a

end

Il comando if permette di eseguire comandi condizionatamente alla veritadi una espressione. Ad esempio, eseguendo il seguente blocco if

x = 1;

if (x == 1)

disp (’one’);

elseif (x == 2)

disp (’two’);

else

1.6. ISTRUZIONI DI PROGRAMMAZIONE IN OCTAVE 21

disp (’not one or two’);

endif

verra visualizzata la scritta one. Il comando break permette di uscire daun ciclo o da un blocco if, facendo continuare l’esecuzione dello script dallaprima linea di comandi successiva all’end o endif. Nel caso di un ciclo,questo implica che dopo l’esecuzione di break il ciclo viene definitivamenteinterrotto. Il comando continue invece permette di saltare tutte le istruzionisuccessive fino alla fine del ciclo o del blocco if in cui si trova. Nel caso di unciclo, questo implica che dopo l’esecuzione di continue il ciclo viene ripresoper il valore successivo dell’indice.

Esercizio

Implementare lo script

for i=1:10

i

if (i<=5)

disp(’primi 5’)

continue

elseif(i>6) break

endif

disp(’finito’)

end

e verificare l’effetto dei comandi break e continue.

Esercizio

Modificare lo script inserendo alternativamente i comandi a) break b) continuedopo il comando endif. Interpretare i risultati.

Esercizio

Utilizzando la funzione mod, predisporre uno script che consenta di determi-nare tutti i numeri interi minori di 12345 che sono multipli di 17.

22 CAPITOLO 1. IL SOFTWARE OCTAVE

Esercizio

Implementare in OCTAVE la sommatoria dei quadrati dei primi n numeriinteri

Sn =

n∑

i=1

i2.

Effettuare il calcolo per n = 10k, k = 1, . . . , 6 sommando gli addendi in ordinea) crescente e b) decrescente. Confrontare in entrambi casi il risultato con laformula

Sn =n(n + 1)(2n + 1)

6.

Capitolo 2

Rappresentazione dei numerireali e calcolo approssimato dicostanti e funzioni fondamentali

In questa sezione si richiamano il concetto di errore assoluto e relativo ele principali problematiche relative alla rappresentazione in OCTAVE (e inqualsiasi altro ambiente di lavoro utilizzato nel calcolo scientifico) dei numeriinteri e reali. Si introducono inoltre esempi di semplici algoritmi iterativiche implementano metodi di approssimazione per operazioni aritmetiche, co-stanti fondamentali dell’Analisi Matematica e funzioni di variabile reale. Loscopo e quello di

• evidenziare gli aspetti che piu caratterizzano l’aritmetica dei numerireali di precisione finita implementata nei calcolatori (e utilizzata an-che nel calcolo manuale non simbolico) rispetto a quella di precisione

infinita, che si utilizza nell’algebra e nell’analisi quando si effettuanooperazioni con simboli che rappresentano numeri reali

• introdurre il concetto di approssimazione mediante un algoritmo itera-tivo.

2.1 Concetti di errore assoluto e relativo

Si supponga di considerare un numero reale α, che rappresenti il valore esatto

di una quantita di interesse (ad esempio una costante numerica o il valore

23

24 CAPITOLO 2. NUMERI REALI E CALCOLO APPROSSIMATO

assunto da una funzione in corrispondenza di un valore assegnato della va-riabile indipendente). In pratica, tale quantita non potra quasi mai esserecalcolata esattamente, ma solo con procedure approssimate. Inoltre, i cal-coli numerici effettuati con un numero finito di cifre decimali introdurrannoulteriori errori. Indicata quindi con e αapprox la concreta approssimazione nu-merica della quantita di interesse, si possono introdurre due definizioni chepermettono di precisare il concetto di errore commesso nell’approssimazione:

Definizione

Si definisce errore assoluto commesso nella approssimazione di α con il valoreαapprox la quantita

Eabs = |α − αapprox|.

Definizione

Si definisce errore relativo commeso nella approssimazione di α con il valoreαapprox la quantita

Erel =|α − αapprox|

|α| .

Sono immediate le seguenti considerazioni:

• l’errore relativo e definibile solo per α 6= 0;

• a parita di errore relativo, si puo commettere un errore assoluto piu omeno grande a seconda del valore di α;

• nel caso che α sia una grandezza fisica, l’errore relativo e un numeroadimensionale, indipendente dalle unita di misura utilizzate;

• tali quantita possono solo essere stimate, poiche la conoscenza del lorovalore esatto equivale alla conoscenza dell’esatto valore di α, che ingenerale e ignoto.

Nella maggior parte delle applicazioni, l’errore relativo e l’unica misura del-la bonta dell’approssimazione che abbia senso cercare di minimizzare o dimantenere al di sotto di una tolleranza d’errore fissata. Tentare infatti di

2.2. NUMERI INTERI E REALI 25

rispettare una tolleranza d’errore indipendentemente dall’ordine di grandez-za della quantita da approssimare puo avere come conseguenza l’esecuzio-ne di una gran mole di calcoli che non migliorano l’effettiva accuratezzadell’approssimazione.

2.2 Rappresentazione dei numeri interi e rea-

li: precisione macchina

Le operazioni aritmetiche implementate in qualsiasi calcolatore utilizzanodelle particolari rappresentazioni degli insiemi numerici che hanno rilevantiimplicazioni per il calcolo scientifico. L’insieme dei numeri interi e rappre-sentato esattamente, fino ad un massimo numero intero che puo esserevisualizzato con il comando intmax. Tale numero varia a seconda del nu-mero di bit utilizzati per la rappresentazione degli interi. Il piu grande deivalori di intmax si ottiene nel caso di interi a 64 bit senza segno e puo esserevisualizzato digitando>> intmax(’uint64’)

ans = 18446744073709551615

Analogamente, le operazioni di addizione, sottrazione e moltiplicazione ef-fettuate con numeri interi sono esatte, nell’ambito dei numeri interi cheOCTAVE riesce a rappresentare.

I numeri reali, che per l’assioma di completezza sono interpretabili comecompletamento dell’insieme dei numeri razionali (si veda ad esempio [5] oqualsiasi testo di analisi matematica di buon livello), non possono essere rap-presentati in modo esatto, in quanto definiti in generale da una operazionedi limite. Di fatto,i numeri reali irrazionali e ancora di piu quelli trascenden-ti (ovvero tali che non siano soluzioni di equazioni algebriche a coefficientirazionali) sono simboli che rappresentano una quantita di informazione in-finita. E pertanto abbastanza ovvio che solo un opportuno sottoinsieme dinumeri razionali puo essere rappresentato in un calcolatore. Il sottoinsiemegeneralmente utilizzato e costituito da quelli che possono essere descritti nel-la cosidetta rappresentazione a virgola mobile, noti anche con la definizioneanglosassone di numeri reali floating point. Una descrizione completa dellastruttura di tali numeri puo essere trovata nei testi [2], [6], qui ci si limiteraa riassumere alcune particolari caratteristiche di rappresentazione:

• i numeri reali rappresentati sono tutti piu piccoli in valore assolu-

26 CAPITOLO 2. NUMERI REALI E CALCOLO APPROSSIMATO

to di un valore massimo, che puo essere visualizzato con il comandorealmax: su macchine con architettura a 64 bit tale valore e pari a1.79769313486232 ∗ 10308.

• lo zero non appartiene a tale insieme e tutti i numeri reali rappresentatisono piu grandi in valore assoluto di un valore minimo, che puo esserevisualizzato con il comando realmin: su macchine con architettura a64 bit tale valore e pari a 2.22507385850720 ∗ 10−308;

• i numeri rappresentati non sono uniformemente distribuiti sull’inter-vallo compreso tra -realmax e realmax, ma sono molto piu densi inprossimita dello zero (che pure, come si e detto, non appartiene a taleinsieme) e progressivamente sempre piu radi mentre ci si avvicina arealmax.

Come si vede, tale rappresentazione, che di fatto e per vari motivi la piuefficace considerando i vincoli imposti dall’architettura dei calcolatori, co-stringe a considerare per il calcolo un insieme numerico con caratteristicheapparentemente assai diverse da quelle che si associano usualmente ai numerireali. Dal punto di vista pratico, la principale conseguenza dell’uso di questoinsieme numerico consiste nel fatto che tutte le operazioni con i numeri realifloating point, e la divisione tra interi (che fornisce un risultato reale) sonoapprossimate ed affette dal cosidetto errore di arrotondamento (round off

error) dell’ordine di 10−16. La misura esatta di questo tipo di errore e forni-ta dal cosidetto epsilon macchina o zero macchina, una costante dipendentedall’hardware e il cui valore puo essere visualizzato utilizzando il comandoOCTAVE eps come nell’esempio seguente>>eps

ans=2.22044604925031e-16

Si puo dimostrare che l’errore relativo nella rappresentazione floating

point di qualsiasi numero reale e dell’ordine di grandezza dello zero mac-china. Questo garantisce che, in proporzione al valore assoluto del numeroconsiderato, l’errore commesso e uniformemente limitato. Questa approssi-mazione non causa errori significativi nella maggior parte dei calcoli, ma vacomunque tenuto presente che i risultati ottenuti sono corretti solo a meno diun errore di grandezza eps. In particolare, se si combinano quantita diversedi molti ordini di grandezza si possono avere dei problemi. Ad esempio,sebbene la costante eps non sia zero, si ha >> 1+eps

2.2. NUMERI INTERI E REALI 27

ans=

1.000000000000000

L’errore dipende anche dall’ordine con cui vengono eseguite le operazioni.Ad esempio sia

>> a=10-15;

allora>> (10+a-10)/a

ans = 1.7764

che e sbagliato, mentre>> (10-10+a)/a

ans = 1

e corretto.

Esercizio

Ripetere le operazioni degli esempi precedenti ponendo a=eps.

Una delle operazioni che possono creare piu problemi quando si operacon numeri reali floating point e la sottrazione di due numeri la cui dif-ferenza e molto piccola (ovvero, di un ordine di grandezza vicino a quel-lo dello zero macchina). Ad esempio se si calcola 1.1122334455667878 −1.1122334455667788, il cui valore esatto e 9 ∗ 10−15, si ottiene il risultato>>a=1.1122334455667878-1.1122334455667788

a = 8.88178419700125e-15

Tale risultato non e di per se drammaticamente sbagliato (l’errore, come sipuo vedere, e sulla sedicesima cifra decimale, il che e coerente con il valoredello zero macchina). Ma se tale risultato viene utilizzato in ulteriori calco-li, si puo ottenere una amplificazione significativa dell’errore iniziale. Se adesempio si calcola semplicemente>>b=1.1122334455667788+a

b=1.11223344556679

si vede che si ha ora un errore sulla quattordicesima cifra decimale, ovverodue ordini di grandezza piu grande dell’errore iniziale. Questa amplificazionee il risultato della cosidetta cancellazione di cifre significative: nell’operazio-ne eseguita nell’esempio, tutte le cifre decimali meno affette dall’errore ditroncamento di fatto scompaiono, e il risultato consiste solo di cifre decimalisu cui l’errore di troncamento ha un effetto significativo.

Un caso di notissima formula algebrica che puo portare a cancellazione

28 CAPITOLO 2. NUMERI REALI E CALCOLO APPROSSIMATO

di cifre significative se utilizzata in aritmetica di precisione finita e la for-mula risolutiva per la soluzione di una equazione algebrica di secondo grado.Scrivendo tale equazione come ax2 + bx + c = 0, la formula si scrive come enoto

x+ =−b +

√b2 − 4ac

2ax− =

−b −√

b2 − 4ac

2a(2.1)

Qualora si abbia a che fare con valori di a, c per cui sia 4ac ≈ 0 e sia b > 0,se la prima radice viene calcolata dalla formula 2.1 si calcola di fatto ladifferenza di due numeri molto vicini in valore assoluto. Nel caso che siab < 0, lo stesso si verifica per la seconda radice. Per evitare la cancellazione,si puo utilizzare la formula algebricamente equivalente

q = −b + sign(b)√

b2 − 4ac

2x+ =

q

ax− =

c

q(2.2)

in cui pero non si calcolano differenze tra numeri vicini in valore assoluto.sign indica qui la funzione segno, che assume valore 1 per valori positividell’argomento e -1 per valori negativi.

Esercizio

Risolvere l’equazione 10lx2 − (1 + 10l+m)x + 10m = 0 per differenti valoriinteri di l, m implementando in OCTAVE le formule 2.1,2.2. Confrontare irisultati con le soluzioni esatte x± = 10m, 10−l. (Suggerimento: si utilizzinovalori negativi di l, m.)

Un altro caso un cui l’approssimazione dei reali con numeri reali floa-

ting point puo portare ad una amplificazione dell’errore di arrotondamentoe quello in cui si eseguano un numero molto elevato di operazioni, come nelcaso dei metodi numerici per l’approssimazione degli integrali definiti e dellesoluzioni di equazioni differenziali ordinarie. Esempi di queste problematichesaranno illustrati nei capitoli dedicati a tali argomenti.

Si puo concludere questa sezione con la considerazione che in generale, intutti calcoli eseguiti con aritmetica floating point, non e pensabile raggiun-gere una precisione maggiore dello zero macchina. Poiche almeno una lievepropagazione dell’errore di arrotondamento alle ultime cifre decimali deveessere prevista anche nei calcoli piu semplici, nelle approssimazioni fatte al

2.3. DIVISIONE E RADICE QUADRATA 29

calcolatore non ha senso imporre una tolleranza d’errore minore o uguale al-lo zero macchina. Come puo essere verificato empiricamente sugli algoritmipresentati nelle prossime sezioni, le tolleranze d’errore che possono essere rea-listicamente imposte per ottenere risultati in pratica devono essere almenoun ordine di grandezza maggiori dello zero macchina. Come regola empiri-ca, si puo assumere quella di considerare come minima tolleranza d’errorepraticamente utilizzabile un numero dell’ordine di grandezza di 100*eps.

2.3 Algoritmi iterativi per la divisione e la

estrazione di radice quadrata

Mentre le operazioni di somma algebrica e moltiplicazione tra numeri realisono usualmente implementate in appositi circuiti hardware, la divisione deveessere in generale effettuata riconducendosi a somme e moltiplicazioni. Perquesto motivo, tale operazione e in generale di esecuzione piu lenta dellasomma e della moltiplicazione (in alcune implementazioni, la differenza divelocita di esecuzione arrivava in passato fino a 20 volte). Per questo motivo,se si devono effettuare dei calcoli in cui si ripete piu volte la divisione per unnumero fissato, e opportuno precalcolare l’inverso di tale numero e sostituirela divisione con la moltiplicazione per tale inverso.

In molti calcolatori, la divisione viene implementata mediante un algorit-mo iterativo, che calcola il valore dell’inverso di un numero reale median-te approssimazioni successive. Tale algoritmo puo essere definito nel modoseguente. Si sceglie un valore iniziale z0 e si definisce una successione zi

iterativamente come

zi+1 = zi(2 − xzi) i = 0, . . . , n (2.3)

La convergenza di tale algoritmo verra studiata teoricamente nel capitolodedicato alla soluzione numerica di equazioni nonlineari. In generale, si puodimostrare che, per scelte opportune del valore iniziale z0 che dipendono dax, si ha limi→∞ zi = 1/x, per cui una buona approssimazione di 1/x si ottieneconsiderando zn con n sufficientemente alto.

30 CAPITOLO 2. NUMERI REALI E CALCOLO APPROSSIMATO

Esercizio

Implementare l’algoritmo 2.3 in OCTAVE e calcolare i reciproci di a) 2, b)√2, c) π, d) e utilizzando come valore iniziale z0 = 0.1.

Esercizio

Verificare empiricamente se vi e convergenza di tale algoritmo ai reciprocidei valori sopra assegnati nel caso di diversi valori di z0.

Esercizio

Verificare empiricamente che si ha sempre convergenza per x ∈ (0.1, 1) se siprende z0 = 1.5.

Esercizio

Utilizzando i comandi OCTAVE tic e toc, predisporre uno script che con-senta di confrontare il costo computazionale della divisione per un numeroreale con quello della moltiplicazione per il suo inverso.

Algoritmi analoghi possono essere utilizzati per approssimare la radicequadrata di un numero reale positivo. Un algoritmo piuttosto noto e ilseguente: si sceglie un valore iniziale z0 e si definisce una successione zi

iterativamente come

zi+1 =1

2

(

zi +x

zi

)

. (2.4)

La convergenza di tale algoritmo verra studiata teoricamente nel capitolodedicato alla soluzione numerica di equazioni nonlineari. In generale, si puodimostrare che, per scelte opportune del valore iniziale z0 che dipendono dax, si ha limi→∞ zi =

√x, per cui una buona approssimazione di

√x si ottiene

considerando zn con n sufficientemente alto.

Esercizio

Implementare l’algoritmo 2.4 in OCTAVE e calcolare le radici quadrate di a)2, b) π, c) e utilizzando come valore iniziale z0 = 0.1.

2.3. DIVISIONE E RADICE QUADRATA 31

Esercizio

Verificare empiricamente se vi e convergenza di tale algoritmo alle radiciquadrate dei valori sopra assegnati nel caso di diversi valori di z0.

Esercizio

Verificare empiricamente che si ha sempre convergenza per x ∈ (0.1, 1) se siprende z0 = 0.1.

Come si puo verificare empiricamente, tale algoritmo ha buone proprietadi convergenza. Esso implica pero la necessita di effettuare una divisionead ogni passo iterativo, il che, come si e discusso in precedenza, richiede inrealta l’utilizzo di una ulteriore procedura iterativa che puo essere piu lentadella moltiplicazione. Esistono pertanto algoritmi iterativi piu efficienti cheapprossimano la radice quadrata utilizzando solo somme e moltiplicazioni.Un esempio e il seguente

zi+1 =zi

2(3 − xz2

i ). (2.5)

La convergenza di tale algoritmo verra studiata teoricamente nel capitolodedicato alla soluzione numerica di equazioni nonlineari. In generale, si puodimostrare che, per scelte opportune del valore iniziale z0 che dipendono dax, si ha limi→∞ zi = 1/

√x, per cui una buona approssimazione di

√x si

ottiene considerando xzn con n sufficientemente alto.

Esercizio

Implementare l’algoritmo 2.5 in OCTAVE e ripetere gli esercizi precedenti.

Esercizio

Confrontare la velocita di convergenza degli algoritmi 2.4 e 2.5.

Esercizio

Utilizzando i comandi OCTAVE tic e toc, predisporre uno script che con-senta di confrontare il costo computazionale degli algoritmi 2.4 e 2.5 perottenere delle soluzioni di pari accuratezza.

32 CAPITOLO 2. NUMERI REALI E CALCOLO APPROSSIMATO

Esercizio

Implementare gli algoritmi sopra introdotti in modo da terminare le iterazioniuna volta raggiunta una tolleranza d’errore fissata. Utilizzare valori dellatolleranza pari a ǫ = 10−6, 10−10, 10−14, 10−18.

2.4 Calcolo di costanti fondamentali

Alcune costanti fondamentali dell’analisi matematica, come e e π, sono inrealta numeri trascendenti, ovvero tali da non essere gli zeri di nessun poli-nomio a coefficienti razionali. La determinazione di tali costanti puo essereottenuta solo mediante procedure approssimate. Esse si basano su limitinotevoli studiati in Analisi Matematica o su espansioni in serie di opportu-ne funzioni. Ad esempio, per il calcolo rispettivamente di e e π si possonoutilizzare le successioni

zi =(

1 +1

i

)i

i = 1, . . . , n (2.6)

zi = 4

i∑

k=1

(−1)k+1

2k − 1i = 1, . . . , n (2.7)

La prima e derivata da un limite notevole, mentre la seconda e ottenutadalla relazione arctan(1) = π/4 e dalla espansione in serie dell’arcotangente(si vedano ad esempio [1],[3],[5]).

Esercizio

Implementare gli algoritmi 2.6, 2.7 in OCTAVE e verificarne la convergenzautilizzando come riferimento i valori predefiniti di e, π.

Questi algoritmi non sono pero particolarmente efficienti. Sebbene que-sto aspetto non sia di grande rilevanza pratica per il calcolo di costanti chepossono essere precalcolate una volta sola alla precisione richiesta, essi nonsono i piu indicati se si volesse ad esempio, utilizzando una rappresentazio-ne piu accurata dei numeri reali, effettuare il calcolo di tale costanti con unnumero molto elevato di cifre decimali. Per il calcolo di e puo essere ad esem-pio utilizzata la espressione in serie di potenze della funzione esponenziale,ottenendo la successione

2.5. CALCOLO DI FUNZIONI FONDAMENTALI 33

zi =

i∑

k=0

1

k!i = 1, . . . , n. (2.8)

Per il calcolo π puo essere invece utilizzato l’algoritmo definito in modoseguente. Si pone x0 =

√2, z0 = 2 +

√2, y0 =

√x0 e per i > 0 si definiscano

le successioni

xi+1 =1

2

(√xi +

1√xi

)

zi+1 = zi

xi+1 + 1

yi + 1

yi+1 =yi

√xi+1 + 1√

xi+1

yi + 1i = 1, . . . , n

Si puo dimostrare che limi→∞ zi = π. Tale algoritmo e un esempio di quelliche vengono utilizzati per calcolare la costante π con una precisione moltoelevata (milioni di cifre decimali esatte!). Una discussione degli algoritminecessari a tale scopo e delle modalita di implementazione di una aritmeticaa precisione arbitraria puo essere trovata in [4].

Esercizio

Implementare gli algoritmi 2.8, 2.9 in OCTAVE e verificarne la migliore con-vergenza rispetto agli algoritmi 2.6, 2.7 utilizzando come riferimento i valoripredefiniti di e, π. Utilizzare la funzione OCTAVE factorial per calcolarei!.

Esercizio

Implementare gli algoritmi sopra introdotti in modo da terminare le iterazioniuna volta raggiunta una tolleranza d’errore fissata. Utilizzare valori dellatolleranza pari a ǫ = 10−6, 10−10, 10−14, 10−18.

2.5 Calcolo di funzioni fondamentali

Molte delle principali funzioni dell’Analisi Matematica sono funzioni ana-litiche che possono essere approssimate, in linea di principio in modo infi-nitamente preciso, mediante sviluppi in serie di Taylor su intervalli piu o

34 CAPITOLO 2. NUMERI REALI E CALCOLO APPROSSIMATO

meno ampi della retta reale (si veda ad esempio [1],[3]). Anche qualora laserie di Taylor non sia convergente, se la funzione e sufficientemente regolareuna approssimazione la formula di Taylor permette di approssimarla almenolocalmente mediante polinomi, che possono essere calcolati utilizzando solooperazioni implementate nell’ hardware di qualsiasi calcolatore.

exp x = limn→∞

n∑

i=0

xi

i!x ∈ (−∞, +∞) (2.9)

sin x = limn→∞

n∑

i=0

(−1)ix2i+1

(2i + 1)!x ∈ (−∞, +∞) (2.10)

cos x = limn→∞

n∑

i=0

(−1)ix2i

(2i)!x ∈ (−∞, +∞) (2.11)

ln x = limn→∞

−n

i=1

(1 − x)i

i!x ∈ (0, 2) (2.12)

Esercizio

Calcolare l’approssimazione di e2 utilizzando la serie di Taylor 2.9 troncataal a) quinto b) decimo c) ventesimo termine. Calcolare in ogni caso l’errorerelativo commesso.

Esercizio

Calcolare l’approssimazione di sin π/4 utilizzando la serie di Taylor 2.10 tron-cata al a) quinto b) decimo c) ventesimo termine. Calcolare in ogni casol’errore relativo commesso.

Esercizio

Calcolare l’approssimazione di cosπ/4 utilizzando la serie di Taylor 2.11 tron-cata al a) quinto b) decimo c) ventesimo termine. Calcolare in ogni casol’errore relativo commesso.

2.5. CALCOLO DI FUNZIONI FONDAMENTALI 35

Esercizio

Calcolare l’approssimazione di ln 1/e utilizzando la serie di Taylor 2.12 tron-cata al a) quinto b) decimo c) ventesimo termine. Calcolare in ogni casol’errore relativo commesso.

Esercizio

Studiare empiricamente la convergenza dell’approssimazione di ln x per x →2 utilizzando la serie di Taylor 2.12.

Esercizio

Fare il grafico di ciascuna delle approssimazioni sopra introdotte su di unopportuno intervallo e confrontarlo con il grafico della funzione approssimataal variare del numero di termini considerati nella serie.

36 CAPITOLO 2. NUMERI REALI E CALCOLO APPROSSIMATO

Capitolo 3

Statistica descrittiva esimulazione di campioni casuali

In questo capitolo si introducono alcune delle istruzioni OCTAVE che per-mettono di effettuare semplici analisi dei dati, di simulare campioni casualiestratti dalle principali distribuzioni di probabilita e di realizzare esperimentinumerici che illustrino empiricamente il significato concreto della legge deigrandi numeri e del teorema del limite centrale. Non vi e alcuna pretesadi introdurre compiutamente i relativi concetti teorici, per cui si puo farriferimento a vari testi di statistica e probabilita (si veda ad esempio [7]).L’obbiettivo didattico e piuttosto quello di utilizzare lo strumento informa-tico per riprodurre in modo sintetico campioni anche di grandi dimensionia cui applicare i concetti sopra riassunti. Inoltre, l’uso di generatori di nu-meri pseudocasuali permette di presentare il comportamento asintotico dellamedia campionaria nel limite di un grande numero di prove ripetute indi-pendenti come un fatto sperimentale, la cui evidenza si impone al di la digiustificazioni teoriche non accessibili a studenti di scuole superiori.

3.1 Elementi di statistica descrittiva

Un insieme di valori X = {xi, i = 1, . . . , n} viene chiamato campione se siritiene che si tratti di valori assunti da una variabile in occasione di diversirilevamenti. Una delle ipotesi fondamentali per l’applicazione delle usualistime statistiche e che tali rilevamenti si possano considerare indipendenti, eche la variabile di cui si rileva il valore abbia caratteristiche statisticamente

37

38 CAPITOLO 3. STATISTICA E CAMPIONI CASUALI

costanti, ovvero che nel campione siano presenti valori variabili, ma distribuitisecondi una distribuzione di probabilita costante al ripetersi dei rilevamenti.

La media campionaria, o media empirica del campione X si definisce come

X =1

n

n∑

i=1

xi (3.1)

e misura un valore aggregato rappresentativo dell’andamento collettivo deisingoli valori del campione.

La varianza campionaria, o varianza empirica, si definisce come

σ2X =

1

(n − 1)

n∑

i=1

(xi − X )2 (3.2)

Si definisce scarto quadratico medio del campione la quantita σX , ovvero laradice quadrata della varianza del campione. Tali grandezze misurano ladispersione dei valori presenti nel campione attorno al valore medio rappre-sentato da X . La presenza del fattore n − 1, invece di n, a denominatore,si spiega sulla base di considerazioni statistiche sulla mancanza di bias deglistimatori cosıottenuti (si veda ad esempio [7]). Nel limite di un campione digrandi dimensioni possono essere utilizzate anche formule equivalenti in cuiil fattore n− 1 sia sostituito da n, senza rilevanti effetti sul valore calcolato.

In OCTAVE tali stimatori possono essere calcolati mediante le funzionipredefinite mean, var e std. Se ad esempio si definisce un campione medianteil vettore x=[-2 -1 0 1 2], si puo verificare che si ottengono i valori >>media=mean(x)

media=0

>> varianza=var(x)

varianza=2.500

>>sqm=std(x)

sqm=1.5811

Se ad esempio si modifica il campione in x=[-5 -1 0 1 5], si nota che ilvalore della media resta pari a zero, data la distribuzione simmetrica dei datirispetto al valore centrale, ma che sia la varianza che lo scarto quadraticomedio aumentano, dal momento che i valori presenti nel campione che sonopiu lontani dal valore medio sono aumentati in valore assoluto. Considerandoinvece un campione come x=[-5 -1 0 1 7], si nota che il valore della mediacampionaria e ora un numero positivo.

3.1. ELEMENTI DI STATISTICA DESCRITTIVA 39

Esercizio

Calcolare media, varianza e scarto quadratico medio del campionex=[-1.495588 0.028352 1.076889 -2.259395 -0.138782 1.804042 1.838150

-1.626259 0.430469 -1.316373].

Uno strumento molto utile per analizzare graficamente l’andamento diun campione e l’istogramma, ovvero un grafico a barre che mostra la nu-merosita nel campione di alcuni insiemi assegnati e a intersezione nulla divalori possibili della variabile rilevata, che congiuntamente ricoprono tuttol’intervallo dei valori effettivamente presenti nel campione. In OCTAVE epossibile visualizzare istogrammi utilizzando il comando hist. Se si defini-sce ad esempio x= [-2 -2 0 1 1 1 5 6 6 8 8 8 12], il comando hist(x)

visualizza l’istogramma relativo a dieci classi di uguale ampiezza compresetra il valore −2 e il valore 12. Se si volesse visualizzare l’istogramma rela-tivo a m classi di eguale ampiezza che coprano lo stesso intervallo, si do-vrebbe utilizzare il comando hist(x,m), mentre digitando hist(x,m,1) siottiene la visualizzazione delle frequenze relative di ciascuna classe rispettoall’insieme delle classi date, ovvero la numerosita di ciascuna classe vienenormalizzata con la numerosita complessiva del campione. In questo mo-do si ottiene una rappresentazione della cosidetta distribuzione empirica delcampione relativamente alle classi assegnate. Utilizzando il comando con lasintassi [f,c]=hist(x,m,1) si ottengono come risultato, invece del grafico,i valori numerici delle frequenze relative, immagazzinati nel vettore f, e deicentri delle classi utilizzate, immagazzinati nel vettore c. A partire da talivettori, l’istogramma puo essere visualizzato anche utilizzando il comandobar(c,f).

Esercizio

Definito il vettore x=[-pi:0.01:pi], denominare y,z rispettivamente i va-lori assunti dalle funzioni sin x e exp x2 in corrispondenza di tale vettore.Visualizzare l’istogramma non normalizzato di y e z utilizzando a) 10 classidi valori di uguale ampiezza b) 20 classi di valori di uguale ampiezza. Visua-lizzare i relativi istogrammi normalizzati. Stimare la frequenza con cui nelvettore y compaiono valori compresi tra 0.4 e 0.6 e quella con cui nel vettorez compaiono valori compresi tra 0.2 e 0.3.

40 CAPITOLO 3. STATISTICA E CAMPIONI CASUALI

3.2 Generatori di numeri pseudocasuali e di-

stribuzioni di probabilita in OCTAVE

E in generale molto complesso, se non impossibile, dare una definizione pre-cisa di evento casuale. Di fatto, la maggior parte degli esempi canonici dieventi casuali (monete, dadi, estrazioni da urne, ecc.) consiste di fenome-ni perfettamente spiegabili in modo deterministico e che non si distinguonoconcettualmente dagli esempi canonici di determinismo classico: ad esempiola traiettoria di una moneta lanciata per giocare a testa o croce e calcolabilecon grande precisione utilizzando le stesse leggi della dinamica che permet-tono di prevedere il moto dei pianeti o di mettere in orbita satelliti artificiali.La differenza sostanziale e piuttosto nella nostra ignoranza relativa alle con-dizioni iniziali del sistema considerato: mentre la forza applicata per metterein orbita un satellite viene calcolata con precisione in base al peso del vettorespaziale e all’orbita da raggiungere, di solito si tira una moneta senza misu-rarne il peso e applicando una forza che non viene quantificata. Poiche, sianel caso della moneta che nel caso del satellite, vi e una fortissima dipenden-za dell’effettiva posizione ad un istante successivo al lancio dai valori inizialidi posizione, velocita e forze applicate, in assenza di tali informazioni l’esitodel lancio diventa praticamente non prevedibile. L’usuale modello probabili-stico per il lancio di una moneta non e altro che un modello semplificato, incui ci si limita a considerare come eventi d’interesse, invece della traiettoriadella moneta, i soli esito del lancio (testa o croce), per cui si stimano delleprobabilita mediante una statistica sui risultati di esperimenti ripetuti.

La tecnica utilizzata per simulare al calcolatore successioni di numeri ca-suali, o meglio, secondo la dizione piu corretta, di numeri pseudocasuali, sibasa anche essa su un principio simile. Si utilizzano infatti algoritmi per-fettamente deterministici per ottenere una successione di numeri che abbiaopportune proprieta statistiche. La successione numerica ottenuta dipendeunivocamente dal valore iniziale assegnato, quindi, per ottenere successionidiverse e necessario utilizzare valori iniziali differenti. La tecnica piu comu-ne alla base dei generatori di numeri pseudocasuali e quella del generatore

lineare congruente. L’idea di tale algoritmo e quella di produrre una succes-sione di numeri interi partendo da un valore intero iniziale x0 detto seme egenerando i valori successivi calcolando ricorsivamente

xn+1 = pxn + q mod m, (3.3)

3.2. NUMERI PSEUDOCASUALI 41

dove p, q, m sono a loro volta numeri interi. Si ottiene in questo modo unasuccessione di numeri interi compresi tra 0 e m − 1, che per opportune eparticolari scelte di p, q, m porta ad una distribuzione approssimativamenteuniforme dei valori xn, nel senso che su un campione X con n sufficientementegrande la frequenza di ciascun valore tra 0 e m−1 e approssimativamente di1/m. Si deve notare che la qualita di tale approssimazione dipende in modoessenziale dalla scelta dei parametri p, q, m, che deve essere effettuata sullabase di considerazioni piuttosto complesse. In generale, ponendo numeri prividi particolari caratteristiche non si ottengono successioni che siano distribuitein modo quasi uniforme. Si puo dimostrare che le successioni prodotte da talialgoritmi sono in realta periodiche, per cui i valori ottenuti si ripeteranno daun certo punto in poi e non potranno piu essere considerati indipendenti traloro. Per scelte opportune dei parametri p, q, m si ottengono pero dei periodimolto grandi, per cui i campioni di lunghezza inferiore al periodo possonoessere considerati composti di valori statisticamente indipendenti tra di loro.Se i numeri interi ottenuti con questa procedura vengono divisi per m, si ot-tiene una approssimazione della distribuzione uniforme sull’intervallo (0, 1),ovvero i numeri reali cosıottenuti possono essere interpretati come valori scel-ti a caso su questo intervallo. Un esempio di implementazione OCTAVE diun generatore lineare congruente e contenuto nella funzione ran0.m riportatain appendice. Tale funzione puo essere utilizzata come mostrato nel seguentescriptii=21234389;

n=100;

x=zeros(n,1);

for i=1:n

[y,ii]=ran0(ii);

x(i,1)=y;

end

Il valore iniziale, per le caratteristiche dei parametri scelti in ran0, deveessere di almeno 6 cifre. La funzione ran0 restituisce un numero reale y

distribuito in modo approssimativamente uniforme su (0, 1) ed un numerointero ii, che deve essere utilizzato come argomento nella successiva chia-mata della funzione stessa. Per comodita, i numeri pseudocasuali prodottidalla funzione vengono immagazzinati nel vettore x, che puo essere poi ana-lizzato statisticamente, per verificare ad esempio che la media campionaria eapprossimativamente pari a 0.5.

In OCTAVE, un vettore di numeri pseudocasuali distribuiti in modo ap-

42 CAPITOLO 3. STATISTICA E CAMPIONI CASUALI

prossimativamente uniforme su (0, 1) puo essere prodotto anche direttamenteutilizzando il comando rand. Tale comando implementa un generatore similea quello sopra descritto, che viene inizializzato di volta in volta con un va-lore differente del seme, derivato dallo stato dell’orologio interno del sistemaoperativo del calcolatore. Per questo motivo con il comando rand vengo-no prodotti ad ogni chiamata numeri pseudocasuali diversi. Sono inoltrepredefiniti comandi che permettono di produrre sequenze di numeri pseudo-casuali con distribuzione approssimativamente gaussiana standard (randn)ed esponenziale di parametro 1 (rande).

3.3 Simulazione al calcolatore della legge dei

grandi numeri e del teorema del limite

centrale

I due teoremi limite fondamentali del calcolo delle probabilita, ovvero la leggedei grandi numeri ed il teorema del limite centrale, costituiscono la base dellastatistica classica. Questi importanti risultati teorici possono essere enunciatiin modo sufficientemente rigoroso e preciso come segue

Teorema

(Legge dei grandi numeri) Dato un campione X = {xi, i = 1, . . . , n}di valori indipendenti tra loro e con distribuzione comune di media µ, conprobabilita uno si verifica che

limn→0

1

n

n∑

i=1

xi = µ.

Teorema

(Teorema del limite centrale) Dato un campione X = {xi, i = 1, . . . , n}di valori indipendenti tra loro e con distribuzione comune di media µ, si hache

limn→∞

Probabilita(

a <√

nX − µ

σX< b

)

=1√2π

∫ b

a

e−x2

dx. (3.4)

La legge dei grandi numeri esprime il fatto che per un campione di valoriindipendenti di dimensioni sempre maggiori, la media campionaria tende

3.3. TEOREMI ASINTOTICI 43

a convergere ad un valore costante che dipende solo dalla distribuzione, enon dai singoli valori. Una realizzazione approssimata di tale convergenzapuo essere facilmente ottenuta in OCTAVE generando campioni casuali dallastessa distribuzione e mostrando come 1) campioni diversi, ma della stessadimensione su (sufficientemente grande) hanno un valore molto simile dellamedia campionaria 2) al crescere della dimensione del campione, tale valoretende ad un valore teorico.

Il teorema del limite centrale descrive invece in modo approssimato il com-portamento delle fluttuazioni della media campionaria di campioni grandiattorno al valore della media della distribuzione del campione stesso. Come sideduce dalla legge dei grandi numeri, tali fluttuazioni diventano sempre piupiccole all’aumentare delle dimensioni del campione. Come si nota pero dallaformula 3.4, se l’ampiezza di tali fluttuazioni viene riscalata con un fattore diordine di grandezza

√n, dove n e la dimensione del campione, si ottengono

dei valori di ordine di grandezza finito. Piu precisamente, si osserva che l’am-piezza tipica delle fluttuazioni della media campionaria attorno alla mediadella distribuzione e 1/

√n. Il teorema del limite centrale esprime il fatto che

moltiplicando le fluttuazioni per il fattore√

n e dividendo per lo scarto qua-dratico medio si ottiene una variabile che e distribuita approssimativamentecome una normale standard. Questa approssimazione migliora all’aumentaredelle dimensioni del campione, il che permette di poter prevedere l’andamen-to delle fluttuazioni di grandi campioni. Una dimostrazione empirica delcomportamento asintotico predetto dal teorema del limite centrale e otte-nibile eseguendo lo script riportato nella sezione 7.3 dell’appendice, il cuirisultato e visualizzato nella figura 3.1.

44 CAPITOLO 3. STATISTICA E CAMPIONI CASUALI

0

0.05

0.1

0.15

0.2

0.25

0.3

0.35

0.4

-4 -3 -2 -1 0 1 2 3 4

Figura 3.1: Grafico dell’istogramma delle fluttuazioni della mediacampionaria e della distribuzione standard.

Capitolo 4

Soluzione numerica diequazioni nonlineari

Il problema del calcolo approssimato di soluzioni di equazioni nonlineari co-stituisce una delle piu semplici ed al tempo stesso piu tipiche aree di applica-zione dei concetti fondamentali dell’analisi numerica. Una generica equazionein una incognita reale puo essere scritta come

f(x) = 0 (4.1)

per una opportuna funzione f(x), da cui la caratterizzazione di tale classe dimetodi come metodi per il calcolo degli zeri di una funzione. Ci si concentreraqui sul problema del calcolo di valore numerico per tali soluzioni, supponendodi essere in un caso in cui esse esistano ed in cui si sia individuatoun intervallo in cui sia presente solo una di esse. E pero ben notoche si possono avere equazioni che coinvolgono funzioni a valori reali che nonammettono soluzioni reali (ad esempio x2 + 1 = 0) o che non ammettonosoluzioni reali in un determinato intervallo (ad esempio 2 + x − e−x = 0per x ≥ 0, o per cui le soluzioni sono molto piu di una, come nel caso disin(10x) = 0 per x ∈ [0, 2π].

Per classi molto particolari di equazioni, come le equazioni algebriche digrado inferiore al quinto, esistono formule risolutive che consentono di deter-minare le soluzioni esatte di tali equazioni. Ci si rende pero conto facilmenteche tali formule sono di applicabilita molto limitata, dal momento che ri-guardano equazioni di forma molto particolare. Inoltre, anche le classicheformule di risoluzione per radicali richiedono, oltre alle quattro operazioni

45

46 CAPITOLO 4. EQUAZIONI NONLINEARI

aritmetiche, l’utilizzo di operazioni come l’estrazione di radice quadrata chesono di fatto a loro volta implicitamente definite da un’equazione del tipox2 − a = 0. Quindi, anche nel caso che si utilizzino formule esatte, per unaloro concreta valutazione numerica e necessario fare ricorso a procedure diapprossimazione come quelle viste nel capitolo 2 per il calcolo della radicequadrata. Di fatto, le procedure iterative introdotte nel capitolo 2 non sonoaltro che il risultato della applicazione di particolari metodi per la soluzionedi equazioni nonlineari.

Anche tutti i metodi che saranno introdotti in questo capitolo sono metodiiterativi, che calcolano una successione x(k), k = 1, . . . , n di approssimazionisuccessive della soluzione, a partire da una stima iniziale x(0) che deve esserefornita dall’utente. Tali metodi sono in generale solo localmente convergenti,ovvero, detta xex la soluzione esatta, si puo garantire che limk→∞ x(k) = xex

solo se la stima iniziale x(0) e sufficientemente vicino alla vera soluzione. Inpratica, prima ancora che per implementare algoritmi approssimati di soluzio-ne lo strumento informatico puo essere utilizzato per uno studio approssimatodell’andamento della funzione mediante la visualizzazione del suo grafico. Apartire da un grafico ottenuto mediante la valutazione della funzione su diun insieme finito di punti si possono determinare approssimativamente gliintervalli in cui la funzione assume valore zero, e si puo produrre di volta involta un grafico relativo ad intervalli sempre piu vicini al punto in cui vieneapprossimativamente assunto il valore zero, cosıda ottenere di fatto delle pri-me approssimazioni, sebbene non particolarmente accurate, della soluzionestessa.

Esercizio

Determinare il numero di soluzioni dell’equazione 6x6+5x5+4x4+3x3−2x2+x−1 = 0 sull’intervallo [−2, 1] e calcolarne graficamente una approssimazionecon un errore di ordine di grandezza 10−2.

Esercizio

Determinare il numero di soluzioni dell’equazione sin( 1x) sull’intervallo [0.01, 0.03].

4.1. METODO DI BISEZIONE 47

4.1 Metodo di bisezione

Il metodo di bisezione utilizza le proprieta di ordinamento totale dei numerireali e le proprieta delle funzioni continue per determinare una soluzione diuna equazione nonlineare e, al tempo stesso, un intervallo in cui la soluzionecercata e certamente contenuta. Il metodo puo essere descritto facilmen-te a parole. Se una funzione continua assume valori di segno opposto agliestremi un intervallo [a, b], per il cosidetto teorema di esistenza degli zeri (opiu semplicemente per una evidenza geometrica intuitiva) vi deve essere unpunto in tale intervallo in cui la funzione assuma il valore zero. Il metododi bisezione consiste appunto nel considerare come prima approssimazione ditale punto il punto medio x(1) = (a + b)/2 dell’intervallo dato. Dopo questoprimo passo vi sono solo tre possibilita: 1) si ha effettivamente f(x(1)) = 0,nel qual caso si e concluso il calcolo; 2) agli estremi dell’intervallo [a, x(1)]la funzione f assume valori di segno opposto; 3) agli estremi dell’intervallo[x(1), b] la funzione f assume valori di segno opposto. Si noti che i casi 2) e3) sono mutuamente esclusivi solo se si e certi che nell’intervallo [a, b] vi siauna sola soluzione, altrimenti, qualora siano presenti piu soluzioni (esempio:sin x = 0 sull’intervallo [−π/2, 3π/2]) le alternative 2) e 3) potrebbero essereentrambe soddisfatte. In questo caso il metodo scegliera, sulla base di uncriterio dipendente dalla specifica implementazione, solo uno dei due inter-valli e non permettera in generale di approssimare tutte le soluzioni presentinell’intervallo di partenza. Come si e detto in precedenza, in questa presen-tazione ci si suppone per semplicita di avere sempre a che fare con soluzioniisolate in un dato intervallo. Iterando questa procedura, il metodo di bise-zione porta alla determinazione di una successione di intervalli [ak, b(k)], incui di volta in volta e garantita la presenza della soluzione cercata e di cuiuno degli estremi e il punto medio dell’intervallo determinato nell’iterazioneprecedente. Alla iterazione k−esima, la migliore possibile approssimazionedella soluzione cercata consiste nel punto medio x(k) = (ak+b(k))/2 dell’inter-vallo stesso. Poiche e certo che la soluzione e contenuta o nel semi-intervallosinistro o nel semi-intervallo destro, si puo ottenere facilmente una stima pereccesso dell’errore assoluto che si commette approssimando la soluzione conx(k), ovvero

E (k)bisez ≤

b − a

2k.

Questa caratteristica e peculiare del metodo di bisezione, perche nessuno

48 CAPITOLO 4. EQUAZIONI NONLINEARI

degli altri metodi applicabili ad equazioni nonlineari generiche fornisce unastima certa dell’errore. D’altra parte, il metodo converge in modo relativa-mente lento, come puo essere verificato risolvendo gli esercizi proposti. Sipuo verificare dalla formula di stima dell’errore che, per raggiungere una tol-leranza di errore ǫ, sono necessarie almeno log2((b − a)/ǫ). Questo significaad esempio che per raggiungere una tolleranza di 10−6 su di un intervallo diampiezza 1 sono necessarie 20 iterazioni, e per raggiungerne una di 10−13 nesono necessarie 44. Una implementazione del metodo di bisezione e riportatain appendice nella sezione 7.4.

Esercizio

Calcolare la soluzione dell’equazione sin x = 0 sull’intervallo [−1, 2] utiliz-zando il metodo di bisezione con 20 iterazioni.

Esercizio

Calcolare la soluzione dell’equazione 7e−5x + 3e−2x − 5 nell’intervallo [0, 1]utilizzando il metodo di bisezione con 15 iterazioni.

Esercizio

Calcolare la soluzione dell’equazione tanh(108x) = 0 sull’intervallo [−1, 2]utilizzando il metodo di bisezione con n = 10, 100, 1000 iterazioni.

Esercizio

Eseguire nuovamente gli esercizi precedenti con tolleranze 10−3, 10−6, 10−12 econfrontare il numero di iterazioni effettuato in ogni caso.

4.2 Metodo di Newton e le sue varianti

Il metodo di Newton rappresenta un esempio di un metodo molto piu rapida-mente convergente del metodo di bisezione, che richiede pero la conoscenzadi piu informazioni relative alla funzione stessa, in particolare della sua de-rivata. Il metodo di Newton applicato alla soluzione di f(x) = 0 si scrivecome

4.2. METODO DI NEWTON E LE SUE VARIANTI 49

x(k+1) = x(k) − f(x(k))

f ′(x(k))k = 1, . . . , n (4.2)

Come valore iniziale delle iterazioni si deve utilizzare una stima iniziale dellasoluzione determinata dall’utente. E importante sottolineare come questometodo sia il risultato dell’applicazione ripetuta del principio di linearizza-

zione. All’equazione originale f(x) = 0 si sostituisce infatti, nell’intorno diun punto x(0) fissato, l’equazione

f(x(0)) + f ′(x(0))(x − x(0) = 0

ottenuta approssimando i valori di f con quelli della retta tangente al graficodi f in x(0). Risolvendo esattamente tale equazione lineare si ottiene una pri-ma approssimazione della soluzione di f(x) = 0. Applicando ripetutamentetale procedura si ottiene il metodo di Newton sopra descritto. Il metodo diNewton, come si puo verificare ripetendo ad esempio gli esercizi della sezioneprecedente, porta in genere ad approssimare la soluzione in un numero diiterazioni molto minore del metodo di bisezione. Un modo solitamente usatoper imporre di fermare le iterazioni quando si e raggiunta una accuratezzamaggiore di una tolleranza d’errore fissata e il seguente. Il metodo vieneriscritto come

δx(k) =f(x(k))

f ′(x(k))(4.3)

x(k+1) = x(k) − δx(k) k = 1, . . . , n (4.4)

evidenziando il fatto che ad ogni passo iterativo si calcola un incremento ri-spetto alla soluzione precedentemente calcolata. Se si e fissata una tolleranzad’errore ǫ, il ciclo di calcolo puo essere interrotto quando si abbia |δx(k)| < ǫ.

Si deve tenere presente pero che il metodo di Newton non e in generaleconvergente per tutte le scelte della stima iniziale x(0). Si tratta infatti diuno dei casi di convergenza locale descritti nell’introduzione. Cio puo esserefacilmente verificato modificando i valori della stima iniziale. Se l’equazionenon ammette altre soluzioni, la successione ottenuta partendo da una stimainiziale sufficientemente lontana dalla soluzione stessa puo divergere, mentrein presenza di altre soluzioni oltre quella cercata e possibile che si abbiaconvergenza ad una di esse.

In OCTAVE un metodo simile al metodo di Newton e implementato comesolutore predefinito nella funzione fsolve. La sintassi completa puo essere

50 CAPITOLO 4. EQUAZIONI NONLINEARI

trovata nella documentazione del codice. La tolleranza d’errore con cui leequazioni assegnate vengono risolte puo essere modificata o assegnata conla funzione fsolve options. Come il metodo di Newton, l’algoritmo imple-mentato in fsolve e solo localmente convergente. Tale comando puo essereutilizzato per produrre soluzioni di riferimento in casi in cui la soluzione esat-ta non sia nota, ma si deve tenere presente che, come il metodo di Newton,puo portare a successioni divergenti se la stima iniziale non e adeguata.

Esercizio

Scegliere una soluzione dell’equazione 6x6 + 5x5 + 4x4 + 3x3 − 2x2 + x− 1 =0 sull’intervallo [−2, 1] e calcolarne una approssimazione con il metodo diNewton, individuando graficamente la stima iniziale.

Esercizio

Ripetere l’esercizio precedente utilizzando il comando fsolve di OCTAVE.

Esercizio

Calcolare la soluzione dell’equazione 7e−5x + 3e−2x − 5 nell’intervallo [0, 1]utilizzando il metodo di Netwon. Determinare graficamente una stima ini-ziale x(0). Verificare in quante iterazioni si calcola la soluzione ottenuta conil metodo di bisezione applicato con 50 iterazioni e tolleranza ǫ = 10−16.

Esercizio

Applicare il metodo di Newton alla soluzione dell’equazione tanh(108x) = 0sull’intervallo [−1, 2]. Utilizzare la stima iniziale x(0) e verificare che il metodonon converge. Determinare una stima iniziale sufficientemente vicina a x = 0per cui si abbia convergenza. Usare il fatto che se y(x) = tanh(αx), si hay′(x) = α(1 − y2).

Esercizio

Eseguire nuovamente gli esercizi precedenti interrompendo le iterazioni unavolta che si siano raggiunte tolleranze d’errore pari a 10−3, 10−6, 10−12.

4.3. METODO DEL PUNTO FISSO 51

Il metodo di Newton richiede il calcolo della derivata della funzione adogni passo iterativo. Cio puo risultare scomodo per funzioni la cui derivataabbia una espressione molto complessa. Delle varianti del metodo di Newton,che hanno in generale una convergenza non ugualmente rapida ma comunquemigliore di quella del metodo di bisezione, sostituiscono al calcolo

Il metodo delle corde si definisce fissando un intervallo [a, b] in cui siacontenuta la soluzione e calcolando le iterazioni successive come

δx(k) = (b − a)f(x(k))

f(b) − f(a)(4.5)

x(k+1) = x(k) − δx(k) k = 1, . . . , n. (4.6)

Si vede che si e approssimata la derivata prima di f con il rapporto incre-mentale calcolato tra gli estremi dell’intervallo [a, b].

Il metodo delle secanti si definisce invece ponendo

δx(k) = (x(k) − x(k−1))f(x(k))

f(x(k)) − f(x(k−1))(4.7)

x(k+1) = x(k) − δx(k) k = 2, . . . , n. (4.8)

Si vede che si e approssimata la derivata prima di f con il rapporto incre-mentale calcolato tra le ultime due soluzioni approssimate. Il metodo dellesecanti necessita di due stime iniziali differenti per poter essere utilizzato,oltre che della memorizzazione delle due ultime soluzioni approssimate perpoter calcolare la successiva.

Esercizio

Eseguire nuovamente gli esercizi precedenti utilizzando una implementazionedel metodo delle secanti e del metodo delle corde.

4.3 Metodo del punto fisso

Il metodo di punto fisso permette di risolvere equazioni che si presentino nellaforma

x = φ(x),

52 CAPITOLO 4. EQUAZIONI NONLINEARI

detta di equazione di punto fisso. Tale forma e apparentemente molto parti-colare, ma si puo vedere facilmente come a partire dalla equazione f(x) = 0si possa in realta arrivare ad una forma di punto fisso scrivendo ad esem-pio x = x − f(x) o x = x + f(x)/(1 + x2). Piu precisamente, con semplicipassaggi si vede che se le equazioni riformulate ammettono soluzione x, perquesta soluzione deve essere anche f(x) = 0, per cui la soluzione di una qual-siasi equazione di punto fisso cosıottenuta fornisce anche una soluzione delproblema di partenza. Il metodo di punto fisso si scrive come

x(k+1) = φ(x(k)) k = 1, . . . , n. (4.9)

Si puo dimostrare che tale metodo e globalmente convergente su intervalliper cui si abbia |φ′(x)| ≤ a < 1. Ovvero, in tali situazioni il metodo convergeindipendentemente dalla scelta della stima iniziale.

Esercizio

Verificare che le procedure di approssimazione della radice quadrata introdot-te nel capitolo 2 sono applicazioni del metodo del punto fisso e determinarele funzioni di iterazione utilizzate.

Esercizio

Risolvere con il metodo di punto fisso l’equazione e−x − x = 0. Sceglieregraficamente la stima iniziale.

Capitolo 5

Calcolo approssimato diintegrali definiti

Per ogni funzione continua f(x) su un intervallo [a, b], l’integrale definito

I(f) =

∫ b

a

f(x) d x. (5.1)

esiste ed ha l’interpretazione geometrica di valore dell’area (con segno) sot-tesa al grafico di f. Le usuali procedure di calcolo degli integrali in analisimatematica si basano sulla determinazione di una primitiva della funzionef(x), ovvero di una funzione F tale che F ′(x) = f(x), e sul teorema fon-damentale del calcolo, per cui I(f) = F (b) − F (a). La funzione F vienechiamata anche integrale indefinito di f.

Si deve pero tenere presente che, a differenza della operazione di deri-vazione, per cui l’applicazione delle regole di derivazione ad una funzioneottenuta per composizione e combinazione algebrica di funzioni derivabiliporta sempre ad una espressione esplicita (per quanto complicata) delladerivata, l’integrazione indefinita e un problema per cui spesso non esisteuna soluzione esprimibile mediante una formula chiusa, per quanto comples-sa. Ad esempio, se si considera il problema del calcolo dell’integrale definitodella funzione gaussiana

1√2π

∫ b

a

exp (−x2

2) dx,

che e fondamentale per un gran numero di applicazioni in statistica e pro-babilita, si puo dimostrare che non esiste una formula esplicita per il calco-

53

54 CAPITOLO 5. INTEGRALI

lo del corrispondente integrale indefinito. In questi casi, che, vale la penasottolinearlo, costituiscono la grande maggioranza, per ottenere unaapprossimazione di I(f) si deve ricorrere ad una approssimazione numericadell’integrale definito richiesto. Tali formule consistono in generale nel calcolodi una appropriata combinazione lineare di valori della funzione in un numerofinito di punti dell’intervallo [a, b]. Anche tali formule ammettono una inter-pretazione geometrica, in quanto possono essere viste come approssimazionidell’area sottesa al grafico di f con la somma di aree di figure geometrichepiu semplici, la cui area possa essere calcolata esattamente. Tutte le formuleconsiderate sono in realta formule polinomiali, ovvero ottenute approssiman-do localmente la funzione data con un opportuno polinomio. Questo tipo diderivazione delle formule consente anche di ottenere delle stime dell’errorecompiuto nell’approssimazione numerica, che pero si possono considerare

Per tutti i metodi di integrazione considerati si introduce un insieme finitodi punti xi detti nodi di integrazione. Si considerano qui per semplicita solonodi equispaziati, ad una distanza h = (b−a)/n l’uno dall’altro. Il parametroh e detto passo di integrazione e ovviamente l’accuratezza dell’approssima-zione dipende in modo essenziale dal suo valore, o equivalentemente, dalnumero di nodi n utilizzato. Una analisi completa delle stime d’errore asso-ciate alle formule di integrazione richiede strumenti di analisi matematica chevanno oltre i contenuti dei programmi scolastici. Un approccio possibile alconcetto di accuratezza e convergenza di tali formule e quello di quantificareempiricamente l’errore nel caso di funzioni semplici che possono essere inte-grate esattamente senza difficolta. In tal modo si puo anche verificare che,per polinomi di grado basso e dipendente dalla formula utilizzata, le formuleintrodotte danno, a meno di errori di arrotondamento, risultati esatti.

5.1 Alcuni metodi di integrazione numerica

Il piu semplice per approssimare gli integrali si basa sulla definizione del-le somme di Riemann mediante cui si definisce teoricamente il concettodi integrale (si vedano ad esempio [3], [5]). Se si definiscono i nodi comexi = a + ih, i = 1, . . . , n, un esempio di somma di Riemann e dato dallaformula

IR,n(f) =∑

i=1,n

f(xi)h. (5.2)

5.1. ALCUNI METODI DI INTEGRAZIONE NUMERICA 55

Approssimare I(f) con tale formula equivale ad approssimare l’area sottesaal grafico di f con la somma delle aree di rettangoli di base [xi, xi+1] edaltezza pari al valore della funzione in xi. Una formula del tutto analoga sipuo ottenere sostituendo xi con un punto qualsiasi dell’intervallo [xi, xi+1].Se in particolare si utilizza il punto medio (xi +xi+1)/2, si ottiene il cosidettometodo del punto medio, che puo essere riscritto definendo xi = a + (i +1/2)h, i = 0, n − 1 e

Ipm,n(f) =∑

i=0,n−1

f(xi)h. (5.3)

Si puo verificare che, in generale, la scelta del punto medio aumenta, a paritadi numero di nodi, l’accuratezza dell’approssimazione.

Esercizio

Calcolare l’integrale∫ 1

0x5 d x = 1/6 con il metodo delle somme di Riemann e

con il metodo del punto medio con n = 10, 20, 40, 80 e confrontare i risultatiottenuti.

Esercizio

Calcolare l’integrale∫ 1

0x d x = 1/2 con il metodo delle somme di Riemann

e con il metodo del punto medio con n = 5, 10, 20 e confrontare i risultatiottenuti.

Un ulteriore possibilita consiste nell’approssimare l’area sottesa al graficodi f con la somma delle aree di trapezi di base [xi, xi+1] ed altezze pari aisegmenti verticali (xi, f(xi)), (xi+1, f(xi+1)). Tale metodo dei trapezi puoessere definito ponendo xi = a + ih, i = 0, n e

Itrap,n(f) = h∑

i=0,n−1

[f(xi) + f(xi+1)]

2(5.4)

=[f(x0)

2+

(

i=1,n−1

f(xi))

+f(xn)

2

]

h

La seconda variante della formula 5.4 e quella da utilizzare nell’implemen-tazione, dal momento che evita di ricalcolare due volte ciascun f(xi). Dai

56 CAPITOLO 5. INTEGRALI

confronti con gli integrali esatti in casi semplici, si puo osservare che le carat-teristiche di accuratezza del metodo dei trapezi sono assolutamente analoghea quelle del metodo del punto medio.

Esercizio

Ripetere gli esercizi precedenti utilizzando il metodo dei trapezi.

Si introducono infine due metodi con caratteristiche di maggiore accu-ratezza. Il cosidetto metodo di Cavalieri - Simpson si definisce ponendoxi = a + ih/2, i = 0, 2n e

Icav,n(f) =h

6

i=0,2n−2

[

f(xi) + 4f(xi+1) + f(xi+2)]

(5.5)

=h

6

[

f(x0) + 2(

i=1,n−1

f(x2i))

+ 4(

i=0,n−1

f(x2i+1))

+ f(x2n)]

.

Approssimare I(f) con tale formula equivale ad approssimare l’area sotte-sa al grafico di f con la somma delle aree di rettangoli curvilinei compresitra [xi, xi+2], i segmenti verticali (xi, f(xi)), (xi+2, f(xi+2)) ed il grafico delpolinomio di grado 2 passante per (xi, f(xi)), (xi+1, f(xi+1)) (xi+2, f(xi+2)).

Il cosidetto metodo di Gauss-Legendre a due punti e invece l’esempio piusemplice di una famiglia di formule di integrazione molto accurate, utilizzatein applicazioni in cui sia necessaria una grande precisione. Si definisce po-nendo xi = a+(i+ 1

2+ 1

2√

3)h, i = 0, n−1 yi = a+(i+ 1

2− 1

2√

3)h, i = 0, n−1

e

IGL2,n(f) =h

2

i=0,n−1

[f(xi) + f(yi)]. (5.6)

Le caratteristiche di accuratezza di tale metodo sono analoghe a quelle delmetodo di Cavalieri-Simpson, ma a parita di nodi il costo computazionale delmetodo di Gauss-Legendre e inferiore, come si puo osservare confrontandoil numero di operazioni aritmetiche nelle due formule. Cio e possibile graziealla scelta molto particolare dei nodi di integrazione, che sono ottenuti comezeri di una speciale famiglia di polinomi (appunto i polinomi di Legendre).

5.2. SEMPLICE TECNICA DI STIMA DELL’ERRORE 57

Esercizio

Calcolare l’integrale∫ 1

0x3 d x = 1/4 con i metodi di Cavalieri-Simpson e di

Gauss-Legendre medio con n = 5, 10, 20 e confrontare i risultati ottenuti.

Esercizio

Calcolare∫ π

0cos x dx = 0 con tutti i metodi sopra introdotti utilizzando

n = 10, 20, 40, 80 e confrontare i risultati.

5.2 Semplice tecnica di stima dell’errore

Tutti i metodi introdotti hanno la caratteristica di essere convergenti perfunzioni continue, ovvero se f e continua si ha limn→∞ Ixx,n(f) = I(f). Talecaratteristica puo essere utilizzata, in assenza di una stima rigorosa dell’erroreper ottenere una approssimazione di I(f) che sia corretta a meno di unatolleranza d’errore imposta. Se infatti si confrontano i valori ottenuti con duediversi numeri di nodi e si osserva che ad esempio |Ixx,n(f)− Ixx,n+k(f)| < ǫ,in virtu della convergenza della formula di integrazione si puo ritenere chel’errore commesso approssimando l’integrale con Ixx,n+k(f) sia inferiore allatolleranza ǫ. Una applicazione di questa procedura al metodo dei trapezi eimplementata nello script presentato nella sezione 7.5.

Esercizio

Calcolare∫ 2

0exp (−x2

2) dx con tutti i metodi sopra introdotti imponendo una

tolleranza d’errore di ǫ = 10−3, 10−6, 10−9. Confrontare il numero di nodi ne-cessario in ogni caso per raggiungere tale accuratezza.

Si puo pero osservare che la velocita con cui l’errore si riduce all’aumentaredel numero di nodi, oltre a dipendere dal metodo utilizzato, dipende dallaregolarita della funzione integranda. Per funzioni regolari (ovvero derivabilie con derivate limitate) l’errore si riduce piu rapidamente per i metodi piusofisticati (ad esempio Cavalieri Simpson e Gauss Legendre), mentre perfunzioni non regolari (ad esempio con molti punti di non derivabilita o convalori molto elevati delle derivate) tale velocita di riduzione dell’errore ecomparabile per tutti i metodi, come pure i valori dell’errore ottenuto.

58 CAPITOLO 5. INTEGRALI

In OCTAVE e implementata con il comando quad una procedura di in-tegrazione numerica che, mediante utilizzo di una opportuna stima teoricadell’errore e di una disposizione non uniforme dei nodi di integrazione, ga-rantisce di effettuare il calcolo di integrali definiti a meno di una tolleranzafissata sull’errore. La tolleranza d’errore puo essere fissata usando il comandoquad options, mentre il comando quad si utilizza come nell’esempio seguen-te>>f=’sin(x)’

>>a=0

>>b=pi

>>integrale=quad(f,a,b)

integrale=2

Esercizio

Calcolare∫ 2

0exp (−x2

2) dx utilizzando quad imponendo una tolleranza d’er-

rore ǫ = 10−13 e confrontare il valore ottenuto con i risultati ottenuti nell’e-sercizio precedente. Studiare la velocita di convergenza delle varie formuleintrodotte in precedenza al valore ottenuto con quad.

Esercizio

Calcolare∫ 2

0tanh 10000x dx utilizzando il comando quad e imponendo una

tolleranza d’errore ǫ = 10−13. Studiare la velocita di convergenza delle varieformule introdotte al valore ottenuto con quad.

Capitolo 6

Soluzione numerica diequazioni differenziali ordinarie

Il problema della soluzione di una equazione differenziale ordinaria (ODEnel seguito, dal corrispondente acronimo anglosassone che sta per ordinary

differential equations). del primo ordine consiste nel cercare di determinareuna funzione a partire dalla conoscenza di una relazione tra il valore dellafunzione stessa e quello della sua derivata. Dal un punto di vista analiti-co, tale problema si formula come problema ai valori iniziali o problema di

Cauchy come

{

y′(t) = f(y(t), t) t ∈ (0, T ]

y(0) = y0.(6.1)

E noto che tale problema ammette una soluzione unica almeno localmente

(ovvero per un T sufficientemente piccolo) sotto opportune ipotesi sulla re-lazione funzionale f che lega l’incognita y e la sua derivata (si vedano adesempio [1],[3]). Per alcuni casi particolari (equazioni lineari del primo or-dine a coefficienti variabili, equazioni a variabili separabili), la soluzione ditale problema puo essere rappresentata esplicitamente. Si deve pero notareche il fatto che sia possibile calcolare la soluzione esatta di alcune (sempli-ci) equazioni differenziali non deve indurre a pensare che per tale tipo diproblema possa sempre essere calcolata la soluzione mediante una formulaesplicita. In generale, e vero esattamente il contrario. Per la maggior par-te delle equazioni differenziali ordinarie, anche qualora l’esistenza e l’unicitadella soluzione siano garantite dall’applicabilita dei relativi teoremi, non esi-

59

60 CAPITOLO 6. EQUAZIONI DIFFERENZIALI

stono soluzioni facilmente calcolabili ed esprimibili mediante formule chiuse.Un esempio tipico di questa situazione e il seguente problema di Cauchy

{

y′(t) = e−t2 t ∈ (0, 3]y(0) = 1,

L’equazione differenziale associata a questo problema e concettualmente ba-nale, dato che equivale ad una semplice integrazione definita e la soluzionenon e altro che

y(t) = 1 +

∫ t

0

e−s2

d s t ∈ (0, 3].

D’altra parte, dato che l’integrale definito della funzione gaussiana non puoessere espresso mediante una semplice formula chiusa, tale formula non ealtro che una rappresentazione della soluzione che deve poi essere appros-simata numericamente qualora si vogliano effettivamente calcolare i valoridella soluzione al variare di t.

6.1 Discretizzazione delle ODE: il metodo di

Eulero

I metodi di approssimazione numerica piu comuni del problema 6.1 si ba-sano sulla discretizzazione del problema stesso. Si introduce cioe una seriediscreta tk di valori della variabile indipendente, per ciascuno dei quali si cer-ca di calcolare una approssimazione uk di y(tk). Tale approssimazione vienecercata usualmente mediante la soluzione di un problema discreto, ottenutoapprossimando la derivata prima presente in 6.1 con un rapporto incremen-tale tra le approssimazioni ottenute in istanti tk successivi. L’esempio piusemplice di tale procedura e il metodo di Eulero (piu precisamente, metododi Eulero in avanti o metodo di Eulero esplicito), che puo essere definito nelmodo seguente. All’interno dell’ intervallo [0, T ] si considerano N + 1 valoritk, k = 0, . . . , N, definiti come t0 = 0 e tk+1 = tk + h, k = 0, . . . , N − 1 doveh = T/N e detto passo di discretizzazione o spesso passo temporale, data lafrequente interpretazione della variabile indipendente come tempo. La sceltadi un passo di discretizzazione costante e fatta qui solo per motivi di sempli-cita di esposizione, e in realta le implementazioni piu avanzate dei metodi perequazioni differenziali ordinarie utilizzano passi di discretizzazione variabili.La procedura di calcolo che definisce il metodo di Eulero esplicito e data da

6.2. MISURE DELL’ ERRORE NELLA SOLUZIONE NUMERICA DI ODE61

{

uk+1 = uk + hf(uk, tk) k = 0, . . . , N

u0 = y0.(6.2)

Si puo notare come la procedura 6.2 sia stata ottenuta dal problema di Cau-chy originale 6.1 considerando solo i valori della soluzione agli istanti tk esostituendo il valore della derivata prima al generico istante tkcon il rappor-to incrementale approssimato (uk+1−uk)/h. Tale tecnica numerica puo esserefacilmente implementata in OCTAVE, si veda ad esempio lo script eulero.m.

6.2 Misure dell’ errore nella soluzione nume-

rica di ODE

Una volta che i valori uk della soluzione approssimata siano stati calcolati,ci si puo porre il problema di quanto essi si discostino dalla soluzione esat-ta y(tk). Stime rigorose dell’andamento dell’errore possono essere ricavateutilizzando strumenti di analisi matematica avanzati (si vedano ad esempio[2], [6], [8]). Rimanendo nel contesto dei programmi previsti per la scuolasuperiore, ci si puo limitare a quantificare l’errore in casi in cui y(t) possaessere calcolata esattamente. I concetti di errore introdotti nella sezione 2.1devono pero essere ampliati, tenendo conto del fatto che l’incognita di unaequazione differenziale non e un numero, ma una funzione.

Gli errori possono essere calcolati relativamente all’istante finale T = tNo relativamente a tutto l’intervallo [0, T ]. L’errore assoluto all’istante finalepuo essere definito come

errabs(T ) = |y(tN) − uN |.

Tenendo conto pero che i valori numerici della soluzione esatta potrebberoessere molto grandi o molto piccoli, ci si rende conto che e piu opportuno rap-portare la dimensione dell’errore a quella della soluzione stessa, introducendoquindi il cosidetto errore relativo

errrel(T ) =|y(tN) − uN |

|y(tN)| .

Se si vuole considerare invece l’errore compiuto su tutto l’intervallo [0, T ]si deve tenere conto anche degli istanti precedenti all’ultimo. Una possibile

62 CAPITOLO 6. EQUAZIONI DIFFERENZIALI

definizione e quella del cosidetto errore assoluto in norma l∞ (o norma delmassimo) data da

errabs∞ (0, T ) = max

k=0,...,N|y(tk) − uk|.

Il corrispondente errore relativo e invece

errrel∞ (0, T ) =

maxk=0,...,N |y(tk) − uk|maxk=0,...,N |y(tk)|

.

Tale misura di errore considera il massimo scarto rilevato tra la soluzioneesatta e quella numerica in tutti gli istanti in cui si e proceduto a calcolarel’ approssimazione uk.

Un’altra possibile definizione e invece quella del cosidetto errore assolutoin norma l2, data da

errabs2 (0, T ) =

N∑

k=0

|y(tk) − uk|2h.

Il corrispondente errore relativo e invece

errrel∞ (0, T ) =

∑N

k=0 |y(tk) − uk|2h√

∑N

k=0 |y(tk)|2h.

Tale misura di errore considera lo scarto quadratico medio rilevato tra lasoluzione esatta e quella numerica su tutti gli istanti in cui si e procedutoa calcolare l’approssimazione uk. Si noti che nella definizione dell’errorerelativo il termine

∑N

k=0 |y(tk)|2h costituisce di fatto una approssimazione

dell’integrale∫ T

0|y(s)|2 ds.

Esercizio

Calcolare gli errori assoluti e relativi compiuti nell’approssimazione dellasoluzione del problema di Cauchy

y′ = −y y(0) = 1

sull’intervallo [0, 2] utilizzando il metodo di Eulero con un passo h = 0.1,h = 0.01, h = 0.001. Confrontare i risultati ottenuti. Utilizzare lo scripteulero.m.

6.3. DISCRETIZZAZIONE DELLE ODE: ALTRI METODI AD UN PASSO63

Esercizio

Calcolare gli errori assoluti e relativi compiuti nell’approssimazione dellasoluzione del problema di Cauchy

y′ = −y + 2t y(0) = 1,

che ha soluzione esatta

y(t) = −2 + 2t + 3 exp (−t),

sull’intervallo [0, 6] utilizzando il metodo di Eulero con un passo h = 0.1,h = 0.01, h = 0.001. Confrontare i risultati ottenuti. Risolvere l’eserciziomodificando lo script eulero.m.

6.3 Discretizzazione delle ODE: altri metodi

ad un passo

La procedura di calcolo che definisce il generico metodo ad un passo esplicito

e data da

{

uk+1 = uk + hΦ(uk, tk) k = 0, . . . , N

u0 = y0.(6.3)

Si puo notare come la procedura 6.3 sia stata ottenuta dal problema di Cau-chy originale 6.1 considerando solo i valori della soluzione agli istanti tk,sostituendo il valore della derivata prima al generico istante tk con il rap-porto incrementale approssimato (uk+1 − uk)/h e approssimando il terminef(y(tk), tk) con l’espressione Φ(uk, t

k). La forma specifica di tale termine di-stingue tra loro i diversi metodi e ne determina una maggiore o maggioreaccuratezza. Si possono definire ad esempio, tra i metodi piu semplici e noti,

• metodo di Runge Kutta di ordine 2:

f1 = f(uk, tk)

f2 = f(uk +hf1

2, tk +

h

2)

uk+1 = uk + hf2

64 CAPITOLO 6. EQUAZIONI DIFFERENZIALI

• metodo di Heun:

f1 = f(uk, tk)

f2 = f(uk + hf1, tk+1)

uk+1 = uk +h

2(f1 + f2)

• metodo di Runge Kutta di ordine 4:

f1 = f(uk, tk)

f2 = f(uk +h

2f1, t

k +h

2)

f3 = f(uk +h

2f2, t

k +h

2)

f4 = f(uk + hf3, tk+1)

uk+1 = uk +h

6(f1 + 2f2 + 2f3 + f4)

Tali metodi sono detti espliciti poiche permettono di calcolare esplicitamenteil valore approssimato al passo temporale tk+1 una volta noto il valore ap-prossimato al passo temporale tk. Sono detti ad un passo poiche il termineΦ(uk, t

k) non dipende dai valori approssimati ai passi temporali precedentitk. I metodi impliciti sono invece quelli in cui il valore approssimato al passotemporale tk+1 e definito solo implicitamente da una equazione

uk+1 = uk + hΦ(uk+1, tk+1, uk, t

k)

che deve poi essere risolta numericamente ad ogni passo temporale, mentrei metodi multistep sono quelli in cui per il calcolo della soluzione al passotemporale tk+1 si utilizzano anche i valori approssimati ai passi temporaliprecedenti tk.

Esercizio

Calcolare gli errori assoluti e relativi in norma l2 e l∞ compiuti nell’approssi-mazione della soluzione dei seguenti problemi di Cauchy utilizzando i metodidi Heun e Runge Kutta di ordine 2 e 4 con un passo temporale h = 0.01 :

6.3. DISCRETIZZAZIONE DELLE ODE: ALTRI METODI AD UN PASSO65

a)y′ = −3t2y y(0) = 3 t ∈ [0, 2],

che ha soluzione esatta

y(t) = 3 exp (−t3);

b)

y′ = y2/t y(1) = 2 t ∈ [1,3

2],

che ha soluzione esatta

y(t) = −2/(2 log t − 1);

c)y′ = −2ty y(0) = 1/2 t ∈ [0, 2]

che ha soluzione esatta

y(t) = exp (−t2)/2;

d)

y′ = 1 + y2 y(0) = 0 t ∈ [0,π

3]

che ha soluzione esattay(t) = tan (t);

e)y′ = 3 − 2y/t y(2) = 3 t ∈ [2, 4]

che ha soluzione esatta

y(t) = t + 4/t2;

f)y′ = y y(0) = 2 t ∈ [0, 2]

che ha soluzione esatta

y(t) = 2 exp (t).

66 CAPITOLO 6. EQUAZIONI DIFFERENZIALI

In OCTAVE e implementato anche un solutore numerico avanzato diequazioni differenziali ordinarie, che utilizza tecniche di adattamento del pas-so temporale e stima dell’errore per ottenere soluzioni che siano accurate ameno di una tolleranza d’errore fissata. Tale solutore e implementato dal co-mando lsode, la cui sintassi e spiegata in dettaglio nel manuale di OCTAVE.Nella sezione 7.7 si trova un esempio di utilizzo di tale solutore predefinito.Si noti che questo comando non permette la scelta del passo temporale:gli istanti temporali che vengono specificati dall’utente vengono utilizzatisolo per produrre un vettore di valori della soluzione numerica corrisponden-ti a istanti temporali assegnati. Tali valori vengono calcolati dal solutorecon un passo temporale scelto autonomamente. La tolleranza d’errore e al-tri parametri determinabili dall’utente possono essere fissati con il comandolsode options.

Esercizio

Confrontare le soluzioni esatte delle equazioni introdotte nell’esercizio prece-dente con quelle ottenute mediante l’uso di lsode utilizzando una tolleranzad’errore relativo di 10−7.

Esercizio

Confrontare le soluzioni ottenute con i metodi di Heun e Runge Kutta diordine 2,4 per i problemi prima definiti con quelle ottenute mediante l’uso dilsode utilizzando una tolleranza d’errore relativo di 10−7.

6.4 Stabilita numerica

Uno dei problemi piu caratteristici della soluzione numerica di ODE consi-ste nel fatto che, in generale, per i metodi piu comuni la scelta del passotemporale non dipende solo da considerazioni di accuratezza, ma anche dallacosidetta stabilita numerica. Con questo termine si intende il fatto che,per alcuni problemi di Cauchy, esiste un valore critico del passo temporalesopra il quale non solo la soluzione numerica e piu o meno inaccurata, matende ad assumere valori che possono essere completamente irrealistici e rag-giungere (e oltrepassare) rapidamente i limiti dell’insieme dei numeri floating

6.4. STABILITA NUMERICA 67

point. Associate a questi fenomeni di instabilita numerica sono spesso an-che oscillazioni molto forti della soluzione approssimata tra istanti temporalisuccessivi. Il valore critico sotto il quale tali fenomeni non si verificano puoessere stimato con precisione solo su alcuni semplici problemi modello lineari,tipicamente y′ = −ay, a > 0. Per problemi nonlineari non e in generale pos-sibile stabilire a priori il massimo passo temporale che puo essere utilizzato,per cui e spesso necessario effettuare stime empiriche o scelte molto prudentidel passo temporale stesso.

Esercizio

Calcolare gli errori assoluti e relativi compiuti nell’approssimazione dellasoluzione del problema di Cauchy

y′ = −100y y(0) = 1

sull’intervallo [0, 1] utilizzando il metodo di Eulero con un passo h = 0.1,h = 0.01, h = 0.005, h = 0.001. Confrontare i risultati ottenuti.

Esercizio

Ripetere l’esercizio precedente con i metodi di Heun e Runge Kutta di ordine2,4, eventualmente modificando i valori di h utilizzati.

68 CAPITOLO 6. EQUAZIONI DIFFERENZIALI

-1

-0.5

0

0.5

1

0 0.1 0.2 0.3 0.4 0.5

Sol. numericaSol. esatta

Figura 6.1: Esempio di instabilita numerica del metodo di Eulero: soluzionedi y′ = −100y con y(0) = 1 e h = 0.02.

Capitolo 7

Appendice A: esempi diprogrammi OCTAVE

Si presentano in questa appendice alcuni esempi di script OCTAVE che im-plementano algoritmi presentati nel testo delle dispense in modo ragionevol-mente documentato e trasparente. Non si garantisce in alcun modo che taliimplementazioni diano risultati corretti se male utilizzate o se utilizzate conversioni di OCTAVE diverse dalla 3.0.1.

7.1 Calcolo approssimato di π

%

% Script OCTAVE per il calcolo approssimato di Pi

% con procedura quadraticamente convergente proposta da Borwein.

%

% Sviluppato da L. Bonaventura - MOX Polimi

% per corso SILSIS 2009

%

%

% Azzeramento eventuali variabili definite in precedenza

%

clear

%

% Formato output

%

69

70 CAPITOLO 7. APPENDICE A

format long

%

%

% Inizializzazione procedura iterativa

%

x=sqrt(2);

picom=2+x;

y=sqrt(x);

%

% Numero massimo iterazioni permesse (modificabile dall’utente)

%

nmax=5;

%

% Ciclo di calcolo principale

%

for i=1:nmax

disp(’iterazione’),i

x=0.5*(sqrt(x)+1./sqrt(x));

disp(’valore approssimato di Pi’)

picom=picom*(x+1)/(y+1)

y=(y*sqrt(x)+1./sqrt(x))/(y+1);

disp(’Errore relativo’)

errore relativo=abs(pi-picom)/abs(pi)

end

7.2 Generatore lineare congruente di numeri

pseudocasuali

%

% Function OCTAVE per la generazione di numeri pseudocasuali

% con procedura proposta da Park e Miller

% (vedi ’Numerical Recipes in C’).

% Calcola un numero pseudocasuale y in (0,1) e un numero intero

% ii da utilizzare per il calcolo del successivo % numero pseudocasuale.

%

7.2. GENERATORE LINEARE CONGRUENTE DI NUMERI PSEUDOCASUALI71

% Sviluppato da L. Bonaventura - MOX Polimi

% per corso SILSIS 2009

%

%

%

%

function [y,ii]=ran0(id)

%

% Variabili in input:

% id, intero: primo valore utilizzato deve avere almeno 6

% e al massimo 11 cifre

%

% Variabili in output:

% y, reale, numero pseudocasuale

% distribuito uniformemente tra 0 e 1

% ii, intero, da usare per generare

% il successivo numero pseudocasuale

%

%

% Costanti predefinite: l’efficacia del

% generatore dipende da questi valori

%

ia = 16807;

im = 2147483647;

iq = 127773;

ir = 2836;

am = 1.0/im;

%

% Generatore lineare congruente

%

k=int32(id/iq);

id=ia*(id-k*iq)-ir*k;

if(id<=0)

id=id+im;

endif

y=am*double(id);

ii=id;

end

72 CAPITOLO 7. APPENDICE A

7.3 Teorema del limite centrale

%

% Script OCTAVE che implementa una dimostrazione

% empirica del teorema del limite centrale

%

% Sviluppato da L. Bonaventura - MOX Polimi

% per corso SILSIS 2009

%

%

%

% Azzeramento eventuali variabili definite in precedenza

%

clear

%

% Formato output

%

format long

%

% Dimensione del campione studiato

%

N=1000;

%

% Numero di realizzazioni del campione di dimensione N

%

nreal=5000;

%

% Numero di classi per la visualizzazione con istogramma

%

nbins=30;

y=[];

%

% Creazione di nreal realizzazioni di un campione di dimensione N

% tratto dalla distribuzione uniforme su [0,1]

% e calcolo delle fluttuazioni del campione rispetto alla media;

7.4. METODO DI BISEZIONE 73

% tutte le nreal fluttuazioni, riscalate secondo la formula del teorema

% del limite centrale, vengono immagazzinate nel vettore y

%

for i=1:nreal

x=rand(N,1);

y=[y sqrt(N)*(mean(x)-0.5)/std(x)];

end

%

% calcolo di media e varianza campionaria delle fluttuazioni

%

mi=mean(y)

vv=var(y);

sqm=sqrt(vv);

%

% Visualizzazione con istogramma con nbin classi

% della distribuzione empirica delle fluttuazioni riscalate

% e confronto con la distribuzione normale standard;

% il fattore scale viene calcolato per ottenere un istogramma

% normalizzato in modo analogo alla normale standard

%

[nn,xx]= hist(y,nbins);

scale=0.;

for i=1:nbins

scale=scale+nn(i)*8/nbins;

end

bar(xx,nn/scale)

zz=[mi-4:0.01:mi+4];

gg=exp(-0.5*(zz-mi).*(zz-mi)/vv)/sqrt(2*pi*vv);

hold on

plot(zz,gg,’r’)

7.4 Metodo di bisezione

%

% Script OCTAVE che implementa il metodo di bisezione per il calcolo

% approssimato degli zeri di una funzione

74 CAPITOLO 7. APPENDICE A

%

% Sviluppato da L. Bonaventura - MOX Polimi

% per corso SILSIS 2009, sulla base di uno script di R. Sacco

%

%

%

% Azzeramento eventuali variabili definite in precedenza

%

clear

%

% Formato output

%

format long

%

%

% Inizializzazione procedura iterativa:

%

% a,b Estremi intervallo di ricerca radice

% nmax Numero massimo di iterazioni

% toll Tolleranza sul criterio di arresto

% fun Macro contenente la funzione

%

a=-1;

b=2;

fun=’sin(x)’;

nmax=50;

toll=1e-9;

err=1;

it=0;

while (it < nmax & err > toll)

c=(a+b)/2;

x=c;

fc=eval(fun);

x=a;

if (fc == 0)

err=0;

else

if (fc*eval(fun) > 0),

7.5. METODO DEI TRAPEZI CON CONTROLLO SULLA TOLLERANZA D’ERRORE75

a=c;

else

b=c;

end;

err=abs(b-a)/2;

end

it=it+1;

disp(’Iterazione’),it

disp(’Soluzione approssimata’), x

disp(’Stima di errore’), err

end

7.5 Metodo dei trapezi con controllo sulla tol-

leranza d’errore

%

% Script OCTAVE che implementa il metodo dei trapezi per il calcolo

% approssimato di integrali definiti con stima di errore

% mediante confronto valori approssimati con diverso numero di intervalli

%

% Sviluppato da L. Bonaventura - MOX Polimi

% per corso SILSIS 2009

%

%

%

% Azzeramento eventuali variabili definite in precedenza

%

clear all

%

% Formato output

%

format long

%

% funzione integranda

%

76 CAPITOLO 7. APPENDICE A

f=’sin(x)’;

%

% estremi integrazione

%

a=0;

b=pi;

%

% valore iniziale fittizio integrale

%

ytrap old=100000;

%

% tolleranza

%

toll=1.e-9;

%

% numero massimo intervalli

%

nmax=1000000;

%

% calcolo integrale

%

for m=1:10:nmax

h=(b-a)/m;

x=[a:h:b];

y=eval(f);

ytrap=h*(0.5*y(1)+sum(y(2:m))+0.5*y(m+1));

error est=abs(ytrap-ytrap old);

if (error est<toll) break

endif

ytrap old=ytrap;

end

disp(’N. Intervalli’),m

disp(’Valore integrale’), ytrap

disp(’Stima errore’), error est

7.6. METODO DI EULERO IN AVANTI PER ODE 77

7.6 Metodo di Eulero in avanti per ODE

%

% Script OCTAVE che implementa il metodo di Eulero esplicito (in

avanti)

% per la soluzione numerica di y’=-a*y

%

% Sviluppato da L. Bonaventura - MOX Polimi

% per corso SILSIS 2009

%

%

%

% Azzeramento eventuali variabili definite in precedenza

%

clear

close

%

% Formato output

%

format long

%

%

% assegna dati iniziali

%

t0=0;

y0=1;

%

% definisce parametri equazione

%

a=1;

%

% definisce istante finale simulazione

% (iniziale posto uguale a t0 per default)

%

tfin=2;

%

% definisce numero passi temporali

%

78 CAPITOLO 7. APPENDICE A

nstep=10;

%

% calcola passo temporale

%

h=(tfin-t0)/nstep;

%

% inizializza vettori

%

t=zeros(nstep+1,1);

t(1)=t0;

u=zeros(nstep+1,1);

u(1)=y0;

%

% definizione secondo membro problema di Cauchy

%

f=’-a*yy’;

%

% ciclo principale che implementa Eulero in avanti

%

for k=1:nstep

tt=t(k);

yy=u(k);

t(k+1) = t(k)+ h;

u(k+1) = u(k) + h*eval(f,yy,tt);

end

%

% visualizza soluzione esatta e numerica

%

figure(1)

clf

plot(t,u)

hold on

y=exp(-a*t);

%

%Se si e’ modificato il file, sostituire la riga precedente

%con la corretta soluzione esatta!

%

7.7. SOLUTORE LSODE PER ODE 79

plot(t,y,’r’);

legend(’Sol. numerica’, ’Sol. esatta’)

figure(2)

%

% visualizza errore puntuale

%

plot(t,abs(y-u))

legend(’Errore del metodo di Eulero’)

%

% calcola errori in varie norme

%

errore relativo L2=norm(y-u,2)/norm(y,2)

errore relativo Linf=norm(y-u,Inf)/norm(y,Inf)

7.7 Solutore lsode per ODE

%

% Script OCTAVE che implementa la chiamata al solutore

% numerico lsode per la soluzione di una generica equazione

% differenziale del primo ordine

%

% Sviluppato da L. Bonaventura - MOX Polimi

% per corso SILSIS 2009

%

%

%

% Azzeramento eventuali variabili definite in precedenza

%

clear

close

%

% Formato output

%

format long

%

%

80 CAPITOLO 7. APPENDICE A

% assegna dati iniziali

%

t0=0;

y0=1;

%

% definisce istante finale simulazione

% (iniziale posto uguale a t0 per default)

%

tfin=2;

%

% definisce numero passi temporali

% usati per visualizzare la soluzione

% (il numero di passi usato per il calcolo

% viene determinato autonomamente dal solver)

%

nstep=100;

%

% calcola passo temporale

%

h=(tfin-t0)/nstep;

%

% inizializza vettore dei tempi a cui calcolare la soluzione

%

t=[t0:h:tfin];

%

% definizione secondo membro problema di Cauchy

% N.B.:per la sintassi interna del solver lsode,

% la variabile che rappresenta la funzione % incognita deve essere

% chiamata x e la variabile indipendente t

%

f=’cos(t)*x+sin(12*t)’;

%

% chiamata al solver numerico

%

[u,istate,msg]=lsode(f,y0,t);%

% visualizza soluzione numerica

%

7.7. SOLUTORE LSODE PER ODE 81

plot(t,u)

legend(’Soluzione numerica’)

82 CAPITOLO 7. APPENDICE A

Bibliografia

[1] E. Giusti. Analisi Matematica 2. Boringhieri, 1983.

[2] G. Naldi, L. Pareschi, and G. Russo. Introduzione al Calcolo Scientifico.

McGraw Hill Italia, 2001.

[3] C.D. Pagani and S. Salsa. Analisi Matematica. Masson, 1990.

[4] W. H. Press, S. A. Teukolsky, W. T. Vetterling, and B. P. Flannery.Numerical Recipes in C. The Art of Scientific Computing. CambridgeUniversity Press, 1992.

[5] G. Prodi. Analisi Matematica. Boringhieri, 1970.

[6] A. Quarteroni, R. Sacco, and F. Saleri. Matematica Numerica, III

Edizione. Springer Verlag Italia, 2008.

[7] S.M. Ross. Probabilita e statistica per le scienze e l’ingegneria. ApogeoEditore, 2003.

[8] J. Stoer and R. Bulirsch. An Introduction to Numerical Analysis, 2nd

edition. Springer Verlag, 1980.

83