Homework #2 per il corso di calcolo numerico a.a. 2014/2015
A cura di Lettiero Marco, Matricola 0124/893
Acquisizione dei punti della curva chiusa
Tramite la console di Matlab, sono stati prelevati in prima battuta dei punti da una figura tramite il comando ginput(39). In particolare, si è utilizzata la funzione imread() per caricare l'immagine, imagesc() e set() per visualizzarla con il corretto orientamento degli assi, e poi si è proceduto a prelevare i punti come sopra descritto.
Inoltre, si è poi completato il processo di creazione dei due vettori x e y che contengono le coordinate di tali punti chiudendo la spezzata con il comando x=[x; x(1)]; (e analogamente si è fatto lo stesso con il vettore y).
Si è poi salvato il workspace con il comando save(), così da poter utilizzare semplicemente il comando load() per eseguire l'elaborazione di questo script. Infine, l'immagine utilizzata rappresenta una delle prime versioni del DualShock di Sony Computer Entertainment® (l'immagine utilizzata non è però originale).
Definizione del parametro t e griglia fitta
Dal momento che saranno utilizzate praticamente in tutto lo svolgimento dell'Homework, definiamo il parametro t (di 40 componenti in [-1,1]) e la griglia fitta tt. Per comodità, essendo x e y vettori colonna poiché creati tramite ginput(), il vettore t è stato dichiarato anch'esso colonna mediante trasposizione.
Inoltre, è stata definita in un file .m la funzione che permette di calcolare il perimetro, il cui codice è il seguente:
function lunghezza = perimetro(xVertici, yVertici)
lunghezza=sum(sqrt(diff(xVertici).^2+diff(yVertici).^2));
end
Calcolo del perimetro della spezzata
Dopo aver calcolato il perimetro della spezzata che unisce i 40 punti, è utilizzata la plot che mostrerà sul grafico i nodi da interpolare e la spezzata che li unisce.
t=linspace(-1,1,40)';
tt=linspace(-1,1,500);
lunghezzaSpezzata=perimetro(x,y);
plot(x,y,'og',x,y,'g');
xlabel('Ascisse');
ylabel('Ordinate');
Visualizzazione dei grafici
Si faccia attenzione che le considerazioni che andrebbero fatte sono tutte state rimandate alla fine, nel paragrafo Conclusioni. Questo perché, per comodità, sono stati mostrati tutti i grafici e tutte le lunghezze dei perimetri in modo da consentire una consultazione più rapida dei dati.
Parte prima: interpolazione con spline cubica
Adesso si procederà con l'interpolazione tramite spline cubica. Trattandosi di una curva chiusa, sarà necessario interpolare tramite il parametro t sopra definito. È quindi utilizzata la funzione spline() con input:
- T, il parametro
- X, il vettore delle ascisse
- Tt, la griglia fitta di valutazione del polinomio a tratti interpolante.
In particolare, procedendo in questo modo, si ottengono i valori delle ascisse al variare del parametro t (ossia i valori di x(t)). Se ne mostra anche il grafico:
xSpline=spline(t,x,tt);
plot(t,x,'or',tt,xSpline,'r');
axis([-1.1 1.1 -1.1 1.1]);
xlabel('Parametro t');
ylabel('Ascissa x(t)');
Interpolazione del vettore delle ordinate
Per quanto riguarda il vettore delle ordinate, il ragionamento da seguire è perfettamente analogo e non presenta alcuna differenza. Anche in questo caso, è mostrato il grafico che mostra l'interpolazione delle ordinate al variare del parametro t.
ySpline=spline(t,y,tt);
plot(t,y,'or',tt,ySpline,'r');
axis([-1.1 1.1 -1.1 1.1]);
xlabel('Parametro t');
ylabel('Ordinata y(t)');
Calcolo della lunghezza del perimetro
Svolti i due passaggi di intermezzo, si calcola, come richiesto, la lunghezza del perimetro con la funzione sopra definita. Inoltre, si utilizzano i due vettori xSpline e ySpline come a...
-
Appunti Calcolo Numerico via HW1
-
Appunti Calcolo numerico
-
Appunti di Calcolo numerico
-
Calcolo numerico - Appunti