Решение задачи Дирихле
В предыдущей статье было описан метод конечных разностей для решения задачи Дирихле. Однако, он будет не полным без решения этой самой задачи. Итогом построения у нас является система линейных алгебраических уравнений.
Применение итеративных методов
Теперь необходимо решить полученную систему линейных алгебраических уравнений заданную в матричной форме. Для этого применим итеративный метод Гаусса-Зейделя, который можно представить в виде:
(1),
где L, D, U — нижняя треугольная часть, диагональ и верхняя треугольная часть матрицы соответственно, а k — номер итерации. Для ускорения сходимости уместно использовать метод последовательной верхней релаксации, для этого преобразуем формулу (1):
,
(2).
Сверхрелаксация
Обозначим выражение как ξk— вектор невязки и к полученному выражению (2) добавим параметр «сверхрелаксации» ω:
.
Значения параметра ω должны лежать в интервале (0, 2). Очевидно, что если ω = 1, то метод просто является другой записью метода Гаусса-Зейделя. Если 0 < ω < 1, то метод называют методом нижней релаксации, а если 1 < ω < 2, то метод называют методом последовательной верхней релаксации. Метод последовательной верхней релаксации ускоряет сходимость по сравнению с методом Гаусса-Зейделя. Итерационную формулу можно переписать в виде:
, где fi,j значение элемента матрицы с индексами (i, j).
Средневзвешенное значение тогда примет вид:
.
А невязку можно записать как:
.
По величине невязки можно судить насколько близко решение на текущей итерации приближается к точному решению. Обычно интерес вызывает только максимальное значение невязки для текущей итерации. Как только величина невязки становится меньше какого-либо наперёд заданного числа ε, то считаем, что получено решение с заданной точностью.
Итоги
Пока можно подвести промежуточный итог: Мы научились приводить аналитическую запись задачи Дирихле к её численной форме. Следующим этапом будет программирование. Конечно можно пытать счастья и решать данные уравнения вручную, но зачем терять время, если можно занять его чем-нибудь более интересным. Данный метод обычно программируется для кластеров, ЦОДов и подобных систем. Поэтому сразу стоит выбрать технологию с которой будете работать. У меня выбора не было. В ОмГТУ был кластер с технологией MPI и всё. Это сейчас появился новый мощный сервер с openMP. Конечно вторая технология заметно лучше первой в плане производительности, но сверхбольшие матрицы туда так просто не воткнёшь, даже если хватит оперативной памяти, то не хватит вычислителей. В дальнейших статьях расскажу про кластер и технологию MPI.
Comment ( 1 )