2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Вычисление частных производных
Сообщение09.07.2007, 05:48 


09/07/07
26
Кемерово
В Декартовой плоскости задано множество точек с координатами $(x_i,y_i)$ (частицы жидкости) и значения функции в них $u(x_i,y_i)$ и $v(x_i,y_i)$ ($(u,v)$ - вектор скорости). Необходимо численно посчитать значения производных $\frac{\partial}{\partial x}$ и $\frac{\partial}{\partial y}$ от функций $(u,v)$. Можно ли решить данную задачу с помощью аппроксимации функции сплайнами? В классических учебниках по сплайнам говорится о прямоугольном разбиении области (равномерном и не равномерном), а как быть в данном случае, когда точки накиданы произвольным образом? Если кто-то знает решение данной задачи, сообщите, пожалуйста.

 Профиль  
                  
 
 
Сообщение09.07.2007, 07:06 
Заслуженный участник
Аватара пользователя


11/04/07
1352
Москва
Вам необходимо провести разделение области на конечные ячейки (треугольники), так чтобы вершины ячеек были только в заданных Вами точках. После этого в каждой треугольной ячейке однозначно определяются градиенты скоростей на основе линейной интерполяции. Градиент скорости в заданных Вами точках определяются как среднее с весом площади всех ячеек, прилегающик к данной точке
$\frac {\partial} {\partial x}= \frac {\sum \limits _{i} \frac  {\partial} {\partial x}_i s_i} {\sum \limits _{i} S_i}
$\frac {\partial} {\partial y}= \frac {\sum \limits _{i} \frac  {\partial} {\partial y}_i s_i} {\sum \limits _{i} S_i}
Использование сплайновой интерполяции, например квадратичными полиномами, существенно усложнит алгоритм. Вам нужно будет построить интерполяцию в треугольниках, так чтобы сохранялась непрерывность производных на ребрах ячеек.

 Профиль  
                  
 
 
Сообщение09.07.2007, 10:14 


09/07/07
26
Кемерово
Zai писал(а):
Вам необходимо провести разделение области на конечные ячейки (треугольники), так чтобы вершины ячеек были только в заданных Вами точках. После этого в каждой треугольной ячейке однозначно определяются градиенты скоростей на основе линейной интерполяции. Градиент скорости в заданных Вами точках определяются как среднее с весом площади всех ячеек, прилегающик к данной точке
$\frac {\partial} {\partial x}= \frac {\sum \limits _{i} \frac  {\partial} {\partial x}_i s_i} {\sum \limits _{i} S_i}
$\frac {\partial} {\partial y}= \frac {\sum \limits _{i} \frac  {\partial} {\partial y}_i s_i} {\sum \limits _{i} S_i}
Использование сплайновой интерполяции, например квадратичными полиномами, существенно усложнит алгоритм. Вам нужно будет построить интерполяцию в треугольниках, так чтобы сохранялась непрерывность производных на ребрах ячеек.


Спасибо Вам за предложенный способ вычисления производных. Возникло несколько вопросов:
1) На сколько сильно точность вычисления данным способом будет зависеть от триангуляции области? При малом расстоянии между 2 частицами триангуляция будет плохой (очень острый угол появляется в треугольнике).
2) Под линейной интерполяцией понимается интерполяция как в методе конечных элементов вида $f=ax+by+c$? Тогда производная на элементе будет постоянной. И при вырожденном треугольном элементе
3) Данный способ позволяет считать производные только внутри области? А на границе?
4) Отличается ли по точности данный способ от аналогичного вычисления через теорему о среднем и формулу Грина?
5) Если можно, не подскажите ли ссылки на литературу, в которой бы описывался метод подсчета через сплайны.

 Профиль  
                  
 
 
Сообщение09.07.2007, 11:35 


13/09/05
153
Москва
На мой взгляд:
1. Сильно, так как при усреднении в качестве веса используются площади треугольников. Если к узлу прилегают треугольники с разными площадями, то значение градиента будет близко к значениям на треугольниках с большими площадями. Хотя максимальные значения внутри КЭ могут иметь место на треугольниках с малыми площадями. Здесь можно такде попробовать в качестве весовых коэф. использовать расстояние до центра масс треугольников.
2. При линейной интерполяции градиенты будуь постоянны внутри треугольника. Но вся суть предложенного Zai ранее метода в том, что мы переходим от постоянных градиентов внутри каждого треугольника к значениям градиентов в узлах. После этого можно опять-таки возпользоваться линейными полиномами для интерполяции градиентов внутри треугольников.
3. После того, как были найдены значения градиентов, можно воспользоваться линейной интерполяцией в пределах каждого треугольника, и таким образом можно вычислить значения градиентов в любых точках, в том числе и на границах.
4. Использование усреднения приводит к ошибкам, ИМХО применение т. Грина будет точнее.
5. Посмотрите литературу по определению градиентов в МКЭ -

