Решение задачи Дирихле

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

Применение итеративных методов

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

(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 )

  1. Джеймс
    Интересная статья, спасибо автору, но как по мне, то сильно перегружена формулами

Leave a reply

Your email address will not be published.

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.