Integrazione numerica della funzione supportata in modo compatto su un triangolo


10

come suggerisce il titolo, sto cercando di calcolare l'integrale di una funzione supportata in modo compatto (il polinomio quintico di Wendland) su un triangolo. Si noti che il centro della funzione si trova da qualche parte nello spazio 3D. Integra questa funzione su un triangolo arbitrario, ma piccolo ( area<(radius/4)22 ). Attualmente sto usando l'integrazione descritta da Dunavant, 1985 (p = 19).

Sembra tuttavia che queste regole di quadratura non siano adatte a problemi supportati in modo compatto. Ciò è supportato dal fatto che quando integro f(r)=[r1] (quindi una funzione che è 1 all'interno del cerchio del raggio 1) su un piano che viene discretizzato usando i triangoli, i miei risultati (normalizzati) sono tra 1.001 e 0.897.

Quindi la mia domanda è: esiste una regola di quadratura specializzata per questo tipo di problema? Una regola di integrazione composita di ordine inferiore funzionerebbe meglio?

Purtroppo questa routine è davvero fondamentale nel mio codice, quindi la precisione è cruciale. D'altro canto, devo fare questa integrazione "un paio di volte" per un singolo intervallo di tempo, quindi la spesa computazionale non dovrebbe essere troppo elevata. La parallelizzazione non è un problema in quanto eseguirò l'integrazione stessa in seriale.

Grazie in anticipo per le tue risposte.

EDIT: il polinomio quintico di Wendland è dato da W(q)=[q2]αh3(1q2)4(2q+1)conα=2116πq=rr0hr0R3

EDIT2: Se Δ è il triangolo bidimensionale, allora voglio calcolare Δω(r)dr con ω(r)=W(rr0h) . Quindi q in W non sarà mai più piccolo di 0. Nota che l'integrale è un integrale di superficie su una superficie 2D in R3

EDIT3: ho una soluzione analitica per il problema 1-D (linea). Anche il calcolo di uno per 2-D (triangolo) potrebbe essere possibile.


Potresti darci qualche dettaglio in più sulla funzione che stai cercando di integrare? È solo un polinomio? O un polinomio a tratti?
Pedro

Modificato come richiesto.
Azrael3000,

Risposte:


4

Dato che la funzione è liscia all'interno di , ma non di grado fisso (nel piano, cioè), suggerirei di utilizzare un semplice schema adattivo, ad esempio la Regola trapezoidale con il metodo di Romberg , in entrambe le dimensioni.q2

Cioè, se il triangolo è definito dal vertici , e , e si dispone di una routine che integra lungo la linea da a , si potrebbe procedere come segue (in Matlab notazione):xyzR3romb(f,a,b)fab

int = romb( @(xi) romb( W , xi , y+(z-y)*(xi-x)./(z-x) ) , x , z );

In romb, non utilizzare un numero fisso di punti, ma continua a far crescere la tabella fino a quando la differenza tra due diagonali successive è inferiore alla tolleranza richiesta. Poiché la tua funzione è fluida, questa dovrebbe essere una buona stima dell'errore.

Se parti del triangolo sono al di fuori del dominio di , è possibile provare a regolare di conseguenza i limiti di integrazione nel codice sopra.W(q)

Questo potrebbe non essere il modo più efficiente dal punto di vista computazionale di risolvere il tuo problema, ma l'adattabilità ti darà molta più robustezza di una regola a grado fisso.


La funzione è smmoth ovunque tranne . Il vicinato di questo punto sta causando il problema. q=0
Arnold Neumaier il

Ah, si decompone in due problemi 1-D, non è affatto una cattiva idea. Perché c'è una cosa che non ti ho detto. Ho una soluzione analitica in 1-D in modo da poter sostituire l'ombelico interno con una funzione analitica. Ci
proverò

@ArnoldNeumaier, mi dispiace, non vedo come sia possibile. Potresti spiegare?
Pedro

smooth in funzione di , ma è una funzione non smooth di , e l'integrazione è su , per quanto ho capito la domanda. La funzione composita è quindi una funzione non uniforme di . qqrrr
Arnold Neumaier il

1
@Pedro L'ho implementato e funziona come un fascino. Oggi abbiamo anche trovato una soluzione analitica. Ma questo è solo per un caso speciale che può essere usato per ricostruire quello generale. Ciò significa che dobbiamo fare una decomposizione del dominio. Poiché il Romberg converge in circa 4 passaggi, penso che per questo sarà più veloce dell'uso della formula analitica. E secondo Wikipedia possiamo fare ancora meglio di Romberg quando si usano polinomi razionali. Troverai il tuo nome nei ringraziamenti del mio prossimo articolo :) Saluti.
Azrael3000,

