Informatica per la Matematica
Giorgio Meini © 2000
X Algoritmi numerici
Prerequisiti:
−
−
−
−
−
−
−
−
−
−
−
−
successioni numeriche convergenti e divergenti
equazioni algebriche e trascendenti
geometria analitica della retta e della parabola
sistemi lineari e matrici
derivata di una funzione e funzioni derivate
teoremi relativi alle funzioni continue e derivabili
polinomi in una variabile
integrale definito
funzionalità numeriche, algebriche e grafiche dell'ambiente Derive
numeri, formule e grafici in ambiente Excel
programmazione in linguaggio VBA/Excel
errori del calcolo in aritmetica finita
X.0 Introduzione
X.1 Risoluzione approssimata di equazioni
X.2 Risoluzione di sistemi lineari
X.3 Interpolazione
X.4 Derivazione e integrazione numerica
Riferimenti bibliografici:
- Demidovic e Maron, "Fondamenti di calcolo numerico", MIR, Mosca, 1981
- Bevilacqua, Bini, Capovani e Menchi, "Introduzione alla matematica
computazionale", Zanichelli, Bologna, 1987
- Rossi, "La matematica dell'incertezza: didattica della probabilità e della statistica",
Zanichelli, Bologna, 1999
Informatica per la Matematica
Giorgio Meini © 2000
X.0
Introduzione
X.0.0
Gli algoritmi numerici
X.0.0.0
Molte situazioni reali sono rappresentabili mediante un modello matematico
relativamente semplice (come una equazione polinomiale, un sistema lineare, …), ma
spesso il valore numerico che rappresenta la soluzione di un problema reale non è di
semplice determinazione.
Un metodo numerico consente di approssimare - con il grado di precisione richiesto
dal problema specifico - un valore altrimenti impossibile da determinare con metodi
algebrici (è il caso della soluzione di una equazione polinomiale di grado superiore al
IV per la quale non esiste - nel caso generale - una formula risolutiva basata sulle
comuni operazioni aritmetiche), oppure di calcolare in modo semplice
l'approssimazione numerica di un valore la cui determinazione esatta per via algebrica
risulta difficile (è il caso della soluzione di una equazione polinomiale di III grado per
la quale esiste una complessa formula risolutiva che quasi mai viene utilizzata).
Come vedremo un metodo numerico è spesso caratterizzato dalla necessità di
effettuare molti calcoli relativamente semplici in base a uno schema ripetitivo: è per
questo motivo che gli algoritmi numerici sono quasi esclusivamente impiegati per la
realizzazione di programmi di calcolo eseguiti da un computer.
In alcuni casi (un esempio notevole è dato dalla risoluzione di sistemi lineari con
molte equazioni e molte incognite: alcuni problemi reali hanno come modello
matematico sistemi lineari con centinaia di equazioni e centinaia di incognite) pur
esistendo algoritmi algebrici per la determinazione di soluzioni esatte, eventualmente
espresse in termini di valori razionali o di radicali, la dimensione del problema rende
comunque necessario il ricorso ad un programma di calcolo: gli algoritmi numerici
approssimati si sono dimostrati in grado di calcolare approssimazioni delle soluzioni
con maggiore velocità e precisione rispetto ad algoritmi derivati dal metodo algebrico
esatto.
X.0.0.1
In sintesi un algoritmo numerico approssimato viene utilizzato:
per calcolare l'approssimazione di un valore numerico non altrimenti determinabile
con metodi algebrici;
per calcolare l'approssimazione di un valore numerico non facilmente
determinabile in forma esatta con metodi algebrici;
per calcolare l'approssimazione di un valore numerico con una precisione
maggiore rispetto ad un algoritmo ottenuto come implementazione di un metodo
algebrico esatto.
X.0.1
Un metodo per calcolare π
X.0.1.0
L'approssimazione con un elevato grado di precisione del valore numerico di π (il
rapporto tra la misura della circonferenza e la misura del relativo diametro) ha
costituito forse il principale compito della matematica numerica nell'antichità. Il valore
Informatica per la Matematica
Giorgio Meini © 2000
di π è stato approssimato sia da Archimede nel III secolo a. C., ricorrendo ad un
algoritmo che ancora oggi porta il suo nome, che - con una precisione rimasta
insuperata per molti secoli - dal matematico cinese Tsu Chung-chi nel V secolo d. C..
Tutti i metodi utilizzati nell'antichità per il calcolo del valore di π sono basati
sull'osservazione che la misura della circonferenza è approssimata per difetto dal
perimetro di un poligono regolare inscritto e con precisione progressivamente migliore
al crescere del numero di lati (in particolare: al raddoppiare del numero di lati del
poligono regolare inscritto).
X.0.1.1
Tsu Chung-chi fornì per π il valore approssimato 3,141593 ricorrendo probabilmente a
un metodo basato sull'applicazione ripetuta del teorema di Pitagora.
sn
l2n
ln
Informatica per la Matematica
Giorgio Meini © 2000
Infatti, sia r il raggio della circonferenza e ln il lato del poligono di n lati: l'apotema an
2
è data da
l 
r 2 −  n  ; denominando sn la differenza r - an (sagitta) si ha che il lato
2
2
l 
l2n del poligono avente 2n lati è dato da s n +  n  . Una semplice sostituzione
2
algebrica consente di esprimere la misura l2n del lato del poligono di 2n lati in
funzione della misura ln del lato del poligono di n lati:
2
l 2n = r  2r − 4r 2 − l n 2 


che, scegliendo il raggio r come unità di misura (r = 1), diviene:
l 2n = 2 − 4 − l n 2 .
Quest'ultima formulazione rappresenta bene il carattere "ripetitivo" del metodo che si
suppone impiegato da Tsu Chung-chi: ripetendo il calcolo a partire da un quadrato
inscritto nella circonferenza di raggio unitario, per il quale la misura del lato l = 2 è
di facile determinazione, e calcolando successivamente la misura del lato dei poligoni
inscritti aventi 8, 16, 32, 64, 128, 256, 1024, … lati si costruisce una successione
numerica i cui termini (il prodotto della misura del lato per il numero di lati del
poligono regolare) sono approssimazioni progressivamente migliori del valore 2π che
esprime la misura della circonferenza. È possibile dimostrare che il limite di tale
successione è esattamente il valore 2π, ma ciò che a noi interessa - come a Tsu Chungchi più di millecinquecento anni fa - è approssimare numericamente tale valore.
X.0.1.2
Utilizzando a questo scopo Excel è sensato far corrispondere righe successive della
tabella con passi successivi di approssimazione.
Nelle celle della colonna A viene determinato il numero di lati del poligono regolare di
volta in volta preso in considerazione (inizialmente è 4, poi raddoppia ad ogni riga
successiva), nelle celle della colonna B si calcola la lunghezza del lato del poligono
(inizialmente 2 , nelle righe successive viene calcolato utilizzando la formula
ricorsiva vista in precedenza), nelle celle della colonna C si ottiene l'approssimazione
del valore π moltiplicando la lunghezza del lato per il numero di lati (approssimando
in tal modo la lunghezza della circonferenza) e dividendo successivamente per 2. Una
Informatica per la Matematica
Giorgio Meini © 2000
volta impostati i valori iniziali e le formule è possibile utilizzare le funzionalità di
Excel per "copiare" le formule nelle righe sottostanti ottenendo come risultato lo
svolgimento dei calcoli previsti (le colonne B e C sono state precedentemente
formattate per visualizzare numeri con 10 cifre decimali):
Con 10 passi di approssimazione si arriva a calcolare il perimetro di un poligono
regolare di 2048 lati in relazione al quale Excel produce una approssimazione del
valore di π pari a 3,1415914215. Sappiamo - dato che non siamo i primi a calcolare il
valore di π! - che il risultato ottenuto è preciso solo relativamente alle prime cinque
cifre decimali (Derive fornisce un valore di 3,141592653 approssimando la costante π
e impostando una precisione di 10 cifre e la funzione PI.GRECO() di Excel restituisce
come risultato il valore 3,141592654). Dato che i primi 10 termini della successione
generata rappresentano approssimazioni progressivamente migliori del valore π viene
spontaneo pensare che la precisione migliorerà ulteriormente - se non indefinitamente,
almeno fino a rendere esatte tutte le cifre decimali di cui dispongono i valori numerici
utilizzati da Excel - aumentando il numero di passi di approssimazione e prendendo
quindi in considerazione poligoni con un numero sempre maggiore di lati:
Informatica per la Matematica
Giorgio Meini © 2000
Osservando con attenzione la successione delle approssimazioni nella colonna C si
nota che, a partire dalla riga 15, i valori, anziché aumentare progressivamente
mantenendo come valore limite 3,14159265… come sarebbe logico aspettarsi (si tratta
infatti dei perimetri di poligoni regolari inscritti aventi un numero crescente di lati),
dapprima diminuiscono e dopo superano addirittura tale valore contraddicendo la
teoria, secondo la quale i termini successivi di una successione crescente
superiormente limitata rappresentano approssimazioni per difetto progressivamente
più precise del limite della successione stessa. I passi successivi del procedimento di
approssimazione sono addirittura catastrofici e l'errore commesso, invece che
diminuire, cresce rapidamente fino a raggiungere un inaspettato 100% in
corrispondenza dell'annullamento dell'approssimazione del valore di π:
X.0.1.3
Che cosa accade? I concetti introdotti nel capitolo * sono sufficienti per capire che si
tratta di errori dovuti alla finitizza dell'aritmetica impiegata da Excel per eseguire i
calcoli:
la misura del lato del poligono è progressivamente minore e finirà inevitabilmente,
quando la misura calcolata sarà minore del più piccolo valore numerico
rappresentabile, per provocare una condizione di underflow;
ancora prima che si verifichi la condizione di underflow l'approssimarsi a 0 della
misura del lato l del poligono nella formula
2 − 4 − l 2 causa cancellazione nel
calcolo della differenza 2 − 4 − l 2 ;
la necessaria moltiplicazione della misura del lato del poligono per il numero
rapidamente crescente dei lati causa amplificazione dell'eventuale errore presente
nel risultato del calcolo della formula
2 − 4 − l2 .
Aggiungendo nelle celle della colonna D la formula che fornisce la differenza tra
l'approssimazione calcolata (celle della colonna C) e il valore restituito dalla funzione
Excel PI.GRECO() è possibile tabulare e rappresentare graficamente l'errore
commesso in funzione del numero di passi di calcolo effettuati:
Informatica per la Matematica
Giorgio Meini © 2000
0,5
0,4
0,3
0,2
0,1
0,0
1 2 3 4
5 6 7
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
-0,1
L'errore relativo commesso, che è inizialmente il 10% del valore di π, diminuisce nei
passi successivi fino a raggiungere un valore minimo pari a circa 10-9
(approssimativamente lo 0,00000004% del valore di π) in corrispondenza della
quattordicesima iterazione del calcolo, ma torna a crescere in seguito fino
all'impennata osservata nelle iterazioni successive alla venticinquesima.
X.0.1.4
Questo andamento ad "U" caratterizza i grafici dell'errore - tracciati in funzione del
numero di iterazioni effettuate - di molti algoritmi numerici; è causato dal diverso
comportamento dei due tipi di errore che si sommano in un metodo numerico:
l'errore analitico è l'errore teorico commesso ricorrendo ad una tecnica
approssimata anziché ad un metodo esatto: in questo caso diminuisce
progressivamente al crescere del numero di iterazioni1;
l'errore algoritmico è l'errore di calcolo commesso dalla macchina che esegue una
implementazione dell'algoritmo: in questo caso aumenta proporzionalmente al
numero di iterazioni contrastando e talvolta annullando la precisione del risulato.
X.0.1.5
Il problema può essere superato operando in un ambiente software per il calcolo
simbolico come Derive? Considerando che il valore di π calcolato con il metodo di
Tsu Chung-chi è definito dal limite per i→∞ della successione
2 i +1 ⋅ l i
πi =
= 2 i ⋅ li
2
i = 1,2,3,...
dove

l1 = 2

2
l i +1 = 2 − 4 − l i
In Derive è possibile definire direttamente la formula ricorsiva che esprime la misura
del lato del poligono regolare di 2n lati inscritto in una circonferenza di raggio unitario
1
si tratta della differenza tra i termini di una successione convergente e il limite della successione
stessa: tale differenza deve necessariamente tendere a 0 al crescere dell'indice dei termini considerati.
Informatica per la Matematica
Giorgio Meini © 2000
ed esplicitamente la formula che definisce la successione stessa
L'istruzione
VECTOR(s(i),i,ii,if)
costruisce un vettore
dei valori della
successione s(i)
assegnando alla
variabile-indice i i
valori compresi tra
l'indice iniziale ii e
l'indice finale if
inclusi
Con l'istruzione VECTOR è possibile costruire in Derive un vettore avente per
elementi i termini di una successione (in questo caso i primi 10)
la cui semplificazione fornisce un vettore di espressioni algebriche
che approssimate producono i valori ricercati
[2.828427124, 3.061467458, 3.121445152, 3.136548490, 3.140331157,
3.141277248, 3.141513804, 3.141572987, 3.141587827, 3.141591756]
La semplificazione algebrica del vettore dei soli primi 10 termini della successione
(assolutamente insufficienti per una precisione che si estenda anche solo alle cifre
decimali normalmente visualizzate da Derive) ha impegnato un PC relativamente
potente (Pentium-II 350 MHz, 64 Mbyte RAM) per circa 20 secondi, ma lo stesso PC
impiega più di 20 minuti per semplificare i primi 12 termin: la via della
determinazione simbolica dei termini della successione si dimostra presto
impraticabile sotto l'aspetto della complessità computazionale.
X.0.1.6
Impostando Derive in modalità numerica invece che simbolica
è possibile evitare questa difficoltà (rinunciando all'esattezza simbolica del calcolo
algebrico) e, al tempo stesso, selezionare il numero di cifre da utilizare nei calcoli
numerici
In questo nuovo contesto la semplificazione del vettore dei termini della successione
(esteso ai primi 50 termini) produce direttamente i valori approssimati
[2.828427124, 3.061467458, 3.121445152, 3.136548490, 3.140331157,
3.141277248, 3.141513803, 3.141572946, 3.141587735, 3.141591344,
3.141592823, 3.141599476, 3.141596935, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0]
Informatica per la Matematica
Giorgio Meini © 2000
Siamo nuovamente nella situazione verificata in ambiente Excel: la finitezza
dell'aritmetica impiegata nei calcoli produce fenomeni di underflow e di cancellazione
che azzerano i termini della successione a partire da un certo indice in poi; in ambiente
Derive è però possibile intervenire sul numero di cifre impiegate nei calcoli
e ripetere la semplificazione
[2.8284271247461900976, 3.0614674589207181738, 3.1214451522580522855,
3.1365484905459392638, 3.1403311569547529121, 3.1412772509327728682,
3.1415138011443010755, 3.1415729403670913806, 3.1415877252771597313,
3.1415914215112001991, 3.1415923455701173019, 3.1415925765848738428,
3.1415926343385626015, 3.1415926487769988788, 3.1415926523865325040,
3.1415926532892119286, 3.1415926535151062855, 3.1415926536038939641,
3.1415926536101606406, 3.1415926536007606258, 3.1415926545666121457,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0]
Il numero dei termini "azzerati" è ora decisamente inferiore e la precisione delle
approssimazioni fornite sicuramente migliore (l'ultimo termine non nullo - che non è il
più preciso in quanto già risente di errori dovuti al fenomeno della cancellazione
numerica - ha 8 cifre decimali corrette e presenta quindi un errore assoluto inferiore a
10-8). Aumentando ancora le cifre impiegate nei calcoli da Derive
la semplificazione del vettore dimostra la permanenza di termini "azzerati"
[2.828427124746190097603377448419396157139,
3.061467458920718173827679872243190934090,
3.121445152258052285572557895632355854843,
3.136548490545939263814258044436539067556,
3.140331156954752912317118524331690132143,
3.141277250932772868062019770788214408380,
3.141513801144301076328515059456822307948,
3.141572940367091384135800110270761429581,
3.141587725277159700628854262701918739459,
3.141591421511199973997971763740833955890,
3.141592345570117742340375994157369930476,
3.141592576584872665681606092237875308062,
3.141592634338562989095478263627791306375,
3.141592648776985669485107969277177149612,
3.141592652386591345803525521057963755529,
3.141592653288992765271943042173743830565,
3.141592653514593120163348243281094868980,
3.141592653570993208887718344859780980520,
3.141592653585093231068905795335816815944,
3.141592653588618236614208590772865505967,
3.141592653589499488000534660433798010642,
3.141592653589719800847116201025424888244,
3.141592653589774879058761587601897638893,
3.141592653589788648611672934348526478529,
3.141592653589792090999900770893396708829,
3.141592653589792951596957728180735500623,
3.141592653589793166746221966750872513422,
3.141592653589793220533538018943552437817,
3.141592653589793233980367095528156329952,
Informatica per la Matematica
Giorgio Meini © 2000
3.141592653589793237342074487619170207095,
3.141592653589793238182500090458864856465,
3.141592653589793238392606635678155740558,
3.141592653589793238445121649153462242430,
3.141592653589793238458328356221753124359,
3.141592653589793238461429931366579013297,
3.141592653589793238465025507391326767610,
3.141592653589793238466666966011320307622, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0]
che scompaiono dai primi 50 solo raddoppiando ulteriormente il numero di cifre
significative
in questo caso è stata modificata l'espressione-vettore da semplificare in modo che
Derive visualizzasse solo l'ultimo termine calcolato
[3.141592653589793238462643383278483732551771296666640504454582527544
9994277917638]
Le prime 29 cifre decimali di quest'ultimo valore sono tutte corrette: è possibile
verificarlo confrontando il valore calcolato con il valore restitutito da Derive
semplificando la costante π (Derive utilizza un algoritmo più veloce e più preciso di
quello di Tsu Chung-chi per approssimare il valore numerico di π).
X.0.1.7
In conclusione il ricorso a un ambiente di calcolo software in cui la precisione è sotto
il controllo dell'utente (in termini di cifre da impiegare nei calcoli) ha consentito di
migliorare significativamente la precisione complessiva dell'algoritmo di
approssimazione numerica, ma non ha modificato il ruolo reciproco giocato dall'errore
analitico e dall'errore algoritmico: l'errore (sia assoluto che relativo) del metodo
presenta comunque un andamento ad "U" in funzione del numero di iterazioni
effettuate (inizialmente elevato per la presenza di un considerevole errore analitico e
poi, dopo un tratto "stabile" in corrispondenza del quale si ottengono le
approssimazioni migliori, di nuovo elevato a causa della comparsa dell'errore
algoritmico dovuto a fenomeni di underflow-overflow e/o di cancellazioneamplificazione). Il grafico che segue rappresenta la differenza tra le approssimazioni
successive fornite dall'algoritmo e il valore di π calcolato da Derive in funzione del
numero di iterazioni ed è stato tracciato in ambiente Derive rappresentando
graficamente il risultato del seguente comando dopo avere nuovamente impostato la
precisione a 40 cifre significative:
Informatica per la Matematica
Giorgio Meini © 2000
X.0.2
Un algoritmo per il calcolo della radice quadrata
X.0.2.0
Una calcolatrice è in grado di calcolare il valore approssimato della radice quadrata di
un qualsiasi numero con l'accuratezza di molte cifre decimali: come è possibile? Esiste
di fatto un semplice algoritmo numerico capace di determinare il valore della radice
quadrata effettuando ripetutamente semplici operazioni aritmetiche.
X.0.2.1
Dovendo calcolare la radice quadrata di un numero positivo n si scelga casualmente
un numero positivo x 0 considerandolo una prima approssimazione del valore n che
intendiamo approssimare (si scelga il numero x 0 in modo che risulti sicuramente
maggiore di
n , sarà a questo scopo sufficiente che il suo quadrato sia x 0 2 > n ; in
questo modo il numero x 0 costituirà un valore approssimato per eccesso di n ).
n
; si ha che x 0 ⋅ y 0 = n e il valore
n che intendiamo
Calcoliamo y 0 =
x0
approssimare è la media geometrica di x 0 e y 0 : y 0 è un valore approssimato per
difetto di n .
Calcoliamo ora la media aritmetica x1 di x 0 e y 0 :
x1 =
x0 + y0 1 
n 
=  x 0 + 
2
2
x0 
Ricordando che la media aritmetica fra due numeri è maggiore o uguale alla loro
media geometrica2, x1 risulterà compreso fra n e x 0 , quindi x1 sarà un nuovo
valore approssimato per eccesso della n , e sarà un'approssimazione migliore, cioè
più prossima alla n , di quanto non fosse x 0 (infatti x 0 > x1 > n ):
2
Infatti, tenendo conto che a, b ≥ 0 , si ha:
1
(a + b ) ≥ ab ⇔ 1 (a + b )2 ≥ ab ⇔ a 2 + b 2 + 2ab ≥ 4ab ⇔ a 2 + b 2 − 2ab ≥ 0 ⇔ (a − b )2 ≥ 0
2
4
che è vera per ogni valore di a e b .
Informatica per la Matematica
y0
Giorgio Meini © 2000
n
x1
Calcoliamo ora y1 =
x0
n
. Sarà nuovamente x1 ⋅ y1 = n (infatti operiamo nelle stesse
x1
condizioni della fase precedente, essendo comunque x1 > n ) e n è di nuovo la
media geometrica fra x1 e y1 ; y1 sarà quindi un nuovo valore approssimato per
n
n
difetto della n . Inoltre, essendo x 0 < x1 , si ha
>
, cioè y1 > y 0 : anche y1 è un
x1 x 0
valore approssimato per difetto di n e rappresenta un'approssimazione migliore
rispetto a y 0 .
Proseguiamo ripetendo i passaggi svolti in precedenza (infatti è proprio la ripetizione,
o "iterazione", dei calcoli che caratterizza questo tipo di algoritmi numerici denominati
metodi iterativi). Calcoliamo la media aritmetica fra x1 e y1 :
x2 =
x1 + y1 1 
n
=  x1 + 
2
2
x1 
essa rappresenta un nuovo valore approssimato per eccesso di n ed è una
approssimazione migliore, più prossima a n di quanto non fosse x1 . Calcoliamo poi
n
y2 =
, esso sarà un nuovo valore approssimato per eccesso di n , approssimazione
x2
migliore rispetto a y1 .
X.0.2.2
Proseguendo in questo modo risulta definito un algoritmo numerico (un metodo
iterativo) che, partendo da un numero arbitrario x 0 > n , genera una successione di
numeri x1 , x 2 , x 3 ,... definita dalla seguente formula ricorsiva
x i +1 =
n
1
 x i + 
