Метод прогонки для уравнения теплопроводности на c

Уравнение теплопроводности в tensorflow

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

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

Метод прогонки для уравнения теплопроводности на c

Метод прогонки для уравнения теплопроводности на c

Метод прогонки для уравнения теплопроводности на c

Метод прогонки для уравнения теплопроводности на c

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

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

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

Видео:Лекция №1.1 Явная и неявная схемы для уравнения теплопроводностиСкачать

Лекция №1.1 Явная и неявная схемы для уравнения теплопроводности

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

Метод прогонки для уравнения теплопроводности на c

Метод прогонки для уравнения теплопроводности на c

Метод прогонки для уравнения теплопроводности на c

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

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

Метод прогонки для уравнения теплопроводности на c

Метод прогонки для уравнения теплопроводности на c

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

Метод прогонки для уравнения теплопроводности на c

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

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

Метод прогонки для уравнения теплопроводности на c

Метод прогонки для уравнения теплопроводности на c

Метод прогонки для уравнения теплопроводности на c

Метод прогонки для уравнения теплопроводности на c

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

Метод прогонки для уравнения теплопроводности на c

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

Метод прогонки для уравнения теплопроводности на c

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

Метод прогонки для уравнения теплопроводности на c

Метод прогонки для уравнения теплопроводности на c

Метод прогонки для уравнения теплопроводности на c

Заменив Метод прогонки для уравнения теплопроводности на cна нашу оценку Метод прогонки для уравнения теплопроводности на c, запишем функционал ошибки:

Метод прогонки для уравнения теплопроводности на c

Метод прогонки для уравнения теплопроводности на c

где Метод прогонки для уравнения теплопроводности на c— ошибка в узлах сетки.

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

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

Видео:6-5. Алгоритм прогонкиСкачать

6-5. Алгоритм прогонки

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

Кратко о tensorflow

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

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

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

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

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

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

Запуск:

Видео:VB.net - СЛАУ Метод прогонкиСкачать

VB.net - СЛАУ Метод прогонки

Результаты

Метод прогонки для уравнения теплопроводности на c
Метод прогонки для уравнения теплопроводности на c

Условие как и оригинальное, но без Метод прогонки для уравнения теплопроводности на cв уравнении:

Метод прогонки для уравнения теплопроводности на c

Метод прогонки для уравнения теплопроводности на c

Метод прогонки для уравнения теплопроводности на c

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

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

Метод прогонки для уравнения теплопроводности на c
Метод прогонки для уравнения теплопроводности на c

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

Метод прогонки для уравнения теплопроводности на c

Метод прогонки для уравнения теплопроводности на c

Метод прогонки для уравнения теплопроводности на c

Метод прогонки для уравнения теплопроводности на c

Метод прогонки для уравнения теплопроводности на c
Метод прогонки для уравнения теплопроводности на c

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

Метод прогонки для уравнения теплопроводности на c

Метод прогонки для уравнения теплопроводности на c

Метод прогонки для уравнения теплопроводности на c

Метод прогонки для уравнения теплопроводности на c

Метод прогонки для уравнения теплопроводности на c

Метод прогонки для уравнения теплопроводности на c
Метод прогонки для уравнения теплопроводности на c

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

Метод прогонки для уравнения теплопроводности на c

Метод прогонки для уравнения теплопроводности на c

Метод прогонки для уравнения теплопроводности на c

Метод прогонки для уравнения теплопроводности на c

Метод прогонки для уравнения теплопроводности на c
Метод прогонки для уравнения теплопроводности на c

Видео:6-1. Уравнение теплопроводностиСкачать

6-1. Уравнение теплопроводности

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

Функция рисования 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 станет еще проще.


источники:

💥 Видео

Решение задачи Коши для уравнения теплопроводности (Часть 1)Скачать

Решение задачи Коши для уравнения теплопроводности (Часть 1)

Метод конечных элементов (Часть 1) | Пример реализации для уравнения теплопроводностиСкачать

Метод конечных элементов (Часть 1) | Пример реализации для уравнения теплопроводности

Решение уравнения теплопроводности методом конечных разностейСкачать

Решение уравнения теплопроводности методом конечных разностей

Численные методы математической физики - Решение смешанной задачи для уравнения теплопроводностиСкачать

Численные методы математической физики - Решение смешанной задачи для уравнения теплопроводности

2.1 Точные методы решения СЛАУ (Крамера, Гаусса, Жордана, прогонки)Скачать

2.1 Точные методы решения СЛАУ (Крамера, Гаусса, Жордана, прогонки)

Проект по ОММ №2, метод прогонкиСкачать

Проект по ОММ №2, метод прогонки

8.1 Решение уравнения теплопроводности на отрезкеСкачать

8.1 Решение уравнения теплопроводности на отрезке

Численное решение уравнения теплопроводностиСкачать

Численное решение уравнения теплопроводности

Решение уравнения теплопроводности в одномерной постановке в Excel с применением неявной схемыСкачать

Решение уравнения теплопроводности в одномерной постановке в Excel с применением неявной схемы

Решение задач теплопроводности (часть 2)Скачать

Решение задач теплопроводности (часть 2)

Решение уравнения теплопроводности в одномерной постановке в ExcelСкачать

Решение уравнения теплопроводности в одномерной постановке в Excel

Метод Фурье для неоднородного уравнения теплопроводностиСкачать

Метод Фурье для неоднородного уравнения теплопроводности

Метод: Прогонки(Лекция 3)Скачать

Метод: Прогонки(Лекция 3)

Тихонов Н. А. - Основы математического моделирования - Метод прогонки (Лекция 8)Скачать

Тихонов Н. А.  - Основы математического моделирования  - Метод прогонки  (Лекция 8)

Уравнение теплопроводности на полупрямой (решение задачи)Скачать

Уравнение теплопроводности на полупрямой (решение задачи)

Метод Гаусса решения СЛАУ. Метод прогонки. Итерационные методы. Численные методы. Лекция №3Скачать

Метод Гаусса решения СЛАУ. Метод прогонки. Итерационные методы. Численные методы. Лекция №3
Поделиться или сохранить к себе: