Esercizio con la spline cubica

Messaggioda andreadel1988 » 19/07/2023, 15:45

Considera la funzione $f(x)=(sin(x)(cos(x))^2)/(1+x^2)$ con $x in[0,2pi]$ e considera la spline cubica not-a-knot che approssima $f$, per ogni $nin{3,5,7}$ approssima il più piccolo valore reale $x^**in[0,2pi]$ nel quale la spline cubica assume il valore $0.01$. La procedura non rigenera l'intera spline ogni volta che la stessa spline dev'essere valutata in un punto.

Allora il mio codice è questo:

Script:

Codice:
warning off
f=@(x)((sin(x).*(cos(x)).^2)./(1+x.^2));
alpha=0; beta=2*pi;
figure(1)
fplot(f,[alpha,beta],'r--')
title('Grafico f e splines')
xlabel('asse x')
ylabel('asse y')
hold on
pause
t=linspace(alpha,beta,10000)';
for n=[3 5 7]
    x=linspace(alpha,beta,n+1);
    s=spline(x,f(x),t);
    plot(t,s)
    legend('f','n=3','n=5','n=7')
    pause
    a=0;
    b=0.1;
    tolla=1e-8;
    tollr=0;
    tollf=1e-8;
    kmax=500;
    S=spline(x,f(x));
    [x_star]=bisezione(S,a,b,tolla,tollr,tollf,kmax);
    disp([n,x_star,abs(0.01-ppval(S,x_star)),abs(0.01-f(x_star))])
end


Funzione bisezione:

Codice:
function [x]=bisezione(S,a,b,tolla,tollr,tollf,kmax)
f_a=ppval(S,a)-0.01;
ind=-1;
for k=1:kmax
    x=(a+b)/2;
    y=ppval(S,x)-0.01;
    if abs(y)<=tollf, ind=2; return, end
    if b-a<= tolla+tollr*abs(a), ind=1; return, end
    if f_a*y<0
        b=x;
    else   
        a=x;
        f_a=y;
    end
end


il tutto funziona perfettamente, l'unico dubbio che mi viene è se ho rispettato effettivamente la condzione imposta nel problema, ovvero: "La procedura non rigenera l'intera spline ogni volta che la stessa spline dev'essere valutata in un punto."
Se qualcuno mi sa dire, grazie.
“E ora sono diventato la morte. Il distruttore di mondi” J. Robert Oppenheimer
andreadel1988
Senior Member
Senior Member
 
Messaggio: 886 di 1184
Iscritto il: 26/08/2022, 09:15

Re: Esercizio con la spline cubica

Messaggioda feddy » 19/07/2023, 23:06

Credo tu riesca a risponderti da solo. Le domande che ti devi fare sono: "Dove, nel codice, sto valutando in un punto? Sto rigenerando la spline per ogni punto in cui valuto ?"
Avatar utente
feddy
Moderatore
Moderatore
 
Messaggio: 3035 di 5934
Iscritto il: 26/06/2016, 00:25
Località: SISSA

Re: Esercizio con la spline cubica

Messaggioda andreadel1988 » 19/07/2023, 23:18

feddy ha scritto:Credo tu riesca a risponderti da solo. Le domande che ti devi fare sono: "Dove, nel codice, sto valutando in un punto? Sto rigenerando la spline per ogni punto in cui valuto ?"

Per me è giusto, dato che la spline la genero (tralasciando quella che uso per il grafico) prima, mentre la valuto nella funzione bisezione e nel display, dove non la rigenero. Poi uso ppval per valutarla, che mi prende la spline già presa se non erro, l'unico mio dubbio è che prima la genero per fare il grafico e dopo la rigenero per la seconda parte ed è come se l'avessi rigenerata due volte (per iterazione), anche se non per la valutazione. (ma probabilmente questa cosa non c'entra per niente con la richiesta e mi sto solo facendo venire un inutile dubbio ahahhahaah :-D )
“E ora sono diventato la morte. Il distruttore di mondi” J. Robert Oppenheimer
andreadel1988
Senior Member
Senior Member
 
Messaggio: 887 di 1184
Iscritto il: 26/08/2022, 09:15

Re: Esercizio con la spline cubica

Messaggioda andreadel1988 » 20/07/2023, 12:21

Vabbe comunque lo prendo come se fosse un si, ovvero che va bene come ho fatto, grazie mille dell'aiuto feddy!!
“E ora sono diventato la morte. Il distruttore di mondi” J. Robert Oppenheimer
andreadel1988
Senior Member
Senior Member
 
Messaggio: 888 di 1184
Iscritto il: 26/08/2022, 09:15

Re: Esercizio con la spline cubica

Messaggioda feddy » 20/07/2023, 20:13

Scusami ma siccome sono abbastanza occupato durante la giornata, non ho il tempo di rispondere al volo :-) In ogni caso, volevo che tu ti rispondessi da solo a questo problema non per pigrizia, ma perché sono domande semplici che ti permettono di acquisire sicurezza. Riuscire a ripercorrere quanto tu stesso hai scritto aiuta in primis te perché ti obbliga ad essere il primo revisore del tuo stesso lavoro. Avere dubbi va benissimo, non fraintedere!

Ad ogni modo, il testo dice:
Testo del problema ha scritto:La procedura non rigenera l'intera spline ogni volta che la stessa spline dev'essere valutata in un punto.


