Per dati disturbati o strutturati in modo preciso, esistono quadrature migliori della regola del punto medio?


12

Solo le prime due sezioni di questa lunga domanda sono essenziali. Gli altri sono solo a scopo illustrativo.

sfondo

Le quadrature avanzate come Newton – Cotes composito di grado superiore, Gauß – Legendre e Romberg sembrano essere destinate principalmente ai casi in cui è possibile campionare con precisione la funzione ma non integrarsi analiticamente. Tuttavia, per le funzioni con strutture più fini dell'intervallo di campionamento (vedere l'Appendice A per un esempio) o il rumore di misurazione, non possono competere con approcci semplici come il punto medio o la regola del trapezio (vedere l'Appendice B per una dimostrazione).

Ciò è alquanto intuitivo in quanto, ad esempio, la regola composita di Simpson essenzialmente "scarta" un quarto delle informazioni assegnandole un peso inferiore. L'unica ragione per cui tali quadrature sono migliori per funzioni sufficientemente noiose è che la corretta gestione degli effetti delle frontiere supera l'effetto delle informazioni scartate. Da un altro punto di vista, mi risulta intuitivamente chiaro che per funzioni con una struttura o un rumore fini, i campioni remoti dai confini del dominio di integrazione devono essere quasi equidistanti e avere quasi lo stesso peso (per un numero elevato di campioni ). D'altra parte, la quadratura di tali funzioni può beneficiare di una migliore gestione degli effetti dei bordi (rispetto al metodo del punto medio).

Domanda

Supponiamo che desidero integrare numericamente dati unidimensionali rumorosi o ben strutturati.

Il numero di punti di campionamento è fisso (a causa della costosa valutazione delle funzioni), ma posso posizionarli liberamente. Tuttavia, I (o il metodo) non è in grado di posizionare i punti di campionamento in modo interattivo, cioè sulla base dei risultati di altri punti di campionamento. Inoltre non conosco preventivamente potenziali regioni problematiche. Quindi, qualcosa come Gauß – Legendre (punti di campionamento non equidistanti) va bene; la quadratura adattativa non è poiché richiede punti di campionamento posizionati in modo interattivo.

  • Sono stati suggeriti metodi che vanno oltre il metodo del punto medio in questo caso?

  • Oppure: c'è qualche prova che il metodo del punto medio sia il migliore in tali condizioni?

  • Più in generale: esistono lavori su questo problema?

Appendice A: esempio specifico di una funzione strutturata con precisione

Vorrei stimare per: con e . Una funzione tipica è simile a questa:01f(t)dt

f(t)=i=1ksin(ωitφi)ωi,
φi[0,2π]logωi[1,1000]

seni sovrapposti

Ho scelto questa funzione per le seguenti proprietà:

  • Può essere integrato analiticamente per un risultato di controllo.
  • Ha una struttura fine a un livello che rende impossibile catturare tutto con il numero di campioni che sto usando ( ).<102
  • Non è dominato dalla sua struttura fine.

Appendice B: benchmark

Per completezza, ecco un punto di riferimento in Python:

import numpy as np
from numpy.random import uniform
from scipy.integrate import simps, trapz, romb, fixed_quad

begin = 0
end   = 1

def generate_f(k,low_freq,high_freq):
    ω = 2**uniform(np.log2(low_freq),np.log2(high_freq),k)
    φ = uniform(0,2*np.pi,k)
    g = lambda t,ω,φ: np.sin(ω*t-φ)/ω
    G = lambda t,ω,φ: np.cos(ω*t-φ)/ω**2
    f = lambda t: sum( g(t,ω[i],φ[i]) for i in range(k) )
    control = sum( G(begin,ω[i],φ[i])-G(end,ω[i],φ[i]) for i in range(k) )
    return control,f

def midpoint(f,n):
    midpoints = np.linspace(begin,end,2*n+1)[1::2]
    assert len(midpoints)==n
    return np.mean(f(midpoints))*(n-1)

def evaluate(n,control,f):
    """
    returns the relative errors when integrating f with n evaluations
    for several numerical integration methods.
    """
    times = np.linspace(begin,end,n)
    values = f(times)
    results = [
            midpoint(f,n),
            trapz(values),
            simps(values),
            romb (values),
            fixed_quad(f,begin,end,n=n)[0]*(n-1),
        ]

    return [
            abs((result/(n-1)-control)/control)
            for result in results
        ]

method_names = ["midpoint","trapezoid","Simpson","Romberg","Gauß–Legendre"]

def med(data):
    medians = np.median(np.vstack(data),axis=0)
    for median,name in zip(medians,method_names):
        print(f"{median:.3e}   {name}")

print("superimposed sines")
med(evaluate(33,*generate_f(10,1,1000)) for _ in range(100000))

print("superimposed low-frequency sines (control)")
med(evaluate(33,*generate_f(10,0.5,1.5)) for _ in range(100000))

(Qui uso la mediana per ridurre l'influenza degli outlier dovuti a funzioni che hanno solo un contenuto ad alta frequenza. In media, i risultati sono simili.)

Le mediane dei relativi errori di integrazione sono:

superimposed sines
6.301e-04   midpoint
8.984e-04   trapezoid
1.158e-03   Simpson
1.537e-03   Romberg
1.862e-03   Gauß–Legendre

superimposed low-frequency sines (control)
2.790e-05   midpoint
5.933e-05   trapezoid
5.107e-09   Simpson
3.573e-16   Romberg
3.659e-16   Gauß–Legendre

Nota: dopo due mesi e una taglia senza risultato, l' ho pubblicato su MathOverflow .


È questo il tipo di problema a cui sei veramente interessato? In 1D, puoi probabilmente ottenere buoni risultati piuttosto rapidamente con la maggior parte dei metodi.
David Ketcheson,

"Ho un numero fisso di punti di campionamento e posso posizionarli liberamente. Tuttavia, non posso posizionare i punti di campionamento in modo interattivo, cioè sulla base dei risultati di altri punti di campionamento." Questa restrizione non mi è chiara. Sono autorizzato a mettere i nodi dove li metterebbe un algoritmo adattivo, purché io sia davvero intelligente (invece di utilizzare effettivamente l'algoritmo adattivo)? Se non mi è permesso essere "davvero intelligente" al riguardo, che tipo di posizionamenti dei nodi sono effettivamente consentiti?
David Ketcheson,

@DavidKetcheson: è questo il tipo di problema a cui sei veramente interessato? - Sì, sono davvero interessato a 1D. - In 1D, probabilmente puoi ottenere buoni risultati piuttosto rapidamente con la maggior parte dei metodi. - Ricorda che la valutazione delle funzioni può essere costosa. - allora che tipo di posizionamenti dei nodi sono effettivamente consentiti? - Ho modificato la mia domanda sperando di renderlo più chiaro.
Wrzlprmft,

Grazie che aiuta. Per me, la domanda sembra ancora vaga. Penso che ci sia una domanda semplice e più precisa che sarebbe più rispondente. Richiederebbe la definizione di un set di funzioni (che potrebbe dipendere dal numero consentito di nodi di quadratura) e una metrica. Quindi potresti chiedere se il metodo del punto medio è ottimale in quella metrica rispetto a quell'insieme di funzioni (dove presumibilmente lo stesso insieme di nodi deve essere usato per quadrare tutte le funzioni).
David Ketcheson,

1
@DavidKetcheson: richiederebbe la definizione di un set di funzioni (che potrebbe dipendere dal numero consentito di nodi di quadratura) e una metrica. - Dato che finora non ho trovato nulla di utile su questo argomento, non vedo alcun motivo per imporre tali restrizioni. Piuttosto, con tali restrizioni, rischierei di escludere alcuni lavori esistenti (o prove facili) per condizioni o ipotesi leggermente diverse. Se ci sono modi per catturare lo scenario rappresentato in definizioni e simili per i quali esiste un lavoro di riferimento o una prova semplice, ne sono felice.
Wrzlprmft,

Risposte:


1

Prima di tutto, penso che tu fraintenda il concetto di quadratura adattativa. La quadratura adattativa non implica "il posizionamento interattivo di punti campione". L'idea alla base della quadratura adattativa è quella di escogitare uno schema che integri una certa funzione in un certo errore (stimato) assoluto o relativo con il minor numero possibile di valutazioni delle funzioni.

Una seconda osservazione: scrivi "Il numero di punti di campionamento è fisso (a causa della costosa valutazione delle funzioni), ma posso posizionarli liberamente". Penso che l'idea dovrebbe essere che il numero di punti di campionamento (o valutazioni di funzioni nella terminologia di quadratura) dovrebbe essere il più piccolo possibile (cioè non fisso).

Allora, qual è l'idea alla base della quadratura adattativa implementata in QUADPACK, ad esempio?

  1. L'ingrediente di base è una regola di quadratura "nidificata": si tratta di una combinazione di due regole di quadratura in cui una ha un ordine (o precisione) più elevato dell'altra. Perché? Sulla base della differenza tra queste regole, l'algoritmo può stimare l'errore di quadratura (ovviamente l'algoritmo utilizzerà quello più preciso come risultato di riferimento). Esempi potrebbero essere la regola trapezoidale con nodi e nodi. Nel caso di QUADPACK, le regole sono regole di Gauss-Kronrod. Queste sono regole di quadratura interpolatorie che usano una regola di quadratura di Gauss-Legendre di un certo ordine2n2n+1Ne un'estensione ottimale di questa regola. Ciò significa che è possibile ottenere un ordine di quadratura superiore riutilizzando i nodi Gauss-Legendre (ovvero le costose valutazioni delle funzioni) con pesi diversi e aggiungendo un numero di nodi extra. In altre parole, la regola originale di Gauss-Legendre dell'ordine integrerà tutti i polinomi di grado proprio mentre il prolungato regola di Gauss-Kronrod integrerà alcune polinomiale di ordine superiore esattamente. Una regola classica è il G7K15 (Gauss-Legendre del 7 ° ordine con Gauss-Kronrod del 15 ° ordine). La magia è che i 7 nodi di Gauss-Legendre sono un sottoinsieme dei 15 nodi di Gauss-Kronrod, quindi con 15 valutazioni delle funzioni, ho una valutazione in quadratura insieme a una stima dell'errore!N2N1

  2. Il prossimo ingrediente è una strategia di "dividi e conquista". Supponiamo di aver lasciato perdere questo G7K15 sul tuo integrando e di osservare un errore di quadratura che secondo i tuoi gusti è troppo grande. QUADPACK suddivide quindi l'intervallo originale in due sottointervalli equidistanti. E quindi rivaluterà i due sottointegrali usando la regola di base, G7K15. Ora, l'algoritmo ha una stima dell'errore globale (che dovrebbe essere più bassa della prima) ma anche due stime dell'errore locale. Seleziona l'intervallo con l'errore più grande e lo divide in due. Vengono stimati due nuovi integrali e l'errore globale viene aggiornato. E così via fino a quando l'errore globale è inferiore all'obiettivo richiesto o non è stato superato il numero massimo di suddivisioni.

Quindi ti sfido ad aggiornare il codice sopra usando il scipy.quadmetodo. Forse nel caso di un integrando con molta "struttura fine", potrebbe essere necessario aumentare il numero massimo di suddivisioni ( limitopzione). Puoi anche giocare con i parametri epsabse / o epsrel.

Tuttavia, se hai solo dati sperimentali, vedo due possibilità.

  1. Se hai l'opportunità di selezionare i punti di misurazione, cioè i valori di , li selezionerei equidistanicamente e preferibilmente come una potenza di modo da poter applicare una regola trapezoidale annidata (e trarre profitto dall'estrapolazione di Romberg).t2
  2. Se non hai modo di scegliere i nodi, ovvero le misure arrivano in momenti casuali, la migliore opzione secondo me è ancora la regola del trapezio.

Penso che tu fraintenda il concetto di quadratura adattativa. - Il tuo post concorda completamente con la mia precedente comprensione della quadratura adattativa ed è una chiara corrispondenza per il modo in cui ho definito il posizionamento interattivo dei punti di campionamento (che sia una frase appropriata o meno). - scrivi […]. Penso che l'idea dovrebbe essere che il numero di punti di campionamento […] dovrebbe essere il più piccolo possibile (cioè non fisso). - Se hai quel lusso, certo, ma i vincoli sperimentali potrebbero non essere così benigni. Ad esempio, supponiamo di dover misurare qualcosa contemporaneamente con un numero fisso di sensori costosi.
Wrzlprmft,

Mie scuse. Ho frainteso "interattivamente" nella tua domanda. Nella mia comprensione "interattivamente" significa l'intervento dell'utente non mediante un algoritmo. Ho aggiunto un paragrafo nella mia risposta sui dati sperimentali. Un altro approccio sarebbe quello di "filtrare" le informazioni sulla struttura fine, vale a dire applicare una trasformata di Fourier e rimuovere le frequenze di alto ordine con ampiezze ridotte. Sarebbe un'opzione?
GertVdE,

Se hai la possibilità di selezionare i punti di misurazione […] - I punti equidistanti sono comunque ciò di cui ho bisogno per il punto medio, il trapezio semplice, ecc., Quindi questo è esattamente ciò che ho fatto nel mio benchmark. Qui, l'estrapolazione Romberg non offre alcun vantaggio.
Wrzlprmft,

Un altro approccio sarebbe quello di "filtrare" le informazioni sulla struttura fine [...] Sarebbe un'opzione? - Nel mio esempio, suppongo che la struttura fine sia parte di ciò che voglio misurare, semplicemente non ho abbastanza campioni per catturarlo completamente. Per quanto riguarda il rumore reale, non ci sono vincoli tecnici che mi impediscono di filtrare. Tuttavia, l'integrale sull'intero dominio è già l'ultimo filtro passa-basso, quindi sono scettico sul fatto che ciò possa essere migliorato senza avere disturbi con proprietà specifiche, benigne e note.
Wrzlprmft,

È veramente stocastico? Devono esserci alcuni derivati ​​che sono approssimazioni stocastiche di ordine superiore.
Chris Rackauckas,

0

Non sono convinto che il tuo codice dimostri qualcosa di fondamentale riguardo alle varie regole di quadratura e quanto bene facciano contro il rumore e la struttura fine, e credo sia probabile che se tu scegliessi varie strutture diverse per le multe troverai qualcosa di diverso. Ecco il teorema:

Nessun metodo di quadratura può dare un errore assoluto o relativo basso rispetto a una funzione con variazione totale illimitata. In un sistema a virgola mobile con arrotondamento unità , abbiamo la stimaμ dove è la somma in quadratura che agisce sull'implementazione numerica di .

|abfdxQ^[f^]||abfdxQ[f]|+μ[4ab|f|dx+ab|xf|dx]
Q^f^f

Prova: lascia che i nodi di quadratura siano e che i pesi di quadratura (non negativi) siano e denotano le loro approssimazioni in virgola mobile di e . Supponiamo che soddisfi dove dove è il roundoff dell'unità. Poi {xi}i=0n1{wi}i=0n1w^ix^if^f^(x)=f(x)(1+2δ)|δ|μμ

Q^[f^]=i=0n1w^if^(x^i)=i=0n1wi(1+δiw)f(xi+δixxi)(1+2δif)(1+δi)i=0n1wi[f(xi)+δixxif(xi)](1+δiw+2δif+δi)i=0n1wif(xi)+i=0n1δixwixif(xi)+wif(xi)(δiw+2δif+δi)
modo che Questo presuppone che la somma sia calcolata senza errori; moltiplicare per per eliminare tale presupposto.
|Q^[f^]Q[f]|μi=0n1wi(|xif(xi)|+4|f(xi)|)4μ|f|dx+μ|xf|dx
n

Mutatis mutandis puoi anche dimostrare che il risultato è valido in aritmetica in virgola fissa.


Grazie per la tua risposta Ho un po 'di problemi a capire lo scenario che stai prendendo in considerazione e come si collega alla mia domanda. Cosa intendi per variazione totale illimitata in virgola mobile? A meno che non mi sbagli di grosso, tutti i miei risultati computazionali (tranne il caso di controllo con Romberg e Gauß – Legendre) sono lungi dall'essere influenzati dalle inesattezze dell'implementazione aritmetica (virgola mobile o punto fisso). Anche il rumore che sto prendendo in considerazione non è di natura numerica, ma sperimentale.
Wrzlprmft

@Wrzlprmft: il virgola mobile è il risultato che sono stato in grado di dimostrare. Posso anche dimostrarlo in un punto fisso, che indica quindi che il risultato vale per i dati sperimentali. Credo che sia vero per qualsiasi fonte di errore nei nodi di quadratura. Ho modificato per chiarire.
user14717

Per i dati sperimentali, il risultato è molto più convincente perché in generale i dati sperimentali non sono differenziabili e quindi la variazione totale è infinita.
user14717

Mi dispiace, ma non riesco ancora a seguirti. Il tuo risultato sembra riguardare l'errore commesso durante l'implementazione numerica della quadratura, non l'errore della quadratura stessa. Il problema che sto riscontrando riguarda quest'ultimo e, in particolare, non vedo alcun motivo per credere che non si manifesterebbe per . μ=0
Wrzlprmft

L'idea principale qui deriva dal numero di condizioni della valutazione della funzione. Le tue valutazioni sono mal condizionate poiché rumorose.
user14717
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.