Численное интегрирование компактной функции на треугольнике


10

как следует из названия, я пытаюсь вычислить интеграл от компактно поддерживаемой функции (квинтический полином Вендланда) на треугольнике. Обратите внимание, что центр функции находится где-то в трехмерном пространстве. Я интегрирую эту функцию в произвольный, но маленький треугольник ( ). В настоящее время я использую интеграцию, описанную Dunavant, 1985 (p = 19).area<(radius/4)22

Однако представляется, что эти квадратурные правила не подходят для задач с компактной поддержкой. Это подтверждается тем фактом, что когда я интегрирую (то есть функцию, которая равна 1 внутри круга радиуса 1) на плоскости, которая дискретизируется с помощью треугольников, мои (нормализованные) результаты находятся между 1,001 и 0,897.f(r)=[r1]

Итак, мой вопрос: существует ли специальное квадратурное правило для такого рода проблем? Будет ли лучше работать составное правило интеграции низкого порядка?

К сожалению, эта процедура действительно важна в моем коде, поэтому точность имеет решающее значение. С другой стороны, мне нужно сделать эту интеграцию «пару раз» за один шаг по времени, чтобы вычислительные затраты не были слишком высокими. Распараллеливание не является проблемой, так как я выполню интеграцию сама по себе.

Заранее спасибо за ваши ответы.

РЕДАКТИРОВАТЬ: Quintic многочлен Вендланда дается с и где r_0 - произвольный вектор в \ mathbb {R} ^ 3W(q)=[q2]αh3(1q2)4(2q+1)α=2116πq=rr0hr0R3

РЕДАКТИРОВАТЬ 2: Если Δ является двумерным треугольником, то я хочу вычислить Δω(r)dr с ω(r)=W(rr0h) , Таким образом, q в W никогда не будет меньше 0. Обратите внимание, что интеграл является поверхностным интегралом по 2-D поверхности в R3

EDIT3: у меня есть аналитическое решение для 1-D (линия) проблемы. Вычисление одного для 2-D (треугольник) также возможно.


Не могли бы вы дать нам немного больше информации о функции, которую вы пытаетесь интегрировать? Это просто полином? Или кусочно-полином?
Педро

Отредактировано по запросу.
Azrael3000

Ответы:


4

Поскольку функция является гладкой в ​​пределах , но не имеет фиксированной степени (то есть в плоскости), я бы предложил использовать простую адаптивную схему, например правило трапеции с методом Ромберга , в обоих измерениях.q2

То есть, если ваш треугольник определен вершинами , и , и у вас есть подпрограмма, которая интегрируется вдоль линии от до , вы можете сделать следующее (в обозначениях Matlab):xyzR3romb(f,a,b)fab

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

В romb, не используйте фиксированное количество очков, но продолжает расти таблицы , пока разница между двумя последовательными диагоналями не ниже вашего требуемым допуском. Поскольку ваша функция гладкая, это должно быть хорошей оценкой ошибки.

Если части треугольника находятся за пределами области , вы можете попытаться соответствующим образом настроить пределы интегрирования в приведенном выше коде.W(q)

Возможно, это не самый эффективный в вычислительном отношении способ решения вашей проблемы, но адаптивность даст вам гораздо большую устойчивость, чем правило с фиксированной степенью.


Функция smmoth везде, кроме . Соседство этой точки вызывает проблемы. q=0
Арнольд Ноймайер,

Разложение на две 1-D задачи - неплохая идея. Потому что есть одна вещь, которую я тебе не сказал. У меня есть аналитическое решение в 1-D, так что я могу заменить внутренний ромб аналитической функцией. Я сделаю это уже +1
Azrael3000

@ArnoldNeumaier, извини, я не понимаю, как это возможно. Могли бы вы объяснить?
Педро

сглаживать как функцию от , но - негладкая функция от , и интегрирование по более , насколько я понял вопрос. Таким образом, составная функция является негладкой функцией от . qqrrr
Арнольд Neumaier

