pdf:: [[3. Equazioni non lineari - ANEP - Pitolli.pdf]]
L'analisi numerica è la scienza degli errori
Approssimare soluzioni equazione non lineare
3. I metodi numerici
calcolo numerico
Il calcolo numerico è quella branca della matematica che costruisce e analizza i metodi numerici atti a risolvere, con l'aiuto del calcolatore, differenti problemi matematici che nascono da varie discipline.
esempio: serbatoio sferico
Immaginiamo di voler progettare un serbatoio sferico per la raccolta d'acqua da installare in un piccolo villaggio in una regione arida
Si passa quindi alla formulazione di un #Modello matematico. Nel nostro caso consiste nella formula per calcolare il volume del liquido noto il raggio del serbatoio e l'altezza dell'acqua al suo interno.
Sia il serbatoio di raggio , a quale altezza bisogna riempirlo per avere a disposizione acqua sufficiente per il fabbisogno minimo di un mese per 20 persone?
Dati
Raggio
Periodo
Persone
Dati stimati
Consumo minimo a persona
Litri d'acqua
Volume dell'acqua
Modello matematico
Sappiamo che il volume del liquido contenuto nel serbatoio può essere calcolato dalla formula:
dove è l'altezza in metri dell'acqua nel serbatoio
Soluzione
Voglio trovare l'altezza per cui . Devo risolvere l'equazione non lineare:
Problema
Schematizzare
Tradurre in linguaggio matematico --> Errori inerenti
Modello matematico
Metodo Numerico --> Errore di troncamento
Algoritmo --> Stabilità
Soluzione numerica --> Errori di arrotondamento (il calcolatore lavora con un numero limitato di cifre significative)
Risoluzione di un problema con i metodi numerici
Descrizione del problema fisico
Si comincia dalla descrizione del problema.
Si registrano le misure fornite, azioni (forze) in gioco. Si fanno le dovute approssimazioni.
Traduzione del problema in linguaggio matematico
Il problema fisico deve essere tradotto in equazioni matematiche. Una volta fatto ciò avremo a disposizione un #Modello matematico.
Modello matematico
Alcuni esempi di modelli matematici nella #Traduzione del problema in linguaggio matematico sono:
Sistemi di equazioni non lineari (equilibri chimici, ottimizzazione)
Integrali (aree, volumi, energia)
Sistemi di equazioni differenziali
Quando si costruisce un modello matematico si compiono alcuni errori detti [[#Errori inerenti]].
Errori inerenti
Gli errori inerenti sono gli errori che si commettono nella costruzione di un [[#Modello matematico]].
Metodo numerico
Una volta definito il modello si passa all'utilizzo di un metodo analitico (se possibile) o un metodo numerico per trovarne la soluzione.
Quando si usano i metodi numerici si devono costruire degli algoritmi compiono #Errori di troncamento
Intervallo di separazione
Il primo passo da seguire è quello di isolare la soluzione del problema che si vuole risolvere.
intervallo di separazione $i$
L'Intervallo di Separazione è un intervallo in cui abbiamo individuato un'unica soluzione del problema.
dove è soluzione esatta del problema.
Errori di troncamento
Gli errori di troncamento sono gli errori che si compiono nell'applicazione di un #Metodo numerico. Ad esempio, se applico il metodo di bisezione l'errore di troncamento è quello che compio per essermi fermato dopo 5 iterazioni piuttosto che un numero maggiore.
Algoritmo
Applicare un #Metodo numerico significa scrivere un algoritmo che possa essere reiterato un numero finito di volte per arrivare sempre più vicino al risultato reale del problema. Quando si costruisce un algoritmo è bene assicurarsi che sia stabile. È infatti possibile che il risultato esploda dopo un certo numero di reiterazioni.
Soluzione numerica
Dopo aver applicato il #Metodo numerico si arriva finalmente alla soluzione numerica al problema.
È importante a questo punto interpretare il risultato e assicurarsi che la soluzione abbia senso (non possiamo avere ad esempio masse negative).
In questa fase si deve inoltre fare attenzione a un'ulteriore causa di errore: gli #Errori di arrotondamento
Errori di arrotondamento
I calcolatori lavorano con un numero finito di cifre significative. Quando rappresentano un numero con molte cifre (ad esempio ) per i calcoli compieranno degli errori dovuti al fatto che non sono in grado di rappresentare il numero nella sua interezza. Questi tipi di errori si chiamano errori di troncamento.
L'arrotondamento è la prima fonte di errore. I dati di input, che hanno un numero infinito di cifre, vengono trasformati, tramite arrotondamento, in numeri macchina, con un numero finito di cifre.
esempio: errore di arrotondamento
I polinomi e sono algebricamente identici.
Se però calcoliamo i loro valori numericamente nell'intervallo usando 10 cifre significative:
x
Valore esatto
Errore di arrotondamento
1
0
0
0
0
1.0001
Cancellazione numerica
Un errore che si verifica quando calcoliamo la differenza di due numeri molto vicini.
Algoritmo
algoritmo
Successione di istruzioni, finita e non ambigua, che consente di ottenere risultati numerici a partire dai dati di input.
Gli algoritmi vengono poi implementati in un linguaggio di programmazione.
Stabilità di un algoritmo
Anche quando l'errore di arrotondamento è piccolo, la sua propagazione può avere effetti disastrosi. Essi possono infatti venire amplificati, rendendo in questo caso la soluzione del tutto inaffidabile. In questo caso si dice che l'algoritmo è instabile.
Metodi numerici per la soluzione di problemi non lineari
Libro: 3.4
Metodo di bisezione
Il metodo di Bisezione
3.1 Il metodo di Bisezione
Il metodo di bisezione è un metodo numerico che consiste nel dimezzare di volta in volta l'Intervallo di separazione e usare il punto medio di tale intervallo come approssimazione della soluzione .
Consente di costruire una successione {} di approssimazioni di , ottenute assumendo come punto medio di un intervallo con .
Individuato unIntervallo di separazione ne calcolo il punto medio che chiamerò :
Ora controllo in quale tra gli intervalli e appartiene la soluzione , verificando che il prodotto oppure il prodotto sia negativo.
Una volta individuato l'intervallo, ripeto il procedimento usando quello come nuovo intervallo di separazione. Supponiamo ad esempio che la soluzione cada nell'intervallo , questo sarà proprio il nuovo intervallo di separazione .
Chiamo il punto medio tra e :
Continuando a ripetere questo processo, ammesso che il metodo converga, sarà man mano sempre più vicino alla soluzione .
Input: per
se:
Errori
Errore di troncamento
Nell'applicazione del metodo di bisezione, compiamo un Errore di troncamento dovuto quindi al numero di iterazioni che compiamo
Convergenza
Calcolo l'errore tenendo presente che esso dovrà per forza essere minore della metà dell'ampiezza dell'intervallo.
A sua volta l'ampiezza dell'intervallo sarà la metà dell'intervallo della iterazione predente e così via
Per ottenere l'approssimazione della soluzione con una tolleranza scelta sono necessarie almeno un certo numero di iterazioni. Questo numero può essere stimato a partire dalla relazione:
k &\ge log_{2}\left( \frac{b-a}{\varepsilon} \right)
\end{align}
$
Tenendo presente che deve per definizione essere un numero intero positivo.
Criterio di arresto
Criterio di arresto a posteriori
Posso interrompere l'algoritmo quando l'errore al passo k è minore di una tolleranza scelta .
Implementazione in Matlab
function [soluzioneApprox,erroreStimato, iterazioniNecessarie] = MetodoBisezioneNonLineari(estremoInferiore, estremoSuperiore, funzione, tolleranza, numeroMaxIterazioni)
% Questa funzione serve ad applicare il metodo di bisezione a una funzione
% assegnata per ricavarne la soluzione approssimata.
% Input:
% estermoInferiore, estremoSuperiore: Estremi dell'intervallo di separazione
% funzione: la funzione, definita come anonymous function, a cui
% applicare il metodo
% tolleranza: La tolleranza con la quale si vuole trovare la soluzione
% numeroMaxIterazioni: Il numero max di iterazioni che si vogliono
% provare prima di interrompere il calcolo. (Se non specificato è
% inizializzato a 100
% ------------
% Outpu:
% soluzioneApprox: la soluzione approssimata
% erroreStimato: la media degli errori calcolati come b-a e come f(xn)
% iterazioniNecessarie: Il numero di iterazioni necessarie alla stima
% dell'errore
% Cerco la radice di una funzione f nell'intervallo [a,b] con il metodo di
% bisezione
% Suppongo di aver già individuato gli estremi degli intervalli di
% separazione
% Sfrutteremo un criterio di arresto basato sulla tolleranza:
% f = Funzione della quale vogliamo cercare la radice
% a = Estremo inferiore in cui è stata isolata la radice
% b = Estremo superiore in cui è stata isolata la radice
% toll = Tolleranza (\tollilon)
% numeroMaxIterazioni = Massimo numero di iterazioni
f = funzione;
% So che nell'intervallo definito sotto sicuremante ci sarà una soluzione
a = estremoInferiore;
b = estremoSuperiore;
% Definisco la tolleranza
toll = tolleranza;
maxIter = 100;
maxIter = numeroMaxIterazioni;
% Vogliamo calcolare:
% xn: Approx della radice
% err1 = |x(n) - x(n-1)|
% err2 = f(xn)
% iter = Numero di iterazioni
format long
% Inizializzo i parametri necessari
iter = 0; err1 = b-a; err2 = toll+1; x0 = a;
% Verifico che la radice esista
if f(a)*f(b) > 0
error('Non ci sono soluzioni nellintervallo [a,b]') % Con questo comando blocco l'esecuzione dello script
elseif f(a)*f(b) == 0
if f(a) == 0
xn = a;
elseif f(b) == 0
xn = b;
end
return % Return perché non voglio andare avanti se queste condizioni del secondo if sono rispettate
end
% Calcolo successione
while (err1 > toll) && iter < maxIter
xn = (a+b)/2;
if f(a)*f(xn) < 0
b = xn;
elseif f(xn)*f(b) < 0
a = xn;
end
iter = iter + 1;
err1 = abs(xn-x0);
err2 = abs(f(xn));
x0 = xn;
end
soluzioneApprox = xn;
erroreStimato = abs((err1 + err2)/2);
iterazioniNecessarie = iter;
end
Metodi iterativi a un punto
Si parla anche di metodi delle approssimazioni successive o dell'iterazione funzionale.
Un metodo di risoluzione consiste nel riformulare il problema dato riscrivendolo in una forma che sia più semplice da risolvere.
L'equazione
può infatti essere riscritta come
in un certo intervallo di separazione .
Se è una radice esatta di per cui , si ha che
Equazione di punto unito
equazione di punto unito
Applicando questo metodo, il valore per cui
è detto punto unito e l'equazione è detta equazione di punto unito.
Geometricamente, trovare il punto unito di significa trovare l'intersezione tra le due rette:
es - equazioni di punto unito
L'equazione
può essere riscritta in varie forme, tra cui:
$
\begin
x = \varphi_{1}(x) = \sqrt{x+2} & x = \varphi_{2}(x) = - \sqrt{x+2} \
x = \varphi_{3}(x) = x^{2}-2 & x = \varphi_{4}(x) = 1+ \frac{2}
\end{matrix}
$
A questo punto si può scrivere la soluzione approssimata tramite un metodo iterativo a un punto:
Il metodo delle tangenti, detto anche metodo di Newton sfrutta il Polinomio di Taylor per approssimare il valore delle funzioni. In questo caso è necessario scegliere un'approssimazione iniziale .
Si tratta di fatto di un metodo di linearizzazione. Infatti, come vedremo, interromperemo il Polinomio di Taylor al primo ordine, confondendo quindi il valore della funzione con il valore della tangente.
☑️ Ipotesi
Per l'applicabilità del metodo di newton, la funzione deve rispettare le seguenti ipotesi:
Approssimo la funzione con un polinomio di Taylor al secondo ordine:
Se cerco la radice di impongo la funzione approssimata uguale a 0:
da cui
motivo per cui dobbiamo imporre anche tra le #☑️ Ipotesi.
Dopodiché approssimo nuovamente la funzione con Taylor usando stavolta al posto di :
da cui
Continuo ad iterare questo procedimento. Avrò così, in definitiva:
Il metodo convergerà per alcuni valori di (Ossia scegliendo abbastanza vicino a ).
algoritmo
Convergenza
condizione necessaria di convergenza
Sia un intervallo di separazione di uno zero di ;
Sia:
Allora esiste un intorno di , con , tale che, se , la successione risulta convergente a .
Se si può dimostrare che si può scegliere uno dei due estremi di come approssimazione iniziale .
Supponiamo di avere una funzione monotona, senza massimi o minimi locali, a concavità fissa.
L'estremo di Fourier di un intervallo è quello dei due tale che il prodotto dove è l'estremo.