2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Метод конечных элементов. Ошибка аппроксимации.
Сообщение18.09.2024, 16:53 


17/10/16
4913
Изучаю метод конечных элементов (применительно к прочностному расчету). Со стержнями вопросов вроде нет. Начал изучать двумерные плоские треугольные элементы. Вот по этой методичке.
Вроде бы все понятно. Один треугольный элемент работает. Соединил между собой два таких треугольных элемента в квадрат (двумя разными способами) и попробовал пожамкать эту конструкцию. Вот что получилось:
Изображение
Синяя конструкция - не нагруженная. Красная - после нагружения. Черными стрелками показаны нагружающие силы в узлах (всегда равны друг-другу в каждом случае, если их две).Красные точки - жесткое крепление.
Если растягивать этот квадрат по диагонали, то без разницы, как именно квадрат сложен из треугольных элементов. Результат одинаковый.
Если закрепить два нижних узла и тянуть за верхние вверх, то заметен уже некоторый перекос, который зависит от метода разбиения квадрата на треугольники.
Если закрепить два нижних узла и сдавливать два верхних узла друг на друга, то перекос еще сильнее.

Похоже это на ошибку аппроксимации? Или больше похоже на ошибку расчета?

 Профиль  
                  
 
 Re: Метод конечных элементов. Ошибка аппроксимации.
Сообщение18.09.2024, 23:42 
Заслуженный участник
Аватара пользователя


28/07/09
1238
Интуитивно -- в третьем случае деформация с таким перекосом, как на любой из двух картинок, энергетически выгоднее зеркально симметричной деформации (трапеция с уменьшающейся верхушкой). Потому что площади треугольников будто меньше меняются.

Насчёт направления перекоса -- может одну из сил на пару процентов градусов сделать больше повернуть, ради теста? Будет реальная физическая асимметрия в постановке, это должно помочь в разбирательстве с вашим вопросом.

-- Ср сен 18, 2024 23:45:47 --

Legioner93 в сообщении #1655329 писал(а):
Интуитивно -- в третьем случае деформация с таким перекосом, как на любой из двух картинок, энергетически выгоднее зеркально симметричной


Если это утверждение верно для третьего, тогда оно верно и для второго случая.

-- Чт сен 19, 2024 00:03:57 --

Как если спичку "одномерно" сжать с двух сторон вдоль её оси -- она таки сломается уже в плоскости, выйдя из 1D. Допустим плоскость задана -- можете ли вы сказать, "вверх" или "вниз" она сломается? Не можете, потому что это стохастика.

А вот численная схема с анизотропией запросто решит эту дилемму. Примерно это я и вижу в ваших 2 и 3 случаях. Могу ошибаться.

-- Чт сен 19, 2024 00:05:41 --

Если со спичкой не получится, то со одной спагетти точно должно сработать :-)

 Профиль  
                  
 
 Re: Метод конечных элементов. Ошибка аппроксимации.
Сообщение19.09.2024, 15:20 


17/10/16
4913
Составил квадрат из 18 таких треугольников. Он ведет себя уже более симметрично при тех же нагрузках:
Изображение
Чтобы имитировать равномерную нагрузку на ребро, краевые силы должны быть вдвое меньше, чем "внутренние", как я понял. Я решил, что это все же была ошибка аппроксимации.

Legioner93 в сообщении #1655329 писал(а):
повернуть, ради теста?

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

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

 Профиль  
                  
 
 Re: Метод конечных элементов. Ошибка аппроксимации.
Сообщение19.09.2024, 17:28 
Заслуженный участник
Аватара пользователя


28/07/09
1238
sergey zhukov в сообщении #1655345 писал(а):
Если задать несимметричные силы, результат явно должен быть кривым (и так и получается). Отсюда ничего толком не поймешь.

Он одинаково кривой для обоих вариантов разрезания квадрата на два треугольника?

 Профиль  
                  
 
 Re: Метод конечных элементов. Ошибка аппроксимации.
Сообщение19.09.2024, 17:30 


17/10/16
4913
Legioner93
Нет, по разному кривой.

 Профиль  
                  
 
 Re: Метод конечных элементов. Ошибка аппроксимации.
Сообщение22.09.2024, 10:04 


27/08/16
10450
sergey zhukov в сообщении #1655272 писал(а):
Похоже это на ошибку аппроксимации?
Да, похоже на ошибку аппроксимации. В исходной задаче напряжения и смещения сконцентрированы в верхнем треугольнике. Ввиду симметрии, некоторые их компоненты, вроде смещения по вертикали, должны иметь экстремум посредине, то есть, быть существенно квадратичными. Но у вас линейные конечные элементы, аппроксимирующие всё кусочно-линейной функцией. В том числе, линейные функции и вдоль верхней грани. Как могут - так они и аппроксимируют параболу.

 Профиль  
                  
 
 Re: Метод конечных элементов. Ошибка аппроксимации.
Сообщение30.09.2024, 19:31 


17/10/16
4913
Попробовал покрутить более сложную конструкцию из ~110 треугольных элементов. Взял квадратную пластину и разбил ее на треугольники (синяя). Вот разные варианты расчета ее деформации под собственным весом при разных закреплениях по границам (со скольжением (зеленая) и жесткое крепление (черная линии)):
Изображение

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

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

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