Наиболее полные обзоры существующих методов можно найти в:
1. Omeragic D., Silvester P.P. Progress in differentiation of approximate data // IEEE Antennas and Propagation Magazine. – 1996. – Vol. 38, N 1, February.
2. Omeragic D., Silvester P.P. Numerical differentiation in magnetic field postprocessing // Int. J. Numer. Model. – 1996, N 9, P. 99 – 113.

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

 Профиль  
                  
 
 
Сообщение09.07.2007, 13:12 


09/07/07
26
Кемерово
VLarin писал(а):
На мой взгляд:
1. Сильно, так как при усреднении в качестве веса используются площади треугольников. Если к узлу прилегают треугольники с разными площадями, то значение градиента будет близко к значениям на треугольниках с большими площадями. Хотя максимальные значения внутри КЭ могут иметь место на треугольниках с малыми площадями. Здесь можно такде попробовать в качестве весовых коэф. использовать расстояние до центра масс треугольников.
2. При линейной интерполяции градиенты будуь постоянны внутри треугольника. Но вся суть предложенного Zai ранее метода в том, что мы переходим от постоянных градиентов внутри каждого треугольника к значениям градиентов в узлах. После этого можно опять-таки возпользоваться линейными полиномами для интерполяции градиентов внутри треугольников.
3. После того, как были найдены значения градиентов, можно воспользоваться линейной интерполяцией в пределах каждого треугольника, и таким образом можно вычислить значения градиентов в любых точках, в том числе и на границах.
4. Использование усреднения приводит к ошибкам, ИМХО применение т. Грина будет точнее.
5. Посмотрите литературу по определению градиентов в МКЭ -

Наиболее полные обзоры существующих методов можно найти в:
1. Omeragic D., Silvester P.P. Progress in differentiation of approximate data // IEEE Antennas and Propagation Magazine. – 1996. – Vol. 38, N 1, February.
2. Omeragic D., Silvester P.P. Numerical differentiation in magnetic field postprocessing // Int. J. Numer. Model. – 1996, N 9, P. 99 – 113.

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


Спасибо за ответ.
В том то и дело, что в области есть треугольная сетка (хотя местами очень плохая из-за того, что точки где-то сгустились), также есть диаграмма Вороного. Но вот что-то нет мыслей, как точно посчитать значение производных. Эти производные нужны для пересчета конвективного члена в уравнениях движения жидкости $u \frac{\partial u}{\partial x}$, $u \frac{\partial u}{\partial y}$, $v \frac{\partial v}{\partial x}$, $v \frac{\partial v}{\partial y}$. Причем считать его желательно как можно точнее. В связи с этим и возникла мысль об аппроксимации сплайнами, но не нашел способа, как аппроксимировать на плоскости по произвольно заданному набору точек.
А с границей все равно будут трудности, например, в угловой точке области (типа прямоугольника - просто для нее практически не будет соседей).
К сожаление, статей, указанных авторов, в открытой библиотеке не нашел. Попробую еще по МКЭ посмотреть.

 Профиль  
                  
 
 
Сообщение09.07.2007, 18:23 
Заслуженный участник
Аватара пользователя


11/04/07
1352
Москва
Судя по Вашим сообщениям, Вам нужно выбрать не только порядок аппроксимации, но и тип ячейки для аппроксимации не только частных производных но и конвективных членов. В настоящее время существуют достаточно хорошие и продвинутые генераторы сеток, в котоых нет проблем с использованием тех формул, которые я Вам привел. Повышение порядка аппроксимации характерно скорее для 80-х годов. В последующем времени достаточно очевидной была тенденция в использовании схем первого порядка при потребном уменьшении размеров ячеек. Конвективные члены вне сомения требуют более высокого порядка аппроксимации и здесь на треугольных ячеках Вы вряд ли получите что-то продвинутое. Лучше воспользоваться разбиением на четырехугольные ячейки. Это их роднит с прекрасно работающими конечно-разностными методами. Билинейная аппроксимация совместно с схемами типа Upwind даст Вам все необходимое для решения.

 Профиль  
                  
 
 
Сообщение10.07.2007, 05:15 


