Quiz su interpolazione spline in MatLab

Alessio_Ale
L'ultimo esercizio che non riesco a far quadrare:





il codice:

a=1;
b=2;
n=35;

f=@(x) (x.^5).*log(x); %definisco f(x)
fd=@(x) 5.*(x.^4)*(1./x); %definisco f'(x)
f0=fd(1);
fn=fd(2);

x=linspace(a,b,n);
y=f(x);

z=linspace(a,b);
fz=f(z);

s=spline(x,y,z) %creo la spline
s1=spline(x,[f0 y fn],z) %creo la spline vincolata nei punti f0 e fn
 
err=max(abs(fz-s)) %errore sulla spline
err1=max(abs(fz-s1)) %errore sulla spline vincolata


Qui più o meno funziona tutto ma non so come utilizzare l'informazione dei 500punti equidistanti; ho provato ad utilizzare il dato nella definizione di z ma in ogni caso non mi tornano i risultati.

Ancora una volta grazie a chi vorrà aiutarmi :smt023

Risposte
feddy
Una paio di cose:
1) la derivata è sbagliata: devi usare la regola del prodotto.
2) quello che mi pare ti sfugga è il significato del concetto di interpolazione. Ti do dei punti ${x_i}_i$ e ${y_i}_i$, per i quali passa una funzione che voglio ricostruire. Non so cosa fa nei punti in mezzo, ma voglio che passi per quei punti. Chiaramente può farlo in tanti modi.
Ad esempio, in questo caso, una spline cubica non è altro che una funzione polinomiale a tratti con certe proprietà. Determinarla significa semplicemente calcolare i coefficienti.

Una volta che ce l'abbiamo, ci si chiede: assumiamo che io conosca le $x$ e le $y$ di partenza, che sono quelle corrispondenti ad una certa funzione $f(x)$. Voglio vedere di quanto si "sbaglia" globalmente, cioè se la spline $s$ approssima "bene" la funzione $f$ che ne ha originato i "sample" (cioè i punti di partenza di cui parlavamo prima).
Per fare questo altro non devi fare che valutare entrambe le funzioni in un insieme di punti "test", fitti, come in questo caso, e osservarne il risultato.

3) Non ti viene chiesto di calcolare l'errore sulla spline, percio' le variabili
err, s
non ti servono.


Ti allego il codice con la soluzione:

clear all;
close all;

a=1;
b=2;
n=35;

f=@(x) (x.^5).*log(x); % f(x)
fd=@(x) 5.*(x.^4)*log(x) + x.^4 ; % f'(x)
% valuto la derivata nei punti estremi
f0=fd(a);
fn=fd(b);

x=linspace(a,b,n);
y=f(x);

% punti test, fitti, in cui andro' a valutare l'errore commesso
xx = linspace(a,b,500);
cs=spline(x,[f0 y fn],xx) %valutazione della spline vincolata nei punti test

% errore commesso approssimando f(x) con la spline.
errore = abs(f(xx)-cs);
max(abs(errore))

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