Участник:EasyBreezy/Стабилизированный метод бисопряженных градиентов (BiCGSTAB): различия между версиями
Перейти к навигации
Перейти к поиску
Ax = b, A \in R^{N \times N}, b \in R^N
K = K^k(A, r^0), L = K^k(A, \overline r^0)
x^{k + 1} = x^k + \alpha_k p_k + \omega_k s_k p^{k + 1} = r^{k + 1} + \beta_k p_k - \omega_k Ap_k
Строка 33: | Строка 33: | ||
=== Математическое описание алгоритма === | === Математическое описание алгоритма === | ||
+ | :Рассмотрим СЛАУ с вещественными коэффициентами: | ||
+ | <center><math>Ax = b, A \in R^{N \times N}, b \in R^N</math></center> | ||
+ | <center><math></math></center> | ||
+ | :В основу алгоритма ложиться идея проекционного метода и использование свойства A-бисопряженности системы векторов, а именно: векторы <math>p^1, p^2, ...</math> и <math>\overline p^1, \overline p^2, ...</math> бисопряжены, если <math>(Ap^i,p^j ) = 0,</math> при <math>i \neq j</math>. Фактически, данное условие эквивалентно биортогональности относительно энергетического скалярного произведения. | ||
+ | |||
+ | :Общая концепция проекционных методов предписывает нам выбрать два подпространства. В нашем случае подпространства мы выберем два подпространства, задаваемые матрицей системы А, вектором невязки на нулевой итерации <math>r^0</math> и вектором <math>\overline r^0</math>. который выбирается из условия <math>(r^0, \overline r^0) \neq 0</math>: | ||
+ | |||
+ | <center><math>K = K^k(A, r^0), L = K^k(A, \overline r^0)</math></center> | ||
+ | |||
+ | :Метод основан на построении биортогонального базиса и вычислении поправки такой, что новое приближение на очередной итерации было бы ортогонально второму подпространству Крылова. Базисные вектора строятся до тех пор, пока не будет достигнут критерий остановки итерационного процесса. | ||
+ | |||
+ | :Основной итерационный процесс задается формулой: | ||
+ | <center><math>x^{k + 1} = x^k + \alpha_k p_k + \omega_k s_k</math></center>, | ||
+ | <center><math>p^{k + 1} = r^{k + 1} + \beta_k p_k - \omega_k Ap_k</math></center>, | ||
+ | :где: | ||
+ | #<math>x^{k + 1}</math> - приближение на следующей итерации | ||
+ | #<math>x^k</math> - приближение на предыдущей итерации | ||
+ | #<math>p_k</math> - базисный вектор подпространства Крылова, порожденного матрице СЛАУ и невязкой | ||
+ | #<math>\alpha_k, \omega_k</math> - вспомогательные скаляры, определяемые для каждого шага итерации | ||
+ | #<math>s_k</math> - вспомогательный вектор | ||
+ | #<math>p^{k + 1}</math> - <math>k + 1</math>-ый базисный вектор | ||
+ | #<math>r^{k + 1}</math> - невязка <math>k + 1</math>-ой итерации | ||
+ | #<math>\beta_k</math> - вспомогательный коэффициент | ||
+ | |||
+ | :Вспомогательный вектор выражается следующим образом: | ||
+ | *<math>s_k = r^k - \alpha_k Ap_k</math> | ||
+ | |||
+ | :Вспомогательные коэффициенты вычисляются по формулам: | ||
+ | *<math>\alpha_k = \frac{(r^k, \overline r^0}{(Ap_k, \overline r^0)}</math> | ||
+ | *<math>\omega_k = \frac{(As_k, s_k)}{(As_k, As_k)}</math> | ||
+ | *<math>\beta_k = \frac{(r^{k + 1}, \overline r^0)}{(r^k, \overline r^0}</math> | ||
+ | |||
=== Вычислительное ядро алгоритма === | === Вычислительное ядро алгоритма === | ||
=== Макроструктура алгоритма === | === Макроструктура алгоритма === |
Версия 22:30, 14 октября 2016
Основные авторы описания:
Содержание
- 1 Свойства и структура алгоритма
- 1.1 Общее описание алгоритма
- 1.2 Математическое описание алгоритма
- 1.3 Вычислительное ядро алгоритма
- 1.4 Макроструктура алгоритма
- 1.5 Схема реализации последовательного алгоритма
- 1.6 Последовательная сложность алгоритма
- 1.7 Информационный граф
- 1.8 Ресурс параллелизма алгоритма
- 1.9 Входные и выходные данные алгоритма
- 1.10 Свойства алгоритма
- 2 Программная реализация алгоритма
- 2.1 Особенности реализации последовательного алгоритма
- 2.2 Локальность данных и вычислений
- 2.3 Возможные способы и особенности параллельной реализации алгоритма
- 2.4 Масштабируемость алгоритма и его реализации
- 2.5 Динамические характеристики и эффективность реализации алгоритма
- 2.6 Выводы для классов архитектур
- 2.7 Существующие реализации алгоритма
- 3 Литература
1 Свойства и структура алгоритма
1.1 Общее описание алгоритма
- Стабилизированный метод бисопряженных градиентов, так же известный как BiCGSTAB (Biconjugate gradient stabilized method), был предложен голландским математиком Хенком ван дер Ворстом в 1992 году. Статья, в которой описывался метод, стала самым цитируемым научным трудом в области математики в 1990х годах.
- Метод появился, как ответ на задачу о построении способа решения систем линейных алгебраических уравнений произвольного вида. На момент появления BiCGSTAB уже существовали методы решения СЛАУ произвольного типа, в том числе и в комплексном пространстве, например метод бисопряженных градиентов. Однако существующие на тот момент методы либо обладали недостаточной скоростью сходимости, либо использовали в вычислениях тяжелые операции, такие как транспонирования матрицы, которые усложняли распараллеливание на многопроцессорных машинах.
- BiCGSTAB является итерационным методом решения систем линейных алгебраических уравнений. Мощь метода заключается в том, что его можно применять к матрицам общего вида, в том числе с комплексными коэффициентами. В процессе выполнения BiCGSTAB не использует для вычисления плохо распараллеливаемых операций, не допускает накопления погрешностей округления и нестабильного поведения невязки. Эти факторы выгодно отличают его от предшественников: метода бисопряженных градиентов и квадратичного метода сопряженных градиентов, из которого BiCGSTAB фактически и вытекает. К преимуществам так же можно добавить более высокую в общем случае скорость сходимости относительно ближайших конкурентов. Тем не менее, для некоторых видов СЛАУ BiCGSTAB может уступать более простым методам.
- Благодаря свойствам алгоритма область применения метода весьма широка. Фактически, он используется во всех задачах, где требуется решать СЛАУ, в том числе СЛАУ большой размерности, к которым сводится большое количество численных методов, применяемых при решении задач математического моделирования.
- BiCGSTAB относится к классу так называемых проекционных методов. Основная идея методов данного класса: искать итерационным способом наилучшее приближение решения в некотором подпространстве пространства R^n, и чем шире подпространство, в котором ищется приближение решения, тем ближе будет приближенное решение к точному на каждой итерации. В качестве такого подпространства используются пространства Крылова, порожденные матрицей системы и невязкой первого приближения: K^m (A, r^0) = span(r^0, Ar^0, A^2r^0, ..., A^{m-1} r^0).
- Изложим основную идею любого проекционного метода, заложенную в том числе и в BiCGSTAB. Для простоты выкладок и рассуждений здесь и далее будем считать, что матрица системы и ее правая часть вещественны. Без ограничения общности все дальнейшие рассуждения могут быть перенесены и на комплексный случай. Итак, пусть решается система Ax=b с невырожденной матрицей A \in R^{n \times n} и ненулевым вектором b \in R^n. Имеются два подпространства K_n и L_n. Требуется найти вектор x \in K_n, который обеспечивает решение системы, оптимальное относительно подпространства L, то есть требуется выполнение условия Петрова-Галеркина: (Ax,z)=(b,z), \forall z \in L_n. В данном случае вектор x называется обобщенным решением системы.
- Условие Петрова-Галеркина можно записать и через определение невязки. Пусть r = b - Ax - невязка, тогда условие Петрова-Галеркина перепишется в виде: (b - Ax, z)=(r, z),\forall z \in L_n. Это равносильно тому, что вектор невязки ортогонален пространству L.
- Пусть для СЛАУ известно некоторое приближение x^0 точного решения x^*. Данное приближение требуется уточнить поправкой \delta: b - Ax^0 + \delta \perp L. Невязка уточненного решения имеет вид: r_{new} = b - Ax^0 + \delta = r^0- A\delta. Условие Петрова-Галеркина тогда можно переписать так: (r_{new}, z)= r^0 - (A\delta, z) = 0, \forall z \in L
- Пусть dim K = dim L = m, V = (v_1, ..., v_n) \in R^{n \times m}, W = (w_1, ... w_n) \in R^{n \times m}, где V и W – матрицы, столбцы которых образуют базисы пространств K и L соответственно. Пусть так же \delta = Vy, z = Wq, где y – коэффициенты разложения вектора поправки по базису пространства K, а q – коэффициенты разложения вектора z в пространстве L. Тогда новое приближение решения можно записать в виде: x^1 = x^0 + \delta= x^0 + Vy. Из условия ортогональности Петрова-Галеркина получаем, что: (r - AVy, Wq) = (W^Tr^0 - AVy, q) = 0. Поскольку q \neq 0, то получаем СЛАУ для вектора y: W^TAVy = W^Tr^0. Если предположить, что матрица W^TAVy невырождена, то вектор y однозначно определяется и равен: y = W^TAV^{-1}W^Tr^0. Подставляя найденные коэффициенты разложения в выражение для первого приближения получаем: x^1 = x^0 + \delta = x^0 + W^TAV^{-1}W^Tr^0y
- Подведем итог. Общий порядок шагов любого проекционного метода следующий:
- Выбрать пару подпространств K и L
- Найти базис V пространства K и базис W пространства L;
- Вычислить невязку
- Найти y = W^T AV^{-1} W^T r^0
- Положить x = x + Vy
- Если не достигнут критерий остановки итерационного процесса, то повторить алгоритм, начиная с первого шага.
- Как будет показано далее, в BiCGSTAB не требуется вычислять матрицу W^T AV^{-1} в явном виде.
1.2 Математическое описание алгоритма
- Рассмотрим СЛАУ с вещественными коэффициентами:
- В основу алгоритма ложиться идея проекционного метода и использование свойства A-бисопряженности системы векторов, а именно: векторы p^1, p^2, ... и \overline p^1, \overline p^2, ... бисопряжены, если (Ap^i,p^j ) = 0, при i \neq j. Фактически, данное условие эквивалентно биортогональности относительно энергетического скалярного произведения.
- Общая концепция проекционных методов предписывает нам выбрать два подпространства. В нашем случае подпространства мы выберем два подпространства, задаваемые матрицей системы А, вектором невязки на нулевой итерации r^0 и вектором \overline r^0. который выбирается из условия (r^0, \overline r^0) \neq 0:
- Метод основан на построении биортогонального базиса и вычислении поправки такой, что новое приближение на очередной итерации было бы ортогонально второму подпространству Крылова. Базисные вектора строятся до тех пор, пока не будет достигнут критерий остановки итерационного процесса.
- Основной итерационный процесс задается формулой:
,
,
- где:
- x^{k + 1} - приближение на следующей итерации
- x^k - приближение на предыдущей итерации
- p_k - базисный вектор подпространства Крылова, порожденного матрице СЛАУ и невязкой
- \alpha_k, \omega_k - вспомогательные скаляры, определяемые для каждого шага итерации
- s_k - вспомогательный вектор
- p^{k + 1} - k + 1-ый базисный вектор
- r^{k + 1} - невязка k + 1-ой итерации
- \beta_k - вспомогательный коэффициент
- Вспомогательный вектор выражается следующим образом:
- s_k = r^k - \alpha_k Ap_k
- Вспомогательные коэффициенты вычисляются по формулам:
- \alpha_k = \frac{(r^k, \overline r^0}{(Ap_k, \overline r^0)}
- \omega_k = \frac{(As_k, s_k)}{(As_k, As_k)}
- \beta_k = \frac{(r^{k + 1}, \overline r^0)}{(r^k, \overline r^0}