2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Быстрые методы интегрирования кусочнолинейных на прямоугольн
Сообщение01.10.2022, 23:33 


11/08/18
363
Добрый день,

у меня есть кусочнопостоянная или кусочнолинейная 2Д функция заданная на равномерной квадратной сетке.

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

Задача возникла из https://dxdy.ru/topic150880.html в которой я таки тем же изначальным алгоритмом, что и описывал, подкрутив у него параметры, научился получать сетку, но точность положения узлов получается очень не ахти (+/- пару пикселей). Попытки вызвать функции из OpenCL, которые уточняют сетку не привели к успеху, он просто отказывается работать с такими кривыми картинками. Поэтому мне нужен САБЖ.

Наверное мне хватит, чтобы функция была кусочно-постоянная, но хотелось бы все это в общем случае получить и для кусочно-линейной.

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

Сам вижу наивный метод. Ищем прямоугольник, в который попадает исходный четырехугольник, и в нем определяем все узлы сетки исходной функции. Далее для каждого узла вычисляем попадает ли он внутрь четырехугольника. Если все четыре узла кусочно-линейной или кусочно-постоянной функции оказались внутри, то считаем полностью этот элемент внутри и суммируем. Если все вне - не учитываем, если что-то есть, что-то нет - то считаем пересечение и считаем этот интеграл.

Но как-то большо крокодилисто получается и, требует довольно много вычислительной работы.

Скажите, пожалуйста, а есть ли какой-то метод по-проще?

Спасибо!

 Профиль  
                  
 
 Re: Быстрые методы интегрирования кусочнолинейных на прямоугольн
Сообщение03.10.2022, 12:04 
Заслуженный участник
Аватара пользователя


16/07/14
9201
Цюрих
Если вам нужны только производные по координатам вершин - то берете вершину, берете выходящее из неё ребро, идете по всем ячейкам сетки, которые это ребро пересекает, по каждому считаете производную (это делается аналитически), суммируете. Если ребро проходит через узел сетки, то функция, вообще говоря, получится недифференцируемой.

 Профиль  
                  
 
 Re: Быстрые методы интегрирования кусочнолинейных на прямоугольн
Сообщение03.10.2022, 13:32 


11/08/18
363
Спасибо, mihaild, за совет!
mihaild в сообщении #1566030 писал(а):
Если вам нужны только производные по координатам вершин - то берете вершину, берете выходящее из неё ребро, идете по всем ячейкам сетки, которые это ребро пересекает, по каждому считаете производную (это делается аналитически), суммируете. Если ребро проходит через узел сетки, то функция, вообще говоря, получится недифференцируемой.

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

Мне ведь производные нужны для квазиньютона, и хочется как-то или доаппроксимировать соседей и их использовать для вычисления производных, или еще что-то такое сделать. В голове крутится мысль представить каждый узел двухмерным Гауссом и считать производные на пересечении этого Гаусса с четырехугольником, но тогда сложность алгоритма подскочет ненормально.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group