• Non ci sono risultati.

Un polinomio in Matlab ` e dato da un vettore che contiene i sui coefficienti ordinati da a

N/A
N/A
Protected

Academic year: 2021

Condividi "Un polinomio in Matlab ` e dato da un vettore che contiene i sui coefficienti ordinati da a"

Copied!
9
0
0

Testo completo

(1)

I polinomi

I

Un polinomio in Matlab ` e dato da un vettore che contiene i sui coefficienti ordinati da a

n

fino ad a

0

.

I

Per valutare un polinomio in uno o pi` u punti si usa il comando polyval:

>> y = polyval(p,x)

I

x ` e un vettore dove si specificano le ascisse nelle quale si vuole valutare il polinomio p.

I

y ` e un vettore che contine i valori di p in x.

(2)

I polinomi

I

Il comando roots(p) approssima le radici del polinomio p.

I

I comandi polyint(p) e polyder(p) calcolano

rispetivamente i coefficienti di una primitiva (quella che si annulla in x = 0) e della derivata di p.

I

Se x e y sono due vettori di n + 1 componenti, il comando p=polyfit(x,y,n) calcola il polinomio interpolatore dei dati {(x

i

, y

i

)}

ni =0

.

I

Se x e y sono due vettori di n + 1 componenti, il comando

p=polyfit(x,y,m) calcola i coefficienti del polinomio di

grado m che approssima le n + 1 coppie di valori {(x

i

, y

i

)}

ni =0

nel senso dei minimi quadrati.

(3)

Esempio di Runge

n=input(’Grado del polinomio: ’);

a=-5;b=5;

h=(b-a)/n;

x=[a:h:b];

fx=1./(x.^2+1);

p=polyfit(x,fx,n);

xx=linspace(a,b);

pxx=polyval(p,xx);

fxx=1./(xx.^2+1);

plot(xx,fxx,xx,pxx,x,fx,’*’);

legend(’1/(x^2+1)’,’Polinomio intepolatore’,’Dati’);

(4)

Nodi di Chebishev

Nell’intervallo [−1, 1]

ˆ

x

i

= − cos  i π n



i = 0, . . . , n .

Nell’intervallo [a, b]

x

i

= a + b

2 + b − a

2 x ˆ

i

i = 0, . . . , n . Esercizio

Scrivere uno script di Matlab che calcoli il polinomio P

n

che interpola la funzione f (x ) =

x21+1

negli n nodi di Chebyshev dell’intervallo I = [−5, 5] e confronti il grafico di f e di P

n

nell’intevallo I .

(5)

Soluzione

n=input(’Grado del polinomio: ’);

a=-5; b=5;

x=-cos([0:n]*pi/n);

x=(a+b)/2+(b-a)/2*x;

fx=1./(x.^2+1);

p=polyfit(x,fx,n);

xx=linspace(a,b);

pxx=polyval(p,xx);

fxx=1./(xx.^2+1);

plot(xx,fxx,xx,pxx,x,fx,’* ’);

legend(’1/(x^2+1)’,’Polinomio interpolatore’,’Dati’);

(6)

Splines

Se x e y sono due vettori di uguale lungheza

>> yy = spline(x,y,xx)

calcola il valore in xx della spline cubica “not-a-knot” che interpola i dati {(x

i

, y

i

)}

Ni =0

.

Esercizio

Per i dati contenuti nella tabella

x

i

0 0.5 1.6 2.9 3.4 4.8 5.2 5.7 6.0

y

i

2.20 2.13 3.32 5.21 5.10 7.05 7.00 8.00 8.25

disegnare il grafico della retta di migliore approssimazione nel senso

dei minimi quadrati, del polinomio interpolatore e della spline

cubica interpolatoria “not-a-knot”.

(7)

Soluzione

>> x=[0 0.5 1.6 2.9 3.4 4.8 5.2 5.7 6.0];

>> y=[2.20 2.13 3.32 5.21 5.10 7.05 7.0 8.0 8.25];

>> p=polyfit(x,y,length(x)-1);

>> r=polyfit(x,y,1);

>> xx=linspace(0,6);

>> pp=polyval(p,xx);

>> rxx=polyval(r,xx);

>> ss=spline(x,y,xx);

>> plot(xx,pp,xx,rxx,xx,ss,x,y,’*’,’LineWidth’,2)

>> legend(’Lagrange’,’Minimi quadrati’, ’Spline’,’Dati’,’Location’,’SouthEast’)

(8)

Esercizio

Si consideri la funzione f (x ) = 1

1 + x

2

definita nell’intervallo I = [−5, 5]. Scrivere uno script di Matlab per disegnare il grafico di

I

la funzione f ,

I

il polinomio interpolatore di f in N punti equispaziati di I ,

I

il polinomio interpolatore di f negli N punti di Chebishev di I ,

I

una funzione spline cubica che interpoli la funzione f in N

punti equispaziati di I .

(9)

Soluzione

N=input(’Numero di punti: ’);

a=-5; b=5;

n=N-1; % Grado del polinomio interpolatore h=(b-a)/n;

xeq=[a:h:b]; % Nodi equispaziati

xch=-cos([0:n]*pi/n); % Nodi di Chebishev in [-1,1]

xch=(a+b)/2+(b-a)/2*xch ;% Nodi di Chebishev in [a,b]

f=inline(’1./(1+x.^ 2)’);

fxeq=feval(f,xeq); % fxeq=1./(1+xeq.^2) fxch=feval(f,xch); % fxch=1./(1+xch.^2) peq=polyfit(xeq,fxeq,n);

pch=polyfit(xch,fxch,n);

xx=linspace(a,b);

peqxx=polyval(peq,xx);

pchxx=polyval(pch,xx);

sxx=spline(xeq,fxeq,xx);

fxx=feval(f,xx); % fxx=1./(1+xx.^2)

subplot(2,2,1), plot(xx,fxx,xx,peqxx,xeq,fxeq,’*’), title(’Lagrange nodi equispaziati’) subplot(2,2,2), plot(xx,fxx,xx,pchxx,xch,fxch,’*’), title(’Lagrange nodi Chebishev’) subplot(2,2,3), plot(xx,fxx,xx,sxx,xeq,fxeq,’*’), title(’Spline nodi equispaziati’)

Riferimenti

Documenti correlati

Si generalizzi la soluzione precedente creando una function che, avuti in ingresso la tabulazione dei punti, i pesi ed il grado n del polinomio, restituisca i coefficienti

dal dividendo il polinomio prodotto (per far questo si scrivono i singoli termini del prodotto col segno cambiato sotto i termini simili del dividendo e poi si addizionano questi).

che pu` o essere uguale al vettore nullo `e quella che ha coefficienti tutti nulli, quindi possiamo dire appunto che tutti i coefficienti di questa combinazione sono uguali a

Calcolare quindi l'errore relativo nel punto x = 1/2 e determinare il valore di a anchè questo sia

Trovare il versore con la stessa direzione e lo stesso verso

Sui vettori delle coordinate di un vettore di R 2 rispetto alle basi di R 2... In particolare, si

Se si pensa l’input x come coordinata temporale e l’output f ( x ) come coordinata su una retta, allora si puo’ immaginare la funzione f come la legge del moto di un punto che si

Fissi- amo nello spazio un sistema di riferimento cartesiano ortogonale monometrico con origine nel punto O, ed identifichiamo i vettori di R 3 con vettori applicati