Quiz su interpolazione spline in MatLab

Messaggioda Alessio_Ale » 08/07/2022, 09:27

L'ultimo esercizio che non riesco a far quadrare:



Immagine

il codice:

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
Ultima modifica di feddy il 08/07/2022, 22:06, modificato 1 volta in totale.
Motivazione: Sistemato codice e titolo
Alessio_Ale
Starting Member
Starting Member
 
Messaggio: 22 di 36
Iscritto il: 23/06/2022, 22:31

Re: Quiz su interpolazione spline in MatLab

Messaggioda feddy » 08/07/2022, 22:40

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
Codice:
err, s
non ti servono.


Ti allego il codice con la soluzione:

Codice:
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))
Avatar utente
feddy
Moderatore
Moderatore
 
Messaggio: 2941 di 5941
Iscritto il: 26/06/2016, 00:25
Località: SISSA


Torna a Analisi Numerica e Ricerca Operativa

Chi c’è in linea

Visitano il forum: Google [Bot] e 1 ospite