Повышение степени нелинейности как способ улучшения сходимости нелинейных задач
Как мы видели в статье “Наращивание нагрузки в нелинейных задачах“, можно использовать метод продолжения, чтобы наращивать нагрузку в задаче, начиная с ненагруженного состояния, для которого решение известно. Данный алгоритм был также полезен для понимания того, что происходит вблизи точки критической нагрузки. Однако, метод наращивания нагрузки будет работать не во всех случаях, или, по крайней мере, может быть неэффективным. В этом посте, мы рассмотрим идею наращивания нелинейностей в задаче для улучшения сходимости.
Пример Наращивания НелинейностиОпять рассмотрим систему показанную ниже: сила, приложенная к пружине с нелинейной жесткостью.
Мы видели, что можно решить эту задачу с помощью Метода Ньютона с релаксацией или методом продолжения с наращиванием нагрузки, для того чтобы обеспечить метод Ньютона хорошей стартовой позицией. Теперь мы изучим, как можно усилить нелинейность. Прежде всего, давайте посмотрим на функцию, описывающую баланс сил в нашем единственном узле, с другой стороны:
Можно переписать это выражение в более общем виде: f(u)=p-k(u)u где k(u) – нелинейнаяжесткость пружины. Теперь мы сможем решать несколько отличающуюся задачу с жесткостью, определенной как:
Другими словами, мы разделили функцию жесткости нашей пружины на две части — линейный член, k(u_0) , и нелинейный член, \left[ k(u) – k(u_0) \right] — и затем ввели дополнительный параметр, \beta ,который интерполирует жесткость между линейным и нелинейным случаем. Теперь применим тот же метод Ньютона, что и прежде, к решению серии задач с параметром \beta , нарастающим от нуля до единицы. То есть, мы используем метод продолжения для перехода от линейной задачи, простой для решения, к более сложной нелинейной задаче.
Следующим шагом применим, описанную технику решения, к нашему примеру. Изначальная жесткость нашей пружины, k(u)=\exp(u) , может быть представлена в виде:
Мы начнем с решения для \beta=0 и положим линейную жесткость пружины k(u)=\exp(u_0) , такчто теперь остается только выбрать точку линеаризации, u_0 . Для данного примера, при выборе u_0=0 , получим f(u,\beta=0)=2-\exp(0)u = 2-u . Вспомним наше обсуждение врешение линейных статических конечно-элементных задач, где мы выяснили, что решение линейной задачи всегда находится за одну итерацию Ньютона. Теперь будем наращивать параметр \beta , как показано:
Очевидно, что отталкиваясь от решения с \beta=0 , требуется очень малое число итераций по Ньютону, чтобы решить задачу с \beta=0.25 . Мы можем повторить эту процедуру с \beta=1 и, тем самым, перейти от линейного к полностью нелинейному случаю.
Этот метод привлекателен тем, что всегда можно найти решение линейной задачи, так что вы всегда можете решить задачу для \beta=0 . Вам остается только выбрать точку начальной линеаризации u_0 и какого типа усиливание(наращивание) нелинейности использовать.
Можно также использовать концепцию наращивания нелинейности в случае, когда нелинейные члены не являются непрерывно дифференцируемыми. Вспомним случай из блог-статьи по Решение Нелинейных Статических Конечно-Элементных Задач, систему с кусочно-непрерывной жесткостью пружины, k=0.5 для u\le1.8 , k=1 для 1.8<u<2.2 , и k=1.5 для u\ge2.2 ,которая приводит к функции баланса сил:
Как мы видели ранее, эта задача не решается методом Ньютона, за исключением случая, когда стартовая точка окажется внутри (очень малого) радиуса сходимости решения. Но заменим теперь оригинальную жесткость пружины на некоторую сглаженную функцию жесткости, которую можно наращивать как показано на рисунке ниже:
Очевидно, что эта проблема является разрешимой, и мы можем использовать данную методику для получения решения оригинальной задачи. Для использования данного метода требуется просто найти подходящую сглаживающую функцию и способ усиливания (наращивания) нелинейности.
Всякий раз, когда встречается задача с функциональной зависимостью ступенчатого (скачкообразного) типа (вида), показанного выше, стоит также попробовать нелинейный решатель по методу ломаных вместо метода Ньютона. Метод ломаных является решателем Trust Region (Доверительной области), который хорошо работает при решении задач, в которых метод Ньютона осциллирует между двумя различными областями. Хорошим физическим примером такого сорта является задача конструкционного контакта, где имеется скачкообразное изменение нагрузки между двумя объектами, приведенными в физический контакт.
Основные Выводы по Улучшению Сходимости Нелинейных ЗадачК настоящему моменту мы рассмотрели два метода для улучшения сходимости нелинейных задач: наращивание нагрузки и наращивание нелинейности. На практике, либо один либо оба метода могут быть использованы для решения, а, путем аккуратного подбора свойств материалов и нагрузок, возможно сочетание двух подходов. Очень трудно предсказать заранее, какой из методов сработает лучше, и каждая модель, над которой вы работаете, потребует определенного экспериментирования в смысле подбора способа наращивания нагрузки, наращивания нелинейности и выбора начального условия для линеаризации. Кроме этого, если вы ожидаете, что решение может осциллировать между двумя различными случаями, решатель по методу ломаных может подойти лучше, чем метод Ньютона. С ростом опыта, вы разовьете свою инженерную интуицию, каким образом лучше решать задачи, над которыми вы трудитесь.
Рассмотренная здесь техника решения часто хорошо работает с нелинейными статическими конечно-элементными задачами, когда затруднительно найти подходящие начальные условия, или с задачами, имеющими сильную нелинейность и/или разрывность в свойствах материалов. На практике, очень широкий класс задач охватывается этими подходами. Однако, вы также должны знать (понимать), что при решении нелинейных задач всегда могут возникать различные запутанные ситуации. Это следующая тема, которую мы затронем, так что следите за обновлениями.