Кстати, для решения системы уравнений деформаций я сначала использовал градиентный метод (в качестве целевой функции я взял сумму квадратов всех сил в узлах, которая должна быть равна нулю в равновесии). И он работал довольно необычно. Т.е. решение он находил, конечно, но его путь к этому решению выглядел контринтуитивно. Ты ожидаешь, что путь к решению будет выглядеть, как если бы к телу плавно прикладывали увеличивающуюся нагрузку (и метод типа "двигай узел в сторону действия силы" так примерно и двигается к решению). Но градиентный спуск делал нечто другое. Скажем, он не пытался переместить треугольный элемент, как единое целое, без деформаций, т.к. это не вело к изменению целевой функции. И если, скажем, закрепленное тело нагружается собственным весом, то градиентный метод вначале начинает "шевелить" треугольные элементы у закрепленного периметра, т.к. их невозможно двигать без деформации и они дают вклад в целевую функцию. Все остальные элементы далеко от заделки остаются неподвижными (пока "волна деформации" их не достигнет), хотя силы в их узлах действуют. В итоге тело двигается к конечному решению медленно и через какую-то странную последовательность непонятных изгибов, которые иногда выглядят совершенно не физично. Я даже вначале подумал, что расчет просто ошибочный.

 Профиль  
                  
 
 Re: Метод конечных элементов. Ошибка аппроксимации.
Сообщение03.10.2024, 13:50 


29/01/09
685
sergey zhukov в сообщении #1656807 писал(а):
. И он работал довольно необычно. Т.е. решение он находил, конечно, но его путь к этому решению выглядел контринтуитивно. Ты ожидаешь, что путь к решению будет выглядеть, как если бы к телу плавно прикладывали увеличивающуюся нагрузку (и метод типа "двигай узел в сторону действия силы" так примерно и двигается к решению). Но градиентный спуск делал нечто другое. Скажем, он не пытался переместить треугольный элемент, как единое целое, без деформаций, т.к. это не вело к изменению целевой функции. И если, скажем, закрепленное тело нагружается собственным весом, то градиентный метод вначале начинает "шевелить" треугольные элементы у закрепленного периметра, т.к. их невозможно двигать без деформации и они дают вклад в целевую функцию. Все остальные элементы далеко от заделки остаются неподвижными (пока "волна деформации" их не достигнет), хотя силы в их узлах действуют. В итоге тело двигается к конечному решению медленно и через какую-то странную последовательность непонятных изгибов, которые иногда выглядят совершенно не физично. Я даже вначале подумал, что расчет просто ошибочный.

ИМХО ... ваши проблемы по видимому связаны, что у вас целевая функция описывается некоторой квадратичной формой от случайных величин... ... Основная часть собственных значений- случайные числа с случайными собственными векторами (связанные с конкретным выбором сети аппроксимации). Только самые большие собственные значения хоть как-то описывают существенные физические корреляции - типа той о которой вы пишите... Стало быть для ускорения процесса вам нужно найти сначала собственные вектора с самыми большими значениями собственных чисел и провести по ним минимизацию, они будут давать значительный вклад в минимизацию целевой функцию. Увы не могу подсказать вам алгоритма как быстро найти (хотя бы приблизительно направление этих векторов, может кто другой подскажет)... Еще раз ИМХО... Посмотрите теорию случайных матриц, распределение Марченко-Пастура

ЗЫ

Снова ИМХО... А зачем вам уважаемый нужно решать все своими ручками... Есть куча прикладных пакетов и готовых солверов по теории упругости, строительному сопромату (Автокад, Комсол из того что быстро пришло на ум - на сайте lavteam и х десятки), где подобные проблемы решаются со встроенной эвристикой... Или вы пишите свой пакет?

 Профиль  
                  
 
 Re: Метод конечных элементов. Ошибка аппроксимации.
Сообщение04.10.2024, 10:04 


17/10/16
4913
pppppppo_98
Я просто хочу понять на простых примерах, как происходит расчет. Если понадобится посчитать что-то практическое, возьму CAD какой-нибудь.
Вот, кстати, разница между работой итерационных методов поиска решения. Пластина нагружена собственным весом и закреплена по вертикальному правому ребру. Так начинает поиск решения метод "Толкай узел в направлении силы":
Изображение
А так начинает поиск решения градиентный метод, целевая функция которого - сумма квадратов сил во всех узлах:
Изображение
Градиентный поиск выглядит довольно забавно. Глядя на этот путь решения я и подумал вначале, что с системой уравнений что-то не так.

 Профиль  
                  
 
 Re: Метод конечных элементов. Ошибка аппроксимации.
Сообщение04.10.2024, 11:44 
Заслуженный участник
Аватара пользователя


01/08/06
3136
Уфа
Для триангуляции можете попробовать библиотеку Triangle (на языке C). Древняя, но проверенная.

 Профиль  
                  
 
 Re: Метод конечных элементов. Ошибка аппроксимации.
Сообщение07.10.2024, 10:55 


29/01/09
685
sergey zhukov в сообщении #1657316 писал(а):
А так начинает поиск решения градиентный метод, целевая функция которого - сумма квадратов сил во всех узлах:

Целевая функция у вас тоже дрянная ... По хорошему надо минимизировать свободную энергию деформированного состояния - тоже квадратичная форма но с другими весами относительно деформаций.. . Книга бытия нумер 7 вам поможет...

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

Модераторы: photon, whiterussian, profrotter, Jnrty, Aer, Парджеттер, Eule_A, Супермодераторы



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

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


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

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