09/07/07
26
Кемерово
Zai писал(а):
Судя по Вашим сообщениям, Вам нужно выбрать не только порядок аппроксимации, но и тип ячейки для аппроксимации не только частных производных но и конвективных членов. В настоящее время существуют достаточно хорошие и продвинутые генераторы сеток, в котоых нет проблем с использованием тех формул, которые я Вам привел. Повышение порядка аппроксимации характерно скорее для 80-х годов. В последующем времени достаточно очевидной была тенденция в использовании схем первого порядка при потребном уменьшении размеров ячеек. Конвективные члены вне сомения требуют более высокого порядка аппроксимации и здесь на треугольных ячеках Вы вряд ли получите что-то продвинутое. Лучше воспользоваться разбиением на четырехугольные ячейки. Это их роднит с прекрасно работающими конечно-разностными методами. Билинейная аппроксимация совместно с схемами типа Upwind даст Вам все необходимое для решения.

В том то и дело, что с треугольными элементами не очень хорошо получается. Мы решаем нестационарные задачи лагранжевым условно бессеточным методом (сетка (диаграмма Вороного) нужна только для поиска соседей для построения функций формы), а в ходе решения без особых трудностей можем получить триангуляцию (не очень хорошую, т.к. следим за движением расчетных узлов - в следствии чего и не можем применить конечные разности). Строить какую-нибудь другую сетку не хочется, чужую программу брать тоже. Вот и хотелось бы на том что есть посчитать производные. Встречали работы, в которых вычисление производных производится через аппроксимацию сплайнами, но в этих работах только упоминается об этом, а как делать - вопрос. Вот и заострили свое внимание на сплайнах, может кто-нибудь что-нибудь делал. А на треугольниках, пожалуй, кроме Вами предложенного способа и через теоремы Грина и о среднем, больше ничего и нет. Классические книги по сплайнам (Завьялов, Квасов, Бур) применяют везде прямоугольную сетку, а нам нужно по произвольному набору точек, который получается после каждого шага по времени.

 Профиль  
                  
 
 
Сообщение10.07.2007, 07:34 
Заслуженный участник
Аватара пользователя


11/04/07
1352
Москва
Попробуйте квадратичную интерполяцию на треугольнике с промежуточными узлами. Узлов у Вас много и это вполне возможно.
$f(x,y)=a_{11}x^2+2a_{12}xy+a_{22}y^2+b_1x+b_2y+c
Шесть коэффициентов в квадратичной форме однозначно определяются по шести значениям скоростей. Такая интерполяция уже несколько десятилетий используется в МКЭ. В регулярной зоне она очень эффективна. На границе иногда бывает потеря аппроксимации. Вместе с тем Вам все равно необходимо усреднение по ячейкам. Данная квадратичная интерполяция дает непрерывность производной на ребре, насколько точно это я не знаю.

 Профиль  
                  
 
 
Сообщение10.07.2007, 08:32 


09/07/07
26
Кемерово
Zai писал(а):
Попробуйте квадратичную интерполяцию на треугольнике с промежуточными узлами. Узлов у Вас много и это вполне возможно.
$f(x,y)=a_{11}x^2+2a_{12}xy+a_{22}y^2+b_1x+b_2y+c
Шесть коэффициентов в квадратичной форме однозначно определяются по шести значениям скоростей. Такая интерполяция уже несколько десятилетий используется в МКЭ. В регулярной зоне она очень эффективна. На границе иногда бывает потеря аппроксимации. Вместе с тем Вам все равно необходимо усреднение по ячейкам. Данная квадратичная интерполяция дает непрерывность производной на ребре, насколько точно это я не знаю.

Спасибо за совет. Обязательно попробуем запрограммировать и сравнить с 2 предыдущими способами. Только вопрос возникает. Для аппроксимации нужно брать дополнительно по одной точке в центре ребра треугольника. Значение скорости в этой точке брать как среднее арифметическое по скорости на концах ребра? А затем действовать по алгоритму предложенному Вами ранее.

 Профиль  
                  
 
 
Сообщение10.07.2007, 09:17 
Заслуженный участник
Аватара пользователя


11/04/07
1352
Москва
Если Вы возьмете среднеарифметическое, то тогда это будет фиктивный узел и нитерполяция может дать только плоскость без квадратичных коэффициентов. Что нужно сделать, я не знаю. Может Вы модифицируете Ваш генератор сеток, так чтобы промежуточные точки все же находились. А можите просто ввести фиктивные промежуточные точки на предыдущем шаге интегрирования по времени и провести интегрирование по времени определяющих уравнений. Как бы у вас метод свободных точек с промежуточными полуэйлеровыми-полулагранжевыми точками.

 Профиль  
                  
 
 