2
xi 
Tutti i valori della successione sono maggiori o uguali a n e ogni valore approssima
n meglio del precedente: si tratta di una successione convergente perché decrescente
e inferiormente limitata. Generalizzando i passi descritti in precedenza è possibile
dimostrare per induzione che
lim
i →∞
X.0.2.3
xi = n
La precedente formula ricorsiva definisce un algoritmo per il calcolo approssimato
della radice quadrata che può essere facilmente implementato mediante una funzione
Informatica per la Matematica
Giorgio Meini © 2000
codificata in linguaggio VBA per l'ambiente Excel3 avente come parametri il numero n
e il valore iniziale x 0 e che restituisce come risultato il valore di n :
Public Function radice(n As Single, x0 As Single) As Single
Dim x As Single
x = x0
While ((x * x) <> n)
x = 0.5 * (x + n / x)
Wend
radice = x
End Function
La caratteristica di ricorrenza della formula è realizzata nel programma che codifica
l'algoritmo mediante un ciclo iterativo che calcola il nuovo valore x a partire dal
precedente valore della stessa variabile x, partendo dal valore iniziale x 0 passato come
parametro; il ciclo ha termine quando il valore approssimato della radice elevato al
quadrato (in realtà moltiplicato per sé stesso) è uguale al valore di n.
È possibile verificare il corretto funzionamento della funzione radice(…) utilizzandola
in una formula di cella in un foglio Excel (a questo scopo è sufficiente memorizzarla in
un modulo VBA):
La convenzione di fissare il valore iniziale dell'algoritmo (secondo parametro della
funzione) al valore di cui si richiede l'approssimazione della radice (primo parametro)
nel caso che questo sia maggiore di 1, o di fissarlo a 1 altrimenti, consente di rispettare
l'ipotesi di costruzione dell'algoritmo stesso ( x 0 > n ); questa soluzione può essere
implementata nello stesso algoritmo realizzando una funzione VBA che ha come unico
argomento il valore del quale restituisce la radice quadrata:
Public Function radice(n As Single) As Single
Dim x As Single
If (n >= 1) Then x = n Else x = 1
While ((x * x) <> n)
x = 0.5 * (x + n / x)
Wend
radice = x
End Function
3
Il linguaggio di programmazione Visual Basic for Applications dispone della funzione standard
Sqr(…) che restituisce il valore approssimato della radice quadrata dell'argomento: in questo contesto il
linguaggio viene impiegato come strumento per formalizzare e implementare un algoritmo.
Informatica per la Matematica
X.0.2.4
Giorgio Meini © 2000
La condizione di terminazione del ciclo della funzione radice(…) è molto incerta;
infatti, se gli errori di calcolo e gli errori di rappresentazione numerica impediscono la
determinazione di un risultato esatto (almeno relativamente all'aritmetica finita
impiegata), il ciclo si ripete indefinitamente senza migliorare la precisione dell'ultimo
valore. È ciò che accade se si cerca di approssimare 2 con la formula radice(2;2):
l'intero ambiente di esecuzione (Excel) si blocca perché il ciclo della funzione
radice(…) non ha termine.
Il seguente programma VBA - implementato come procedura attivabile in ambiente
Excel mediante un "pulsante di comando" - realizza una condizione di terminazione
del ciclo dell'algoritmo più sicura rispetto alla precedente, assicurando al tempo stesso
un risultato affetto da un errore minore di E = 0,0000014 (il controllo dell'errore viene
effettuato calcolando il valore assoluto5 della differenza dei valori approssimati per
difetto e per eccesso e confrontandolo con il massimo errore accettabile rappresentato
dalla constante E):
Private Sub Radice_Click()
Dim i As Integer
Dim x, y As Single
Dim n As Single
Const E As Single = 0.000001
Const C As Integer = 100
n = Cells(1, 1)
i = 1
If (n >= 1) Then x = n Else x = 1
y = n / x
Cells(1, 2) = y
While (Abs(x - y) >= E) And (i < C)
x = (x + y) / 2
y = n / x
i = i + 1
Cells(i, 1) = x
Cells(i, 2) = y
Wend
End Sub
Allo scopo di verificare il funzionamento del codice la procedura utilizza come valore
di input il contenuto della cella A1 (Cells(1,1)) e scrive nelle celle delle colonne A e B
(rispettivamente di indice 1 e 2: Cells(i,1) e Cells(i,2)) le successioni delle
approssimazioni per eccesso e per difetto calcolate per ogni ciclo dell'iterazione (la
variabile intera i ha la funzione di contatore del numero di cicli effettuati e la
condizione di terminazione del ciclo comprende un controllo di tale contatore che
impedisce di superare le 100 iterazioni anche in mancanza di "convergenza"
dell'algoritmo):
4
Il valore massimo dell'errore accettabile può ovviamente essere definito diversamente, ma è
importante non impostare un valore inferiore alla minima differenza tra due valori rappresentabili nel
formato numerico utilizzato dall'hardware per le variabili di tipo Single del VBA.
5 La funzione VBA standard Abs(…) restituisce il valore assoluto dell'argomento.
Informatica per la Matematica
Giorgio Meini © 2000
Excel consente di rappresentare graficamente le successioni dei valori approssimati per
eccesso (xi) e per difetto (yi) prodotte dall'algoritmo:
3
2
Xi
Yi
1
0
1
2
3
4
5
i
Grafici di convergenza come questo consentono di studiare il comportamento
numerico con il quale l'algoritmo costruisce approssimazioni successivamente migliori
della radice quadrata del numero n e rendono visibile il fatto che le successioni xi e yi
costituiscono due classi di valori con y i < n < xi per ogni i e con la differenza
xi − yi che diminuisce progressivamente ad ogni successiva iterazione: è di fatto
questa proprietà che consente il controllo della precisione consistente in una
valutazione certa del massimo errore assoluto da cui è affetto il risultato numerico
fornito.
X.0.2.5
L'uso ripetuto della procedura per il calcolo della radice quadrata con vari valori
numerici dimostra empiricamente che l'algoritmo non risente - o almeno non
catastroficamente come nel precedente esempio relativo all'approssimazione di π degli errori dovuti alla finitezza dell'aritmetica impiegata per i calcoli: si parla in
questo caso di stabilità numerica dell'algoritmo e della sua implementazione. La
stabilità numerica di un algoritmo dovrebbe essere rigorosamente dimostrata: ci
limiteremo ad osservare che la formula ricorsiva che definisce questo algoritmo è priva
di operazioni potenzialmente in grado di generare condizioni di underflow/ overflow, o
fenomeni di cancellazione/amplificazione.
Informatica per la Matematica
X.0.2.6
Giorgio Meini © 2000
L'algoritmo implementato effettua un limitato numero di operazioni elementari per
ogni ciclo: è senz'altro possibile ipotizzare che il tempo impiegato per effettuare queste
operazioni è indipendente dai valori numerici ai quali sono applicate ed è quindi
costante per uno specifico ambiente hardware/software di esecuzione. La complessità
computazionale dell'algoritmo dipende quindi esclusivamente dal numero di cicli
effettuati che dipende a sua volta, e in modo non banale, dal valore fornito come input;
in questo caso, come in molti altri analoghi, è possibile, se non determinare
esattamente il numero di cicli necessari per costruire un risultato avente una precisione
stabilita a priori, almeno calcolare una maggiorazione certa del numero di cicli
necessari per la terminazione dell'algoritmo in funzione dell'input fornito.
Per semplicità limiteremo la nostra analisi al solo caso n > 1 per il quale abbiamo
stabilito x0 = n. Prendendo in considerazione la sola successione xi dei valori
approssimati per eccesso di n non è difficile dimostrare che l'errore presente al
passo i + 1 ( xi +1 − n ) è minore della metà dell'errore presente al precedente passo i
( xi − n ):
xi +1 − n <
(
)
1
xi − n ⇔
2
n
1
1
1
 xi +  − n < xi −
n⇔
xi 
2
2
2
1
1 n
1
1
xi + ⋅ − n < xi −
n⇔
2
2 xi
2
2
n
1 n 1
⋅ <
n⇔
< n
xi
2 xi 2
n
< xi ⇔ n < xi
n
Tenendo conto che xi > n per ogni i l'affermazione da dimostrare è vera ed implica
che l'errore diminuisce progressivamente più che dimezzandosi ad ogni successiva
iterazione dell'algoritmo; dato che x0 = n il numero i di iterazioni necessarie per la
terminazione dell'algoritmo è legato al massimo errore consentito E dalla relazione
n− n
< E dalla quale si ricava che i è il più piccolo intero che soddisfa la relazione
i
2
i > lg 2
n− n
E
La velocità di convergenza dell'algoritmo è quindi legata al più piccolo intero i che
soddisfa la precedente relazione; fissato E = 10-6 la seguente tabella riporta il massimo
numero di iterazioni necessarie per la terminazione dell'algoritmo in funzione di alcuni
valori di n6:
6
In realtà la velocità di convergenza dell'algoritmo preso in considerazione è - come è possibile
verificare eseguendolo in ambiente Excel nella versione che traccia i risultati intermedi - notevolmente
migliore (il numero di iterazioni necessarie alla terminazione è cioè molto inferiore): non è però facile
dimostrare formalmente una maggiorazione inferiore dell'errore commesso ad ogni iterazione.
Informatica per la Matematica
Giorgio Meini © 2000
n
4
9
16
25
36
49
64
81
iterazioni
21
23
24
25
25
26
26
27
Informatica per la Matematica
X.0.3
Giorgio Meini © 2000
Sintesi
I metodi numerici sono impiegati - nella forma di algoritmi numerici - per
produrre approssimazioni di valori non determinabili, o difficilmente
determinabili, ricorrendo a un metodo algebrico;
molti metodi numerici consistono in una successione numerica definita per
ricorrenza il cui limite rappresenta il valore esatto di cui si intende fornire una
approssimazione calcolando un termine per il quale l'errore (la "distanza" dal
limite teorico della successione) sia inferiore alla precisione richiesta;
la formula ricorsiva che definisce un metodo numerico viene solitamente
implementata in forma algoritmica mediante un ciclo le cui successive iterazioni
calcolano il valore da approssimare in funzione dell'approssimazione precedente
(metodo iterativo, il valore iniziale è normalmente stabilito dall'utente del
metodo);
la condizione di terminazione del ciclo è basata sul controllo della precisione del
risultato parziale ottenuto (errore assoluto e/o relativo), una ulteriore condizione di
terminazione basata sul numero massimo di iterazioni può essere aggiunta per la
gestione non catastrofica delle situazioni in cui il metodo non converge;
l'errore complessivo di un algoritmo numerico è scomponibile in una componente
dovuta al ricorso ad un metodo per sua natura approssimato (errore analitico) e in
una componente dovuta agli errori di rappresentazione e di calcolo inevitabili in un
contesto di aritmetica finita (errore algoritmico);
err. analitico
err. algoritmico
err. complessivo
iterazioni
se l'implementazione di un algoritmo numerico è immune dalle conseguenze
dell'accumulazione e dell'amplificazione degli errori di calcolo e non introduce
fenomeni di cancellazione numerica o potenziali condizioni di underflow e
overflow si parla di stabilità numerica dell'algoritmo;
la complessità computazionale di un algoritmo numerico è direttamente legata al
numero di cicli da effettuare: la ricerca di una maggiorazione significativa
dell'errore commesso per ogni ciclo di iterazione consente di determinare il
numero di cicli necessario ad approssimare, con la precisione richiesta, uno
specifico valore (velocità di convergenza).
Informatica per la Matematica
X.0.4
Giorgio Meini © 2000
Esperimenti
1. Scrivere una funzione VBA che abbia come argomento il numero di iterazioni da
effettuare e restituisca una approssimazione del valore π calcolata con il metodo di
Tsu Chung-chi. Utilizzare l'ambiente Excel per determinare il numero di iterazioni
che fornisce la migliore precisione.
2. # La seguente formulazione ricorsiva rappresenta i termini fi della successione di
Fibonacci:
f0 = 0


f1 = 1

f = f + f
i
i −1
 i +1
utilizzare Excel per studiare numericamente i rapporti f i +1 e f i tra due termini
fi
f i +1
successivi della successione al crescere dell'indice i. Ripetere lo studio con Derive
utilizzando la rappresentazione razionale. In base ai risultati ottenuti determinare
empiricamente le relazioni esistenti tra lim f i +1 e lim f i ?
i →∞ f i
i →∞ f i +1
3. Implementare in ambiente Excel - utilizzando esclusivamente formule di cella l'algoritmo per il calcolo numerico approssimato della radice quadrata.
4. Utilizzare in ambiente Excel la procedura VBA per il calcolo approssimato della
radice quadrata proposta nel testo per studiare (eventualmente costruendo alcuni
grafici di convergenza) il comportamento dell'algoritmo al variare del valore
iniziale x0.
5. Da un'analisi dei grafici di (non) convergenza prodotti giustificare il
comportamento dell'algoritmo per il calcolo della radice quadrata per valori
negativi dell'argomento.
Informatica per la Matematica
Giorgio Meini © 2000
X.1
Risoluzione approssimata di equazioni
X.1.0
Equazioni impossibili?
Molte equazioni presentano soluzioni che non sono determinabili con metodi algebrici.
Per esempio utilizzando il comando Risolvi-Algebricamente in ambiente Derive per
risolvere l'equazione trigonometrica
cos x = x
il sistema non fornisce la soluzione corrispondente allo zero della funzione
f ( x) = x − cos x
la cui esistenza è confermata dall'analisi del grafico prodotto con Derive stesso.
Risolvendo la stessa equazione con il comando Risolvi-Numericamente si ottiene la
seguente approssimazione della soluzione che è in accordo con il grafico tracciato e la
cui precisione può essere migliorata agendo sul numero di cifre significative utilizzate
da Derive:
Come è stato possibile per l'ambiente software determinare la soluzione, anche se in
forma approssimata, in assenza di una procedura algebrica di risoluzione? Il comando
Risolvi-Numericamente di Derive impiega un algoritmo numerico per approssimare la
soluzione di una equazione.
Informatica per la Matematica
Giorgio Meini © 2000
X.1.1
Individuazione e separazione delle radici di una funzione
X.1.1.0
Il comando Risolvi-Numericamente di Derive richiede di specificare gli estremi di un
intervallo che comprenda al suo interno la soluzione dell'equazione che si intende
approssimare (e, possibilmente, solo essa). Tutti i metodi numerici per la risoluzione
approssimata di equazioni che prenderemo in esame necessitano di questa
informazione iniziale. In alcuni semplici casi è possibile individuare un intervallo
contenente la sola soluzione da approssimare "scomponendo" l'equazione in un
sistema equivalente facilmente risolvibile con il metodo grafico; l'esempio del
paragrafo precedente è equivalente al sistema
 y = cos x

 y=x
le cui equazioni sono di immediata rappresentazione grafica:
Dato che la soluzione dell'equazione iniziale coincide con l'ascissa del punto di
intersezione tra le curve che rappresentano graficamente le equazioni del sistema
equivalente, è facile determinare come intervallo iniziale per l'applicazione di un
metodo numerico di risoluzione l'intervallo  1 ;1 che comprende sicuramente una (e
2 
 
una sola) soluzione.
X.1.1.1
In generale le soluzioni dell'equazione
f ( x) = 0
corrispondono agli zeri della funzione f(x) il cui grafico può essere facilmente tracciato
in ambiente Derive al fine di individuare i singoli intervalli contenenti una e una sola
Informatica per la Matematica
Giorgio Meini © 2000
radice dell'equazione. Questa fase preliminare - nota come "separazione delle radici" è necessaria per l'impiego di un qualsiasi metodo numerico di risoluzione di
un'equazione; inoltre nella Finestra Grafici-2D dell'ambiente Derive è possibile
posizionare il cursore a "croce" sul punto in cui il grafico della funzione f(x) interseca
l'asse cartesiano orizzontale per leggere l'ascissa approssimata dello zero
corrispondente.
Esempio
Per risolvere l'equazione7
x3 + x + 1 = 0
si traccia con Derive il grafico della funzione
f ( x) = x 3 + x + 1
che consente di individuare l'intervallo di separazione [-1;0] comprendente l'unica8
radice dell'equazione. La coordinata orizzontale del cursore a "croce" posizionato sullo
zero del grafico di f(x) è -0,68367; un ingrandimento (zoom) del grafico seguito dal
riposizionamento della croce-cursore consente di leggere come approssimazione della
coordinata dello zero il valore -0,68265
7
In realtà esiste una formula algebrica risolutiva per le equazioni polinomiali di III grado, ma - data la
sua complessità - è preferibile l'applicazione di un metodo numerico per la determinazione di una
soluzione approssimata.
8
Una equazione polinomiale di III grado può avere fino a 3 radici reali, ma l'analisi del segno delle
2
funzione derivata prima f ' ( x ) = 3 x + 1 conferma la crescenza della funzione per ogni valore reale
assunto dalla variabile x e, come conseguenza della continuità di f(x) stessa, l'impossibilità dell'esistenza
di altre radici.
Informatica per la Matematica
Giorgio Meini © 2000
L'applicazione del comando Risolvi-Numericamente di Derive indicando come estremi
inferiore e superiore rispettivamente -1 e 0 e impostando il numero di cifre
significative da impiegare nel calcolo a 12 fornisce il seguente risultato:
La corretta determinazione degli intervalli di separazione delle radici consente inoltre
di applicare un metodo numerico per approssimare le diverse soluzioni della stessa
equazione.
Esempio
Per determinare le radici dell'equazione esponenziale
2x + 2 = 2 x
sia l'analisi del grafico della funzione
f ( x) = 2 x + 2 − 2 x
che l'analisi della rappresentazione grafica del sistema equivalente
 y = 2x + 2

x
 y=2
Informatica per la Matematica
Giorgio Meini © 2000
permettono di individuare gli intervalli [-2;0] e [2;4] come intervalli di separazione
delle due radici dell'equazione. In ambiente Derive l'applicazione del comando RisolviNumericamente ai due diversi intervalli produce come risultato i valori approssimati
delle due soluzioni ricercate (in realtà, come è possibile verificare, il secondo valore
rappresenta esattamente la radice dell'equazione):
Quali metodi consentono di ottenere risultati come quelli prodotti dal comando
Risolvi-Numericamente di Derive? I prossimi paragrafi costituiscono una rassegna dei
principali algoritmi numerici utilizzati per la risoluzione approssimata delle equazioni.
X.1.2
Il metodo di bisezione
X.1.2.0
Un importante teorema relativo alle funzioni reali di variabile reale (teorema degli
zeri) afferma:
se una funzione f è continua in un intervallo [a;b] e il segno di f(a) è discorde
rispetto al segno di f(b) allora esiste almeno uno zero z della funzione compreso
nell'intervallo [a;b].
X.1.2.1
Un metodo elementare per approssimare la radice c dell'equazione f(x) = 0 consiste nel
definire un algoritmo numerico che suddivide l'intervallo [a;b] a metà determinando a+b
in base al segno assunto dalla funzione nel punto medio c =
- in quale dei due
2
Informatica per la Matematica
Giorgio Meini © 2000
sottointervalli è compresa la radice z; l'algoritmo procede ricorsivamente suddividendo
a metà il nuovo intervallo così individuato per arrestarsi quando l'ampiezza
dell'intervallo preso in considerazione, che si riduce progressivamente, è minore del
massimo errore tollerabile per l'approssimazione.
Esempio
L'equazione studiata nel paragrafo precedente
x3 + x + 1 = 0
3
ha una sola soluzione compresa nell'intervallo [-1;0]. La funzione f ( x) = x + x + 1
ha segno negativo nel punto a = -1 (f(-1) = -1) e positivo nel punto b = 0 (f(0) = +1).
Il punto medio dell'intervallo [-1;0] è c = -0,5 e f(-0,5) = +0,375: le ipotesi del teorema
degli zeri (discordanza del segno della funzione agli estremi dell'intervallo) sono
applicabili al sottointervallo [-1;-0,5] la cui ampiezza è la metà dell'intervallo
originale.
Il punto medio dell'intervallo [-1;-0,5] è -0,75 e f(-0,75) = -0,171875: il nuovo
intervallo per il quale sono verificate le ipotesi del teorema degli zeri è [-0,75;-0,5].
Il punto medio dell'intervallo [-0,75;-0,5] è -0,625: dato che f(-0,625) = +0,130859375
il successivo intervallo è [-0,75;-0,625].
Il punto medio dell'intervallo è -0,6875 e f(-0,6875) = -0,012451171875: il nuovo
intervallo è [-0,6875;-0,625]. Questo intervallo - che comprende la radice
dell'equazione da approssimare - ha ampiezza minore di 10-1: uno qualsiasi dei due
estremi rappresenta quindi una approssimazione della soluzione che presenta un errore
assoluto certamente minore di 0,1.
La funzione bisezione(…) applica l'algoritmo numerico descritto a una funzione f(x)
codificata nello stesso modulo VBA a partire da un intervallo iniziale [a;b] i cui
estremi sono passati come argomenti; nell'implementazione dell'algoritmo è stato
aggiunto un controllo per verificare l'eventualità che il punto medio calcolato in una
delle iterazioni del ciclo sia esattamente lo zero della funzione:
Private Const E As Single = 0.000001 'errore massimo tollerabile
Private Function f(x As Single) As Single
f = ...
End Function
Informatica per la Matematica
Giorgio Meini © 2000
Public Function bisezione(a As Single, b As Single) As Single
Dim c As Single
While (Abs(b - a) > E)
c = (a + b) / 2
If f(c) = 0 Then
bisezione = c
Exit Function
End If
If (f(a) * f(c) < 0) Then
b = c
Else
a = c
End If
Wend
bisezione = a
End Function
L'errore massimo tollerabile E è stato fissato ad un valore costante predefinito
compatibile con la risoluzione dei valori Single del linguaggio VBA, ma è ovviamente
possibile passarlo alla funzione bisezione(…) come ulteriore argomento.
Esempio
Per impiegare la funzione che implementa l'algoritmo di bisezione nella
3
determinazione approssimata dello zero della funzione f ( x) = x + x + 1 è sufficiente
codificare l'espressione VBA che ne calcola il valore
Private Function f(x As Single) As Single
f = x^3 + x + 1
End Function
e utilizzare la funzione bisezione(…) in una cella Excel fornendo come argomenti gli
estremi dell'intervallo di separazione della soluzione
Osservazione
In ambiente Derive è possibile definire una funzione ricorsiva bisezione(…) che
approssima lo zero di una funzione f(x):
Informatica per la Matematica
Giorgio Meini © 2000
L'applicazione ricorsiva della funzione bisezione(…) si arresta se è verificata la
condizione a − b < e con e massimo errore tollerabile nell'approssimazione dello zero
di f(x); in caso contrario l'applicazione della funzione avviene con parametri diversi
(sono gli estremi del sottointervallo preso di volta in volta in considerazione) in
funzione del segno di f (a) ⋅ f (c) , con c = a + b .
2
L'approssimazione dell'invocazione della funzione bisezione(…) con gli estremi
dell'intervallo di separazione dello zero come parametri produce il risultato atteso:
Osservazione
La condizione di terminazione indicata è l'unica che garantisce il controllo della
precisione del risultato fornito. Una condizione alternativa prevede di terminare il
ciclo quando
f (c ) < E
dove E è il massimo errore tollerabile, ma - come illustra il grafico che segue - un
valore "piccolo" dell'ordinata della funzione non implica che l'ascissa corrispondente
sia prossima a uno zero.
In ogni caso il valore della costante E non può essere arbitrariamente piccolo perché
gli errori di calcolo e di rappresentazione numerica potrebbero invalidare qualsiasi
condizione di terminazione relativa a E.
X.1.2.2
La complessità computazionale dell'algoritmo di bisezione dipende dal calcolo della
funzione f(x) che viene valutata in relazione ad un nuovo valore per ogni iterazione del
ciclo. Non è però difficile stabilire l'esatto numero di iterazioni che garantiscono
l'approssimazione dello zero ricercato con un errore minore del valore E a partire da
un determinato intervallo di separazione [a;b] tenendo conto che ad ogni iterazione
l'ampiezza dell'intervallo preso in considerazione si dimezza rispetto all'intervallo
precedente. Dopo i iterazioni si avrà che l'ampiezza dell'intervallo considerato è
Informatica per la Matematica
Giorgio Meini © 2000
b−a
2i
e, dato che la terminazione del ciclo avverrà alla i-esima iterazione solo se
b−a
2i
<E⇔
b−a
b − a
< 2 i ⇔ log 2 
<i
E
 E 
il numero di iterazioni necessarie per la terminazione dell'algoritmo è il più piccolo
intero i che soddisfa la disuguaglianza
b − a
i > log 2 

 E 
X.1.3
Iterazione funzionale
X.1.3.0
Se si scrive l'equazione di cui si intendono determinare le radici nella forma
g ( x) = x
allora le eventuali soluzioni sono note come punti fissi della funzione g(x) e - in
alcuni casi - possono essere approssimate con metodi iterativi basati sulla formula
ricorsiva
xi +1 = g ( xi )
dove x0 rappresenta un'approssimazione iniziale.
Esempio
Per applicare il metodo di iterazione funzionale all'equazione cos x = x è possibile
impostare le seguenti formule in Excel (il valore 0 nella cella A1 è l'approssimazione
iniziale x0)
e utilizzare le funzionalità dell'ambiente per "copiarle" nelle righe sottostanti
Informatica per la Matematica
Giorgio Meini © 2000
ottenendo come risultato lo svolgimento dei calcoli impostati
La successione di valori si avvicina progressivamente (alternando approssimazioni
per eccesso e per difetto) al valore della radice determinato nel paragrafo introduttivo
con Derive (0,739085); quando la differenza tra due valori successivi diviene più
piccola dell'errore commesso dall'ambiente Excel nel calcolare il valore della funzione
il risultato si comporta come "punto fisso" della funzione
e può essere considerato un'approssimazione della radice dell'equazione.
Il procedimento di iterazione funzionale può essere interpretato geometricamente nel
diagramma cartesiano dove sono rappresentate graficamente la funzione y=g(x) e la
retta y=x:
Informatica per la Matematica
Giorgio Meini © 2000
Le linee verticali rappresentano la valutazione della funzione g(x) in corrispondenza
dei singoli valori xi della successione, mentre le linee orizzontali consentono di
determinare - mediante la retta y=x - il valore successivo xi+1 della successione; le
proiezioni dei vertici della spezzata formata dalle linee di costruzione sull'asse delle
ascisse rappresentano i valori della successione prodotti dal metodo.
L'istruzione
ITERATES(f(x)x,x0,n)
costruisce un vettore
di n valori risultanti
dell'applicazione
iterata della funzione
f(x) a partire dal valore
iniziale x0 per 0, 1, 2,
… n volte; l'istruzione
ITERATE fornisce
esclusivamente
l'ultimo valore
dell'iterazione.
Il metodo di iterazione funzionale può essere facilmente implementato in ambiente
Derive ricorrendo all'istruzione ITERATES la cui semplificazione simbolica illustra
perfettamente l'idea che informa il metodo; per esempio nel caso che g(x) sia cos(x) si
ha:
Ricorrendo al comando di approssimazione numerica si ottiene la successione i cui
valori eventualmente convergono al punto fisso della funzione iterata:
L'istruzione ITERATE restituisce l'ultimo termine della successione costruita iterando
l'applicazione della funzione a partire dal valore iniziale:
Il teorema seguente assicura, nell'ipotesi di continuità della funzione g(x), che i valori
forniti dall'algoritmo, quando convergenti, sono effettivamente approssimazioni della
radice dell'equazione g(x) = x.
Informatica per la Matematica
Giorgio Meini © 2000
Teorema
Se g ( x) è continua nell'intervallo [a; b] e la successione dei valori definita dalla
formula ricorsiva xi +1 = g ( xi ) è convergente e tale che xi ∈ [a; b] per ogni indice
i allora x = lim xi è un punto fisso della funzione g ( x) .
i →∞
La dimostrazione è una diretta conseguenza di una delle proprietà dei limiti di funzioni
continue:


x = lim xi +1 = lim g ( xi ) = g  lim xi  = g x
i →∞
i →∞
 i →∞ 
()
Esempio
Per determinare le due soluzioni (0 e 1) dell'equazione x 2 = x mediante l'algoritmo di
iterazione funzionale è necessario modificare la formula della cella B1 dell'esempio
precedente e "copiarla" nelle celle sottostanti della colonna B
per ottenere come risultato la successione delle approssimazioni.
Contrariamente all'esempio precedente, dove per qualsiasi valore iniziale la
successione convergeva al valore della radice dell'equazione, in questo caso nessuna
scelta del valore iniziale contenuto nella cella A1 consente di approssimare il valore 1
e solo alcuni valori danno luogo a una successione convergente a 0. Il grafico che
segue mostra chiaramente che per qualsiasi valore iniziale positivo minore di 1 la
successione generata dall'algoritmo converge al valore 0, mentre per qualsiasi valore
iniziale maggiore di 1 essa diverge.
Informatica per la Matematica
X.1.3.1
Giorgio Meini © 2000
Dimostriamo ora un importante teorema che esprime una condizione sufficiente, anche
se non strettamente necessaria, per la convergenza dell'algoritmo di iterazione
funzionale.
Teorema (di convergenza del metodo di iterazione funzionale)
Se
x è un punto fisso della funzione g ( x)
g ( x) ha derivata continua g ' ( x) nell'intervallo [ x − r ; x + r ]
g ' ( x) < 1 nell'intervallo [ x − r ; x + r ]
x0 è un punto dell'intervallo [ x − r ; x + r ]
xi +1 = g ( xi ) è la formula ricorsiva che definisce l'algoritmo iterativo
allora
l'algoritmo converge al punto fisso della funzione g ( x) :
lim xi = x .
i →∞
Si dimostra per induzione la validità della seguente relazione per ogni indice i
xi − x ≤ M i r
Informatica per la Matematica
Giorgio Meini © 2000
dove M > 0 è il valore massimo assunto dal modulo della funzione derivata g ' ( x)
nell'intervallo [ x − r ; x + r ] . Essendo M < 1 ciò implica che lim xi − x = 0 e quindi
i →∞
la tesi.
Per i = 0 la relazione è vera in quanto per ipotesi x0 appartiene all'intorno di raggio r
del punto fisso x , cioè all'intervallo [ x − r ; x + r ] .
Per i > 0 l'ipotesi induttiva è
xi −1 − x ≤ M i −1r
e, per il teorema del valor medio di Lagrange, si ha
xi − x = g ( xi −1 ) − g ( x) = g ' (ε )( xi −1 − x)
con ε appartenente all'intervallo di estremi xi −1 e x e quindi all'intervallo
[ x − r ; x + r ] ; perciò g ' (ε ) ≤ M < 1 e di conseguenza
xi − x ≤ g ' (ε ) xi −1 − x ≤ M i r .
Osservazione
Le ipotesi del teorema precedente sono di difficile verifica in un intorno circolare di
raggio r del punto fisso x dato che esso non è noto! Per applicare l'algoritmo ad una
funzione g(x) è sufficiente assicurare che la funzione derivata g'(x) assuma valori in
modulo minori di 1 in un intervallo [a;b] contenente un solo punto fisso x e scegliere
come valore iniziale l'estremo più prossimo al punto fisso stesso: in questo modo le
ipotesi del teorema sono verificate nel massimo intorno circolare avente x come
centro e interamente contenuto nell'intervallo. Per ovviare all'impossibilità di
effettuare la scelta non conoscendo il valore di x il valore iniziale può essere associato
casualmente a uno dei due estremi dell'intervallo [a;b]: se si verifica che un valore
della successione è esterno all'intervallo si ripete l'esecuzione dell'algoritmo
scegliendo come valore iniziale l'altro estremo.
Il teorema precedente individua una casistica di convergenza del metodo:
a) g'(x) > 1
il metodo non converge producendo una successione monotona;
Informatica per la Matematica
Giorgio Meini © 2000
b) 0 < g'(x) < 1
il metodo converge producendo una successione monotona;
c) -1 < g'(x) < 0
il metodo converge producendo una successione non monotona;
d) g'(x) < -1
il metodo non converge producendo una successione non
monotona.
Esempio
Per risolvere numericamente l'equazione
x3 + 4x − 2 = 0
che presenta una sola radice nell'intervallo [0;1] con il metodo di iterazione funzionale
è possibile riscriverla come
2 − x3
x=
,
4
oppure come
x=
2 − 4x
x2
.
Nel primo caso
2 − x3
g ( x) =
4
Informatica per la Matematica
Giorgio Meini © 2000
Derive consente di rappresentare graficamente la funzione derivata g'(x) e di affermare
che sono verificate le ipotesi del teorema di convergenza nell'intervallo [0;1]
Applicando in ambiente Derive il metodo con valore iniziale 0 si ottiene una corretta
approssimazione della radice ricercata:
Nel secondo caso
g ( x) =
2 − 4x
x2
rappresentando graficamente con Derive la funzione derivata g'(x) si nota che non
sono verificate le ipotesi del teorema di convergenza nell'intervallo [0;1]
Informatica per la Matematica
Giorgio Meini © 2000
Applicando il metodo con valore iniziale 1 la successione dei valori prodotti non
converge:
X.1.3.3
Nella dimostrazione del teorema di convergenza del metodo di iterazione funzionale si
è dimostrata la validità per ogni indice i della relazione
xi − x ≤ M xi −1 − x
con M valore massimo assunto dal modulo della funzione derivata g'(x) nell'intervallo
di lavoro. Nella relazione precedente M compare come valore minimo del rapporto di
riduzione dell'errore assoluto in una singola iterazione del metodo: la velocità di
convergenza dell'algoritmo dipende quindi dai valori assunti dalla derivata della
funzione in prossimità del punto fisso ricercato.
Una classica condizione di terminazione per il ciclo dell'algoritmo di iterazione
funzionale è la seguente
xi − xi −1 < E
con E>0 costante compatibile con la precisione dell'ambiente di calcolo. Che relazione
esiste tra questa condizione di terminazione e il controllo della precisione della
soluzione approssimata costruita dall'algoritmo?
Informatica per la Matematica
Giorgio Meini © 2000
Nella dimostrazione del teorema di convergenza del metodo di iterazione funzionale si
è ottenuto, applicando il teorema del valor medio di Lagrange, il seguente risultato
xi − x = g ( xi −1 ) − g ( x) = g ' (ε )( xi −1 − x)
valido per ogni valore di i e con ε appartenente all'intervallo di estremi xi −1 e x . Ora,
dato che
( xi − xi −1 ) = ( xi − x) − ( xi −1 − x) = g ' (ε )( xi −1 − x) − ( xi −1 − x) = [g ' (ε ) − 1]( xi −1 − x)
si ha
xi −1 − x =
xi − xi −1
E
<
g ' (ε ) − 1 g ' (ε ) − 1
da cui si deduce che l'errore assoluto associato alla condizione di arresto è maggiorato
dalla tolleranza E solo se il valore assunto dalla derivata della funzione g(x) in
prossimità del punto fisso è minore di 0, cioè se la funzione g(x) è decrescente (in
questo caso il metodo fornisce una successione non monotona i cui valori sono
alternativamente approssimazioni per eccesso e per difetto del punto fisso). In caso
contrario l'errore può essere tanto più grande quanto più prossimo a 1 (valore massimo
compatibile con la convergenza del metodo) è il valore assunto dalla derivata della
funzione g(x) nell'intorno del punto fisso.
Osservazione
Il metodo dell'iterazione funzionale, quando convergente, è estremamente stabile sotto
l'aspetto numerico: infatti l'eventuale errore commesso nel calcolo della funzione g(xi)
in una delle iterazioni perturba il successivo valore xi+1 che - a condizione che non sia
esterno rispetto all'intervallo in cui valgono le ipotesi del teorema di convergenza può essere considerato a tutti gli effetti un nuovo valore iniziale e, in questo senso, il
metodo può essere considerato "autocorrettivo". Ovviamente, volendo impiegare la
condizione di terminazione descritta, occorre valutare che la minima differenza tra due
valori successivi generati dall'algoritmo è vincolata alla precisione con cui l'ambiente
di calcolo è in grado di valutare i valori assunti dalla funzione g(x).
X.1.4
I metodi iterativi delle tangenti e delle secanti
X.1.4.0
Per determinare numericamente l'unica radice compresa nell'intervallo [a; b]
dell'equazione
f ( x) = 0
con il metodo di iterazione funzionale è necessario trasformarla in una equazione
equivalente della forma
x = g ( x)
Informatica per la Matematica
Giorgio Meini © 2000
Un metodo generale valido nell'ipotesi che f(x) sia continua e derivabile con derivata
continua nell'intervallo [a;b] consiste nel determinare xi +1 a partire da xi ∈ [a; b]
come intersezione con l'asse delle ascisse della retta passante per il punto ( xi ; f ( xi )) e
avente coefficiente angolare m( xi ) dipendente dal valore di xi ; l'equazione della retta
è
y − f ( x i ) = m( x i )( x − x i )
da cui, ponendo y = 0 , si ricava la formula ricorsiva
x x +1 = xi −
f ( xi )
m( x i )
che definisce il metodo iterativo.
f(xi)
y=f(x)
y=m(xi)x+…
z
xi+1
xi
Tra i metodi definiti da una opportuna scelta della funzione m( x) - con m( x) ≠ 0
nell'intervallo [a; b] - si trovano i due più noti algoritmi numerici per
l'approssimazione delle radici dell'equazione f ( x) = 0 :
metodo
delle "tangenti"
delle "secanti"
X.1.4.1
m(x)
f'(x)
f ( x ) − f (c )
x−c
Il metodo delle tangenti (noto anche come metodo di Newton)
xi +1 = xi −
f ( xi )
f ' ( xi )
Informatica per la Matematica
Giorgio Meini © 2000
ha una semplice interpretazione geometrica: il valore xi+1 è l'ascissa del punto
di intersezione con l'asse orizzontale della retta tangente alla funzione f(x) nel
punto (xi;f(xi)).
x0
x1 x2
x3
z
Esempio
La funzione
f ( x) = 2 x + 2 − 2 x
presenta - come è possibile verificare tracciandone il grafico in ambiente
Derive - due zeri separati dagli intervalli [-1;0] e [2;4]. In Derive, ricorrendo al
comando di derivazione simbolica, non è difficile impostare la funzione N(x)
che implementa il metodo di Newton per la funzione f(x):
L'istruzione ITERATES consente, mediante il comando APPROSSIMA, di
calcolare i primi valori della successione generata dal metodo in
corrispondenza degli estremi dei due intervalli di separazione degli zeri
ricercati (si noti, in tutti i casi, la rapidità con cui il metodo converge):
Informatica per la Matematica
Giorgio Meini © 2000
I valori approssimati degli zeri sono rispettivamente 3 (è in particolare
possibile verificare l'esattezza di questa soluzione per sostituzione diretta
nell'equazione 2 x + 2 − 2 x = 0 ) e circa -0,69.
Interpretando il metodo delle tangenti come caso particolare del metodo di
iterazione funzionale si ha
g ( x) = x −
f ( x) x ⋅ f ' ( x) − f ( x)
=
f ' ( x)
f ' ( x)
e
g ' ( x) =
[ f ' ( x) + x ⋅ f ' ' ( x) − f ' ( x)] ⋅ f ' ( x) − [ x ⋅ f ' ( x) − f ( x)] ⋅ f ' ' ( x)
[ f ' ( x)] 2
=
f ( x) ⋅ f ' ' ( x)
[ f ' ( x)] 2
da cui si desume la difficoltà di verificare le ipotesi del teorema di convergenza
del paragrafo X.1.3.1 nell'intervallo [a;b] di separazione di una soluzione
dell'equazione f(x)=0. In accordo con l'interpretazione geometrica del metodo è
evidente che la convergenza al valore dello zero z è garantita se la successione
generata a partire dal valore iniziale x0 è sempre crescente o decrescente (come
dimostrano anche alcuni dei casi del precedente esempio questa è una
condizione sufficiente, ma non necessaria): intuitivamente ciò avviene se la
funzione è continua e il suo grafico ha segno e concavità costanti nell'intervallo
[x0;z] (o [z;x0]); dato che la derivata della funzione non può assumere il valore
0 nello stesso intervallo in quanto compare al denominatore nella formula
ricorsiva che definisce il metodo anche il segno della funzione derivata (e di
conseguenza la crescenza o decrescenza della funzione) deve essere costante
nello stesso intervallo. Il seguente teorema assicura la validità delle precedenti
osservazioni nel caso che sia opportuno scegliere x0>z e che conseguentemente
la successione dei valori generati dal metodo sia decrescente (la dimostrazione
è ovviamente analoga nel caso opposto e il risultato ha quindi validità
generale).
Informatica per la Matematica
Giorgio Meini © 2000
Teorema
Se
z è uno zero della funzione f(x)
f(x) ha funzioni derivata prima e seconda continue in un intervallo
[z;z+h]
e per ogni valore x dell'intervallo [z;z+h] si ha che:
f(x) f"(x)>0
f'(x)≠0
allora
la successione di valori generata dal metodo di Newton
xi +1 = g ( xi ) = xi −
f ( xi )
f ' ( xi )
con z < x 0 ≤ z + h è decrescente e convergente a z.
Si dimostra per induzione che z < xi +1 < xi osservando che, nelle ipotesi del
teorema, se la funzione f(x) è positiva nell'intervallo [z;z+h] allora è
necessariamente crescente nello stesso intervallo, viceversa se f(x) è negativa in
[z;z+h] allora è necessariamente decrescente nell'intervallo. Di conseguenza il
rapporto f ( x) è certamente positivo per ogni valore di x compreso tra z e z+h
f ' ( x)
e quindi
f ( xi )
xi +1 = xi −
< xi
f ' ( xi )
Per il teorema del valor medio di Lagrange, si ha
xi +1 − z = g ( xi ) − g ( z ) = g ' (ε )( xi − z )
dove
f (ε ) ⋅ f " (ε )
z < ε < xi e g ' (ε ) =
[ f ' (ε )] 2
Dato che per ipotesi induttiva z < ε < xi < z + h si ha che f (ε ) ⋅ f " (ε ) > 0 e
quindi che g ' (ε ) > 0 ; essendo sicuramente xi − z > 0 segue che xi +1 − z > 0
da cui la tesi
z < xi +1 < xi
Informatica per la Matematica
Giorgio Meini © 2000
Per rispettare le ipotesi del teorema precedente - che assicurano la convergenza
dell'algoritmo di Newton per l'approssimazione dello zero di una funzione
continua f(x) a partire da un intervallo di separazione [a;b] in cui la derivata
f'(x) non si annulla e la concavità è costante - è sufficiente scegliere come
valore iniziale del metodo l'estremo dell'intervallo in cui il segno della funzione
f(x) e della derivata seconda f"(x) sono concordi:
a) funzione decrescente con concavità rivolta verso l'alto;
a=x0 x1
z
b
b) funzione crescente con concavità rivolta verso il basso;
a=x0 x1
z
b
c) funzione decrescente con concavità rivolta verso il basso;
x1 b=x0
a
z
Informatica per la Matematica
Giorgio Meini © 2000
d) funzione crescente con concavità rivolta verso l'alto.
z
a
x1 b=x0
L'implementazione in linguaggio VBA dell'algoritmo di Newton richiede la
definizione, oltre che della funzione f(…), della sua funzione derivata fd(…)9;
la funzione "pubblica" tangenti(…) restituisce, se invocata in ambiente Excel
con il valore iniziale x0 come argomento, l'approssimazione dello zero della
funzione ed invoca a sua volta la funzione newton(…) che implementa la
formula del metodo. Il ciclo che realizza l'iterazione termina quando la
differenza tra due approssimazioni successive è inferiore ad una costante
predefinita E anche se questa condizione di terminazione non assicura, in
generale, che l'approssimazione calcolata differisca dal valore dello zero di un
errore minore di E; inoltre per evitare, nel caso di non convergenza
dell'algoritmo, che l'iterazione non abbia termine il ciclo viene ripetuto al
massimo 100 volte.
Private Const E As Single = 0.000001
Private Function f(x As Single) As Single
f = …
End Function
Private Function fd(x As Single) As Single
fd = …
End Function
Private Function newton(x As Single) As Single
newton = x - f(x) / fd(x)
End Function
9
La funzione fd(…) invece di definire esplicitamente la funzione derivata calcolata
simbolicamente può implementare una formula di derivazione numerica; per esempio è
possibile approssimare la derivata in un punto della funzione f(…) con il rapporto incrementale
calcolato in corrispondenza di un valore predefinito dell'incremento h:
Private Function fd(x As Single) As Single
Const h As Single = 0.000001
fd = (f(x+h) - f(x)) / h
End Function
Informatica per la Matematica
Giorgio Meini © 2000
Public Function tangenti(x0 As Single) As Single
Dim x As Single
Dim i As Integer
x = newton(x0)
i = 0
While (Abs(newton(x) - x) > E)
x = newton(x)
i = i + 1
If (i > 100) Then
Exit Function
End If
Wend
tangenti = newton(x)
End Function
Esempio
Il grafico della funzione
f ( x) = x 3 − x + 1
tracciato in ambiente Derive permette di individuare l'intervallo [-2;-1] come
intervallo di separazione dell'unico zero della funzione10.
In VBA è necessario definire sia la funzione
Private Function f(x As Single) As Single
f = x ^ 3 - x + 1
End Function
che la relativa derivata
Private Function fd(x As Single) As Single
fd = 3 * x ^ 2 - 1
End Function
10
L'unicità dello zero è conseguenza della continuità della funzione e della sua crescenza sia
per x<-1 che per x>1 confermata dall'analisi del segno della funzione derivata prima.
Informatica per la Matematica
Giorgio Meini © 2000
Successivamente in ambiente Excel è possibile invocare la funzione
tangenti(…) con argomento il valore iniziale -2 (è infatti questo l'estremo
dell'intervallo [-2;-1] in cui la funzione f(x) ha segno concorde con la sua
derivata seconda f"(x)) per ottenere un'accurata approssimazione del valore
dello zero:
Osservazione
Il file "SOLVE.MHT" dell'ambiente Derive include una funzione ricorsiva
NEWTON(…) che approssima lo zero di una funzione f(x) con il metodo delle
tangenti:
L'approssimazione dell'invocazione della funzione NEWTON(…) produce la
successione delle approssimazioni attesa:
Osservazione
L'algoritmo di Newton può - diversamente, per esempio, dal metodo di
bisezione - essere impiegato per approssimare lo zero di una funzione che si
presenta senza cambiamento di segno: le ipotesi del teorema di convergenza
possono in questo caso essere soddisfatte da entrambi gli estremi dell'intervallo
di separazione dello zero. Per esempio la funzione
f ( x) = x 2 − 2 x + 1
ha un unico zero x=1
Informatica per la Matematica
Giorgio Meini © 2000
a cui il metodo converge sia con x0=0 che con x0=2:
Private Function f(x As Single) As Single
f = x ^ 2 - 2 * x + 1
End Function
Private Function fd(x As Single) As Single
fd = 2 * x - 2
End Function
X.1.4.2
Il metodo delle secanti
xi +1 = xi −
f ( xi )( xi − c)
f ( x i ) − f (c )
(dove c è uno degli estremi dell'intervallo [a;b] di separazione dello zero) ha
una semplice interpretazione geometrica: il valore xi+1 è l'ascissa del punto di
intersezione con l'asse orizzontale della retta passante per i punti (c;f(c)) e
(xi;f(xi)).
f(c)
z
c
x3
x2
x1
x0
Informatica per la Matematica
Giorgio Meini © 2000
Risulta vera la congettura intuitiva in base alla quale il metodo converge generando una successione crescente o decrescente - se sono verificate le
seguenti ipotesi:
la funzione f(x) è continua e le funzioni derivate f'(x) e f"(x) sono continue
con segno costante nell'intervallo [a;b] di separazione dello zero;
f ( c ) ⋅ f " (c ) > 0 ;
f ( x0 ) ⋅ f " ( x0 ) < 0 .
In Excel è possibile implementare il metodo delle secanti codificando in
linguaggio VBA la funzione f(x), memorizzando nella cella A1 il valore
costante c e nella cella A2 il valore iniziale x0 e utilizzando le celle successive
della colonna A per generare la successione dei valori calcolati mediante
"copia" della formula che definisce il metodo stesso.
Esempio
La funzione f ( x) = x 3 − x + 1 presenta un unico zero separato dall'intervallo
[-2;-1] e può essere implementata in ambiente Excel mediante la seguente
funzione VBA:
Public Function F(x As Single) As Single
f = x ^ 3 - x + 1
End Function
La scelta c=-2 e x0=-1 è conseguenza dalla concordanza tra segno della
funzione f(x) e della relativa derivata seconda f"(x) nel punto x=-2; la formula
che definisce il metodo è inserita nella cella A3 e "copiata" nelle celle
sottostanti:
Informatica per la Matematica
Giorgio Meini © 2000
I primi valori generati dall'applicazione del metodo delle secanti sono
rappresentati nel grafico seguente che mostra il carattere di convergenza della
successione:
-1
-1,1
-1,2
-1,3
-1,4
0
1
2
3
4
5
6
7
8
9
10
Ma la rappresentazione grafica dei valori generati successivamente evidenzia
come l'errore algoritmico - dovuto agli inevitabili errori di calcolo e di
rappresentazione numerica dell'ambiente Excel - impedisca all'errore analitico
di ridursi indefinitamente all'aumentare del numero di iterazioni calcolate:
Informatica per la Matematica
Giorgio Meini © 2000
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
-1,3247179
-1,32471791
-1,32471792
-1,32471793
-1,32471794
-1,32471795
-1,32471796
-1,32471797
-1,32471798
-1,32471799
-1,324718
Osservazione
Nel caso che le ipotesi individuate non siano verificate nell'intervallo [a;b] di
separazione dello zero è possibile che la successione di valori generata dal
metodo delle secanti non sia convergente perché xi+1 non è compreso tra c e xi.
In questo caso è possibile modificare il metodo al fine di ottenere una
successione di approssimazioni convergente al valore dello zero variando il
valore c nel corso delle iterazioni:
xi +1 = xi −
f ( xi ) ⋅ ( xi − ci )
f ( x i ) − f (c i )
dove x0 e c0 sono tali che f ( x 0 ) ⋅ f (c 0 ) < 0 e
ci +1 = xi

ci +1 = ci
se
f ( xi +1 ) ⋅ f (ci ) > 0
se
f ( xi +1 ) ⋅ f (ci ) ≤ 0
Questa tecnica - nota come metodo di "falsa posizione" - converge sotto le sole
ipotesi di continuità della funzione f(x) e di discordanza del segno di f(x) stessa
agli estremi dell'intervallo [a;b] di separazione dello zero. Anche il metodo di
"falsa posizione" può essere interpretato geometricamente:
Informatica per la Matematica
Giorgio Meini © 2000
x0=c1=c2 x3
X.1.4.3
z
x2
x1
c0
Sia l'algoritmo di Newton che il metodo delle secanti presentano lo stesso
difetto: in entrambi i casi infatti non è possibile determinare una semplice
condizione di terminazione del ciclo iterativo che garantisca il controllo della
precisione dell'ultima approssimazione prodotta.
Prendendo in esame la casistica di applicazione di entrambi i metodi si scopre
facilmente che, rispettando i relativi criteri di convergenza, quando uno dei due
produce una successione crescente (approssimazioni per difetto) l'altro produce
sempre una successione decrescente (approssimazioni per eccesso):
f(c)
z
c= x0 x1 x2
x3
x2
x1
x0
Questa osservazione suggerisce di impiegare contemporaneamente i due
metodi in modo da poter stabilire la condizione di terminazione del ciclo
iterativo in funzione della differenza (che dovrà essere minore dell'errore
massimo consentito E) tra le ultime approssimazioni per eccesso e per difetto
prodotte, garantendo così un rigoroso controllo sulla precisione del risultato.
La seguente procedura VBA (attivabile in ambiente Excel mediante un
"pulsante di comando") "legge" gli estremi dell'intervallo di separazione della
funzione f(x) (implementata come funzione VBA) nelle celle A1 e B1 e
"scrive" le sequenze delle approssimazioni per eccesso e per difetto prodotte
dall'uso congiunto dei metodi delle tangenti e delle secanti nelle successive
celle delle colonne A e B:
Private Function f(x As Single) As Single
f = …
End Function
' f(x)
Informatica per la Matematica
Giorgio Meini © 2000
Private Function fd1(x As Single) As Single ' f'(x)
fd1 = …
End Function
Private Function fd2(x As Single) As Single ' f"(x)
fd2 = …
End Function
Private Function tangenti(x As Single) As Single
tangenti = x - f(x) / fd1(x)
End Function
Private Function secanti(c As Single, x As Single) As Single
secanti = x - (f(x) * (x - c)) / (f(x) - f(c))
End Function
Public Sub Zero_Click()
Const E As Single = 0.000001 ' massimo errore consentito
Dim a As Single
' estremo sinistro intervallo di separazione
Dim b As Single
' estremo destro intervallo di separazione
Dim c As Single
' costante per metodo secanti
Dim xt As Single ' variabile per metodo tangenti
Dim xs As Single ' variabile per metodo secanti
Dim i As Single
' contatore delle iterazioni
a = Cells(1, 1)
b = Cells(1, 2)
If (f(a) * fd2(a) < 0) Then
xs = a
c = b
xt = b
Else
xt = a
c = a
xs = b
End If
i = 0
While (Abs(xs - xt) > E)
xt = tangenti(xt)
xs = secanti(c, xs)
i = i + 1
Cells(i + 1, 1) = xt
Cells(i + 1, 2) = xs
If (i > 100) Then
Exit Sub
End If
Wend
End Sub
Esempio
La funzione dell'esempio precedente e le relative funzioni derivate prima e
seconda sono implementate in ambiente Excel dalle seguenti funzioni VBA:
Private Function f(x As Single) As Single
f = x ^ 3 - x + 1
End Function
' f(x)
Private Function fd1(x As Single) As Single
fd1 = 3 * x ^ 2 - 1
End Function
' f'(x)
Informatica per la Matematica
Private Function fd2(x As Single) As Single
fd2 = 6 * x
End Function
Giorgio Meini © 2000
' f"(x)
Attivando il pulsante di comando al quale è associata la procedura
Zero_Click() si ottengono, nelle celle delle colonne A e B, le iterazioni parziali
dell'algoritmo che combina il metodo delle tangenti con il metodo delle secanti
(le celle della colonna C rappresentano la differenza, progressivamente minore,
tra le celle delle colonne A e B della stessa riga):
In questo caso l'algoritmo termina dopo 17 cicli di iterazione con la certezza
che l'ultimo valore prodotto (-1,324717…) è affetto da un errore minore di
E=10-6 (si noti che, a causa dell'inevitabile errore algoritmico dovuto allo
svolgimento di calcoli in aritmetica finita, il valore E del massimo errore
consentito non può essere arbitrariamente piccolo). I seguenti grafici delle
approssimazioni per difetto e per eccesso generate dall'algoritmo visualizzano
la convergenza della procedura impiegata:
Informatica per la Matematica
Giorgio Meini © 2000
-1
-1,1
-1,2
-1,3
-1,4
-1,5
-1,6
-1,7
-1,8
-1,9
-2
1
2
3
4
5
6
7
8
9
10 11 12 13 14 15 16 17 18 19 20
9
10 11 12 13 14 15 16 17 18 19 20
-1,3
-1,31
-1,32
-1,33
-1,34
-1,35
-1,36
-1,37
-1,38
-1,39
-1,4
1
2
3
4
5
6
7
8
Informatica per la Matematica
X.1.5
Giorgio Meini © 2000
Sintesi
gli algoritmi numerici sono impiegati per la determinazione delle radici di
equazioni non risolvibili - o non facilmente risolvibili - con metodi algebrici;
l'applicazione di un qualsiasi metodo numerico per l'approssimazione dello zero di
una funzione richiede di conoscere gli estremi di un "intervallo di separazione" che
non comprenda altri zeri della funzione stessa;
se una funzione continua f(x) soddisfa le ipotesi previste dal "teorema degli zeri" è
possibile applicare il metodo di bisezione
a + bi
ci = i
2
a i +1 = a i

 a i +1 = ci
e bi +1 = ci
e bi +1 = bi
se
f ( a i ) ⋅ f (c i ) < 0
se
f ( a i ) ⋅ f (c i ) > 0
che - a partire da un intervallo [a0;b0] di ampiezza 1 - garantisce un errore
analitico minore di 2-n in n iterazioni;
il metodo di iterazione funzionale
xi +1 = g ( xi )
consente di approssimare i punti fissi della funzione g(x) e converge nell'ipotesi
che i valori generati appartengano a un intervallo in cui -1<g'(x)<1;
il metodo delle tangenti (o "metodo di Newton")
xi +1 = xi −
f ( xi )
f ' ( xi )
e il metodo delle secanti
xi +1 = xi −
f ( xi )( xi − c)
f ( x i ) − f (c )
sono 2 particolari metodi di iterazione funzionale che generano successioni
convergenti al valore dello zero della funzione f(x);
i metodi delle tangenti e delle secanti sono spesso "combinati" in un unico
algoritmo iterativo la cui condizione di terminazione garantisce il controllo della
precisione dell'approssimazione finale.
Informatica per la Matematica
X.1.6
Giorgio Meini © 2000
Esperimenti
1. Individuare gli intervalli di separazione della radici delle seguenti equazioni:
a) ln x + x = 0
b) 1 + x = e x −1
x
c) x 3 − 2 x 2 + 3x − 5 = 0
d)
1 − x 2 + cos(2 x) = 0
e) senx + 1 = x 2
f) x 3 = x + 1
g) 4 x 2 − 1 − x 2 = 1
h) x ⋅ ln x = 1
i) e x − x = 2
j) x + senx = 1
k) e x ⋅ log x = 1
l)
x 3 − 3x + 1 = 0
2. Calcolare, con un errore minore di 10-1, le radici delle equazioni dell'esercizio 1
applicando il metodo numerico di bisezione e utilizzando la calcolatrice
scientifica; contare il numero di iterazioni necessarie in ciascun caso.
3. Calcolare , con un errore minore di 10-6, le radici delle equazioni dell'esercizio 1
utilizzando in ambiente Excel la funzione bisezione(…); calcolare per ciascun caso
il numero di iterazioni necessarie.
4. Rispondere, fornendo una valida motivazione, alle seguenti domande indagando in
ambiente Excel il funzionamento della funzione VBA bisezione(…) in relazione a
diverse funzioni f(x):
a) che cosa accade se gli estremi dell'intervallo iniziale sono invertiti (a>b)?
b) che cosa accade se l'intervallo specificato non contiene nessuno zero della
funzione f(x)?
c) e se l'intervallo specificato contiene più zeri della funzione f(x)?
5. Scrivere una funzione VBA iterazione(…) che implementi l'algoritmo di iterazione
funzionale avente come unico argomento il valore iniziale e assicurando comunque
l'arresto del ciclo in caso di non convergenza del metodo. La funzione g(x) sarà
definita nel modulo VBA di Excel che include la codifica di iterazione(…).
6. Applicare, se possibile, il metodo di iterazione funzionale per determinare le radici
delle equazioni dell'esercizio 1. Motivare gli eventuali casi di non convergenza del
metodo.
Informatica per la Matematica
Giorgio Meini © 2000
7. # Determinare una funzione g(x) per la quale il metodo di iterazione funzionale
converge a un punto fisso anche se nel suo intorno non sono verificate le ipotesi
del teorema di convergenza (sia in particolare g ' ( x) > 1 : si dimostra in questo
modo che tali ipotesi sono sufficienti, ma non necessarie a garantire la
convergenza del metodo).
8. In ambiente Derive applicare il metodo delle tangenti per determinare le radici
delle equazioni dell'esercizio 1. Determinare in ogni caso il numero di iterazioni
necessarie per ottenere una differenza tra due approssimazioni successive minore
di 10-6.
9. Modificare la funzione tangenti(…) in modo che divenga attivabile in ambiente
Excel mediante un pulsante di comando e che, utilizzando come valore iniziale il
contenuto della cella A1, produca la successione dei valori generati dall'algoritmo
nelle celle successive della colonna A. Impiegare la procedura per tracciare i
grafici delle successioni di valori generate in vari casi verificando il numero di
iterazioni necessarie per soddisfare la condizione di terminazione.
10. Scrivere una funzione VBA che implementi l'algoritmo definito dal metodo delle
secanti accettando come argomenti il valore costante c e il valore iniziale x0 (la
funzione f(x) della quale si intende approssimare uno zero è definita come funzione
VBA). Utilizzarla in ambiente Excel per approssimare, con un errore minore di 106
, le radici delle equazioni dell'esercizio 1; calcolare per ciascun caso il numero di
iterazioni necessarie.
11. In ambiente Derive applicare - ricorrendo alle funzionalità dell'istruzione
ITERATES - il metodo delle secanti per determinare le radici delle equazioni
dell'esercizio 1. Determinare in ogni caso il numero di iterazioni necessarie per
ottenere un'approssimazione con un errore minore di 10-6.
12. # Scrivere una funzione o procedura VBA che implementi il metodo di "falsa
posizione".
13. Impiegare la procedura VBA Zero_Click() che combina i metodi delle tangenti e
delle secanti per approssimare le radici delle equazioni dell'esercizio 1 con un
errore minore di 10-9. Analizzare la precisione dei risultati ottenuti e il numero di
iterazioni necessarie.
14. # Modificare l'implementazione delle funzioni "di servizio" fd1(…) e fd2(…) della
procedura VBA Zero_Click(…) in modo che non occorra determinare e specificare
le derivate prima e seconda della funzione f(x): il valore della derivata in un punto
dovrà essere approssimato dal valore del rapporto incrementale calcolato
impiegando un "opportuno" valore dell'incremento h. Indagare se e,
eventualmente, come cambia la precisione dell'algoritmo.
15. # Definire in ambiente Derive una funzione che implementi il metodo combinato
tangenti/secanti per l'approssimazione dello zero di una funzione.
Informatica per la Matematica
Giorgio Meini © 2000
X.2
Risoluzione di sistemi lineari
X.2.0
Risoluzione di sistemi lineari con Derive e con Excel
X.2.0.0
È possibile determinare i 6 coefficienti a, b, c, d, e e f di una trasformazione affine
X = a⋅ x + b⋅ y + c

