Discussioni su Analisi Numerica e Ricerca Operativa

Regole del forum

Consulta il nostro regolamento e la guida per scrivere le formule
Rispondi al messaggio

Esercizio con la spline cubica

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.

Re: Esercizio con la spline cubica

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 ?"

Re: Esercizio con la spline cubica

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 )

Re: Esercizio con la spline cubica

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!!

Re: Esercizio con la spline cubica

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.

Re: Esercizio con la spline cubica

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!!

Re: Esercizio con la spline cubica

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

Re: Esercizio con la spline cubica

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

Re: Esercizio con la spline cubica

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
Rispondi al messaggio


Skuola.net News è una testata giornalistica iscritta al Registro degli Operatori della Comunicazione.
Registrazione: n° 20792 del 23/12/2010.
©2000— Skuola Network s.r.l. Tutti i diritti riservati. — P.I. 10404470014.