Tu hai poi notato:
andreadel1988 ha scritto:l'unico mio dubbio è che prima la genero per fare il grafico e dopo la rigenero per la seconda parte ed è come se l'avessi rigenerata due volte (per iterazione), anche se non per la valutazione.


Sei d'accordo che dalla parte in grassetto in nero segue logicamente che hai soddisfatto la richiesta? Il testo dice chiaramente che non va duplicata **per le valutazioni**. Tu, per le valutazioni, hai verificato che non l'hai duplicata.
Avatar utente
feddy
Moderatore
Moderatore
 
Messaggio: 3038 di 5934
Iscritto il: 26/06/2016, 00:25
Località: SISSA

Re: Esercizio con la spline cubica

Messaggioda andreadel1988 » 20/07/2023, 20:17

feddy ha scritto:Scusami ma siccome sono abbastanza occupato durante la giornata, non ho il tempo di rispondere al volo :-) In ogni caso, volevo che tu ti rispondessi da solo a questo problema non per pigrizia, ma perché sono domande semplici che ti permettono di acquisire sicurezza. Riuscire a ripercorrere quanto tu stesso hai scritto aiuta in primis te perché ti obbliga ad essere il primo revisore del tuo stesso lavoro. Avere dubbi va benissimo, non fraintedere!

Ad ogni modo, il testo dice:
Testo del problema ha scritto:La procedura non rigenera l'intera spline ogni volta che la stessa spline dev'essere valutata in un punto.


Tu hai poi notato:
andreadel1988 ha scritto:l'unico mio dubbio è che prima la genero per fare il grafico e dopo la rigenero per la seconda parte ed è come se l'avessi rigenerata due volte (per iterazione), anche se non per la valutazione.


Sei d'accordo che dalla parte in grassetto in nero segue logicamente che hai soddisfatto la richiesta? Il testo dice chiaramente che non va duplicata **per le valutazioni**. Tu, per le valutazioni, hai verificato che non l'hai duplicata.

Si si, infatti come ho detto era un dubbio stupido, l'unica altra cosa volevo sapere ma per mia ignoranza, effettivamente fare prima $S(x,f(x))$ per generare la spline (una sola volta per iterazione, come si vede dal codice) e poi usare $ppval(S,x)$ per valutare la spline non la ricrea da capo la spline giusto?, nel caso di documentarmi su queste cose mi consigli di fare help o di cercare da qualche parte, comunque grazie infinite dell'aiuto!!
“E ora sono diventato la morte. Il distruttore di mondi” J. Robert Oppenheimer
andreadel1988
Senior Member
Senior Member
 
Messaggio: 893 di 1184
Iscritto il: 26/08/2022, 09:15

Re: Esercizio con la spline cubica

Messaggioda feddy » 20/07/2023, 20:21

Non conosco cosa faccia MatLab. Come hai detto giustamente, va guardata la documentazione. In ogni caso, poiché come argomento della funzione c'è la spline stessa **dubito fortemente** che questa venga gettata via e all'interno della funzione vegna ricreata da capo, soprattutto perché questa funzione da sola non ha in input abbastanza dati per ricreare la spline
Avatar utente
feddy
Moderatore
Moderatore
 
Messaggio: 3039 di 5934
Iscritto il: 26/06/2016, 00:25
Località: SISSA

Re: Esercizio con la spline cubica

Messaggioda andreadel1988 » 20/07/2023, 20:25

feddy ha scritto:Non conosco cosa faccia MatLab. Come hai detto giustamente, va guardata la documentazione. In ogni caso, poiché come argomento della funzione c'è la spline stessa **dubito fortemente** che questa venga gettata via e all'interno della funzione vegna ricreata da capo, soprattutto perché questa funzione da sola non ha in input abbastanza dati per ricreare la spline

Beh si in effetti hai ragione, comunque provo a fare un help e mando qui cosa mi esce anche per renderti partecipe e farti forse anche imparare qualcosa di nuovo nel caso non sapessi ma soprattutto perchè mi hai aiutato
“E ora sono diventato la morte. Il distruttore di mondi” J. Robert Oppenheimer
andreadel1988
Senior Member
Senior Member
 
Messaggio: 894 di 1184
Iscritto il: 26/08/2022, 09:15

Re: Esercizio con la spline cubica

Messaggioda andreadel1988 » 20/07/2023, 20:31

questo è quello che mi esce se digito help spline:

spline - Cubic spline data interpolation
This MATLAB function returns a vector of interpolated values s
corresponding to the query points in xq.

Syntax
s = spline(x,y,xq)
pp = spline(x,y)

Input Arguments
x - x-coordinates
vector
y - Function values at x-coordinates
vector | matrix | array
xq - Query points
scalar | vector | matrix | array

Output Arguments
s - Interpolated values at query points
scalar | vector | matrix | array
pp - Piecewise polynomial
structure

mentre se digito ppval esce questo:

ppval - Evaluate piecewise polynomial
This MATLAB function evaluates the piecewise polynomial pp at the query
points xq.

Syntax
v = ppval(pp,xq)

Input Arguments
pp - Piecewise polynomial
structure
xq - Query points
vector | array

Output Arguments
v - Piecewise polynomial values at query points
vector | matrix | array
“E ora sono diventato la morte. Il distruttore di mondi” J. Robert Oppenheimer
andreadel1988
Senior Member
Senior Member
 
Messaggio: 895 di 1184
Iscritto il: 26/08/2022, 09:15


Torna a Analisi Numerica e Ricerca Operativa

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite