Anteprima
Vedrai una selezione di 3 pagine su 6
Appunti Calcolo Numerico via HW2 Pag. 1 Appunti Calcolo Numerico via HW2 Pag. 2
Anteprima di 3 pagg. su 6.
Scarica il documento per vederlo tutto.
Appunti Calcolo Numerico via HW2 Pag. 6
1 su 6
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

ylabel('Ordinata y(t)')

%%

% Svolti i due passaggi di intermezzo, si calcola, come richiesto, la

% lunghezza del perimetro con la function sopra definita. Inoltre, si

% utilizzano i due vettori _xSpline_ e _ySpline_ come argomenti della

% plot. In questo modo è possibile ottenere il polinomio a tratti di terzo

% grado che interpola sui nodi, i quali sono anch'essi mostrati (tramite

% pallini verdi).

lunghezzaSplineCubica=perimetro(xSpline,ySpline);

plot(xSpline,ySpline,'r',x,y,'og')

xlabel('Ascisse')

ylabel('Ordinate')

%% 1 - Parte seconda: Interpolazione con cubica di Hermite

% Per interpolare con la cubica di Hermite, il ragionamento da seguire è il

% medesimo applicato all'interpolazione tramite spline. L'unica differenza

% consiste nella function da utilizzare che questa volta corrisponde a

% _pchip()_. Quindi, si procede prima con l'interpolazione delle ascisse

% rispetto al solito parametro _t_ e se ne mostra il grafico:

xHermite=pchip(t,x,tt);

plot(t,x,'oc',tt,xHermite,'c')

axis([-1.1 1.1 -1.1 1.1])

xlabel('Parametro t')

ylabel('Ascissa x(t)')

%%

% Valutata la cubica di Hermite sulle ascisse, si applica lo stesso

% ragionamento per le ordinate:

yHermite=pchip(t,y,tt);

plot(t,y,'oc',tt,yHermite,'c')

axis([-1.1 1.1 -1.1 1.1])

xlabel('Parametro t')

ylabel('Ordinate y(t)')

%%

% Anche in questo caso, si calcola la lunghezza della cubica di Hermite che

% ricostruisce il grafico tramite la function _perimetro()_. Infine, viene

% visualizzato il grafico passando come parametri di input della plot i due

% valori _xHermite_ e _yHermite_.

lunghezzaCubicaHermite=perimetro(xHermite, yHermite);

plot(xHermite,yHermite,'c',x,y,'og')

xlabel('Ascisse')

ylabel('Ordinate')

%% 2 - Parte prima: Approssimazione dei minimi quadrati

% Sarà ora necessario procedere con l'approssimazione della curva nel senso

% dei minimi quadrati. In questa prima parte, per approssimare si utilizzerà

% il polinomio di grado 6. Anche in questo caso, trattandosi di una curva

% chiusa, sarà necessario procedere approssimando in funzione del parametro

% _t_ prima le ascisse e poi le ordinate.

% Per evitare intrecci nel grafico finale, è stata definita una nuova griglia

% fitta _ttMQ_. I coefficienti sono stati calcolati tramite _polyfit()_, a

% cui sono stati passati come parametri:

%

% t, il solito parametro

%

% x, il vettore delle ascisse

%

% 6, il grado del polinomio che approssimerà la soluzione.

%

% È stata poi utilizzata la _polyval()_ che si è occupata di valutare il

% polinomio di grado 6, con i coefficienti precedentemente calcolati, sulla

% griglia di valutazione _ttMQ_. Infine, ne è stato visualizzato il grafico:

ttMQ=linspace(t(1),t(end-1),500);

coefficientiX=polyfit(t,x,6);

polinomio6MQx=polyval(coefficientiX,ttMQ);

plot(t,x,'ob',ttMQ,polinomio6MQx,'b')

axis([-1.1 1.1 -1.1 1.1])

xlabel('Parametro t')

ylabel('Ascissa x(t)')

%%

% Analogamente, si procederà allo stesso modo con il vettore delle

% ordinate, infatti:

coefficientiY=polyfit(t,y,6);

polinomio6MQy=polyval(coefficientiY,ttMQ);

plot(t,y,'ob',ttMQ,polinomio6MQy,'b')

axis([-1.1 1.1 -1.1 1.1])

xlabel('Parametro t')

ylabel('Ordinata y(t)')

%%

% I valori contenuti in _polinomio6MQx_ e in _polinomio6MQy_ permettono di

