Численное интегрирование функции со значениями, известными в заданном наборе точек (конечном и дискретном) по области, ограниченной дискретными точками?

Пусть D будет областью, ограниченной серией точек {x_i,y_i} (1‹=i‹=N). (Площадь не обязательно должна быть выпуклой, и предполагается, что точки идут вдоль граничной кривой.)

Пусть f — функция, определенная на D, но мы знаем только ее значения в заданном наборе точек (конечном и дискретном), скажем, {x'_i,y'_i,f(x'_i,y'_i)} (1‹= i‹=N'). (Данный набор данных не обязательно должен быть «плотным» в D.)

Как я могу выполнить числовое интегрирование f по D?

Вот что я думаю:
1) Сначала мы должны аппроксимировать границу D отрезками между этими сериями точек.
2) Затем мы должны сделать некоторую интерполяцию на заданном наборе данных. Однако двумерная интерполяция не всегда возможна. Тогда я застреваю.

Не могли бы вы помочь? Спасибо.


person Roun    schedule 17.05.2011    source источник


Ответы (2)


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

triangle_area * (val1 + val2 + val3) / 3.0

В то время как выпуклая триангуляция — это решаемая задача с помощью множества доступных инструментов (например, посмотрите qhull), невыпуклая триангуляция это намного сложнее. Во всяком случае, копание в этом направлении, вероятно, приведет вас к чему-то.

person Nico Schlömer    schedule 21.03.2017

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

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

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

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

person duffymo    schedule 17.05.2011
comment
Ну а значения функции на граничной кривой неизвестны. Можно ли сделать интеграл по контуру? - person Roun; 17.05.2011
comment
Э-э... интегрирование производится по площади, которая не является интегралом по контуру. А значения функции известны в некоторых внутренних точках области (не на границе). - person Roun; 18.05.2011