2

Per una buona panoramica delle regole della cubatura, vedere "R. Cools, un'enciclopedia di formule di cubatura J. Complexity, 19: 445-453, 2003". L'uso di una regola fissa può darti il ​​vantaggio che alcune regole integrano esattamente i polinomi (come fa la quadratura gaussiana in una dimensione).

Cools è anche uno dei principali autori di CUBPACK , un pacchetto software per la cubatura numerica.


Penso che il problema qui sia che la funzione è un polinomio di , ma è una funzione non lineare nelle coordinate spaziali. La funzione è liscia fino al bordo della funzione base, ma non polinomiale, tranne lungo gli assi. qq
Pedro

Questo è corretto Pedro.
Azrael3000,

Ah ok. errore mio. scusa.
GertVdE,

2

Le regole di integrazione presuppongono che la funzione sia localmente ben approssimata da un polinomio di basso grado. Il tuo problema non ha nulla a che fare con il supporto compatto. Le funzioni di base radiale supportate in modo compatto sono uniformi al limite del supporto e le regole di quadratura fino all'ordine di levigatezza possono essere utilizzate senza problemi. (Le regole di ordine superiore non aiutano; quindi probabilmente non dovresti usare una regola che integri esattamente i polinomi di grado 5).

Nel tuo caso, l'imprecisione deriva dal fatto che l'assunzione di una buona approssimabilità polinomiale fallisce nel tuo caso per i triangoli vicino a , anche quando non contengono .r0r0

W è liscia in funzione di , ma è una funzione non regolare di , con un gradiente che diventa infinito nel limite . L'integrazione è sopra e la funzione composita è una funzione non regolare di .qqrrr0rr

Se il triangolo non contiene , la funzione è ma ciò non aiuta poiché la derivata superiore cresce molto rapidamente vicino a e l'errore di un metodo di ordine elevato è proporzionale a una derivata di ordine alto, quindi molto grande !r0Cinfr0

Il semplice rimedio è di dividere ogni triangolo T in un numero N_T di sottotiangoli. Puoi prendere lontano da e vicino a . Puoi capire offline quanto grande deve essere per triangoli di un dato diametro e distanza da per raggiungere la precisione desiderata. Inoltre, dovresti usare solo formule di basso ordine vicine a .NT=1r0NT1r0NTr0r0

Quando ti integri su un triangolo, ma è tridimensionale, il triangolo è apparentemente in .r0R3

Un rimedio più veloce tabulerebbe quindi l'integrale per in funzione delle coordinate del triangolo (normalizzato ruotandolo in un piano bidimensionale in modo tale che un vertice si trovi sull'asse e riflettendolo in modo tale che un secondo il vertice si trova sopra di esso). Questa tabulazione deve essere sufficientemente dettagliata per rendere sufficientemente accurata un'interpolazione lineare o quadratica. Ma puoi usare prima il metodo lento descritto per creare questa tabella.r0=0xyx

Un altro modo per sbarazzarsi del problema è utilizzare una funzione di base radiale supportata in modo compatto che è un polinomio in anziché in . Questo è liscio ovunque e facile da integrare.q2q


Penso che ci sia un piccolo malinteso. Ho aggiornato la descrizione della mia domanda. È un dato di fatto, nell'integrale non può mai essere minore di 0. E non è necessariamente contenuto nel triangolo. qr0
Azrael3000,

La tua nuova aggiunta non ha senso per me. Se allora deve essere . Oppure ti integri su un triangolo 2D in ? - Non pensavo che fosse nel triangolo. Ho appena aggiunto in un momento più dettagli alla mia risposta. r0R3rR3r0
Arnold Neumaier il

Sì, è corretto che mi integri su un triangolo 2D in . R3
Azrael3000,
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.