% rappresentare una curva che però resta aperta. Per questo motivo, sarà

% necessario unire i punti con il procedimento descritto all'inizio di

% questa relazione.

polinomio6MQx=[polinomio6MQx polinomio6MQx(1)];

polinomio6MQy=[polinomio6MQy polinomio6MQy(1)];

%%

% Adesso, è possibile calcolare, come richiesto, il perimetro del polinomio

% di sesto grado che approssima la curva, per poi visualizzarne tramite

% plot il grafico:

lunghezzaPolinomio6MQ=perimetro(polinomio6MQx,polinomio6MQy);

plot(polinomio6MQx,polinomio6MQy,'b',x,y,'og')

xlabel('Ascisse')

ylabel('Ordinate')

%% 2 - Parte seconda: Approssimazione con modello trigonometrico

% È ora possibile procedere con l'approssimazione tramite il modello

% trigonometrico

% a1+a2*cos(x)+a3*cos(2x)+a4*cos(3x)+a5*sin(x)+a6*sin(2x)+a7*sin(3x).

% Si ricorda che, anche in questo caso, sarà necessario procedere prima sul

% vettore delle ascisse e poi su quello delle ordinate. Inoltre, come

% accadeva per il polinomio di sesto grado, anche qui si utilizzerà la griglia

% _ttMQ_ per evitare intrecci di sorta. Per approssimare correttamente con

% il modello trigonometrico di ordine 3, sarà necessario ricostruire la

% matrice (unica) B dei coefficienti. Sarà poi possibile calcolare le a(i)

% e valutare il polinomio sulla griglia fitta _ttMQ_.

% Sebbene in Matlab sia possibile risolvere un sistema rettangolare con il

% semplice comando _B\x_, si è scelto di scrivere in forma "estesa" le

% operazioni necessarie alla risoluzione del problema (nel senso dei minimi

% quadrati). Calcolato _xTrig_, si può visualizzare il grafico di _t_ e

% _x(t)_.

B=[ones(size(t)) cos(t) cos(2*t) cos(3*t) sin(t) sin(2*t) sin(3*t)];

a=(B'*B)\(B'*x);

xTrig= a(1)+a(2)*cos(ttMQ)+a(3)*cos(2*ttMQ)+a(4)*cos(3*ttMQ)+a(5)*sin(ttMQ)...

+a(6)*sin(2*ttMQ)+a(7)*sin(3*ttMQ);

plot(t,x,'ok',ttMQ,xTrig,'k')

axis([-1.1 1.1 -1.1 1.1])

xlabel('Parametro t')

ylabel('Ascissa x(t)')

%%

% Per procedere con le ordinate, quindi, sarà necessario ripartire dal

% calcolo dei coefficienti _a_ (la matrice B dei coefficienti del sistema

% rettangolare è la medesima). Analogamente, si ricalcolerà il polinomio

% trigonometrico sulla griglia fitta _ttMQ_ con il nuovo vettore _a_ e si

% visualizzerà questo secondo grafico (_t_ e _y(t)_).

a=(B'*B)\(B'*y);

yTrig= a(1)+a(2)*cos(ttMQ)+a(3)*cos(2*ttMQ)+a(4)*cos(3*ttMQ)+a(5)*sin(ttMQ)...

+a(6)*sin(2*ttMQ)+a(7)*sin(3*ttMQ);

