No Image

Явная схема решения уравнения теплопроводности

СОДЕРЖАНИЕ
0 просмотров
22 января 2020

Используя шаблон для каждого внутреннего узла области решения апроксимируется уравнение теплопроводности

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

Затем с помощью соотношений

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

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

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

Поэтому рассматриваемая разностная схема, использующая этот шаблон, называется явной разностной схемой. Точность её имеет порядок .

Данная разностная схема проста в использовании, однако она обладает существенным недостатком. Оказывается, что явная разностная схема обладает устойчивым решением только в том случае, если выполняется условие:

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

Рассмотрим разностную схему, использующую другой шаблон

Неявная разностная схема для уравнения теплопроводности.

Подставим в уравнение теплопроводности:

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

Схема решения задачи следующая:

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

Отличие от явной схемы — значения на очередном временном уровне вычисляются не непосредственно с помощью готовой формулы, а находится путем решения системы уравнений, т.е. значения неизвестных находятся неявно путем решения СЛАУ. Поэтому разностная схема называется неявной. В отличие от явной неявная является абсолютно устойчивой.

Тема №9 Задачи оптимизации.

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

Количественная оценка решения производится с помощью некоторой функции зависящей от проектных параметров. Эта функция называется целевой. Она строится таким образом, чтобы наиболее оптимальное значение соответствовало максимуму(минимуму).

— целевая функция.

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

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

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

Теория и методы решения задач оптимизации при наличии ограничений составляют предмет исследований одного из разделов прикладной математики – математического программирования.

Читайте также:  Что не используют для измерения объемов памяти

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

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

В общем случае для нахождения решения применяют различные методы поиска. В результате происходит сужение отрезка содержащего оптимальное решение.

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

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

То есть, делаем пока выполняется (*)

При этом производится вычислений целевой функции.

Требуется найти такое значение, чтобы выражение (*) было получено при наименьшем

числе вычислений .

Привет, Хабр! Некоторое время назад увлекся глубоким обучением и стал потихоньку изучать tensorflow. Пока копался в tensorflow вспомнил про свою курсовую по параллельному программированию, которую делал в том году на 4 курсе университета. Задание там формулировалось так:

Линейная начально-краевая задача для двумерного уравнения теплопроводности:

Хотя правильнее было бы назвать это уравнением диффузии.

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

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

Численный алгоритм

Разностная схема:

Чтобы проще было расписывать, введем операторы:

Явная разностная схема:

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

Неявная разностная схема:

Перенесем в левую сторону все связанное с , а в правую и домножим на :

По сути мы получили операторное уравнение над сеткой:

что, если записать значения в узлах сетки как обычный вектор, является обычной системой линейных уравнений (). Значения в предыдущий момент времени константы, так как уже рассчитаны.
Для удобства представим оператор как разность двух операторов:

Заменив на нашу оценку , запишем функционал ошибки:

где — ошибка в узлах сетки.

Будем итерационно минимизировать функционал ошибки, используя градиент.

В итоге задача свелась к перемножению тензоров и градиентному спуску, а это именно то, для чего tensorflow и был задуман.

Реализация на tensorflow

Кратко о tensorflow

В tensorflow сначала строится граф вычислений. Ресурсы под граф выделяются внутри tf.Session. Узлы графа — это операции над данными. Ячейками для входных данных в граф служат tf.placeholder. Чтобы выполнить граф, надо у объекта сессии запустить метод run, передав в него интересующую операцию и входные данные для плейсхолдеров. Метод run вернет результат выполнения операции, а также может изменить значения внутри tf.Variable в рамках сессии.

Читайте также:  Топ лучших интернет провайдеров

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

Сначала код инициализации. Здесь производим все предварительные операции и считаем все, что можно посчитать заранее.

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

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

Вычисление функции: в каждый момент времени делаем несколько оптимизационных итераций, пока не превысим maxiter или ошибка не станет меньше eps, сохраняем и переходим к следующему моменту.

Запуск:

Результаты


Условие как и оригинальное, но без в уравнении:

Что легко правится в коде:

Разницы почти нет, потому что производные имеют большие порядки, чем сама функция.


Условие с одним нагревающимся краем:


Условие с остыванием изначально нагретой области:


Условие с включением нагрева в области:


Рисование гифок

Функция рисования 3D-гифки:

В основной класс добавляем метод, возвращающий U в виде pandas.DataFrame

Функция рисования 2D-гифки:

Стоит отметить, что оригинальное условие без использования GPU считалось 4м 26с, а с использованием GPU 2м 11с. При больших значениях точек разрыв растет. Однако не все операции в полученном графе GPU-совместимы.

  • Intel Core i7 6700HQ 2600 МГц,
  • NVIDIA GeForce GTX 960M.

Посмотреть, какие операции на чем выполняются, можно с помощью следующего кода:

Это был интересный опыт. Tensorflow неплохо показал себя для этой задачи. Может быть даже такой подход получит какое-то применение — всяко приятнее писать код на питоне, чем на C/C++, а с развитием tensorflow станет еще проще.

Ранее (см. разд. 2.1.2, 2.1.3) уже были построены и исследованы разностные схемы решения смешанной задачи для одномерного уравнения теплопроводности:

(2.75)

Были получены две двухслойные схемы — явная (2.3) и неявная (2.4). В явной схеме значения сеточной функции на верхнем (j + 1)-ом слое вычисляли с помощью решения на нижнем слое [соотношение (2.13)]. Для нахождения решения на (j + 1)-м слое по неявной схеме была получена трехдиагональная система линейных алгебраических уравнений (2.22), которую решают методом прогонки.

Неявная схема безусловно устойчива, явная схема устойчива при выполнении условия

Обе схемы сходятся к решению исходной задачи со скоростью .

Схемы (2.3), (2.4) построены для случая, когда значения искомой функции (температуры) Uна границах х = 0, х = 1определяются заданными функциями . Однако граничные условия в смешанной задаче (2.75) могут быть и иными, в них может входить производная искомой функции. Например, если конец стержня х=0 теплоизолирован, то условие имеет вид

Читайте также:  Флэш память что это такое

В этом случае, как и при решении волнового уравнения, данное условие нужно записывать в схемах (2.3), (2.4) в разностном виде.

Перейдем теперь к построению разностных схем для уравнения теплопроводности с двумя пространственными переменными. Примем для простоты а = 1. Тогда это уравнение можно записать в виде

(2.76)

Пусть при t=0 начальное условие задано в виде

(2.77)

В отличие от волнового уравнения, требующего два начальных условия, в уравнение теплопроводности входит только первая производная по t, и необходимо задавать одно начальное условие.

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

Рис. 2.24. Расчетная область

Введем простейшую сетку с ячейками в виде прямоугольных параллелепипедов, для чего проведем три семейства плоскостей: хi= ih1(i=0,1. I), (j=0,1. J), . Значение сеточной функции в узлах обозначим символом . С помощью этих значений можно построить разностные схемы для уравнения (2.76).

Рассмотренные выше схемы для одномерного уравнения легко обобщаются на двумерный случай.

Построим явную разностную схему, шаблон которой изображен на рис. 2.25. Аппроксимируя производные отношениями конечных разностей, получаем следующее сеточное уравнение:

Рис. 2.25. Шаблон двумерной схемы

Отсюда можно найти явное выражение для значения сеточной функции на (k + 1)-ом слое:

(2.78)

Условие устойчивости имеет вид

(2.79)

При получается особенно простой вид схемы (2.78):

(2.80)

Полученная схема сходится со скоростью

Формулы (2.78) или (2.80) представляют собой рекуррентные соотношения для последовательного вычисления сеточной функции во внутренних узлах слоев k = 1,2. К. На нулевом слое используется начальное условие (2.77), которое записывается в виде

(2.81)

Значения в граничных узлах вычисляют с помощью граничных условий.

Алгоритм решения смешанной задачи для двумерного уравнения теплопроводности изображен на рис. 2.26. Здесь решение хранится на двух слоях: нижнем (массив ) и верхнем (массив ). Блоки граничных условий необходимо сформировать в зависимости от конкретного вида этих условий. Результаты выводят на каждом слое, хотя можно ввести шаг выдачи (см. рис. 2.13).

Рис. 2.26. Алгоритм решения двумерного уравнения теплопроводности

Построим теперь абсолютно устойчивую неявную схему для решения уравнения (2.76), аналогичную схеме (2.4) для одномерного уравнения теплопроводности. Аппроксимируя в (2.76) вторые производные по пространственным переменным на (k + 1)-ом слое, получаем следующее разностное уравнение:

(2.82)

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

(2.83)

К этой системе уравнений нужно добавить граничные условия для определения значений сеточной функции в граничных узлах (т.е. при i= 0, I; j = 0, J). На нулевом слое решение находится из начального условия (2.77), представленного в виде (2.81).

Система (2.83), полученная для двумерного уравнения теплопроводности, имеет более сложный вид, чем аналогичная система (2.22) для одномерного случая, которую можно решить методом прогонки. Таким образом, распространение неявной схемы на многомерный случай приводит к значительному усложнению вычислительного алгоритма и увеличению объема вычислений.

Недостатком явной схемы (2.78) является жесткое ограничение на шаг по времени τ, вытекающее из условия (2.79). Существуют абсолютно устойчивые экономичные разностные схемы, позволяющие вести расчет со сравнительно большим значением шага по времени и требующие меньшего объема вычислений. Две из них будут рассмотрены в разд. 2.3.3.

Комментировать
0 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
No Image Компьютеры
0 комментариев
No Image Компьютеры
0 комментариев
No Image Компьютеры
0 комментариев
No Image Компьютеры
0 комментариев
Adblock detector