Y = d ⋅ x + e ⋅ y + f
conoscendo le coordinate originali di 3 punti P, Q e R e le coordinate dei rispettivi
punti trasformati P', Q' e R' risolvendo un sistema lineare di 6 equazioni
 X P = a ⋅ xP + b ⋅ yP + c
Y = d ⋅ x + e ⋅ y + f
P
P
 P
 X Q = a ⋅ xQ + b ⋅ y Q + c

YQ = d ⋅ xQ + e ⋅ y Q + f
 X R = a ⋅ xR + b ⋅ yR + c

 YR = d ⋅ x R + e ⋅ y R + f
X.2.0.1
Il comando Risolvi-Sistema di Derive consente di impostare le singole equazioni e di
specificare le variabili "incognite" del sistema lineare (volendo utilizzare i nomi di
variabile indicati è necessario ricorrere al comando Dichiara-Stato_algebraInserimento per impostare Nome variabile = Parola e Maiuscole/minuscole =
Sensibile); il comando Semplifica fornisce successivamente la soluzione cercata:
In questo caso la necessità di ottenere delle "formule" risolutive anziché un risultato
numerico giustifica il ricorso alle funzionalità simboliche di Derive, ma spesso ciò che
Informatica per la Matematica
Giorgio Meini © 2000
interessa è la soluzione numerica di un sistema di equazioni (naturalmente se il
numero di equazioni è pari al numero delle variabili incognite Derive risolve
numericamente, anziché simbolicamente, il sistema).
X.2.0.2
In Excel è possibile risolvere numericamente sistemi di equazioni lineari utilizzando il
metodo di Cramer.
Dovendo per esempio determinare i coefficienti di una affinità che trasforma il
triangolo PQR (P(-2;0), Q(0;2) e R(2;0)) nel triangolo P'Q'R' (P'(2;0), Q'(1;-1) e
R'(0,0))
Q
P
R'
R
P'
Q'
il sistema da risolvere, posto in forma canonica, è il seguente
 − 2a + c = 2
− 2 d + f = 0

 2b + c = 1

 2e + f = −1
 2a + c = 0

 2d + f = 0
da cui si ricavano la matrice A dei coefficienti e il vettore b dei termini noti
− 2
 0

 0
A=
 0
 2

 0
0
0
2
0
0
0
1 0
0 −2
1 0
0 0
1 0
0 2
0
0
0
2
0
0
0
1
0

1
0

1
2
0
 
1
b= 
− 1
0
 
 0 
Excel dispone della funzione MATR.DETERM(…) che calcola il determinante di una
matrice quadrata di dimensione qualsiasi. Inserendo gli elementi della matrice A
nell'intervallo di celle A1:F6 la funzione MATR.DETERM(A1:F6) - inserita in una
cella qualsiasi - restituisce il valore -64 (nel caso che il determinante della matrice dei
coefficienti sia 0 il sistema è impossibile o indeterminato).
Informatica per la Matematica
Giorgio Meini © 2000
Se il sistema risulta risolvibile, utilizzando le funzionalità di selezione e i comandi
"copia e incolla" di Excel, non è difficile costruire le 6 matrici derivate da A
sostituendo ogni volta la colonna relativa alla specifica variabile incognita con il
vettore b dei termini noti. I 6 rapporti tra i determinanti di queste matrici (32, 0, -64, 0,
32 e 0) e il determinante della matrice originale A (-64) costituiscono la soluzione del
sistema:
1
1

a = − 2 ; b = 0; c = 1; d = 0; e = − 2 ;


f = 0 .

Il calcolo del determinante di una matrice quadrata è un'operazione costosa sotto il
profilo della complessità computazionale; senza addentrarci nei dettagli del calcolo è
possibile condurre un semplice esperimento in ambiente Derive generando matrici
quadrate di ordine n aventi elementi casuali di valore compreso tra 0 e 1 con la
seguente istruzione:
Assegnando ad n valori crescenti e utilizzando l'istruzione DET(…) e il comando
Approssima per il calcolo del determinante di una matrice quadrata è possibile
registrare i tempi di esecuzione impiegati da Derive e visualizzati nella "barra di stato"
del programma; la seguente tabella si riferisce a un PC Pentium-II 350 MHz con 64
Mbyte di memoria RAM:
n
10
20
30
40
50
60
70
80
90
tempo (in sec.)
0,1
0,5
4,2
11,1
23,5
44,1
94,4
199.4
363,7
Informatica per la Matematica
Giorgio Meini © 2000
Molto approssimativamente si può affermare che il tempo necessario per il calcolo
raddoppia ogni volta che la dimensione della matrice aumenta di 10; come è
confermato dal seguente grafico (realizzato con Excel) si tratta del tipico
comportamento di una funzione esponenziale t=bn:
400
350
t (sec.)
300
250
200
150
100
50
0
0
10
20
30
40
50
60
70
80
90
100
n
Non è difficile determinare la base b di questa funzione empirica di complessità
computazionale per il calcolo numerico del determinante con Derive:
b n+10 = 2b n
⇒
b n+10
b
n
= 2 ⇒ b10 = 2 ⇒ b = 10 2 ≅ 1,07177
Considerando valida questa approssimazione11 la risoluzione di un sistema di 100
equazioni in 100 variabili (dimensione non insolita nelle applicazioni reali) con il
metodo di Cramer richiede la determinazione di 101 determinanti, ciascuno dei quali
richiede un tempo di calcolo t = 1,07177100 ≅ 1024s : complessivamente 103424
secondi, cioè quasi 29 ore.
Si potrebbe obiettare che si tratta di un limite della capacità di calcolo del PC, ma la
difficoltà è intrinseca al metodo di risoluzione: disponendo di un computer 1000 volte
più veloce il tempo necessario per risolvere un sistema 100×100 si riduce a meno di 2
minuti, ma il tempo necessario per risolvere un sistema 200×200 di dimensione doppia
è ancora
t = 201 ⋅
1,07177 200
≅ 201 ⋅ 1049 = 210849 s , cioè circa 58 ore e mezza.
1000
Questo caratteristico comportamento della funzione esponenziale rende il metodo di
Cramer computazionalmente "intrattabile" al crescere della dimensione del problema
da risolvere.
11
In realtà - come è possibile evidenziare sovrapponendo al grafico dei dati empirici la tabulazione dei
valori della funzione - si tratta di una stima per eccesso: questo dettaglio non invalida la sostanza delle
argomentazioni succesive.
Informatica per la Matematica
Giorgio Meini © 2000
X.2.1
Il metodo di eliminazione di Gauss
X.2.1.0
Le osservazioni del precedente paragrafo individuano la necessità di disporre di
metodi efficienti per la risoluzione numerica dei sistemi lineari: il metodo di
eliminazione di Gauss consiste nella sistematizzazione in forma di algoritmo del
comune metodo di sostituzione.
Esempio
Per risolvere il sistema
 2 x + y − 5z + t = 8
 x − 3 y − 6t = 9


 x + 4 y − 7 z + 6t = 0
 2 y − z + 2t = −5
ricaviamo inizialmente l'incognita x dalla prima equazione
x=
8 − y + 5z − t
2
per sostituirla successivamente nelle altre equazioni (nella quarta equazione, essendo 0
il coefficiente della variabile x, la sostituzione non è necessaria)
2 x + y − 5z + t = 8

 8 − y + 5z − t
− 3 y − 6t = 9

2
8 − y + 5z − t

+ 4 y − 7 z + 6t = 0
2


2 y − z + 2t = −5
Prendendo in considerazione il fattore moltiplicativo rappresentato dal reciproco del
rapporto tra il coefficiente della variabile x della prima equazione e il coefficiente
della variabile x di ciascuna delle equazioni è possibile calcolare i nuovi coefficienti
delle altre variabili come differenza tra i coefficienti originali e i corrispondenti
coefficienti della prima equazione; lo stesso calcolo è valido anche per il termine noto:
2 x + y − 5z + t = 8

 
8
1
1
5

  − 3 −  y + z +  − 6 − t = 9 −
 
2
2
2
2


 4 − 1  y +  − 7 + 5  z +  6 − 1 t = 0 − 8

2
2
2 
2


2 y − z + 2t = −5
 2 x + y − 5z + t = 8
 7
5
13
− y + z − t = 5
2
2
2
7
9
11
 y − z + t = −4
2
2
2
 2 y − z + 2t = −5
Informatica per la Matematica
Giorgio Meini © 2000
Ora è possibile ricavare l'incognita y dalla seconda equazione
y=
5−
5
13
z+ t
2
2
7
−
2
per sostituirla nella terza e quarta equazione
2 x + y − 5z + t = 8


7
5
13
− y+ z − t =5

2
2
2

5
13
 5− z+ t
7
2
2 − 9 z + 11 t = −4

7
2
2
2
−

2

5
13
5− z+ t

2
2 − z + 2t = −5
 2
7

−

2
Procedendo con la tecnica già impiegata in precedenza è possibile calcolare i nuovi
coefficienti e i nuovi termini noti della terza e quarta equazione
2x + y − 5z + t = 8


7
5
13
− y+ z − t =5

2
2
2

9
5
11
13



  − +  z +  − t = −4 + 5
  2 2  2 2 

4 5 
4 13 
4
 − 1 + ⋅  z +  2 − ⋅ t = −5 + ⋅ 5

7 2 
7 2
7
 2 x + y − 5z + t = 8
 7
5
13
− y + z − t = 5
2
2
 2
−
−
=
z
t
2
1
 3
12
15

z− t=−
 7
7
7
Si prosegue ricavando l'incognita z dalla terza equazione
z=
per sostituirla nella quarta
1+ t
−2
Informatica per la Matematica
Giorgio Meini © 2000
 2 x + y − 5z + t = 8
 7
5
13
− 2 y + 2 z − 2 t = 5

 3 1 +− t2 z −12t = 1 15
 ⋅
− t=−
 7 − 2
7
7
 2 x + y − 5z + t = 8

7
5
13
 − y + z − t = 5
2
2
2

− 2z − t = 1

3 12 
15 3
 −
− t = − +
 14 7 
7 14
Il sistema così ottenuto dopo 4 sostituzioni
 2x + y − 5z + t = 8
 7
5
13
− y + z − t = 5
2
2
 2
−
−
=
z
t
2
1

27
27

−
t=−

14
14
è "triangolare": l'ultima equazione ha come incognita solo l'ultima variabile (t), la
penultima equazione ha come incognite solo le ultime due variabili (t e z), fino alla
prima equazione cha ha come incognite tutte le variabili (t, z, y e x). Un sistema
triangolare si risolve facilmente applicando la tecnica delle sostituzioni "all'indietro",
iniziando dalla determinazione del valore dell'unica incognita che compare nell'ultima
equazione
 2 x + y − 5z + t = 8
 7
5
13
− y + z − t = 5
2
2
 2

− 2z − t = 1

27
−


t = 14 = 1
27

−

14
per sostituirla nella penultima equazione al fine di ricavare il valore dell'altra variabile
presente
 2 x + y − 5z + t = 8
 7
5
13
− y + z − t = 5
2
2
2

1+1

z=
= −1
−2


t =1
Informatica per la Matematica
Giorgio Meini © 2000
Procedendo "a ritroso" e sostituendo alle variabili i valori delle incognite già
determinate si completa la risoluzione del sistema:
 2 x + y − 5z + t = 8

13 5
5+ +

2 2 = −4
 y =
7

−

2

z = −1


t =1
8 −1− 5 + 4

=3
x =
2

y = −4


z = −1

t =1

X.2.1.1
Rappresentando un sistema lineare generico di n equazioni in n variabili (x1, x2, …, xn)
con la seguente notazione
 a11 x1 + a12 x 2 + ... + a1 j x j + ... + a1n x n = b1
a x + a x + ... + a x + ... + a x = b
22 2
2j j
2n n
2
 21 1

...
 a x + a x + ... + a x + ... + a x = b
i2 2
ij j
in n
i
 i1 1

...

 a n1 x1 + a n 2 x 2 + ... + a nj x j + ... + a nn x n = bn
che determina la matrice dei coefficienti
 a11
a
 21
 ...
A = a
 i1
 ...
a
 n1
e il vettore dei termini noti
a12
a 22
...
ai 2
...
a n2
...
...
...
...
...
...
a1 j
a2 j
...
a ij
...
a nj
... a1n 
... a 2n 
...
... 
... ain 

... ... 
... a nn 
Informatica per la Matematica
Giorgio Meini © 2000
 b1 
b 
 2
 ... 
b= 
 bi 
 ... 
 
bn 
il metodo di Gauss può essere interpretato come un algoritmo che modifica gli
elementi della matrice A e del vettore b. Dato che la fase di triangolarizzazione
necessita di n-1 passi (uno per ciascuna sostituzione da effettuare) la notazione
impiegata per la descrizione dell'algoritmo etichetta i coefficienti aij e i termini noti bi
con un apice (k) che indica il "passo" k al quale ci si riferisce; il sistema originale può
quindi essere riscritto nel modo seguente:
 a (1) x + a (1) x + ... + a (1) x + ... + a (1) x = b (1)
j
n
12
2
1j
1n
1
 11 1
(1)
(1)
(1)
(1)
a 21 x1 + a 22 x 2 + ... + a 2 j x j + ... + a 2n x n = b2 (1)

...


(1)
(1)
(1)
(1)
(1)
 ai1 x1 + ai 2 x 2 + ... + aij x j + ... + a in x n = bi

...

(1)
(1)
(1)
(1)
(1)
 a n1 x1 + a n 2 x 2 + ...a nj x j + ... + a nn x n = bn
Per il k-esimo degli n passi della fase di triangolarizzazione si determina inizialmente,
per ciascuna delle ultime n-k equazioni, il fattore moltiplicativo
mik =
aik ( k )
a kk ( k )
i = (k + 1),..., n ;
i coefficienti e i termini noti sono successivamente aggiornati secondo le regole
a ij
( k +1)

a ij ( k )
=  (k )
− mik ⋅ a kj ( k )
a ij
i≤k
i>k

b (k )
bi ( k +1) =  ( k ) i
bi
− mik ⋅ bk ( k )
j = k ,..., n
i≤k
i>k
dove l'apice (k) inidica i termini attuali della matrice A e del vettore b, mentre l'apice
(k+1) indica i nuovi termini di A e di b da calcolare per il passo successivo.
Dopo n passi si ottiene il sistema triangolare
Informatica per la Matematica
Giorgio Meini © 2000
a ( n) x + a ( n) x + ... + a ( n) x = b ( n)
1
12
2
1n
1
n
 11
( n)
( n)
( n)
a 22 x 2 + ... + a 2n x n = b2


...

aii ( n) xi + ... + ain ( n) x n = bi ( n)


...


