Intégration numérique d'une intégrale multidimensionnelle avec des frontières connues

12

J'ai une intégrale incorrecte (bidimensionnelle)

I=AW(x,y)F(x,y)dxdy

où le domaine d'intégration est plus petit que , mais encore restreint par . Puisque et sont lisses etx = [ - 1 , 1 ] y = [ - 1 , 1 ] F ( x , y ) > 0 F W W 0 F ( x , y ) y x I W ( x , y )Ax=[1,1]y=[1,1]F(x,y)>0FWW0aux frontières, la relation ultérieure implique que l'intégrande peut être singulière aux frontières. L'intégande est cependant finie. Jusqu'à présent, je calcule cette intégrale avec l'intégration numérique imbriquée. C'est un succès mais lent. Je recherche une méthode plus appropriée (plus rapide) pour traiter l'intégrale, peut-être une méthode Monte-Carlo. Mais j'en ai besoin d'un qui ne mette pas de points sur la frontière du domaine non cubique A et qui prend correctement la limite de l'intégrale impropre. Une transformation intégrale peut-elle aider à cette expression générale? Notez que je peux résoudre pour en fonction de et même calculer pour quelques fonctions de pondération spéciales .F(x,y)yxIW(x,y)

highsciguy
la source
Pouvez-vous être un peu plus précis sur les méthodes que vous avez utilisées jusqu'à présent? Quelles routines spécifiques avez-vous utilisées de manière imbriquée? De plus, intérieur de , c'est-à-dire que les racines de uniquement sur la frontière? A F ( x , y )F(x,y)0AF(x,y)
Pedro
L'algorithme GSL QAGS: gnu.org/software/gsl/manual/html_node/… . Merci pour les modifications (je n'ai pas vu l'option de composition des équations)!
highsciguy

Réponses:

7

Avertissement: J'ai écrit ma thèse de doctorat sur la quadrature adaptative, donc cette réponse sera fortement biaisée vers mon propre travail.

Le QAGS de GSL est l'ancien intégrateur QUADPACK , et il n'est pas entièrement robuste, surtout en présence de singularités. Cela conduit généralement les utilisateurs à demander beaucoup plus de chiffres que nécessaire, ce qui rend l'intégration assez coûteuse.

Si vous utilisez GSL, vous voudrez peut-être essayer mon propre code, CQUAD , décrit dans cet article . Il est conçu pour faire face aux singularités, à la fois sur les bords d'intervalle et à l'intérieur du domaine. Notez que l'estimation d'erreur est assez robuste, ne demandez donc que le nombre de chiffres dont vous avez réellement besoin.

En ce qui concerne l'intégration Monte-Carlo, cela dépend du type de précision que vous recherchez. Je ne suis pas non plus sûr de la façon dont cela fonctionnera près des singularités.

Pedro
la source
Je vais certainement y jeter un œil car ce sera plus simple à mettre en œuvre. En fait, j'ai constaté que la routine QAGS n'était pas super stable pour ce problème.
highsciguy
Existe-t-il un moyen d'influencer l'occurrence de 'GSL_EDIVERGE'? Il semble apparaître pour certains paramètres.
highsciguy
@highsciguy: L'algorithme renvoie GSL_EDIVERGE lorsqu'il estime que l'intégrale n'est pas finie. Si vous pouviez me donner un exemple pour lequel il échoue, je pourrais l'examiner de plus près.
Pedro
C'est un peu difficile d'isoler une routine simple, car elle est intégrée dans un code générique pour les intégrales n-dimensinales. Je verrai ... Mais pour y fixe, 1 / sqrt (F (x, y)) devrait se comporter comme 1 / sqrt (x) lorsque x s'approche des zéros de F (x, y) puisque F (x, y) peut alors être écrit comme un polynôme en x. Mais il se pourrait que le comportement 1 / sqrt (x) démarre tard. Il se pourrait également que la précision numérique de l'intégrande ne soit pas trop bonne.
highsciguy
1
@highsciguy: Oui, c'est une mauvaise idée. La plupart des règles de quadrature supposent que l'intégrande a un certain degré de lissage, et si vous le mettez à zéro à partir d'un point arbitraire, vous introduisez une discontinuité. Vous obtiendrez de bien meilleurs résultats si vous utilisez l'intervalle réel!
Pedro
5

Les méthodes de Monte Carlo ne peuvent en général pas rivaliser avec la quadrature adaptative, sauf si vous avez une intégrale dimensionnelle élevée où vous ne pouvez pas vous permettre l'explosion combinatoire des points de quadrature avec la dimension.

[0,1]nf(x)dnxnMMnkN=(kM)nk(2k1)e=O(h5)=O(M(2k1))

e=O(N(2k1)/n).
e=O(N1/2)
k>n/4+1/2

k8n=30M=1N=830points d’intégration, bien plus que vous n’auriez pu le faire au cours d’une vie. En d'autres termes, tant que vous pouvez évaluer suffisamment de points d'intégration, la quadrature sur les subdivisions de votre domaine d'intégration est toujours l'approche la plus efficace. Ce sont des cas où vous avez une intégrale dimensionnelle élevée pour laquelle vous ne pouvez plus évaluer les points d'intégration sur une seule subdivision, même si les gens utilisent des méthodes de Monte Carlo malgré leur pire ordre de convergence.

Wolfgang Bangerth
la source
1

Essayez une quadrature double exponentielle imbriquée (voir les implémentations d' Ooura ). Cette technique utilise une transformation variable qui fait que l'intégrande transformée se comporte très bien aux frontières et est très efficace pour gérer les singularités à la frontière. Il y a aussi une très bonne liste de références sur la quadrature DE sur son site Internet.

GertVdE
la source