Soluzione di equazioni non lineari

Transcript

Soluzione di equazioni non lineari
Soluzione di equazioni non lineari
Talvolta siamo di fronte ad equazioni non lineari, ossia equazioni che non possono essere invertite
per esprimere la x in funzione di altre variabili.
Ad esempio se so che y=3x+e1-x, ovviamente non possiamo invertire questa relazione e scrivere
x=… per cui dobbiamo ricorrere a metodi numerici che facciano dei “tentativi” fino a che non
troviamo il valore di x.
Ad esempio se sappiamo che y=3, possiamo trovare il valore di x che rende y=3 (ossia lo zero
della funzione) con il comando fzero.
La funzione di cui stiamo cercando lo zero può essere introdotta con un m-file o con un comando
inline. Poiché noi stiamo cercando lo zero, dovremo scrivere la funzione come y-3, perché è di
questa che cerchiamo lo zero.
Quindi il codice in MATLAB può essere il seguente:
>>f=inline(‘3*x+exp(1-x)-3’);
>>fzero(f,2)
dove 2 è un numero dal quale faccio partire l’algoritmo (initial guess), che è basato su una variante
del metodo di bisezione. Il risultato è 0.3809. In corrispondenza di tale valore di x la y vale 3.
Interpolazione
Presentiamo ora due tipi di interpolazione:
 lineare
 quella per mezzo di spline cubiche.
In entrambe le tecniche supponiamo di avere dei dati che rappresentino una serie di coordinate xy,
per cui y è funzione di x. Supporremo inoltre di aver bisogno di stimare il valore f(b), che non è
nessuno dei punti dei dati originali, ma che giace tra due di essi. Vogliamo approssimare (o
interpolare) il valore di f(b), utilizzando le informazioni della serie originale di dati.
L’interpolazione lineare è una delle tecniche più comuni per stimare i valori tra due dati. Se
presumiamo che la funzione tra due punti possa essere approssimata con una retta disegnata tra
di essi, allora possiamo calcolare il valore della funzione per qualsiasi punto, utilizzando
un’equazione derivata dai triangoli simili.
Una spline cubica è una curva costruita per passare dai punti di una serie di dati. Tra ogni coppia
di punti la curva è un polinomio di terzo grado (a0x3+a1x2+a2x+a3) che viene calcolato in modo da
produrre una curva continua tra i due punti e una transizione senza spigoli con il polinomio della
coppia precedente.
La funzione di MATLAB che esegue l’interpolazione ha 2 forme. Ogni forma presuppone che i
vettori x e y contengano i valori originali dei dati e che un altro vettore x_new contenga i punti per
cui vogliamo calcolare i valori interpolati y_new (i valori di x dovrebbero essere in ordine
ascendente e i valori di x_new dovrebbero essere nell’intervallo dei valori di x).
 interp1(x,y,x_new,’linear’)
 interp1(x,y,x_new,’spline’)
MATLAB fornisce altri metodi di interpolazione
monodimensionale, tra cui l’interpolazione al
“vicino più vicino” e quella cubica. Inoltre
vengono fornite anche delle funzioni per
l’interpolazione bidimensionale (interp2) e
tridimensionale (interp3)
Approssimazione di curve
Supponiamo di avere una serie di dati ottenuti con un esperimento. Dopo aver disegnato un
grafico dei punti, troviamo che essi cadono generalmente lungo una linea retta. Tuttavia se
tentiamo di disegnare una linea retta attraverso i punti, probabilmente solo un paio di essi si
troveranno sulla retta. Per trovare la linea retta che più si avvicina ai punti si può utilizzare un
metodo di approssimazione noto come minimi quadrati, minimizzando la distanza di ogni punto
dalla linea retta. Sebbene questa linea possa essere considerata l’approssimazione migliore dei
dati, è possibile che nessun punto si trovi esattamente su di essa.
Regressione lineare è il nome dato al processo per determinare l’equazione lineare che è la
miglior approssimazione di una serie di dati, nei termini della minimizzazione dei quadrati delle
distanze tra la linea e i punti dati.
Per misurare la qualità dell’approssimazione di questa stima lineare dei dati, determiniamo per
prima cosa la distanza di ogni punto dalla retta. I primi due punti si trovano esattamente sulla linea,
così d1 e d2 sono uguali a zero. Il valore di d3 è uguale a 60-40 (20); il resto delle distanze può
essere calcolato in modo simile.
Se calcoliamo la somma delle distanze, alcuni dei valori positivi e negativi possono cancellarsi a
vicenda e produrre una somma più piccola di quella che dovrebbe essere. Per evitare questo
problema, possiamo sommare invece i valori assoluti o i quadrati dei valori; la regressione lineare
utilizza i quadrati dei valori. Perciò la misura della qualità dell’approssimazione di questa stima
lineare è la somma dei quadrati delle distanze tra i punti e la stima lineare. Questa somma può
essere calcolata come:
>>sum_sq=sum((y-y1).^2)
Per questa serie di dati il valore di sum_sq è 573.
Se disegnassimo un’altra riga attraverso i punti, potremmo calcolare la somma dei quadrati che
corrisponde a questa nuova approssimazione. Delle due linee, l’approssimazione migliore è fornita
da quella con la più piccola somma dei quadrati delle distanze.
Fino ad ora abbiamo presentato una tecnica per calcolare l’equazione lineare che approssima
meglio una serie di dati. E’ possibile sviluppare anche una tecnica simile usando un singolo
polinomio (non una serie di polinomi, come nelle spline cubiche) per approssimare i dati,
minimizzando la distanza del polinomio dai punti dei dati. Per prima cosa ricordiamo che un
polinomio di una variabile può essere scritto nella formula generale:
f(x)=a0xn+a1xn-1+a2xn-2+…+an-1x+an
Il grado del polinomio è uguale al valore più alto usato come esponente. Perciò la forma generale
per un polinomio di terzo grado è
g(x)=a0x3+a1x2+a2x+a3
Notate che anche un’equazione lineare è un polinomio, solo di primo grado.
Le funzioni di MATLAB per calcolare la migliore approssimazione di una serie di dati con un
polinomio di grado specifico è la funzione polyfit. Questa funzione ha tre argomenti: le coordinate
x e y dei punti e il grado n del polinomio. Questa funziona calcola i coefficienti, in ordine
discendente di potenza x, del polinomio di grado n che approssima meglio i vettori x e y (notate
che ci sono n+1 coefficienti per un polinomio di grado n).
polyfit(x,y,n)
N.B. Quando cresce il grado del polinomio
cresce anche il numero di punti che si
trovano sulla linea. Se una serie di n punti
viene usata per determinare un polinomio
di grado n, allora tutti i punti si trovano
esattamente sulla curva.