a nn ( n) x n = bn ( n)
che si risolve mediante le seguenti sostituzioni "all'indietro"
xn =
bi ( n) −
xi =
bn ( n )
a nn ( n)
n
∑ aij (n) ⋅ x j
j =i +1
a ii ( n)
i = (n − 1),...,1
dove la sommatoria sintetizza la somma
a i (i +1) ( n) ⋅ xi +1 + a i (i + 2) ( n) ⋅ xi + 2 + ... + ain ( n) ⋅ x n
Osservazione
Se al k-esimo passo della fase di triangolarizzazione il coefficiente akk è nullo non è
possibile calcolare i fattori moltiplicativi mik: in questo caso è necessario scambiare la
k-esima equazione con una delle equazioni successive per le quali sia aik ≠ 0 . Se non
esiste, tra le successive, una equazione per cui aik ≠ 0 allora il sistema è impossibile o
indeterminato.
Per migliorare la stabilità numerica dell'algoritmo si applica la tecnica del massimo
pivot: al k-esimo passo si determina tra le ultime n-k equazioni quella per cui il valore
assoluto del coefficiente aik (il "pivot") risulta massimo e nel caso che questa
equazione non sia la k-esima si scambiano tra loro.
Se il sistema è risolvibile il ricorso alla tecnica del massimo pivot garantisce che al
passo k-esimo - successivamente all'eventuale scambio di equazioni - il coefficiente akk
non sia nullo.
X.2.1.2
La procedura VBA che segue - associata a un pulsante di comando inserito in un
foglio Excel - implementa il metodo di Gauss con la tecnica del massimo pivot
ipotizzando che i coefficienti del sistema siano inseriti nelle celle delle prime n righe e
n colonne e che i termini noti siano inseriti nelle celle della (n+1)-esima colonna (la
dimensione n del sistema è invece specificata come costante nel modulo VBA). La
procedura dichiara e impiega come variabili una matrice A di dimensione n×n per i
coefficienti, un vettore b di dimensione n per i termini noti e un vettore x di
dimensione n per le soluzioni: questa soluzione rende la notazione impiegata nel
codice simile alla notazione matematica impiegata nella descrizione dell'algoritmo. Un
ciclo iniziale copia i valori dalle celle del foglio nelle variabili A e b e un ciclo finale
copia le soluzioni del vettore x nelle celle della (n+1)-esima riga del foglio.
Informatica per la Matematica
Giorgio Meini © 2000
Nel codice i "passi" successivi delle due fasi dell'algoritmo e il calcolo della
sommatoria necessaria per la determinazione delle soluzioni sono implementati
mediante cicli For-Next che esplicitano il numero di iterazioni da effettuare; la verifica
dell'eventuale nullità del massimo pivot (che implica la non risolubilità del sistema) è per motivi di approssimazione numerica - svolta confrontandone il valore assoluto con
una tolleranza T stabilita tenendo conto della precisione dell'ambiente di calcolo.
Option Base 1
'il primo indice di matrici e vettori è 1 (e non 0)
Const N As Integer = … ' dimensione del sistema
Const T As Single = 0.000001 ' tolleranza per nullità massimo pivot
Sub
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Gauss_Click()
A(N, N) As Single
b(N) As Single
x(N) As Single
i, j, k As Integer
PivotRow AS Integer
pivot, m As Single
tmp, sum As Single
'
'
'
'
'
'
'
matrice dei coefficienti
vettore dei termini noti
vettore delle soluzioni
indici e contatore dei passi
indice della riga con massimo pivot
pivot e fattore moltiplicativo
variabili ausiliare e temporanee
' ciclo di inizializzazione della matrice A e del vettore b
For i = 1 To N
For j = 1 To N
A(i, j) = Cells(i, j)
Next j
b(i) = Cells(i, N + 1)
Next i
' fase di triangolarizzazione
For k = 1 To (N-1)
' ricerca del massimo pivot e della riga relativa
pivot = Abs(A(k, k))
PivotRow = k
For i = (k + 1) To N
If Abs(A(i, k)) > pivot Then
pivot = Abs(A(i, k))
PivotRow = i
End If
Next i
' massimo pivot nullo: il sistema è impossibile o indeterminato
If pivot < T Then
Exit Sub
End If
' eventuale scambio di righe (coefficienti e termini noti)
If PivotRow <> k Then
For j = 1 To N
tmp = A(PivotRow, j)
A(PivotRow, j) = A(k, j)
A(k, j) = tmp
Next j
tmp = b(PivotRow)
b(PivotRow) = b(k)
b(k) = tmp
End If
' ciclo di aggiornamento della matrice A e del vettore b
pivot = A(k, k)
For i = (k + 1) To N
Informatica per la Matematica
Giorgio Meini © 2000
' calcolo del fattore moltiplicativo
m = A(i, k) / pivot
' aggiornamento delle colonne della matrice A
For j = k To N
A(i, j) = A(i, j) - m * A(k, j)
Next j
' aggiornamento degli elementi del vettore b
b(i) = b(i) - m * b(k)
Next i
Next k
' fase delle sostituzioni all'indietro
x(N) = b(N) / A(N, N)
For i = N - 1 To 1 Step -1
sum = 0
' ciclo di calcolo della sommatoria
For j = (i + 1) To N
sum = sum + A(i, j) * x(j)
Next j
x(i) = (b(i) - sum) / A(i, i)
Next i
' visualizzazione del risultato
For i = 1 To N
Cells(N + 1, i) = x(i)
Next i
End Sub
Esempio
Per risolvere il sistema dell'esempio precedente con la procedura VBA illustrata è
sufficiente inserire in un foglio Excel i coefficienti nell'intervallo A1..D4 e i termini
noti nell'intervallo E1..E4:
Il pulsante di comando associato esegue la procedura che visualizza i risultati nella
prima riga libera del foglio:
Osservazione
Il metodo di eliminazione di Gauss non presenta errore analitico in quanto è un
metodo algebrico esatto, ma la sua esecuzione in un ambiente di calcolo con aritmetica
finita produce inevitabilmente un errore algoritmico. L'adozione della tecnica del
Informatica per la Matematica
Giorgio Meini © 2000
massimo pivot riduce, ma ovviamente non elimina completamente, l'errore algoritmico
del metodo. Nella maggioranza dei casi pratici l'errore commesso è minimo, ma
esistono alcuni tipi di sistemi lineari - denominati sistemi malcondizionati - per i
quali variazioni minime dei coefficienti e dei termini noti inducono variazioni
consistenti nella soluzione: il malcondizionamento è una caratteristica intrinseca del
sistema e non è dovuta al particolare metodo di risoluzione adottato. Vediamo un
semplice esempio: il sistema
x + y =1


99 x + 101y = 100
ha soluzione
1

x = 2 ;

1
y= 
2
ma variando di un centesimo (10-2) il coefficiente della variabile x nella prima
equazione il risultato cambia drasticamente; infatti il sistema
 101

x + y =1
 100
99 x + 101y = 100
ha soluzione
100 1

 x = 301 ≅ 3 ;

y=
200 2 
≅
301 3 
La variazione introdotta simula un errore dell' 1% e provoca un errore nella soluzione
pari al 33,3% con una amplificazione di 33 volte dell'errore relativo. È evidente come
in presenza di un sistema malcondizionato sia inutile l'applicazione di un qualsiasi
metodo di calcolo approssimato: solo una soluzione esatta, per quanto costosa in
termini computazionali, garantisce l'immunità da gravi errori nel risultato.
Nel caso di un sistema di 2 equazioni in 2 incognite il malcondizionamento ha una
semplice interpretazione geometrica: le 2 equazioni originali rappresentano rette (in
blu e rosso nel grafico) con coefficienti angolari e intercette molto simili formanti un
angolo di incidenza molto piccolo; in questa situazione la minima perturbazione di una
delle 2 rette (in verde nel grafico) sposta radicalmente il punto di intersezione.
Informatica per la Matematica
X.2.1.3
Giorgio Meini © 2000
Dato che il numero di operazioni da effettuarsi per risolvere un sistema lineare con
l'algoritmo di eliminazione di Gauss dipende esclusivamente dalla dimensione del
sistema stesso non è difficile valutare la complessità computazionale del metodo (per
semplicità valuteremo il costo computazionale del metodo in termini di operazioni di
moltiplicazione e divisione; questa scelta permette di non prendere in considerazione
la tecnica del massimo pivot ai fini della determinazione del costo computazionale).
Come è possibile verificare nel codice VBA che implementa l'algoritmo al k-esimo
passo della fase di triangolarizzazione si svolgono (n-k) divisioni per la
determinazione dei fattori moltiplicativi, (n-k) moltiplicazioni per l'aggiornamento del
vettore dei termini noti e (n-k+1)×(n-k) moltiplicazioni per l'aggiornamento della
matrice dei coefficienti. Il costo computazionale in termini di operazioni di
moltiplicazione e divisione dell'intera fase di triangolarizzazione è:12
n −1
n3
4
∑ (n − k ) + (n − k ) + (n − k + 1)(n − k ) = 3 + n 2 − 3 n .
k =1
Per la fase di sostituzione all'indietro si svolgono n passi per ciascuno dei quali si ha
una divisione e, al p-esimo passo, (p-1) moltiplicazioni, complessivamente:
n
∑p=
p =1
n(n + 1) n 2 n
=
+
2
2
2
In conclusione il metodo di eliminazione di Gauss viene eseguito svolgendo
12
Non ricordando le formule che consentono di esplicitare la sommatoria definita è possibile calcolarne
la somma con Derive semplificando l'istruzione SUM((n-k)+(n-k)+(n-k+1)(n-k),k,1,n-1).
Informatica per la Matematica
Giorgio Meini © 2000
n3
4
n2 n n3 3 2 5
+ n2 − n +
+ =
+ n − n
3
3
2
2 3 2
6
operazioni di moltiplicazione o divisione.
X.2.2
I metodi iterativi per la risoluzione dei sistemi lineari
X.2.2.0
Il metodo di eliminazione di Gauss è un metodo diretto che definisce un algoritmo
numerico risolutivo a partire da una tecnica algebrica esatta (la tecnica della
"sostituzione"). Come nel caso delle equazioni anche per la risoluzione dei sistemi
lineari esistono algoritmi numerici iterativi che producono una successione di vettori
eventualmente convergente alla soluzione del sistema: in alcuni casi questi metodi
iterativi si dimostrano più efficienti dei metodi diretti sia per l'accuratezza del risultato
che per il costo computazionale dell'esecuzione.
X.2.2.1
Il più semplice dei metodi iterativi per la risoluzione dei sistemi lineari può essere
introdotto con un esempio:
 2 x − y = −1

 x + 2y = 0
 2 1
Il sistema - come si può immediatamente verificare - ha soluzione − ;
;
 5 5
ricavando la prima incognita (x) dalla prima equazione e la seconda incognita (y) dalla
seconda equazione si ottiene il seguente sistema:
−1+ y

x = 2

−x
 y=
2

Scegliendo, anche in modo casuale, una approssimazione iniziale della soluzione - per
esempio [x=0; y=0] - è in questo caso possibile "raffinarla" per iterazione costruendo
due successioni convergenti alle singole componenti della soluzione del sistema:
− 1 + yi

x0 = 0
 xi +1 =
2

− xi
 y i +1 =
y0 = 0
2

In Excel è possibile utilizzare le celle delle colonne A e B rispettivamente per
calcolare le approssimazioni successive delle variabili x e y inserendo nelle celle della
prima riga l'approssimazione iniziale e impostando nelle celle della seconda riga le
formule ricorsive che definiscono l'iterazione:
Informatica per la Matematica
Giorgio Meini © 2000
Copiando le formule della seconda riga nelle celle sottostanti delle colonne A e B
si calcolano i termini della successione vettoriale che approssima la soluzione del
sistema (le celle delle colonne A e B sono state formattate in modalità numerica con
visualizzazione impostata a 6 cifre decimali):
Osservazione
In Derive è possibile impiegare l'istruzione ITERATES per definire una successione
ricorsiva di coppie di valori convergente alla soluzione del sistema:
Informatica per la Matematica
Giorgio Meini © 2000
Successivamente il comando di approssimazione consente di generare i valori della
successione di coppie:
X.2.2.2
La generalizzazione del metodo iterativo del paragrafo precedente definisce il metodo
di Jacobi per l'approssimazione della soluzione di un sistema lineare n×n:
n
bi − ∑ aij x j ( k )
xi ( k +1) =
j =1
j ≠i
a ii
i = 1,...n
La sommatoria indicata nella formula che definisce l'iterazione sintetizza la somma
ai1 x1( k ) + ai 2 x 2 ( k ) + ... + ain x n ( k )
da cui è escluso il termine a ii xi ( k ) ; l'apice (k) indica l'indice della successione e le
componenti del vettore delle approssimazioni iniziali
[x
1
( 0)
x 2 ( 0)
... x n (0)
]
sono casuali.
La procedura VBA che segue - associata a un pulsante di comando inserito in un
foglio Excel - implementa il metodo iterativo di Jacobi ipotizzando che i coefficienti
Informatica per la Matematica
Giorgio Meini © 2000
del sistema siano inseriti nelle celle delle prime n righe e n colonne, che i termini noti
siano inseriti nelle celle della (n+1)-esima colonna e che le approssimazioni iniziali
siano inserite nelle celle della (n+1)-esima riga (la dimensione n del sistema è invece
specificata come costante nel modulo VBA). Al fine di rendere la notazione impiegata
nel codice simile alla notazione matematica impiegata nella descrizione dell'algoritmo
la procedura dichiara e impiega come variabili una matrice A di dimensione n×n per i
coefficienti, un vettore b di dimensione n per i termini noti e un vettore x di
dimensione n per le approssimazioni della soluzione (un vettore t consente la
memorizzazione temporanea delle approssimazioni calcolate in attesa della
conclusione dell'iterazione corrente). Un ciclo iniziale copia i valori dalle celle del
foglio nelle variabili A, b e x; al termine di ogni iterazione un ciclo aggiorna il vettore
x e copia le approssimazioni della soluzione nelle celle della (n+k)-esima riga del
foglio, con k è l'indice dell'iterazione corrente.
Option Base 1
' il primo indice di matrici e vettori è 1 (non 0)
Const N As Integer = …
' dimensione del sistema
Sub Jacobi_Click()
Const P As Integer = 100
' numero dei passi di iterazione
Dim
Dim
Dim
Dim
Dim
Dim
Dim
A(N,
b(N)
x(N)
t(N)
i, j
k As
s As
N) As Single
As Single
As Single
As Single
As Integer
Integer
Single
'
'
'
'
'
'
'
matrice dei coefficienti
vettore dei termini noti
vettore delle approssimazioni della sol.
vettore mem. temporanea approssimazioni
indici
contatore dei passi
variabile per sommatoria
For i = 1 To N
For j = 1 To N
A(i, j) = Cells(i, j)
Next j
b(i) = Cells(i, N + 1)
x(i) = Cells(N + 1, i)
Next i
For k = 1 To P
' generazione nuove approssimazioni
For i = 1 To N
s = 0
' calcolo della sommatoria
For j = 1 To N
If (j <> i) Then
s = s + A(i, j) * x(j)
End If
Next j
t(i) = (b(i) - s) / A(i, i)
Next i
For i = 1 To N
x(i) = t(i)
Cells(N + k + 1, i) = x(i)
Next i
Next k
End Sub
Informatica per la Matematica
Giorgio Meini © 2000
Esempio
Il sistema
1

2 x − y + 2 z = 1

 2y − z = 0
 x − 2z = 2


1
3
3

ha soluzione  x = ; y = − ; z = −  . Per calcolare la soluzione con il metodo
2
8
4

iterativo di Jacobi impiegando la procedura Jacobi_Click() è sufficiente inserire i
coefficienti e i termini noti nell'intervallo di celle A1..D3 del foglio Excel (se non
vengono inserite nell'intervallo di celle A4..D3 le componenti iniziali del vettore delle
approssimazioni il codice VBA assume che esse siano nulle):
Dopo aver impostato la dimensione del sistema
Const N As Integer = 3
' dimensione del sistema
l'esecuzione della procedura Jacobi_Click() attivata con il pulsante di comando
produce la successione delle approssimazioni convergente alla soluzione del sistema:
Informatica per la Matematica
Giorgio Meini © 2000
Esempio
Il sistema
x + 2 y = 0

 2x + y = 1
2
1

ha soluzione  x = ; y = −  . Impiegando la procedura Jacobi_Click() per
3
3

risolverlo (dopo aver impostato la dimensione del sistema a 2) si ottiene una
successione non convergente:
Anche i tentativi condotti specificando nell'intervallo di celle A3..B3 valori iniziali
dell'approssimazione diversi dal vettore [0; 0] hanno lo stesso esito: in questo caso il
metodo iterativo di Jacobi non converge alla soluzione del sistema.
X.2.2.3
Il seguente teorema assicura una condizione sufficiente, ma non strettamente
necessaria, per la convergenza del metodo di Jacobi; essa risulta di semplice verifica,
ma la dimostrazione, non essendo altrettanto semplice, è omessa.
Teorema
Se la matrice A dei coefficienti di un sistema lineare presenta la caratteristica di
"predominanza diagonale in senso stretto", cioè se per ogni indice di riga i si ha
che il valore assoluto del termine "diagonale" aii è maggiore della somma dei
valori assoluti di tutti gli altri termini della riga:
n
a ii > ∑ a ij ,
j =1
j ≠i
allora il metodo iterativo di Jacobi converge alla soluzione del sistema.
Informatica per la Matematica
Giorgio Meini © 2000
Osservazione
Le ipotesi del teorema di convergenza del metodo iterativo di Jacobi non
comprendono condizioni relative ai valori dei termini noti o ai valori delle componenti
iniziali del vettore delle approssimazioni: se convergente il metodo di Jacobi converge
per una qualsiasi scelta delle approssimazioni iniziali che possono quindi essere
casuali.
Come tutti i metodi iterativi il metodo di Jacobi è numericamente stabile: ogni singola
approssimazione viene trattata come l'approssimazione iniziale che non influenza la
convergenza del metodo; l'eventuale errore di calcolo che influenza una
approssimazione intermedia viene "autocorretto" dall'algoritmo e non si accumula
nelle iterazioni successive.
Esempio
Il sistema
 2,2a + 5b + c − 0,5d = 1
 0,2a − 1,6c + 2,2d = 0


 a + 0,2b + 0,5d = 2
a − b + 5c − 1,5d = −2,75
ha matrice dei coefficienti
1
− 0,5
2,2 5
0,2 0 − 1,6 2,2 

A=
 2 0,2
0
0,5 


5
− 1,5 
 1 −1
che non è a predominanza diagonale in senso stretto, ma il sistema equivalente
 a + 0,2b + 0,5d = 2
 2,2a + 5b + c − 0,5d = 1


a − b + 5c − 1,5d = −2,75
 0,2a − 1,6c + 2,2d = 0
ottenuto scambiando la posizione delle equazioni presenta la matrice dei coefficienti
con la caratteristica di predominanza diagonale in senso stretto
0
0,5 
 1 0,2
2,2 5
1
− 0,5

A=
 1 −1
5
− 1,5 


0,2 0 − 1,6 2,2 
che assicura la convergenza del metodo di Jacobi.
Ovviamente al fine di ottenere una matrice dei coefficienti a predominanza diagonale
in senso stretto è possibile modificare un sistema lineare utilizzando trasformazioni
Informatica per la Matematica
Giorgio Meini © 2000
più complesse del semplice scambio di posizione delle equazioni: in particolare è
possibile sostituire le equazioni con particolari combinazioni lineari delle stesse.
X.2.2.4
Se nell'algoritmo iterativo che definisce il metodo di Jacobi (noto anche come metodo
delle "sostituzioni simultanee") eliminiamo il ricorso al vettore t per la
memorizzazione temporanea delle approssimazioni calcolate in una specifica
iterazione aggiornando direttamente il vettore x si ha come conseguenza che il calcolo
delle approssimazioni successive alla prima impiega i valori delle approssimazioni
precedenti già modificati nel corso dell'iterazione corrente. Questa variante
dell'algoritmo conosciuta come metodo di Seidel (o metodo delle "sostituzioni
successive") in molti casi accelera la velocità di convergenza:
Option Base 1
' il primo indice di matrici e vettori è 1 (non 0)
Const N As Integer = …
' dimensione del sistema
Sub Seidel_Click()
Const P As Integer = 100
' numero dei passi di iterazione
Dim
Dim
Dim
Dim
Dim
Dim
A(N,
b(N)
x(N)
i, j
k As
s As
N) As Single
As Single
As Single
As Integer
Integer
Single
'
'
'
'
'
'
matrice dei coefficienti
vettore dei termini noti
vettore delle approssimazioni della sol.
indici
contatore dei passi
variabile per sommatoria
For i = 1 To N
For j = 1 To N
A(i, j) = Cells(i, j)
Next j
b(i) = Cells(i, N + 1)
x(i) = Cells(N + 1, i)
Next i
For k = 1 To P
' generazione nuove approssimazioni
For i = 1 To N
s = 0
' calcolo della sommatoria
For j = 1 To N
If (j <> i) Then
s = s + A(i, j) * x(j)
End If
Next j
x(i) = (b(i) - s) / A(i, i)
Cells(N + k + 1, i) = x(i)
Next i
Next k
End Sub
Esempio
Come è possibile verificare in ambiente Excel la procedura Jacobi_Click() converge
alla soluzione del sistema a predominanza diagonale in senso stretto
Informatica per la Matematica
Giorgio Meini © 2000
 a + 0,2b + 0,5d = 2
 2,2a + 5b + c − 0,5d = 1


a − b + 5c − 1,5d = −2,75
 0,2a − 1,6c + 2,2d = 0
in circa 40 iterazioni: a partire dalla quarantesima iterazione le cifre decimali
visualizzate non vengono infatti ulteriormente modificate e è possibile adottare come
soluzione il vettore [a = 2,855428; b = -0,89072; c = -1,5056; d = -1,35457] .
Applicando allo stesso sistema la procedura Seidel_Click() associata a un pulsante di
comando di un foglio Excel lo stesso risultato viene prodotto in meno di 20 iterazioni:
Informatica per la Matematica
X.2.3
Giorgio Meini © 2000
Sintesi
per la risoluzione numerica dei sistemi lineari esistono metodi diretti, derivati da
tecniche "esatte" di risoluzione algebrica, e metodi iterativi che generano una
successione di approssimazioni convergente alla soluzione;
il metodo di eliminazione di Gauss è un metodo diretto derivato dalla tecnica
algebrica della sostituzione; è suddiviso in due fasi: "triangolarizzazione"
a (k )
mik = ik
a kk ( k )
i = (k + 1),..., n

aij ( k )
aij ( k +1) =  ( k )
− mik ⋅ a kj ( k )
aij
i≤k
i>k

b (k )
bi ( k +1) =  ( k ) i
bi
− mik ⋅ bk ( k )
j = k ,..., n
i≤k
i>k
e "sostituzione all'indietro"
xn =
bi ( n) −
xi =
bn ( n )
a nn ( n)
n
∑ aij (n) ⋅ x j
j =i +1
a ii ( n)
i = (n − 1),...,1
il costo computazionale del metodo di eliminazione di Gauss è di
n3 3 2 5
+ n − n
3 2
6
operazioni di moltiplicazione o divisione;
il metodo di Jacobi
n
bi − ∑ a ij x j ( k )
j =1
xi ( k +1) =
j ≠i
a ii
i = 1,...n
è un metodo iterativo che ha come condizione sufficiente di convergenza la
predominanza diagonale in senso della matrice A dei coefficienti
Informatica per la Matematica
Giorgio Meini © 2000
n
a ii > ∑ aij
i = 1,...n
j =1
j ≠i
il metodo di Seidel è una variante del metodo iterativo di Jacobi che utilizza le
approssimazioni già generate nell'iterazione corrente per il calcolo delle
approssimazioni relative alle variabili successive; normalmente la velocità di
convergenza del metodo di Seidel è superiore a quella del metodo di Jacobi.
Informatica per la Matematica
X.2.4
Giorgio Meini © 2000
Esperimenti
1. Risolvere i seguenti sistemi lineari utilizzando in ambiente Excel sia il metodo di
Cramer che la procedura VBA Gauss_Click(); valutare la precisione delle
soluzioni ottenute risolvendoli in modo esatto in ambiente Derive.
 2 x − y + z = −3
a)  3 x + 5 y − 2 z = 1
 x − 4 y + 10 z = 0

 3a + b − c + 2d = 6

b) − 5a + b + 3c − 4d = −12
2a + c − d = 1

 a − 5b + 3c − 3d = 3
a + 3b − 2c − 2e = 0,5

 3a + 4b − 5c + d − 3e = 5,4

c)  − 2a − 5b + 3c − 2d + 2e = 5

b − 2c + 5d + 3e = 7,5

− 2a − 3b + 2c + 3d + 4e = 3,3
7,9 x + 5,6 y + 5,7 z − 7,2t = 6,68

d)  8,5 x − 4,8 y + 0,8 z + 3,5t = 9,95
 4,3x + 4,2 y − 3,2 z + 9,3t = 8,6
 3,2 x − 1,4 y − 8,9 z + 3,3t = 1
6 x − y − z = 11,33
e)  − x + 6 y − z = 32
 − x − y + 6 z = 42

f)
 10 x1 − 2 x 2 − 2 x3 = 6

− x1 + 10 x 2 − 2 x3 = 7
 − x − x + 10 x = 8
1
2
3

 1,02 x1 − 0,05 x 2 − 0,1x3 = 0,795
g) − 0,11x1 + 1,03 x 2 − 0,05 x3 = 0,849
 − 0,11x − 0,12 x + 1,04 x = 1,398
