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.