plot(t,y,'ok',ttMQ,yTrig','k')

axis([-1.1 1.1 -1.1 1.1])

xlabel('Parametro t')

ylabel('Ordinate y(t)')

%%

% Prima di procedere al calcolo del perimetro e alla visualizzazione finale

% del grafico, si ricollegano i punti in modo da avere una curva chiusa.

xTrig=[xTrig xTrig(1)];

yTrig=[yTrig yTrig(1)];

%%

% È ora possibile calcolare il perimetro con la function apposita e

% utilizzare il comando plot con input _xTrig_ e _yTrig_ per visualizzare

% il grafico del polinomio trigonometrico approssimante.

lunghezzaPolTrig=perimetro(xTrig,yTrig);

plot(xTrig,yTrig,'k',x,y,'og')

xlabel('Ascisse')

ylabel('Ordinate')

%% 3 - Interpolazione polinomiale sui nodi di Chebychev

% Infine, occorre interpolare i punti con il polinomio di grado 39 sui nodi

% di Chebychev. Prima di procedere, si ricorda per l'ennesima volta che

% sarà necessario applicare il ragionamento che a breve sarà descritto sia

% sulle ascisse sia sulle ordinate.

% Si dovranno generare 40 nodi di Chebychev nell'intervallo [-1,1] con

% l'apposita formula. Questi punti costituiranno un nuovo vettore per la

% valutazione di ascisse e ordinate di Chebychev per l'interpolazione

% parametrica (chiamato _tCheby_). Tali coordinate di Chebychev saranno

% ottenute con la function _pchip()_. I parametri di input, saranno:

%

% t, il parametro per interpolare

%

% x, il vettore delle ascisse

%

% tCheby, tale parametro è utilizzato come griglia di valutazione di 40

% punti per ottenere esattamente 40 ascisse di Chebychev.

%

% Ottenute queste nuove ascisse, quindi, si potranno calcolare i

% coefficienti del polinomio di grado 39 con la _polyfit()_, che costituirà

% il primo dei due input per _polyval()_. _polyfit()_ è utilizzata

% prendendo in input:

%

% tCheby, il parametro

%

% xCheby, il vettore delle ascisse di Chebychev

%

% 39, il grado del polinomio.

%

% _polyval()_, invece, valutato sulla griglia fitta _tt_, restituisce un

% vettore contenente i valori del polinomio di grado 39 che interpola le

% ascisse al variare di _tCheby_. Se ne stampa poi il grafico:

tCheby=-cos((0:39)*pi/39)';

xCheby=pchip(t,x,tCheby);

polChX=polyval(polyfit(tCheby,xCheby,39),tt);

plot(tCheby,xCheby,'oy',tt,polChX,'y')

axis([-1.1 1.1 -1.1 1.1])

xlabel('Parametro tCheby')

ylabel('Ascissa x(tCheby)')

%%

% In modo totalmente analogo, si ripete il procedimento con il vettore

% delle ordinate, come è possibile vedere di seguito:

yCheby=pchip(t,y,tCheby);

polChY=polyval(polyfit(tCheby,yCheby,39),tt);

plot(tCheby,yCheby,'oy',tt,polChY,'y')

axis([-1.1 1.1 -1.1 1.1])

xlabel('Parametro tCheby')

ylabel('Ordinate y(tCheby)')

%%

% Anche nel caso del polinomio di grado 39 che interpola sui nodi di

% Chebychev, la curva risultante nella maggioranza dei casi (come questo)

% non sarà chiusa. Pertanto, si ricongiungono i punti con il solito metodo:

polChX=[polChX polChX(1)];

polChY=[polChY polChY(1)];

%%

% Si calcola poi il perimetro del polinomio interpolante di Chebychev di

% grado 39 con la function apposita e se ne mostra il grafico passando come

% argomenti della plot _polChX_ e _polChY_. Sul grafico, inoltre, sono

% mostrati sia i nodi di Chebychev (quelli segnati da un triangolo rosso),

% sia i nodi da interpolare di partenza (segnati da un pallino verde).

lunghezzaPolCheby=perimetro(polChX,polChY);

plot(polChX,polChY, 'y',x,y,'og', xCheby, yCheby, '^r')

xlabel('Ascissa')

ylabel('Ordinata')

%% Conclusioni - Il grafico

% In questa ultima sezione, come già anticipato, si mostreranno i grafici di

% tutte le ricostruzioni eseguite nei punti precedenti, in modo da

% osservarne le differenze e trarne le opportune considerazioni.

plot(x,y,'og',x,y,'g')

hold on

plot(xSpline,ySpline,'r')

plot(xHermite,yHermite,'c')

plot(polinomio6MQx,polinomio6MQy,'b')

plot(xTrig,yTrig,'k')

plot(polChX,polChY, 'y',xCheby, yCheby, '^r')

title('Grafico completo delle curve')

legend('nodi','Spezzata','Spline','Hermite','Pol 6°', 'Pol Trig',...

'Chebychev', 'Nodi Chebychev', 'Location','BestOutside')

xlabel('Ascisse')

ylabel('Ordinate')

%%

% Come &eg

Dettagli
Publisher
A.A. 2014-2015
6 pagine
3 download
SSD Scienze matematiche e informatiche MAT/08 Analisi numerica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Wenress di informazioni apprese con la frequenza delle lezioni di Calcolo Numerico e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Napoli - Parthenope o del prof Giunta Giulio.