Ciao a tutti,
scrivo a causa di forti dubbi riguardanti le Spline, utilizzate per creare un polinomio che offra un'approssimazione smussata di una determinata funzione sulla base di un numero preciso di dati. Sommariamente, fin qui DOVREBBE essere tutto a posto (correggetemi se sbaglio). Il vero problema sorge invece quando tramuto queste in codice, in particolare sull'ambiente di programmazione di Matlab. Per farvi capire meglio i miei dubbi, posto direttamente l'esercizio proposto dalla professoressa:
"Calcolare la spline cubica interpolante per la funzione f(x) = x*e^(−(x−1)^2) considerando n + 1 nodi equidistanti nell’intervallo [0,5], con n = 10. Disegnare (sullo stesso grafico) i dati, la funzione e la spline."
Il codice propostoci in seguito dalla prof. come risoluzione è stato:
Soffermandomi sulla linea 4, noto che la spline viene creata seguendo i vettori x e y, utilizzando le xx come punti di campionamento per ricavare il grafico della spline. E bene, non riesco a capire questa cosa. Che senso ha fare una valutazione della spline su punti totalmente a caso (ovvero quelli della x, creati da 0 a 5 a intervalli di 0.0004)? La Spline non dovrebbe partire dall'unico dato degli n+1 nodi? Il codice che propongo io è:
dove alle linee 1 e 2 creo le coppie di dati (X,Y) che saranno i punti di interpolazione (nodi), alla linea 3 creo i punti di campionamento che mi servono a stilare il grafico e alla linea 4 creo il polinomio "smussato" che approssima la mia funzione principale. La linea 5 è un di più dovuto alla richiesta specifica di graficare anche la funzione effettiva, pertanto mi creo le y effettive calcolate sulla base del campionament[/CODE]
Dove sbaglio? O meglio, cos'è che non ho realmente capito nell'utilizzo di queste Spline?
Vi ringrazio in anticipo e mi scuso per essermi dilungato.
scrivo a causa di forti dubbi riguardanti le Spline, utilizzate per creare un polinomio che offra un'approssimazione smussata di una determinata funzione sulla base di un numero preciso di dati. Sommariamente, fin qui DOVREBBE essere tutto a posto (correggetemi se sbaglio). Il vero problema sorge invece quando tramuto queste in codice, in particolare sull'ambiente di programmazione di Matlab. Per farvi capire meglio i miei dubbi, posto direttamente l'esercizio proposto dalla professoressa:
"Calcolare la spline cubica interpolante per la funzione f(x) = x*e^(−(x−1)^2) considerando n + 1 nodi equidistanti nell’intervallo [0,5], con n = 10. Disegnare (sullo stesso grafico) i dati, la funzione e la spline."
Il codice propostoci in seguito dalla prof. come risoluzione è stato:
Codice:
1. x=0:0.004:5;
2. y=x.*exp(-(x-1).^2);
3. xx=0:0.001:5;
4. yy=spline(x,y,xx);
5. X=linspace(0,5,11);
6. Y=X.*exp(-(X-1).^2);
7. plot(x,y,xx,yy,X,Y,'ob')
Codice:
1. X=linspace(0,5,11);
2. Y=X.*exp(-(X-1).^2);
3. xx=0:0.001:5;
4. yy=spline(X,Y,xx);
5. y=xx.*exp(-(xx-1).^2);
6. plot(xx,y,xx,yy,X,Y,'ob')
Dove sbaglio? O meglio, cos'è che non ho realmente capito nell'utilizzo di queste Spline?
Vi ringrazio in anticipo e mi scuso per essermi dilungato.