ilBacone
05-12-2006, 15:54
RAgazzi devo fare un'algoritmo di quadratura adattativa con formula rettangolare utilizzando la ricorsione.
Io ho scritto questo:
function [Qf,... E,n_val_f]=Adattativa_Rettangolare(f,ak,bk,a,b,tol,max_val
h = bk - ak;
Qfk = h * feval(f, ak);
mk = (bk + ak) / 2;
Qf1k = h/2 * feval(f, ak);
Qf2k = h/2 * feval(f, mk);
Q2f = Qf1k + Qf2k;
Ek = abs(Q2f - Qfk)/3;
n_val_f =n_val_f + 3;
if Ek <= tol | n_val_f > max_val
Qf =+ Q2f;
E =+ Ek;
else
[Qf, E,n_val_f]=Adattativa_Rettangolare(f,ak,mk,a,b,tol/2,max_val);
[Qf, E,n_val_f]=Adattativa_Rettangolare(f,mk,bk,a,b,tol/2,max_val);
end
************
Dove h è l'ampiezza dell'intervallo corrente
Qf1k la quadratura del sottointervallo di sinistra
Qf2k la quadratura del sottointervallo di destra
Q2f la somma delle quadrature dei sottointervalli
Ek l'errore di approssimazione a livello dell'intervallo corrente
n_val_f tiene conto delle valutazio feval fatte su f
if verifica se Ek si minore della tolleranza richiesta su quell'intervallo e se il numero di valutazioni su f è maggiore di quello consentito
Praticamente ogni volta che ricorre, però, non aggiorna le variabili di output sommandoci sopra i dati di tutti i sottointervalli accettati...
se togliete i punti e virgola nel richiamo della funzione all'interno dell'else si capisce meglio l'errore che nn so risolvere
HELPPPPPPPPPPPPPPPP
Io ho scritto questo:
function [Qf,... E,n_val_f]=Adattativa_Rettangolare(f,ak,bk,a,b,tol,max_val
h = bk - ak;
Qfk = h * feval(f, ak);
mk = (bk + ak) / 2;
Qf1k = h/2 * feval(f, ak);
Qf2k = h/2 * feval(f, mk);
Q2f = Qf1k + Qf2k;
Ek = abs(Q2f - Qfk)/3;
n_val_f =n_val_f + 3;
if Ek <= tol | n_val_f > max_val
Qf =+ Q2f;
E =+ Ek;
else
[Qf, E,n_val_f]=Adattativa_Rettangolare(f,ak,mk,a,b,tol/2,max_val);
[Qf, E,n_val_f]=Adattativa_Rettangolare(f,mk,bk,a,b,tol/2,max_val);
end
************
Dove h è l'ampiezza dell'intervallo corrente
Qf1k la quadratura del sottointervallo di sinistra
Qf2k la quadratura del sottointervallo di destra
Q2f la somma delle quadrature dei sottointervalli
Ek l'errore di approssimazione a livello dell'intervallo corrente
n_val_f tiene conto delle valutazio feval fatte su f
if verifica se Ek si minore della tolleranza richiesta su quell'intervallo e se il numero di valutazioni su f è maggiore di quello consentito
Praticamente ogni volta che ricorre, però, non aggiorna le variabili di output sommandoci sopra i dati di tutti i sottointervalli accettati...
se togliete i punti e virgola nel richiamo della funzione all'interno dell'else si capisce meglio l'errore che nn so risolvere
HELPPPPPPPPPPPPPPPP