1
2
3

2. Modificare la procedura VBA Gauss_Click() in modo che effettui il conteggio
delle operazioni di moltiplicazione e divisione effettivamente svolte visualizzando
Informatica per la Matematica
Giorgio Meini © 2000
il risultato in una cella del foglio Excel. Eseguire la procedura con sistemi di varia
dimensione verificando la previsione teorica del costo computazionale.
3. # Modificare l'algoritmo di eliminazione di Gauss in modo che produca in n passi,
anziché un sistema triangolare, un sistema "diagonale" dove tutte le equazioni sono
del tipo
a ii xi = bi .
Un sistema in forma diagonale non necessita, per essere risolto, dello svolgimento
delle sostituzioni all'indietro: implementare l'algoritmo definito come procedura
VBA e verificarne empiricamente la correttezza.
Determinare la complessità computazionale di questo algoritmo (in termini di
operazioni di moltiplicazione e divisione) denominato "metodo di Gauss-Jordan".
4. Risolvere - quando possibile - i sistemi dell'esercizio 1 impiegando in ambiente
Excel la procedura VBA Jacobi_Click(). Confrontare la precisione delle soluzioni
calcolate con la soluzione esatta determinata in ambiente Derive e con le soluzioni
fornite dalla procedura Gauss_Click() che implementa il metodo diretto di
eliminazione.
5. # Modificare il codice della procedura VBA Jacobi_Click() in modo che la
condizione di terminazione del ciclo non sia l'esecuzione di un numero prefissato
di iterazioni, ma il fatto che la massima differenza in valore assoluto tra le
componenti corrispondenti di due successivi vettori di approssimazioni generati
dall'algoritmo sia inferiore ad una costante predefinita.
6. Risolvere - quando possibile - i sistemi dell'esercizio 1 impiegando in ambiente
Excel la procedura VBA Seidel_Click(). Confrontare il numero di iterazioni
necessarie a stabilizzare le approssimazioni della soluzione con quelle richieste dal
metodo di Jacobi (procedura Jacobi_Click()).
7. # Utilizzare l'istruzione ITERATES dell'ambiente Derive per risolvere con il
metodo di Jacobi i sistemi (e), (f) e (g) dell'esercizio 1. Costruire per ciascuno di
essi un grafico che mostri il numero di iterazioni necessarie a stabilizzare le
approssimazioni delle soluzioni in funzione di valori crescenti del numero di cifre
significative impiegate nel calcolo.
Informatica per la Matematica
Giorgio Meini © 2000
X.3
Interpolazione
X.3.0
Il polinomio di interpolazione
Il problema dell'interpolazione consiste nel determinare - noti n+1 punti di coordinate
(x0; y0), (x1; y1), …, (xn; yn) - una funzione f(x) che assuma in corrispondenza dei punti
base ("nodi") x0, x1, …, xn i valori f(x0)=y0, f(x1)=y1, …, f(xn)=yn.
y1
yn
y0
x0
x1
xn
Trattandosi di un problema ricorrente nel campo della matematica applicata la classe
di funzioni alla quale f(x) appartiene deve presentare caratteristiche di semplicità
algebrica e di efficiente calcolabilità numerica, per questo motivo sono frequentemente
impiegate le funzioni polinomiali di grado n:
p( x) = a 0 x n + a1 x n −1 + ... + a n−1 x + a n
Il problema è in questo caso ben posto in quanto dal teorema fondamentale
dell'algebra segue che due polinomi di grado n che assumono lo stesso valore in n+1
punti distinti coincidono. Dato che p(x0)=y0, p(x1)=y1, …, p(xn)=yn, la determinazione
dei coefficienti a0, a1, …, an può essere effettuata risolvendo sistema lineare:
 ( x n )a + ( x n−1 )a + ... + ( x )a
0
1
0 n −1 + a n = y 0
 0n 0
n −1
 ( x1 )a 0 + ( x1 )a1 + ... + ( x1 )a n−1 + a n = y1

...

( x n )a + ( x n−1 )a + ... + ( x )a
0
n
1
n n −1 + a n = y n
 n
La matrice dei coefficienti ha dimensione (n+1)×(n+1)
x n
 0n
 x1
 ...
 n
 xi

 ...
 x n n
x0 n−1 ... x 0
x1n −1 ... x1
...
... ...
n −1
xi
... xi
...
... ...
n −1
xn
... x n
1

1
1

1

1
1
Informatica per la Matematica
Giorgio Meini © 2000
e presenta la tipica struttura della "matrice di Vandermonde". È possibile dimostrare
che una matrice di Vandermonde è non singolare se i punti x0, x1, …, xn sono tutti
diversi tra loro, di conseguenza - avendo il sistema una soluzione unica costituita da
n+1 coefficienti che individuano univocamente un polinomio di grado n o minore vale il seguente teorema che assicura l'esistenza e l'unicità della soluzione di un
problema di interpolazione polinomiale:
Teorema
Assegnati i nodi x0, x1, …, xn (xi≠xj se i≠j) e le relative ordinate y0, y1, …, yn esiste
ed è unico il polinomio p(x) di grado minore o uguale a n tale che p(xi)=yi per ogni
i=0,1, … n.
Esempio
Assegnati i 4 punti (0;-1), (0,5;2), (2;1) e (-1;0) la soluzione del seguente sistema
lineare 4×4 è costituita dai coefficienti a, b, c e d del polinomio di interpolazione
ax3+bx2+cx+d:
d = −1

(0,5) 3 a + (0,5) 2 b + (0,5)c + d = 2


2 3 a + 2 2 b + 2c + d = 1

 (−1) 3 a + (−1) 2 b + (−1)c + d = 0
Risolvendo il sistema in ambiente Derive si ottiene la soluzione
che individua il polinomio
Il seguente grafico del polinomio p(x) è stato sovrapposto alla rappresentazione grafica
dei 4 punti assegnati
Informatica per la Matematica
Giorgio Meini © 2000
X.3.1
Il polinomio di interpolazione nella forma di Lagrange
X.3.1.0
La tradizionale "forma" di un polinomio
p( x) = a 0 x n + a1 x n −1 + ... + a n−1 x + a n
non è la più efficiente dal punto di vista della computazione del valore p(x) assunto dal
polinomio p in corrispondenza di un punto x: calcolando le potenze come
moltiplicazioni ripetute il calcolo del valore di un polinomio di grado n richiede infatti
n
∑ (i + 1) =
i =1
n 2 + 3n
moltiplicazioni13 e n addizioni o sottrazioni.
2
La seguente "forma di Hörner"
p ( x) = (...(((ao x + a1 ) x + a 2 ) x + ... + a n −1 ) x + a n )
è priva di potenze e consente di calcolare efficientemente il valore p(x) assunto dal
polinomio con sole n moltiplicazioni e n addizioni o sottrazioni.
Esempio
Il polinomio
x 4 − 2 x 3 + 3x 2 − 5
può essere posto in forma di Hörner mediante le seguenti trasformazioni algebriche:
Informatica per la Matematica
Giorgio Meini © 2000
x 4 − 2 x 3 + 3x 2 − 5 ⇔
X.3.1.1
⇔
x( x 3 − 2 x 2 + 3 x) − 5 ⇔
⇔
⇔
x( x( x 2 − 2 x + 3)) − 5 ⇔
x( x( x( x − 2) + 3)) − 5
Esiste una forma particolare del polinomio di interpolazione che ne consente
l'immediata definizione a partire dalle coordinate dei punti da interpolare. Definito
n
x − xi
x − x0 x − x1
x − xn
=
⋅
⋅ ... ⋅
x j − x0 x j − x1
x j − xn
i = 0 x j − xi
L j ( x) = ∏
i≠ j
in modo che dal prodotto sia escluso il termine j-esimo per il quale si annullerebbe il
denominatore si ha che
L j (x j ) =
x j − x0 x j − x1
x j − xn
⋅
⋅ ... ⋅
=1
x j − x0 x j − x1
x j − xn
e che
i ≠ j → L j ( xi ) = 0
perché l'i-esimo termine del prodotto sia annulla avendo come numeratore xi-xi.
Lj(x), essendo il prodotto di n binomi di I grado, è un polinomio di grado minore o
uguale a n; il polinomio
p ( x) =
n
∑ y j ⋅ L j ( xi ) = y 0 L0 ( x) + y1 L1 ( x) + ... + y n Ln ( x)
j =0
è detto polinomio di interpolazione di Lagrange dei punti (x0; y0), (x1; y1), …, (xn;
yn) ed essendo la somma di n polinomi di grado minore o uguale a n è un polinomio di
grado non superiore a n. Il "polinomio di interpolazione di Lagrange" è effettivamente
una espressione del polinomio di interpolazione dei punti (x0; y0), (x1; y1), …, (xn; yn)
infatti
p ( xi ) =
n
∑ y j ⋅ L j ( xi ) = y 0 L0 ( xi ) + y1 L1 ( xi ) + ... + yi Li ( xi ) + ... + y n Ln ( xi ) = yi
j =0
per ogni nodo xi in quanto Lj(xi)=0 per tutti gli indici j≠i e Lj(xi)=1 per j=i.
13
La sommatoria può eventualmente essere esplicitata in ambiente Derive semplificando l'istruzione
SUM(i+1,i,1,n).
Informatica per la Matematica
Giorgio Meini © 2000
Esempio
Il polinomio di interpolazione p(x) dei punti (0;-1), (0,5;2), (2;1) e (-1;0) espresso
nella forma di Lagrange è il seguente:
 x − 0,5 x − 2 x + 1 
− 1⋅ 
⋅
⋅
+
 − 0,5 − 2 + 1 
 x x − 2 x +1 
2⋅
⋅
⋅
+
 0,5 0,5 − 2 0,5 + 1 
 x x − 0,5 x + 1 
1⋅  ⋅
⋅
+
 2 2 − 0,5 2 + 1 
 x x − 0,5 x − 2 
0⋅ ⋅
⋅

 − 1 − 1 − 0,5 − 1 − 2 