Сообщение11.07.2007, 04:33 


09/07/07
26
Кемерово
И еще один вопрос возник. Как посчитать производную в узлах некоторой кривой (она может быть и прямой), если в них задана функция? По сути, задача таже самая, только вдоль некоторой линии. Есть алгоритм автора Longuet-Higgiens 5 порядка точности, но он работает для $\frac{\partial u}{\partial s}$. Когда граница горизонтальная или вертикальная прямая, то отлично работает. Не встречался ли кто-нибудь с подобной задачей?

 Профиль  
                  
 
 
Сообщение11.07.2007, 18:51 


13/09/05
153
Москва
Цитата:
В том то и дело, что в области есть треугольная сетка (хотя местами очень плохая из-за того, что точки где-то сгустились), также есть диаграмма Вороного. Но вот что-то нет мыслей, как точно посчитать значение производных. Эти производные нужны для пересчета конвективного члена в уравнениях движения жидкости , , , . Причем считать его желательно как можно точнее. В связи с этим и возникла мысль об аппроксимации сплайнами, но не нашел способа, как аппроксимировать на плоскости по произвольно заданному набору точек.
А с границей все равно будут трудности, например, в угловой точке области (типа прямоугольника - просто для нее практически не будет соседей).
К сожаление, статей, указанных авторов, в открытой библиотеке не нашел. Попробую еще по МКЭ посмотреть.


Ну тогда можно еще оригинал одного из метода посмотреть:
1. Zienkiewicz O.C., Zhu J.Z. The superconvergence patch recovery and a posteriori error estimates. Part 1: The recovery technique // Int. j. numer. methods eng. – 1992. – N 33, P. 1331–1364.
2. Zienkiewicz O.C., Zhu J.Z. The superconvergence patch recovery and a posteriori error estimates. Part 2: Error estimates and adaptivity // Int. j. numer. methods eng. – 1992. – N 33, P. 1365–1382.

Суть метода SPR-recovery собственно и ссводится к нахождения коэффициентов полинома, аппроксимирующего производную в некоторой окрестности (локальной области):)
Собственно, как я понял, ето Вам и требуется:)
А так - если у Вас есть только значения в узлах труегольников, то ето только 1 порядок аппроксимации, а ним ничего хорошего не сделаешь. Или определять изначально значения в промежутоных узлах, или итерационно (используя значения градиентов - где большие там дробим и вычисляем все для новой сетки) уменьшать сетку и может быть при малом шаге получите требуемую точность.

 Профиль  
                  
 
 
Сообщение12.07.2007, 05:38 


09/07/07
26
Кемерово
VLarin писал(а):
Цитата:
Ну тогда можно еще оригинал одного из метода посмотреть:
1. Zienkiewicz O.C., Zhu J.Z. The superconvergence patch recovery and a posteriori error estimates. Part 1: The recovery technique // Int. j. numer. methods eng. – 1992. – N 33, P. 1331–1364.
2. Zienkiewicz O.C., Zhu J.Z. The superconvergence patch recovery and a posteriori error estimates. Part 2: Error estimates and adaptivity // Int. j. numer. methods eng. – 1992. – N 33, P. 1365–1382.

Суть метода SPR-recovery собственно и ссводится к нахождения коэффициентов полинома, аппроксимирующего производную в некоторой окрестности (локальной области):)
Собственно, как я понял, ето Вам и требуется:)
А так - если у Вас есть только значения в узлах труегольников, то ето только 1 порядок аппроксимации, а ним ничего хорошего не сделаешь. Или определять изначально значения в промежутоных узлах, или итерационно (используя значения градиентов - где большие там дробим и вычисляем все для новой сетки) уменьшать сетку и может быть при малом шаге получите требуемую точность.


Спасибо за совет. К сожалению, не могу получить доступ к статьям Зенкевича (этот журнал закрыт с нашего логина на elibrary), а вот статью его соавтора Zhu J.Z. нашел "Superconvergence of The Derivative Patch Recovery Technique and A Posteriori Error Estimation". Поразбираюсь, возможно, это то, что нужно. Извините за нескромность, а Вы не могли бы выслать эти статьи по email?

 Профиль  
                  
 
 
Сообщение12.07.2007, 08:16 


13/09/05
153
Москва
sergeik писал(а):
Извините за нескромность, а Вы не могли бы выслать эти статьи по email?

Нет:(
Есть только Сильвестер, в виде ксерокопий и то на работе, а окажусь я там еще не скоро:(

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

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



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

Сейчас этот форум просматривают: ozheredov


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

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