1
@Pedro Я реализовал это, и это работает как шарм. Мы также сегодня нашли аналитическое решение. Но это только для частного случая, который можно использовать для восстановления общего. Это означает, что нам нужно выполнить некоторую декомпозицию домена. Поскольку Ромберг сходится примерно за 4 шага, я думаю, что из-за этого это будет быстрее, чем использование аналитической формулы. И, согласно Википедии, мы можем добиться большего успеха, чем Ромберг, используя рациональные полиномы. Вы найдете свое имя в благодарностях моей следующей статьи :) Приветствия.
Azrael3000

2

Для хорошего обзора кубатурных правил см. "Р. Кулс, Энциклопедия кубатурных формул J. Сложность, 19: 445-453, 2003". Использование фиксированного правила может дать вам преимущество, заключающееся в том, что некоторые правила точно интегрируют полиномы (как гауссовская квадратура в одномерном случае).

Cools также является одним из основных авторов CUBPACK , программного пакета для числовой кубатуры.


Я думаю, что проблема здесь заключается в том, что функция является полиномом от , но является нелинейной функцией в пространственных координатах. Функция является сглаженной до края базисной функции, но не полиномиальной, за исключением осей. qq
Педро

Это правильно, Педро.
Azrael3000

Ах хорошо. моя ошибка. Извините.
GertVdE

2

Правила интегрирования предполагают, что функция локально хорошо аппроксимируется полиномом низкой степени. Ваша проблема не имеет ничего общего с компактной поддержкой. Компактно поддерживаемые радиальные базисные функции являются гладкими на границе опоры, и квадратурные правила вплоть до порядка гладкости могут использоваться без проблем. (Правила более высокого порядка не помогают; поэтому вам, вероятно, не следует использовать правило, которое точно интегрирует полиномы степени 5.)

В вашем случае неточность проистекает из того факта, что предположение о хорошей полиномиальной аппроксимируемости не выполняется в вашем случае для треугольников вблизи , даже если они не содержат .r0r0

W является гладкой как функция от , но является негладкой функцией от с градиентом, который становится бесконечным в пределе . Интеграция по , и составная функция является негладкой функцией .qqrrr0rr

Если треугольник не содержит , функция является но это не помогает, поскольку старшая производная очень быстро растет вблизи , а ошибка метода высокого порядка пропорциональна производной высокого порядка, следовательно, очень велика !r0Cinfr0

Простое решение состоит в том, чтобы разбить каждый треугольник T на число N_T из подтреугольников. Вы можете взять далеко от и близко к . Вы можете в автономном режиме выяснить, насколько большим должен быть для треугольников заданного диаметра и расстояния от чтобы достичь желаемой точности. Кроме того, вы должны использовать только формулы низкого порядка, близкие к .NT=1r0NT1r0NTr0r0

Поскольку вы интегрируете по треугольнику, но является 3-мерным, треугольник, очевидно, находится в .r0R3

Таким образом, более быстрое лекарство сведет в таблицу интеграл для в зависимости от координат треугольника (нормализуется поворотом его в двумерную плоскость , что одна вершина лежит на оси , и отражением его так, чтобы второй вершина лежит над ней). Эта таблица должна быть достаточно подробной, чтобы сделать линейную или квадратичную интерполяцию достаточно точной. Но вы можете использовать медленный метод, описанный первым, чтобы создать эту таблицу.r0=0xyx

Другой способ избавиться от этой проблемы - использовать компактную радиальную базисную функцию, которая является полиномом от а не . Это везде гладко и легко интегрируется.q2q


Я думаю, что есть небольшое недоразумение. Я обновил описание моего вопроса. На самом деле, интеграл никогда не может быть меньше 0. И не обязательно содержится в треугольнике. qr0
Azrael3000

Ваше новое дополнение не имеет смысла для меня. Если то должно быть и . Или вы интегрируете по двумерному треугольнику в ? - Я не предполагал, что находится в треугольнике. Я только добавил в подробности мой ответ. r0R3rR3r0
Арнольд Ноймайер

Да, правильно, что я интегрирую по двумерному треугольнику в . R3
Azrael3000
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.