Il comando Semplifica-Sviluppa di Derive trasforma l'espressione
in
che è esattamente il polinomio - espresso in una forma più convenzionale! determinato nell'esempio della sezione precedente.
La complessità strutturale della forma di Lagrange del polinomio di interpolazione è
compensata dalla possibilità di definizione diretta a partire dalle coordinate dei punti
da interpolare. Inoltre - pur non essendo particolarmente efficiente sotto il profilo della
complessità computazionale - il polinomio di interpolazione di Lagrange si presta a
una semplice implementazione algoritmica caratterizzata da due cicli iterativi innestati
(uno interno per il calcolo della "produttoria" e uno esterno per il calcolo della
sommatoria); la seguente funzione VBA Lagrange(…) calcola il valore p(z) del
polinomio assumendo che le ascisse e le corrispondenti ordinate dei punti da
interpolare siano presenti nelle celle delle prime n+1 righe rispettivamente delle
colonne A e B di un foglio Excel (il grado n del polinomio è invece specificato come
costante nel modulo di definizione della funzione):
Option Base 0
Const n As Integer = … ' grado del polinomio di interpolazione
Informatica per la Matematica
Public Function Lagrange(z
Dim x(n), y(n) As Single '
Dim i, j As Integer
'
Dim sum, prod As Single '
'
Giorgio Meini © 2000
As Single) As Single
ascisse/ordinate dei punti da interpolare
indici per produttoria/sommatoria
variabili per accumulazione dei valori
della sommatoria e della produttoria
' ciclo di memorizzazione delle coordinate dei punti da interpolare
For i = 0 To n
x(i) = Cells(i + 1, 1)
y(i) = Cells(i + 1, 2)
Next i
sum = 0
' ciclo di calcolo della sommatoria
For j = 0 To n
prod = y(j)
' ciclo di calcolo della produttoria
For i = 0 To n
If i <> j Then
prod = prod * ((z - x(i)) / (x(j) - x(i)))
End If
Next i
sum = sum + prod
Next j
Lagrange = sum
End Function
Esempio
Per rappresentare graficamente in ambiente Excel il polinomio di interpolazione dei 4
punti dell'esempio precedente è sufficiente impostare il grado n=3
Const n As Integer = 3 ' grado del polinomio di interpolazione
e inserire nell'intervallo di celle A1..B4 le coordinate dei nodi e dei relativi valori
La funzione Lagrange(…) può essere impostata e copiata per produrre le ordinate
corrispondenti a una serie di ascisse inserite in precedenza
Informatica per la Matematica
Giorgio Meini © 2000
6
5
4
3
2
1
0
-2
-1
-1 0
1
2
3
-2
-3
-4
Osservazione
In ambiente Derive è possibile definire il polinomio di interpolazione di Lagrange di n
punti le cui coordinate sono memorizzate in due vettori x e y impiegando la "naturale"
notazione matematica14:
Dopo aver assegnando ai vettori x e y le coordinate dei punti da interpolare (in questo
caso i punti dell'esempio precedente) e definito il grado del polinomio di
interpolazione
14
Nella riga di inserimento della finestra "autore" di Derive la definizione del polinomio di
interpolazione di Lagrange è stata digitata impiegando le istruzioni SUM e PRODUCT:
L(j,z):=PRODUCT(IF(j≠i,(z-x↓i)/(x↓j-x↓i),1),i,1,n+1)
P(z):=SUM(y↓j⋅L(j,z),j,1,n+1)
Il ricorso alla variabile z è reso necessario dall'esistenza del vettore x dei nodi; la modifica dei valori
iniziali e finali degli indici della sommatoria e della produttoria è motivato dal fatto che il primo
elemento di un vettore v in Derive è denotato da v↓1; infine l'istruzione condizionale IF consente di
escludere dai termini della produttoria - assegnando il valore neutro 1 - il termine per cui i=j.
Informatica per la Matematica
Giorgio Meini © 2000
la semplificazione di p(z) produce il polinomio di interpolazione
che può essere espanso con il comando Semplifica-sviluppa
I singoli valori del polinomio di interpolazione possono essere facilmente calcolati
impiegando il comando di semplificazione (o di approssimazione):
X.3.1.2
Se le ordinate dei punti da interpolare sono i valori y0, y1, …, yn assunti da una
funzione f(x) in corrispondenza dei nodi x0, x1, …, xn l'errore commesso approssimando
i valori della funzione con i valori del polinomio di interpolazione p(x) è
E ( x) = f ( x) − p ( x) ;
ovviamente in corrispondenza dei nodi si ha che E(xi)=0. Considerando l'intervallo
[a;b] con a e b rispettivamente valore minimo e massimo dei nodi di interpolazione xi
della funzione f(x) il seguente teorema consente di valutare l'errore E(x) per a<x<b.
Teorema (errore dell'interpolazione polinomiale)
Se f(x) è derivabile con continuità n+1 volte nell'intervallo [a;b] dove a e b sono
rispettivamente i valori minimo e massimo dei nodi di interpolazione x0, x1, …, xn
allora
f ( n +1) (ε ) n
f ( n+1) (ε )
E ( x) =
⋅ ∏ ( x − xi ) =
⋅ ( x − x 0 ) ⋅ ( x − x1 ) ⋅ ... ⋅ ( x − x n ) a < ε < b
(n + 1)! i =0
(n + 1)!
Si definiscono per a<x<b e x≠xi (i=0, 1, …, n) la funzione
Informatica per la Matematica
Giorgio Meini © 2000
E ( x)
g ( x) =
n
=
∏ ( x − xi )
E ( x)
( x − x 0 ) ⋅ ( x − x1 ) ⋅ ... ⋅ ( x − x n )
i =0
e la funzione di variabile t:
n
h(t ) = E (t ) − g ( x) ⋅ ∏ (t − xi ) = E (t ) − g ( x) ⋅ (t − x 0 ) ⋅ (t − x1 ) ⋅ ... ⋅ (t − x n ) =
i =0
= E (t ) −
E ( x)
⋅ (t − x 0 ) ⋅ (t − x1 ) ⋅ ... ⋅ (t − x n ) =
( x − x 0 ) ⋅ ( x − x1 ) ⋅ ... ⋅ ( x − x n )
= [ f (t ) − p(t )] −
f ( x) − p ( x)
⋅ (t − x 0 ) ⋅ (t − x1 ) ⋅ ... ⋅ (t − x n )
( x − x 0 ) ⋅ ( x − x1 ) ⋅ ... ⋅ ( x − x n )
La funzione h(t) si annulla negli n+2 punti x0, x1, …, xn (perché E(xi)=0 e uno dei
termini della produttoria è nullo) e x (perché h(x)=E(x)-E(x)); inoltre la funzione h(t) è
derivabile n+1 volte perché per ipotesi lo è la funzione f(x).
Per il teorema di Rolle la funzione h'(t) si annulla in almeno n+1 punti dell'intervallo
[a;b], la funzione h"(t) si annulla in almeno n punti dell'intervallo [a;b] e così via fino
alla funzione h(n+1)(t) che si annulla in almeno un punto (ε) dell'intervallo [a;b]15:
0 = h ( n+1) (ε ) = E ( n+1) (ε ) − g ( x) ⋅ (n + 1)! =
[
]
= f ( n+1) (ε ) − p ( n +1) (ε ) − g ( x) ⋅ (n + 1)!
Dato che il polinomio p(x) di grado n ha derivata (n+1)-esima nulla si ha
f ( n+1) (ε ) − g ( x) ⋅ (n + 1)! = 0
da cui
g ( x) =
f ( n+1) (ε )
(n + 1)!
e per a<x<b e x≠xi (i=0, 1, …, n):
E ( x) =
f ( n+1) (ε )
⋅ ( x − x 0 ) ⋅ ( x − x1 ) ⋅ ... ⋅ ( x − x n )
(n + 1)!
Per x=xi (i=0, 1, …, n) E(xi)=0 e contemporaneamente si annulla uno dei termini della
produttoria, di conseguenza la tesi è dimostrata per a<x<b.
15
È possibile dimostrare che la derivata del polinomio di grado n+1 (x-x0)(x-x1)…(x-xn) è (n+1)!,
indipendentemente dai valori x0, x1, …, xn.
Informatica per la Matematica
Giorgio Meini © 2000
Osservazione
Dal teorema precedente non è difficile dedurre una maggiorazione dell'errore assoluto
commesso valutando nell'intervallo [a;b] il polinomio di interpolazione p(x) calcolato
nei nodi x0, x1, …, xn in luogo della funzione f(x):
E ( x) ≤
M n +1
⋅ ( x − x 0 ) ⋅ ( x − x1 ) ⋅ ... ⋅ ( x − x n )
(n + 1)!
dove
M n+1 = max f ( n+1) ( x)
a < x <b
Esempio
La retta di equazione y =
π 
x passante per i punti (0;0) e  ;1 consente di
π
2 
2
approssimare grossolanamente i valori del seno di angoli compresi tra 0 e
π
2
radianti
(interpolazione lineare)
Il grado del polinomio di interpolazione è n=1 e la derivata seconda della funzione f(x)
 π
= sen(x) è f"(x) = -sen(x) il cui massimo valore assoluto nell'intervallo 0;  è 1;
 2
perciò
E ( x) ≤
Approssimando sen(1) con
1
π
1 − ≅ 0,285 16.
2
2
16
2
π
1 
π 1
π
⋅ x x −  = x 2 − x .
2 
2 2
2
⋅ 1 ≅ 0,6366 si commette un errore E inferiore a
Essendo sin(1)=0,84147… l'errore reale è circa 0,20487.
Informatica per la Matematica
Giorgio Meini © 2000
Per calcolare una maggiorazione dell'errore commesso con 0 < x <
determinare il massimo valore assunto dalla quantità
π
2
è sufficiente
1 2 π
x − x nell'intervallo
2
2
 π
0; 2  ; tracciandone il grafico in ambiente Derive è possibile osservare che assume un


massimo relativo all'interno dell'intervallo
È possibile determinare l'ascissa del punto di massimo in corrispondenza dello zero
π
della derivata prima della quantità x 2 − x :
2
In conclusione per 0 < x <
π
si ha che E ( x) ≤
2
ovviamente di un errore inaccettabile).
1 π π
⋅ = ≅ 0,3927 (si tratta
2 4 8
Esempio
Approssimando la funzione f(x)=ex nell'intervallo [-1;1] con un polinomio di IV grado
è possibile scegliere come nodi i punti "equidistanti":
1
1
x 0 = −1, x1 = − , x 2 = 0, x3 = , x 4 = 1 .
2
2
Dato che fV(x)=ex è crescente in [-1;1] si ha M5 = e1 = e; di conseguenza:
E ( x) ≤
(
)
1
1 
1
e
e


⋅ ( x + 1) x +  x x − ( x − 1) =
⋅ x x2 −1 x2 − 
4
2 
2
120
5!


Informatica per la Matematica
Giorgio Meini © 2000
Il grafico seguente è stato realizzato con Derive e rappresenta la maggiorazione
dell'errore E al variare di x:
Nell'intervallo di interpolazione [-1;1] l'errore commesso è minimo, ma cresce
rapidamente nel caso di "estrapolazione" di valori esterni all'intervallo.
Osservazione
Lo zoom verticale del grafico della maggiorazione di E(x) relativo all'esempio
precedente mostra il tipico comportamento dell'errore che - nel caso di nodi
equidistanti - è minore al centro dell'intervallo di interpolazione e maggiore in
prossimità degli estremi:
Esempio
Per approssimare la funzione "gaussiana" della distribuzione normale di probabilità
y=
1
2π
x2
e 2
−
nell'intervallo [-3;3] è possibile scegliere come nodi i punti equidistanti:
x 0 = −3, x1 = −2, x 2 = −1, x3 = 0, x 4 = 1, x5 = 2, x 6 = 3 .
Dopo aver impostato il grado del polinomio di interpolazione
Const n As Integer = 6 ' grado del polinomio di interpolazione
ed inserito nell'intervallo di celle A1..B7 di un foglio Excel i nodi di interpolazione e
le relative ordinate
Informatica per la Matematica
Giorgio Meini © 2000
è possibile impiegare la funzione VBA Lagrange(…) per calcolare il valore assunto
dal polinomio di interpolazione in un qualsiasi punto dell'intervallo.
La seguente tabulazione del polinomio di interpolazione, della funzione di Gauss e
della differenza dei rispettivi valori consente di valutare l'andamento dell'errore
commesso all'interno dell'intervallo di interpolazione:
Informatica per la Matematica
Giorgio Meini © 2000
Il confronto tra i grafici del polinomio di interpolazione e della funzione gaussiana
conferma l'osservazione per cui in caso di nodi equidistanti l'errore è maggiore in
prossimità dagli estremi dell'intervallo di interpolazione (escludendo gli estremi stessi
nei quali l'errore, come in tutti i nodi di interpolazione, è nullo) e minore al centro
dell'intervallo:
0,5
0,4
0,3
0,2
0,1
0
-3
-2
-1
0
1
2
3
L'analisi è ulteriormente confermata dall'andamento della funzione di errore E(x)
stabilito empiricamente graficando le differenze dei valori f(x) - p(x):
0,01
0
-3
-2
-1
-0,01
0
1
2
3
-0,02
-0,03
-0,04
-0,05
X.3.2
La regressione lineare
X.3.2.0
In ambiente Excel è possibile "interpolare" dati statistici o sperimentali rappresentati in
un grafico di tipo X-Y ("dispersione") impiegando il comando Aggiungi-linea-ditendenza del menù Grafico.
Informatica per la Matematica
Giorgio Meini © 2000
Esempio
Nel seguente foglio di lavoro Excel nelle celle della colonna A sono riportate le altezze
(espresse in cm) di 20 studenti e nella colonna B i relativi pesi (espressi in Kg):
Il comando Aggiungi-linea-di-tendenza applicato al grafico X-Y dei dati visualizza la
"retta17 di regressione" e, specificandone l'opzione, la relativa equazione cartesiana:
90
peso (Kg)
80
70
60
50
40
150
160
170
altezza (cm)
17
180
190
y = 0,94x - 95,075
R2 = 0,7349
Excel consente di scegliere una "linea di tendenza" tra i seguenti tipi: lineare, logaritmica,
polinomiale, potenza, esponenziale e media mobile.
Informatica per la Matematica
X.3.2.1
Giorgio Meini © 2000
La retta di regressione y = mx + q visualizzata da Excel è un modello lineare per la
sintesi statistica delle coppie di dati (x1;y1), (x2;y2), …, (xn;yn) e viene determinata in
modo da avere le seguenti proprietà:
è vincolata al "baricentro" dei dati rappresentato dal punto di coordinate (x; y )
dove x e y rappresentano rispettivamente la media dei valori x1, x2, …, xn e la
media dei valori y1, y2, …, yn:
y = mx + q ;
rende minima la somma degli scarti quadratici tra i valori y i e le ordinate
~
y i = mxi + q della retta di regressione stessa (è questo il motivo per cui la retta di
regressione è spesso denominata retta dei minimi quadrati):
n
∑ [ yi − (mxi + q)]2 .
min
i =1
Ricavando il termine noto dall'equazione che esprime la prima proprietà
q = y − mx
e sostituendolo nell'espressione della seconda proprietà si ottiene
min
n
n
i =1
i =1
∑ [ yi − (mxi + y − mx )]2 = ∑ [ yi − y − m( xi − x )]2
che sviluppando il quadrato diviene
min
n
n
n
i =1
i =1
i =1
∑ ( yi − y ) 2 + m 2 ∑ ( xi − x ) 2 − 2m∑ ( yi − y )( xi − x )
Posti
n
a = ∑ ( xi − x ) 2
i =1
n
b = −2∑ ( y i − y )( xi − x )
i =1
n
c = ∑ ( yi − y ) 2
i =1
rispetto al parametro m si ha una parabola con concavità rivolta verso l'alto
min am 2 + bm + c
Informatica per la Matematica
Giorgio Meini © 2000
il cui valore minimo coincide con il vertice:
n
∑ ( yi − y )( xi − x )
b i =1
m=−
=
n
2a
∑ ( xi − x ) 2
i =1
Esempio
Per determinare i parametri m e q della retta dei minimi quadrati relativa ai punti (0;1),
(1;1), (1;2) e (3;2) si calcolano prima di tutto le medie
x=
0 +1+1+ 3 5
=
4
4
y=
1+1+ 2 + 2 3
= .
4
2
e
Il coefficiente angolare m è dato da
m=

1 −

3 
 −
2 
5 
 + 1 −
4 

−

2
3 
1 −
2 
5 
 + 2 −
4 
2
5 
5

 1 −  + 1 −
4 
4

3 
1 −
2 
5 
 + 2 −
4 
2
5

 + 3 −
4

5

4
2
3 
 3 −
2 
5

4
=
6
19
e il termine noto q si ricava facilmente
q = y − mx =
3 6 5 21
− ⋅ =
2 19 4 19
Il seguente grafico realizzato in ambiente Derive visualizza i punti (0;1), (1;1), (1;2) e
6
21
(3;2) e la retta y = x + :
19
19
Informatica per la Matematica
Giorgio Meini © 2000
Avendo preventivamente inserito le coordinate x e y degli n punti nelle celle delle
prime n righe delle colonne A e B di un foglio Excel la seguente funzione VBA
restituisce l'ordinata della retta di regressione in corrispondenza del valore passato
come argomento18 (il numero n dei punti è invece una costante definita nel modulo in
cui è codificata la funzione):
Option Base 1
Const n As Integer = … ' numero dei punti
Public Function Regressione(val As Single) As Single
Dim x(n), y(n) As Single
' coordinate dei punti
Dim xm, ym As Single
' valori medi
Dim sxy, sx2 As Single
' variabili-accumulatori per sommatorie
Dim i As Integer
' indice
Dim m, q As Single
' parametri della retta di regressione
' ciclo di memorizzazione dei dati e di calcolo dei valori medi
mx = 0
my = 0
For i = 1 To n
x(i) = Cells(i, 1)
mx = mx + x(i)
y(i) = Cells(i, 2)
my = my + y(i)
Next i
mx = mx / n
my = my / n
' ciclo di calcolo delle sommatorie
sxy = 0
sx2 = 0
For i = 1 To n
sxy = sxy + (x(i) - mx) * (y(i) - my)
sx2 = sx2 + (x(i) - mx) ^ 2
Next i
' determinazione dei parametri della retta
m = sxy / sx2
q = my - m * mx
' calcolo dell'ordinata corrispondente all'argomento
Regressione = m * val + q
End Function
Esempio
Nel caso dei dati altezza/peso dell'esempio precedente la funzione Regressione(…) può
essere impiegata - dopo aver correttamente impostato il numero n dei punti nel codice
VBA - per stimare con il metodo dei minimi quadrati i pesi corrispondenti alle altezze:
18
L'ambiente di calcolo Excel comprende la funzione predefinita TENDENZA(…) avente la stessa
funzionalità.
Informatica per la Matematica
Giorgio Meini © 2000
90
peso (Kg)
80
70
60
50
40
150
160
170
180
190
altezza (cm)
Ma la funzione di "funzione interpolante" della retta di regressione risulta più evidente
nel caso in cui l'argomento in base al quale calcolare la stima non appartenga
all'insieme dei valori originali:
Informatica per la Matematica
Giorgio Meini © 2000
Osservazione
La quantità
n
∑ [(mxi + q) − y ]2
R 2 = i =1
n
∑ [ yi − y ]2
i =1
viene spesso impiegata come indice di "adattamento" della retta di regressione dei
minimi quadrati rispetto ai dati originali; R2 è ovviamente positivo ed è uguale a 1 nel
caso che i punti (x1;y1), (x2;y2), …, (xn;yn) siano allineati: in questo caso infatti la retta
di regressione coincide con la retta passante per gli n punti e yi=mxi+q per i=1, 2, …,
n. Essendo possibile dimostrare che questo valore è il massimo che R2 può assumere si
ha
0 ≤ R2 ≤1
con R2 che assume valori prossimi a 1 nel caso di buon adattamento della retta di
regressione alla distribuzione dei dati e valori prossimi a 0 nel caso di elevata
dispersione dei dati rispetto alla retta dei minimi quadrati.
Esempio
Tra le opzioni del comando Grafico/Aggiungi-linea-di-tendenza dell'ambiente Excel è
possibile impostare la visualizzazione del valore R2. I due esempi che seguono
mostrano come il diverso grado di adattamento della retta di regressione ai dati si
rifletta in diversi valori di R2:
5
5
4
4
3
3
y = 0,54x + 0,28
R2 = 0,3742
2
2
1
y = 0,996x + 0,008
R2 = 0,9996
1
0
0
0
1
2
3
4
5
0
-1
1
2
3
4
5
Informatica per la Matematica
X.3.3
Giorgio Meini © 2000
Sintesi
Il problema dell'interpolazione polinomiale consiste nel determinare - noti n+1 punti
di coordinate (x0;y0), (x1;y1), …, (xn;yn) - il polinomio p(x) di grado non superiore a n
che assume in corrispondenza dei "nodi" x0, x1, …, xn i valori p(x0)=y0, p(x1)=y1, …,
p(xn)=yn;
n
n −1
+ ... + a n −1 x + a n
i coefficienti a0, a1, …, an del polinomio p ( x) = a 0 x + a1 x
, che
esiste ed è unico se i nodi di interpolazione sono tutti distinti, possono essere
determinati risolvendo il sistema lineare
 ( x n )a + ( x n−1 )a
0
1
 0n 0
n −1
 ( x1 )a 0 + ( x1 )a1


( x n )a + ( x n−1 )a
n
0
1
 n
+ ... + ( x 0 )a n−1 + a n = y 0
+ ... + ( x1 )a n−1 + a n = y1
...
+ ... + ( x n )a n −1 + a n = y n
il polinomio di interpolazione di Lagrange


n x− x

i
p( x) = ∑  y j ⋅ ∏
i=0 x j − xi
j = 0

i≠ j

n







è impiegato nel caso ricorrente che si debbano calcolare valori p(x) a partire delle
coordinate dei punti (x0;y0), (x1;y1), …, (xn;yn);
se le ordinate dei punti da interpolare sono i valori y0, y1, …, yn assunti da una
funzione f(x) in corrispondenza dei nodi x0, x1, …, xn l'errore commesso
approssimando i valori della funzione con i valori del polinomio di interpolazione p(x)
è
E ( x) = f ( x) − p ( x)
e una sua maggiorazione in valore assoluto nell'intervallo [a;b] - con a e b
rispettivamente valori minimo e massimo dei nodi di interpolazione - è data da
max f ( n +1) ( x)
a < x <b
(n + 1)!
⋅
n
∏ ( x − xi )
i =1
i parametri della retta di regressione y=mx+q relativa ai punti (x1;y1), (x2;y2), …,
(xn;yn)
Informatica per la Matematica
Giorgio Meini © 2000
n
∑ ( yi − y )( xi − x )
m = i =1
n
∑ ( xi − x ) 2
i =1
e
q = y − mx
dove
1 n
x = ⋅ ∑ xi
n i =1
e
1 n
y = ⋅ ∑ yi
n i =1
sono determinati in modo da minimizzare la somma degli scarti quadratici tra i valori
y i e le ordinate ~
y i = mxi + q (metodo dei minimi quadrati);
Informatica per la Matematica
X.3.4
Giorgio Meini © 2000
Esperimenti
1. Determinare in ambiente Derive i coefficienti del polinomio di interpolazione
dei seguenti punti:
a)
b)
c)
d)
(-1; 6), (1; 0), (2; 3);
(-2; 5), (0; 1), (1; 0,5), (2; 5);
(0,25; -0,12), (-1,32; 0,68), (0,98; -1,04)
(-3; 32), (-1; 6), (2; -3), (3; 2).
Rappresentare graficamente i punti e il polinomio di interpolazione individuato.
2. Determinare in ambiente Derive i coefficienti del polinomio di interpolazione
delle seguenti funzioni calcolate in corrispondenza dei nodi indicati:
a) cos( x) x0 = − 1 x1 = 0 x2 = 1
2
2
b) e x x0 = −1 x1 = 0 x2 = 1
c) ln( x) x0 = 1 x1 = 1 x2 = e x3 = e 2
e
d) tg ( x) x0 = − π
4
x1 = −
π
3
x2 = 0 x3 =
π
3
x4 =
π
4
Rappresentare graficamente la funzione e il polinomio di interpolazione
nell'intervallo [a; b] con a e b rispettivamente nodo minimo e massimo.
3. Impiegare le funzionalità algebriche dell'ambiente Derive per trasformare i
seguenti polinomi in forma di Hörner:
a) 2 x 3 − 3x 2 + x − 1 ;
2
b) x 5 − 2 x 4 + 4 x 2 − x + 1 ;
c) 0,2 x 4 − 1,4 x 3 − 0,8 x 2 − 2,2 x + 2,8 .
4. # Scrivere una funzione VBA che calcoli secondo lo schema di Hörner il
valore di un polinomio di grado n in corrispondenza dell'argomento della
funzione nel caso che i coefficienti siano memorizzati nelle prime n+1 celle
della colonna A di un foglio di lavoro Excel.
5. Scrivere il polinomio di interpolazione in forma di Lagrange dei punti
dell'esercizio 1.
6. # Determinare la complessità computazionale della funzione VBA
Lagrange(…) che valuta in un punto il polinomio di interpolazione.
7. Tabulare con un passo di 0,1 e rappresentare graficamente in ambiente Excel le
funzioni f(x) dell'esercizio 2 limitatamente agli intervalli indicati; impiegare la
funzione VBA Lagrange(…) relativamente ai nodi indicati nell'esercizio 2 per
Informatica per la Matematica
Giorgio Meini © 2000
tabulare e rappresentare graficamente il polinomio di interpolazione p(x).
Stimare graficamente l'errore massimo commesso nel valutare p(x) in luogo di
f(x). Studiare graficamente l'andamento dell'errore nell'intervallo di
interpolazione in ciascun caso.
8. Calcolare la maggiorazione teorica dell'errore assoluto commesso impiegando
il polinomio di interpolazione in luogo delle funzioni dell'esercizio 2
limitatamente agli intervalli indicati. Confrontare i risultati ottenuti con le
stime calcolate nell'esercizio precedente.
9. Completare la seguente "tavola dei logaritmi" impiegando l'interpolazione
lineare tra due valori noti successivi:
x
0,9
0,95
1
1,5
2
2,5
3
Log10x
-0,046
0
0,301
0,477
Completare la precedente tabella calcolando i valori assunti dal polinomio di
III grado ottenuto interpolando i 4 punti di coordinate note. In entrambi i casi:
maggiorare l'errore assoluto commesso e determinare l'errore effettivo
calcolando i logaritmi con una calcolatrice scientifica.
10. Scrivere due funzioni VBA che calcolino rispettivamente il coefficiente
angolare m e il termine noto q della retta di regressione dei minimi quadrati
ipotizzando che le coordinate dei punti siano memorizzate nelle prime n celle
delle colonne A e B di un foglio di lavoro Excel. Verificare la corretta
implementazione delle funzioni confrontandone in alcuni casi i risultati con le
indicazioni opzionali fornite dal comando Grafico/Aggiungi-linea-di-tendenza
di Excel.
11. Scrivere una funzione VBA che calcoli l'indice R2 relativo alla retta di
regressione dei minimi quadrati nelle ipotesi previste per l'esercizio precedente.
12. In ambiente Excel rappresentare graficamente la seguente "serie temporale" e
la relativa retta di regressione determinandone i punti mediante la funzione
VBA Regressione(…):
Informatica per la Matematica
Giorgio Meini © 2000
ANNO
1995
1996
1997
1998
1999
Produzione di
frumento della
Lombardia
(milioni di staie)
1019
988
1306
1173
1299
Impiegare la funzione VBA Regressione(…) per "estrapolare" la produzione
lombarda di frumento degli anni 2000 e 2001. Valutare l'attendibilità della
stima in base al valore dell'indice R2.
13. # Determinare analiticamente il coefficiente angolare m della retta dei minimi
quadrati y=mx nel caso che il vincolo rappresentato dal "baricentro" della
distribuzione - il punto ( x ; y ) - sia sostituito dal vincolo rappresentato
dall'origine (0;0) del sistema di riferimento.
Informatica per la Matematica
Giorgio Meini © 2000
X.4
Derivazione e integrazione numerica
X.4.0
Derivazione e integrazione simbolica in Derive
I comandi Derivata e Integrale del menu Calcola dell'ambiente Derive consentono di
determinare con facilità la derivata simbolica e l'integrale indefinito di una funzione,
anche in presenza di parametri.
Esempio
Per determinare la derivata della funzione f ( x) = ( senx + cos x)e − x in ambiente Derive
è sufficiente semplificare il risultato fornito dal comando Calcola/Derivata:
Il seguente grafico rappresenta in blu la funzione f(x) e in rosso la derivata f'(x):
Esempio
La funzione esponenziale negativa
p( x) = ke − kx
x≥0
Informatica per la Matematica
Giorgio Meini © 2000
con parametro k positivo è una funzione di densità della probabilità; infatti non è
difficile in ambiente Derive dimostrare che +∞ p ( x)dx = 1 impiegando il comando
∫
0
19
Calcola-Integrale :
Per determinare la funzione di ripartizione della probabilità è sufficiente utilizzare il
comando Calcola/Integrale specificando l'opzione Indefinito:
Perché si tratti di una funzione di ripartizione della probabilità si deve avere
P (0) = 0
lim P ( x) = 1 ;
e
x →+∞
dato che
− e −k0 = −1
e
lim − e − kx = 0
x →+∞
si avrà
P ( x) = 1 − e − kx .
Lo stesso risultato si sarebbe ottenuto impostando a 1 la Costante della finestra
Calcola/Integrale che Derive imposta automaticamente al valore 0.
Derive impiega regole formali di trasformazione per la derivazione simbolica e
tecniche "euristiche" per la determinazione delle funzioni primitive; di conseguenza
l'ambiente di calcolo è sempre in grado di fornire la derivata di una funzione, ma può
fallire nel computare un integrale particolarmente complesso. Inoltre l'operatore
funzionale di integrazione indefinita non è chiuso rispetto all'insieme delle classi di
funzioni normalmente oggetto di studio scolastico (razionali, trigonometriche,
esponenziali, logaritmiche, …): per alcune funzioni integrabili non è quindi possibile
determinare analiticamente la funzione primitiva.
19
in ambiente Derive il dominio di una variabile viene definito con il comando Dichiara/Dominiovariabile
Informatica per la Matematica
Giorgio Meini © 2000
Esempio
1
La funzione di Gauss f ( x) =
2π
e
− x2
2
ha una primitiva F(x) non esprimibile in termini delle usuali funzioni razionali e
trascendenti; Derive introduce nella funzione primitiva la funzione speciale ERF
(Error Function):
X.4.1
Derivazione numerica
X.4.1.0
La semplicità con cui è possibile determinare la derivata f'(x) di una funzione f(x)
disponendo di un ambiente di calcolo simbolico come Derive limita la necessità di
ricorrere a formule di derivazione numerica al solo contesto della programmazione, o
al caso in cui della funzione f(x) si conosca solo una tabulazione dei valori.
Avendo ad esempio una funzione VBA fun(…) che restituisce il valore assunto dalla
funzione f(x) nel punto fornito come argomento, può essere talvolta utile disporre di
una funzione der(…) che determini il valore della funzione derivata f'(x) calcolato in
un punto qualsiasi20; in questo caso la derivata della funzione f(x) può essere
approssimata con il rapporto incrementale calcolato in corrispondenza di un valore
predefinito dell'incremento h21:
La derivata f'(x0) nel
punto x0 della funzione
f(x) è formalmente
definita come:
lim
h →0
f ( x0 + h) − f ( x0 )
h
f ' ( x) ≅
20
f ( x 0 + h) − f ( x 0 )
h
questo problema si presenta ad esempio nell'implementazione come funzione VBA della formula
ricorsiva di Newton per l'approssimazione degli zeri delle funzioni
21
con questa soluzione la derivata della funzione f(x) nel punto x0 viene approssimata con il coefficiente
angolare della retta passante per i punti (x0;f(x0)) e (x0+h;f(x0+h))
Informatica per la Matematica
X.4.1.1
Giorgio Meini © 2000
Non è difficile scrivere una funzione VBA der(…) che implementa la formula di
derivazione approssimata:
Private Function fun(x As Single) As Single
fun = …
End Function
Private Function der(x As Single) As Single
Const h As Single = 0.001
der = (fun(x+h) - fun(x)) / h
End Function
Esempio
Per studiare numericamente la derivata f'(x) della funzione f(x)=x2 si definisce la
funzione fun(…) in ambiente VBA
Private Function fun(x As Single) As Single
fun = x^2
End Function
e si impostano nella celle della colonna A di un foglio di lavoro Excel i valori dei punti
di interesse; si copiano poi nelle celle delle colonne B e C le formule che calcolano i
valori della funzione e della derivata numerica e nelle celle delle colonne D ed E le
formule che restituiscono i valori della funzione derivata f'(x)=2x e dell'errore
commesso:
Informatica per la Matematica
Giorgio Meini © 2000
Il seguente grafico mostra la buona precisione dei valori forniti dalla formula di
derivazione numerica:
10
8
6
4
funzione
2
derivata
numerica
0
-4
-3
-2
-1
-2
0
1
2
3
4
funzione
derivata
-4
-6
-8
Scorrendo i valori della colonna E si nota che il massimo errore commesso è circa 103
; allo scopo di migliorare ulteriormente la precisione si può impostare il passo h della
formula di derivazione approssimata al valore 10-6 in considerazione del fatto che nella
definizione della derivata il valore di h viene fatto tendere a 0:
Private Function der(x As Single) As Single
Const h As Single = 0.000001
der = (fun(x+h) - fun(x)) / h
End Function
Dopo avere inserito nuovamente le formule della colonna C per rendere effettiva la
modifica introdotta si nota che, contrariamente alle aspettative, l'errore commesso
cresce visibilmente:
Informatica per la Matematica
Giorgio Meini © 2000
La riduzione del passo h di derivazione effettuata nell'esempio precedente ha come
conseguenza una diminuzione dell'errore analitico della formula di approssimazione
numerica, di conseguenza la crescita dell'errore complessivo osservata deve essere
imputata all'errore algoritmico causato dall'aritmetica finita dell'ambiente di calcolo
Excel. Per studiare l'andamento dell'errore al variare del passo h la funzione di
derivazione numerica può essere modificata al fine di passare come secondo parametro
il valore di h:
Public Function der(x As Single, h As Single) As Single
der = (fun(x + h) - fun(x)) / h
End Function
Ovviamente l'andamento quantitativo dell'errore al variare del passo h dipende sia
dalla particolare funzione f(x) che dallo specifico punto x0; l'esempio che segue illustra
comunque un comportamento tipico sotto l'aspetto qualitativo.
Esempio
Nelle celle della colonna A di un foglio di lavoro Excel si scrivono le formule che
realizzano una successione di valori di h decrescenti per riga secondo le potenze
negative di 10; nelle celle della colonna B si memorizza un unico valore x0 di
interesse, mentre nelle celle delle colonne C e D si inseriscono rispettivamente le
formule per il calcolo della funzione f(x) e della sua derivata f'(x). Infine nelle celle
della colonna E si copiano le formule per l'approssimazione numerica della derivata e
per la determinazione del valore assoluto dell'errore commesso.
Informatica per la Matematica
Giorgio Meini © 2000
Il grafico che segue - dove i valori del passo h sono riportati in scala logaritmica
inversa - documenta l'andamento dell'errore complessivo al variare di h:
Informatica per la Matematica
Giorgio Meini © 2000
0,05
0,04
0,03
0,02
0,01
0
1
0,1
0,01
0,001
0,0001
0,00001
0,000001
L'errore complessivo commesso assume valore minimo in corrispondenza di un passo
di derivazione numerica h dell'ordine di 10-4.
Nell'esempio precedente la riduzione dell'errore analitico al decrescere dell'ampiezza
di h comporta una iniziale diminuzione dell'errore complessivo; questa tendenza si
inverte a partire dal valore di h per cui l'errore algoritmico dovuto al calcolo in
aritmetica finita della divisione tra due valori numerici prossimi a zero non diviene
preponderante, fino a fornire un risultato nullo completamente errato. Il grafico che
segue, dove i valori del passo di derivazione numerica h decrescono da sinistra verso
destra, riassume qualitativamente questa considerazione:
err. analitico
err. algoritmico
err. complessivo
h
Per ottimizzare la precisione della funzione der(…) occorre individuare un valore del
passo h corrispondente al punto minimo dell'andamento dell'errore complessivo
tenendo comunque presente che tale valore dipende dalla funzione f(x) e dal punto di
calcolo x0.
Informatica per la Matematica
Giorgio Meini © 2000
Osservazione
L'errore algoritmico delle funzioni VBA può essere ridotto aumentando la precisione
di calcolo passando da variabili di tipo Single a variabili di tipo Double:
Public Function fun(x As Double) As Double
fun = Sin(x)
End Function
Public Function der(x As Double, h As Double) As Double
der = (fun(x + h) - fun(x)) / h
End Function
Ricalcolando l'esempio precedente impiegando questa nuova implementazione delle
funzioni VBA si ottiene un significativo aumento della precisione che consente di
fissare il valore del passo h a circa 10-8:
0,05
0,04
0,03
0,02
0,01
0
1
0,1
0,01 0,001 1E-04 1E-05 1E-06 1E-07 1E-08 1E-09 1E-10 1E-11 1E-12 1E-13 1E-14 1E-15
Informatica per la Matematica
X.4.1.2
Giorgio Meini © 2000
La formula di derivazione numerica proposta approssima il coefficiente angolare della
retta tangente al grafico della funzione f(x) nel punto (x0;f(x0)) con il coefficiente
angolare della retta passante per i punti (x0;f(x0)) e (x0+h;f(x0+h)): la derivata f'(x0)
viene di fatto determinata derivando nel punto x0 la retta di interpolazione (polinomio
di I grado) della funzione f(x) condotta per i nodi x0 e x0+h.
x0
x0+h
Questa osservazione suggerisce un modo per costruire una formula di derivazione
numerica maggiormente precisa: impiegare come valore della derivata f'(x0) la derivata
calcolata nel punto x0 della parabola di interpolazione (polinomio di II grado) della
funzione f(x) per i nodi x0-h, x0 e x0+h, le cui ordinate corrispondenti sono f(x0-h), f(x0)
e f(x0+h).
La determinazione del polinomio di interpolazione in forma di Lagrange può essere
effettuata in ambiente Derive22:
La semplificazione di p(z) restituisce l'espressione del polinomio di interpolazione
22
la dichiarazione della funzione f(t) e l'impostazione dell'opzione di inserimento Parola consentono di
impiegare una notazione simile a quella usuale; il ricorso ai nomi di variabile z e t è reso necessario
dalle regole sintattiche dell'ambiente Derive
Informatica per la Matematica
Giorgio Meini © 2000
la cui derivata
calcolata nel punto z=x0 con il comando Semplifica/Fattorizza diviene
che rappresenta la nuova formula di derivazione numerica approssimata:
f ' ( x0 ) ≅
f ( x 0 + h) − f ( x 0 − h)
2h
È possibile interpretare geometricamente questa formula: esprime analiticamente il
valore del coefficiente angolare della retta passante per i punti (x0-h;f(x0-h)) e
(x0+h;f(x0+h)).
f(x)
x0-h
x0
x0+h
Esempio
Dopo aver ridefinito le funzioni fun(…)23 e der(…)
Public Function fun(x As Double) As Double
fun = Log(x)
End Function
Public Function der(x As Double, h As Double) As Double
der = (fun(x + h) - fun(x - h)) / (2 * h)
End Function
è possibile impiegare l'ambiente di calcolo Excel per indagare l'andamento dell'errore
commesso impiegando la formula di derivazione numerica con passo h=10-6 in luogo
23
nel linguaggio VBA la funzione Log(…) restituisce il logaritmo naturale dell'argomento
Informatica per la Matematica
Giorgio Meini © 2000
della funzione derivata24:
I valori della derivata approssimati con la formula di derivazione numerica (colonna
D) corrispondono ai valori della funzione derivata calcolati esplicitamente (colonna
C):
2
1
ln(x)
1/x
derivata numerica
0
0
1
2
3
4
la derivata della funzione f ( x) = ln( x) è
f ' ( x) =
5
-1
24
1
x
Informatica per la Matematica
Lo sviluppo in serie di
Taylor della funzione
f(x) nel punto x0 è
formalmente definito
come:
Osservazione
Le formule di derivazione approssimata possono essere ricavate dallo sviluppo in serie
di Taylor della funzione f(x) nel punto x025:
( x − x0 ) 2
f ( x) = f ( x 0 ) + ( x − x 0 ) ⋅ f ' ( x 0 ) +
⋅ f " ( x 0 ) + ...
2
f ( x0 ) +
∞
1
∑ n!( x − x )
0
n
⋅ f ( n ) ( x0 )
Giorgio Meini © 2000
Arrestando lo sviluppo di f(x+h) al secondo termine si ha
n =1
dove f ( n ) ( x0 ) è la
derivata n-esima della
funzione f(x) calcolata
nel punto x0
f ( x + h) = f ( x 0 ) + ( x + h − x 0 ) ⋅ f ' ( x 0 ) + ...
da cui si ricava
f ' ( x0 ) =
f ( x + h) − f ( x 0 )
x + h − x0
che per x=x0 diviene la formula di derivazione approssimata del "I ordine":
f ' ( x0 ) ≅
f ( x 0 + h) − f ( x 0 )
h
Arrestando gli sviluppi di f(x+h) e di f(x-h) al terzo termine si ha
( x + h − x0 ) 2
f ( x + h) = f ( x 0 ) + ( x + h − x 0 ) ⋅ f ' ( x 0 ) +
⋅ f " ( x 0 ) + ...
2
e
f ( x − h) = f ( x 0 ) + ( x − h − x 0 ) ⋅ f ' ( x 0 ) +
( x − h − x0 ) 2
⋅ f " ( x 0 ) + ...
2
da cui ponendo x=x0 e sottraendo membro a membro si ricava
f ( x 0 + h) − f ( x 0 − h ) = 2 h ⋅ f ' ( x 0 )
che,esplicitando f'(x0) diviene la formula di derivazione approssimata del "II
ordine":
f ' ( x0 ) ≅
25
f ( x 0 + h) − f ( x 0 − h)
2h
lo sviluppo in serie di Taylor della funzione f(x) nel punto x0 consente di determinare una
maggiorazione dell'errore analitico commesso approssimando la funzione derivata f'(x) con il valore
fornito delle formule di derivazione numerica
Informatica per la Matematica
Giorgio Meini © 2000
X.4.2
Integrazione numerica
X.4.2.0
L'integrabilità di una funzione continua f(x) è garantita per ogni intervallo [a;b]; inoltre
il teorema fondamentale consente di determinare il valore dell'integrale come
differenza dei valori assunti da una primitiva di f(x) negli estremi dell'intervallo di
integrazione:
b
∫ f ( x)dx = F (b) − F (a)
a
dove
F ( x) = ∫ f ( x)dx .
L'individuazione di una funzione primitiva F(x) può rivelarsi operazione complessa
anche con il ricorso ad ambienti di calcolo simbolico come Derive e, in alcuni casi,
risultare impossibile in quanto l'operatore funzionale di integrazione indefinita non è
chiuso rispetto alle usuali classi di funzioni razionali e trascendenti oggetto di studio.
Gli algoritmi di integrazione numerica consentono di approssimare il valore
dell'integrale evitando la determinazione dell'espressione analitica della primitiva.
Esempio
2
−x
È possibile integrare numericamente la funzione di Gauss g ( x) = 1
2
in
e
2π
ambiente Derive approssimando l'istruzione INT(g(x),x,a,b) che rappresenta l'integrale
b
∫ g ( x)dx :
a
X.4.2.1
Come già osservato nel caso delle formule di derivazione approssimata una soluzione
numerica è spesso una discretizzazione della corrispondente soluzione analitica
ottenuta sostituendo il "passaggio al limite" che caratterizza il calcolo infinitesimale
(differenziale ed integrale) con l'attribuzione di uno specifico valore al "passo" di
derivazione o integrazione.
La più semplice formula di integrazione numerica per una funzione continua
nell'intervallo [a;b] deriva direttamente dalla definizione di integrale data da Riemann,
nel seguito semplificata prendendo in considerazione una partizione di [a;b] in N
sottointervalli contigui tutti della stessa ampiezza h:
Informatica per la Matematica
Giorgio Meini © 2000
b
∫ f ( x)dx = lim s
N →∞
a
N
= lim S N
N →∞
dove
N −1
s N = ∑ f ( xi ) ⋅ h
N
S N = ∑ f ( xi ) ⋅ h
e
i =0
i =1
con
h=
b−a
N
xi = a + i ⋅ h
e
per cui si ha x 0 = a e x N = b .
Al fine di evitare il limite per N→∞ (h→0) è possibile definire a priori un valore
conveniente di N (e, indirettamente, del passo di integrazione h) ed approssimare
l'integrale definito con il valore di sN (o, eventualmente, di SN); nella figura che segue,
per la quale N=8, sN è la somma delle aree dei rettangoli aventi base h e altezza f(xi):
f(x)
a=x0 x1
x2
x3
x4
x5
x6
x7
b=x8
La formula di integrazione numerica "dei rettangoli"
b
∫
N
f ( x)dx ≅ h ⋅ ∑ f ( x i )
a
i =0
con
xi = a + i ⋅ h
e
h=
b−a
N
è facilmente implementabile come funzione VBA:
Public Function fun(x As Single) As Single
fun = …
End Function
Public Function rettangoli(a, b As Single, N As Integer) As Single
Dim h, s, x As Single
Dim i As Integer
Informatica per la Matematica
h = (b - a) / N
s = 0
x = a
' ciclo
For i =
s = s +
x = x +
Next i
Giorgio Meini © 2000
' passo di integrazione
' variabile per sommatoria
' argomento per calcolo valori f(x)
di calcolo della sommatoria
0 To (N - 1)
fun(x)
h
rettangoli = s * h
End Function
Esempio
π
2
Si intende studiare l'approssimazione dell'integrale
∫ sen( x)dx
calcolata con la
0
formula dei rettangoli al variare del numero di suddivisioni N. Dopo avere inserito
l'espressione della funzione f(x) nel codice VBA
Public Function fun(x As Single) As Single
fun = Sin(x)
End Function
si impostano le seguenti formule nelle prime celle delle colonne A e B di un foglio di
lavoro Excel
Dato che il valore esatto dell'integrale è 1 l'approssimazione calcolata per N=512 è
affetta da un errore assoluto minore di 10-2.
Informatica per la Matematica
Giorgio Meini © 2000
Osservazione
Nell'esempio precedente l'errore diminuisce al crescere del numero N di suddivisioni,
cioè al decrescere del valore del passo di integrazione h. Questo è ovviamente vero per
l'errore analitico commesso impiegando una formula di integrazione approssimata, ma
- come è prevedibile - non è vero per l'errore algoritmico in quanto l'aritmetica finita
dell'ambiente di calcolo Excel non è in grado di operare correttamente con valori di h
troppo piccoli. Estendendo la tabella Excel costruita nell'esempio precedente si ha un
errore di calcolo già per h =
π
2
215
≅ 0,000048 :
L'approssimazione calcolata per N=8192 è affetta da un errore assoluto minore di
0,0001 ed è ulteriormente migliorabile impiegando funzioni VBA con variabili di tipo
Double anziché Single (questo accorgimento permette infatti di utilizzare valori più
piccoli del passo di integrazione h e quindi valori più grandi del numero N di
suddivisioni dell'intervallo [a;b]).
Il seguente teorema consente di determinare una maggiorazione dell'errore commesso
impiegando la formula di integrazione dei rettangoli.
Teorema
L'errore commesso impiegando la formula di integrazione numerica dei
rettangoli per approssimare il valore dell'integrale
derivabile in [a;b] è maggiorato dalla quantità
b−a
Mh
2
dove
h=
b−a
N
∫
b
a
f ( x)dx con f(x) continua e
Informatica per la Matematica
Giorgio Meini © 2000
e M è il valore massimo assunto dal modulo della funzione derivata f'(x)
nell'intervallo di integrazione.
Per la dimostrazione si prende in considerazione il generico sottointervallo [xi;xi+1]
dove
h ⋅ f ( xi ) = ( xi +1 − x i ) ⋅ f ( xi ) = ∫
xi + 1
xi
f ( x i )dx
e l'errore assoluto commesso è
ei =
∫
xi + 1
xi
f ( x)dx − ∫
xi + 1
xi
f ( x i )dx =
∫ ( f ( x) − f ( x ))dx ≤ ∫
xi +1
i
xi
xi + 1
xi
f ( x) − f ( x o ) dx
perché il modulo dell'integrale di una funzione è minore o uguale all'integrale del
modulo della funzione stessa.
Sia M un numero positivo tale che per ogni valore x compreso nell'intervallo [a;b] si
ha
f ' ( x) ≤ M
allora per il teorema del valor medio di Lagrange risulta per xi<x<xi+1
f ( x) − f ( x i ) = f ' (ε )( x − x i ) →
f ( x) − f ( x i ) = f ' (ε ) ⋅ x − x i
con
xi < ε < x
Segue che
f ( x) − f ( xi ) ≤ M ⋅ ( x − xi )
e, dato che xi+1-xi=h, si ha:
ei ≤ ∫
xi +1
xi
f ( x) − f ( xi ) dx ≤ ∫
xi +1
xi
M ( x − xi )dx =
Mh 2
2
Essendo N i sottointervalli in cui è suddiviso l'intervallo di integrazione l'errore
complessivo non sarà maggiore di N volte l'errore commesso nel singolo
sottointervallo [xi;xi+1] e ciò dimostra la tesi:
E≤N⋅
o, in alternativa
Mh 2 NhMh b − a
Mh
=
=
2
2
2
Informatica per la Matematica
Giorgio Meini © 2000
M ( bN− a )
M (b − a) 2 (b − a )
Mh 2
=N⋅
=N
=
M
E≤N⋅
2N
2
2
2N 2
2
2
Esempio
1
Si intende approssimare il valore dell'integrale
∫x
2
dx impiegando la formula
0
approssimata dei rettangoli e commettendo un errore minore di 10-3.
La derivata della funzione f(x)=x2 è f'(x)=2x che nell'intervallo [0;1] assume valore
assoluto massimo M=2.
L'errore E commesso deve essere inferiore a 10-3
E≤
(b − a )2
2N
M=
1
1
⋅ 2 = ≤ 10 −3
N
2N
per cui
N ≥ 10 3
Utilizzando in ambiente Excel la funzione VBA rettangoli(0;1;1001) dopo aver
definito la funzione f(x)=x2 si ottiene l'approssimazione 0,332829654 che differisce dal
1
risultato esatto di un errore inferiore a 0,0002.
3
X.4.2.2
La formula di integrazione numerica dei rettangoli opera sostituendo alla funzione f(x)
una sua interpolazione polinomiale di grado 0 (una funzione costante) in ciascuno dei
sottointervalli [xi;xi+1] in cui viene suddiviso l'intervallo di integrazione [a;b]. È
possibile ottenere risultati migliori (aumentando la precisione a parità del numero N di
sottointervalli, o diminuendo il numero N di suddivisioni necessarie per ottenere una
precisione data) sostituendo la funzione f(x) con una sua interpolazione lineare (un
polinomio di I grado) in ogni singolo sottointervallo [xi;xi+1]. La figura illustra l'idea
per N=4:
Informatica per la Matematica
Giorgio Meini © 2000
f(x)
a=x0
x1
x2
x3
b=x4
L'area del trapezio di altezza h=xi+1-xi vale
f ( x i ) + f ( x i +1 )
⋅h
2
per cui la formula di integrazione numerica "dei trapezi" è26
b
∫
a
N −1
h N
h 

(
)
f ( x)dx ≅ ⋅ ∑ f ( x i ) + f ( x i +1 ) = ⋅  f (a ) + 2∑ f ( x i ) + f (b)
2 i =0
2 
i =1

con
xi = a + i ⋅ h
e
h=
b−a
N
La formula di integrazione approssimata dei trapezi è di immediata implementazione
come funzione VBA:
Public Function fun(x As Single) As Single
fun = …
End Function
Public Function trapezi(a, b As Single, N As Integer) As Single
Dim h, s, x As Single
Dim i As Integer
h = (b - a) / N
s = fun(a) + fun(b)
x = a + h
26
' passo di integrazione
' variabile per sommatoria
' argomento per calcolo valori f(x)
la trasformazione applicata alla sommatoria è giustificata dal fatto che tutti i valori f(xi) sono sommati
2 volte - in due iterazioni successive - esclusi il primo (f(x0)) e l'ultimo (f(xN))
Informatica per la Matematica
' ciclo
For i =
s = s +
x = x +
Next i
Giorgio Meini © 2000
di calcolo della sommatoria
1 To (N - 1)
2 * fun(x)
h
trapezi = s * ( h / 2)
End Function
Esempio
e
Si intende studiare l'approssimazione dell'integrale
∫ ln( x)dx
calcolata con la formula
1
dei trapezi al variare del numero di suddivisioni N, confrontando i risultati con quelli
forniti dalla formula dei rettangoli. Dopo avere inserito l'espressione della funzione
f(x) nel codice VBA
Public Function fun(x As Single) As Single
fun = Log(x)
End Function
si impostano le seguenti formule nelle prime celle delle colonne A e B di un foglio di
lavoro Excel
Informatica per la Matematica
Giorgio Meini © 2000
Tenendo presente che l'integrale esatto ha valore 1 si nota che la formula dei trapezi,
pur non immune dalla presenza di errori algoritmici "catastrofici" per elevati valori del
numero N di suddivisioni, fornisce una approssimazione affetta da un errore minore di
10-3 con N=16 (per ottenere la stessa precisione con la formula dei rettangoli sono
invece necessarie 1024 suddivisioni).
È possibile dimostrare che utilizzando la formula di integrazione approssimata dei
trapezi in luogo del valore esatto dell'integrale si commette un errore E maggiorato
dalla quantità
E≤
(b − a) 3
b−a
⋅ Mh 2 =
⋅M
12
12 N 2
dove M è un numero positivo tale che per ogni valore x compreso nell'intervallo di
integrazione [a;b] si ha
f ' ( x) ≤ M
Esempio
In un esempio precedente abbiamo calcolato che per approssimare il valore
1
dell'integrale
∫x
2
dx impiegando la formula dei rettangoli e commettendo un errore
0
minore di 10-3 sono necessarie 1001 suddivisioni dell'intervallo di integrazione.
Quante suddivisioni sono necessarie per ottenere la stessa precisione utilizzando la
formula dei trapezi?
La derivata della funzione f(x)=x2 è f'(x)=2x che nell'intervallo [0;1] assume valore
assoluto massimo M=2.
L'errore E commesso deve essere inferiore a 10-3
3
(
b − a)
E≤
M=
12 N
2
1
1
⋅2=
≤ 10 −3
2
2
12 N
6N
Informatica per la Matematica
Giorgio Meini © 2000
per cui
N2 ≥
10 3
6
→ N≥
1000
≅ 12,9
6
Utilizzando in ambiente Excel la funzione VBA trapezi(0;1;13) dopo aver definito la
funzione f(x)=x2 si ottiene l'approssimazione 0,334319532 che differisce dal risultato
1
esatto di un errore inferiore a 0,001.
3
X.4.2.3
La formula di integrazione numerica dei trapezi opera sostituendo alla funzione f(x)
una sua interpolazione polinomiale di I grado (interpolazione lineare) in ogni singolo
sottointervallo [xi;xi+1] di suddivisione dell'intervallo di integrazione. Per ottenere
risultati migliori in termini di precisione e di prestazioni computazionali (numero di
iterazioni) è possibile sostituire la funzione f(x) con una sua interpolazione parabolica
(interpolazione polinomiale di II grado) in ogni singolo sottointervallo [xi;xi+1]. Per
determinare univocamente un polinomio di II grado occorrono 3 nodi di
interpolazione: a questo scopo oltre agli estremi del sottointervallo xi e xi+1 si prende in
x + x i +1
considerazione il punto medio i
.
2
f(xi)
xi
f(
xi + xi + 1
2
xi + x i + 1
2
)
f(xi+1)
xi+1
Per individuare la parabola di interpolazione della funzione f(x) nei nodi xi, xi+1 e
x i + x i +1
si ricorre in ambiente Derive alle istruzioni che definiscono il polinomio di
2
interpolazione in forma di Lagrange e, al solo fine di semplificare la notazione, si
effettuano le sostituzioni di variabile α=xi e β=xi+1:
Informatica per la Matematica
Giorgio Meini © 2000
Il polinomio di interpolazione p(z)27 deve essere integrato nell'intervallo [α;β] in luogo
della funzione f(x):
Applicando il comando Semplifica/Fattorizza si
dell'integrale di f(x) limitatamente all'intervallo [α;β]
ottiene
l'approssimazione
che, riscritta con la notazione usuale, diviene:
x i +1 − x i
6

 h 

 x + x i +1 
 x + x i +1 
⋅  f ( xi ) + 4 f  i
 + f ( x i +1 ) = ⋅  f ( x i ) + 4 f  i
 + f ( x i +1 )
2
2





 6 

Sommando gli integrali corrispondenti agli N sottointervalli di suddivisione
dell'intervallo di integrazione si ottiene

h N −1 
 x + x i +1 
⋅ ∑  f ( xi ) + 4 f  i
 + f ( xi +1 ) =
6 i =0 
2



=
27
N −1
N −1

h 
 x + xi +1 
⋅  f ( x 0 ) + 2∑ f ( x i ) + 4∑ f  i
 + f ( x n )
6 
2
i =1
i =0



l'uso di una diversa variabile è reso necessario dalle limitazioni sintattiche del software Derive
Informatica per la Matematica
Giorgio Meini © 2000
per cui la formula di integrazione numerica "di Cavalieri-Simpson" è
∫
b
a
f ( x)dx ≅
N −1
N −1

h 
 x + x i +1 
⋅  f ( a ) + 2∑ f ( x i ) + 4 ∑ f  i
 + f (b)
6 
2


i =1
i =0

b−a
.
N
L'implementazione come funzione VBA della formula di Cavalieri-Simpson mantiene
la struttura già vista per le formule dei rettangoli e dei trapezi28:
con h =
Public Function Cavalieri_Simpson(a As Single, b As Single,
N As Integer) As Single
Dim h, s, x As Single
Dim i As Integer
h = (b - a) / N
s = fun(a) + fun(b) + 4 * fun(a + (h / 2))
x = a + h
For i = 1 To (N - 1)
s = s + 2 * fun(x) + 4 * fun(x + (h / 2))
x = x + h
Next i
Cavalieri_Simpson = s * ( h / 6)
End Function
Esempio
e
Dovendo approssimare l'integrale
1
∫ x dx
con la formula di Cavalieri-Simpson si
1
inserisce l'espressione della funzione f(x) nel codice VBA
Public Function fun(x As Single) As Single
fun = 1 / x
End Function
e si richiama la funzione Cavalieri_Simpson(…) inserendola in una qualsiasi cella di
un foglio di Excel specificando gli estremi di integrazione e il numero N di
suddivisioni:
28
nel codice VBA la quantità
x i + x i +1
h
è stata calcolata come x i +
2
2
Informatica per la Matematica
Giorgio Meini © 2000
L'estrema precisione di questa formula di integrazione numerica è dimostrata dal fatto
che già con 2 suddivisioni si ha un risultato affetto da un errore inferiore a 10-3, che
diviene inferiore a 10-6 con sole 16 suddivisioni (il valore esatto dell'integrale è 1).
Informatica per la Matematica
X.4.3
Giorgio Meini © 2000
Sintesi
La derivata di una funzione f(x) nel punto x0 può essere approssimata con la formula
di derivazione numerica del I ordine
f ' ( x0 ) ≅
f ( x 0 + h) − f ( x 0 )
h
o con la formula di derivazione numerica del II ordine
f ' ( x0 ) ≅
f ( x 0 + h) − f ( x 0 − h )
2h
fissando il "passo" di derivazione h a un valore compatibile con la precisione
dell'aritmetica finita dell'ambiente che esegue il calcolo;
l'integrale definito di una funzione continua f(x) calcolato sull'intervallo [a;b] può
essere approssimato numericamente suddividendo l'intervallo di integrazione in N
b−a
sottointervalli di ampiezza h =
; definendo xi = a + ih è possibile impiegare la
N
formula dei rettangoli
b
∫
a
N
f ( x)dx ≅ h ⋅ ∑ f ( x i )
i =0
,
la formula dei trapezi (interpolazione lineare)
b
∫
a
f ( x)dx ≅
N −1
h 

⋅  f ( a ) + 2 ∑ f ( x i ) + f (b )  ,
2 
i =1

o la formula di Cavalieri-Simpson (interpolazione parabolica)
∫
b
a
f ( x)dx ≅
N −1
N −1

h 
 x + x i +1 
⋅  f ( a ) + 2∑ f ( x i ) + 4∑ f  i
 + f (b) ;
6 
2
i =1
i =0



se M è il massimo valore assunto dal modulo della funzione derivata f'(x)
nell'intervallo di integrazione [a;b] l'errore della formula dei rettangoli è
maggiorato dalla quantità
(b − a ) M ,
b−a
Mh =
2
2N
2
mentre l'errore della formula dei trapezi è maggiorato dalla quantità
(b − a) 3
b−a
M.
Mh 2 =
12
12 N 2
Informatica per la Matematica
X.4.4
Giorgio Meini © 2000
Esperimenti
1. Approssimare la derivata delle seguenti funzioni nei punti indicati utilizzando
entrambe le formule di derivazione numerica con passo di derivazione h=10-3:
a)
f ( x) = x ,
b) f ( x) = cos( x) ,
c) f ( x) = ln( x) ,
d) f ( x) = 1 ,
x
e) f ( x) = x 2 ,
f) f ( x) = e x ,
x0 = 1 ;
x0 = 0 ;
x0 = 1 ;
1
x0 = ;
2
x0 = 2 ;
x 0 = −1 .
Stimare l'errore commesso determinando il valore esatto delle derivate in
ambiente Derive.
2. Data la funzione f(x)=arctg(x) determinare empiricamente in ambiente Excel
un valore del passo di derivazione h che minimizza l'errore commesso al
variare dell'argomento x utilizzando la funzione VBA der(…) con variabili di
tipo Double (suggerimento: costruire in un foglio di lavoro Excel una tabella a
doppia entrata con diversi valori di x sulle righe e diversi valori di h sulle
colonne).
3. Determinare una formula approssimata per la derivata seconda della funzione
f(x) calcolata in uno specifico punto x0 derivando due volte la parabola di
interpolazione individuata per costruire la formula di derivazione numerica del
II ordine. Implementare la formula individuata come funzione VBA:
confrontare in ambiente Excel la precisione della formula per la derivata
seconda con l'applicazione ripetuta della formula per l'approssimazione della
derivata prima.
4. Implementare le formule di derivazione numerica approssimata come funzioni
in ambiente Derive verificando che non si ha errore algoritmico.
5. # Modificare le funzioni VBA che applicano i metodi "delle tangenti" e "delle
secanti" per l'approssimazione dello zero di una funzione f(x) in modo che
individuino automaticamente il valore iniziale dell'iterazione tra gli estremi
dell'intervallo di separazione dello zero ricorrendo a funzioni di
determinazione numerica dei valori assunti dalle derivate prima f'(x) e seconda
f"(x).
6. Approssimare i seguenti integrali definiti utilizzando le tre formule di
integrazione numerica con passo di integrazione minore di h=10-3:
a)
1
−x
∫ e dx ;
0
2
Informatica per la Matematica
Giorgio Meini © 2000
b)
c)
1
∫
−1
1
1 − x 2 dx ;
1
∫1+ x
2
dx ;
0
d)
π
∫π arctg ( x)dx ;
−
π
e)
2
∫ sen( x
2
)dx .
π
−2
Stimare l'errore commesso in ciascun caso determinando il valore esatto
dell'integrale in ambiente Derive.
7. Determinare teoricamente il numero minimo N di suddivisioni necessarie per
approssimare ciascuno degli integrali dell'esercizio precedente con un errore
inferiore a 10-3 ricorrendo alle formule dei rettangoli e dei trapezi. Impiegando
in ambiente Excel le funzioni VBA rettangoli(…), trapezi(…) e
Cavalieri_Simpson(…) confrontare il numero di suddivisioni effettivamente
necessarie per avere una precisione superiore a 10-3.
8. Determinare la complessità computazionale - intesa come numero di
valutazioni della funzione integranda f(x) fissato il numero N di suddivisioni delle tre formule di integrazione numerica.
9. # Scrivere una funzione VBA prim(…) che approssima il valore assunto dalla
primitiva F(x) - scelta in modo tale che F(0)=0 - di una funzione f(x) in
corrispondenza dell'argomento.
10. Programmare in ambiente Derive le formule di integrazione approssimata:
verificare che non si ha errore algoritmico.