Quiz su interpolazione in Matlab

Alessio_Ale
Ciao a tutti, sto preparando un esame su matlab e non riesco a risolvere alcuni esercizi.
Mi date una mano a capire dove sbaglio?





Il codice che ho scritto è:

a=0;
b=2*pi;
g=7;
n=g+1;

f=@(x) 3.*x.*cos(x).*sin(x); %definisco f(x)
x=linspace(a,b,n);               
y=f(x);

c=polyfit(x,y,n);                   %creo il polinomio

f1=f(pi/2)                            %valore di f1


fin qui funziona tutto ma non riesco a capire come calcolare il valore di p $ ( (pi)/(2) ) $

Ogni suggerimento è ben accetto! Grazie! :smt023

Risposte
feddy
Big hint:
polyval
:D

feddy
In particolare, la documentazione ti spiega anche come funziona: https://it.mathworks.com/help/matlab/ref/polyval.html

feddy
Un paio di cose importanti per quando posti :-)
1) Non postare l'immagine del testo del problema. Questi link una volta rotti rendono il post incomprensibile.
2) Scrivi un titolo sensato. "Esercizi matlab che mi fanno impazzire" non permette agli utenti futuri di capire quale sia il contenuto del messaggio.
3) Posta il codice tra gli appositi tag.

Alessio_Ale
Ho provato ad inserire "polyval" nel codice, ma non mi tornano i risultati.
Se non ho capito male dovrei andare a valutare il mio valore sul polinomio c creato con polyfit; la sintassi giusta è quindi polyval(c,pi/2) ?

feddy
Sì, corretto. Cosa non ti torna?

feddy
Ah, ho visto il codice ora. Il tuo errore è in polyfit: l'ultimo argomento deve essere il grado, cioè
g
che è $7$, non il numero di punti di interpolazione, che è $8$ (vedi la documenzione: https://it.mathworks.com/help/matlab/re ... escription). Infatti, ti sarà sicuramente comparsa una warning dicendoti che il grado è maggiore o uguale del numero di punti iniziali. Quindi l'esercizio diventa:

a=0;
b=2*pi;
g=7;

f=@(x) 3.*x.*cos(x).*sin(x); %definisco f(x)
x=linspace(a,b,g+1);               
y=f(x);

c=polyfit(x,y,7);                   %creo il polinomio

abs(f(pi/2) - polyval(c,pi/2))

Alessio_Ale
Perfetto, ora funziona! Grazie mille

feddy
Prego!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.