Какую числовую квадратуру выбрать, чтобы интегрировать функцию с особенностями?

9

Например, я хотел бы численно вычислить -норму в некоторой области, которая включает в себя ноль, я пробовал квадратуру Гаусса, и она терпит неудачу, она довольно далека от реальной нормы на единичном шаре с использованием сферических координат для интегрирования, есть ли какой-нибудь хороший способ сделать это? Эта проблема часто наблюдается в задачах с конечно-элементными вычислениями для областей с повторяющимися углами. Спасибо.L2Uзнак равно1(Икс2+Y2+Z2)1/3L2

Шухао Цао
источник
2
Если источник находится в области интеграции, могу ли я предложить разбить ваш интеграл и затем преобразовать каждый из них в сферические координаты?
JM
Я согласен с JM - если вы заранее знаете местонахождение и структуру особенностей, вам лучше использовать эту структурную информацию при написании обращений к своим квадратурным подпрограммам разумно, чем подавать ее в числовой пакет и надеяться, что (а) он находит особенности и (б) поступает правильно с ними.

Ответы:

8

Вы должны быть в состоянии получить точные результаты с помощью mpmath , модуля Python для вычислений с плавающей точкой произвольной точности. Есть примеры интеграции с особенностями в документации . Вы хотите явно указать это, чтобы разбить интервал:

from mpmath import *
f = lambda x,y,z: 1./(x**2+y**2+z**2)**1./3
quad(f,[-1,0,1],[-1,0,1],[-1,0,1])

Возможно, вам придется увеличить точность (например mp.dps=30), и она, вероятно, будет медленной, но должна быть достаточно точной.

Вы также можете попробовать вложить вызовы в MATLAB quadgk(), которые используют адаптивную квадратуру Гаусса-Кронрода в 1D.

Дэвид Кетчесон
источник