Участник:Alexander34396/Обобщенный метод минимальных невязок: различия между версиями
Нет описания правки |
|||
| Строка 8: | Строка 8: | ||
'''Исходные данные:''' | '''Исходные данные:''' | ||
* система линейных алгебраических уравнений вида <math> Ax = b </math>, где <math> A </math> — невырожденная матрица размера <math>n</math>-на-<math> n </math> | * система линейных алгебраических уравнений вида <math> Ax = b </math>, где <math> A </math> — невырожденная матрица размера <math>n</math>-на-<math> n </math>. | ||
'''Вычисляемые данные:''' | '''Вычисляемые данные:''' | ||
* <math> | * <math> x_k </math> - приближённое решение исходной системы. | ||
Подпространство Крылова размерности <math> k, k \leq n </math> для решения исходной системы: | |||
:<math> K_k = K_k(A,b) = \operatorname{span} \, \{ b, Ab, A^2b, \ldots, A^{k-1}b \}. \, </math> | |||
Метод GMRES приближает точное решение исходной системы <math> Ax = b </math> вектором <math> x_k \in K_k </math>, минимизирующим Евклидову норму невязки <math>r_k = Ax_k-b</math>. | |||
Для | Для решения исходной системы GMRES, используя <math> l_2 </math>-ортонормальный базис пространства <math> K_k </math>, выполняет поиск приближённого решения <math> x_k </math> в виде: | ||
:<math> | :<math> x_k = x_0 + z_k </math>, | ||
где <math> | где <math> x_0 </math> - некоторое начальное приближение, <math> z_k \in K_k </math> - поправка решения. | ||
Для построения ортонормального базиса <math> K_k </math> метод использует ортогонализацию Арнольди. При введении для базиса <math> K_k </math> матричного обозначения <math> V_k </math> можно записать: | |||
:<math> z_k = V_ky_k </math>, | |||
где <math> y_k \in \mathbb{R}^k </math> - вектор коэффициентов. | |||
# найти ортонормальный базис <math> | В общем виде k-aя итерация алгоритма GMRES может быть записан следующим образом: | ||
# найти <math> | |||
# | # найти ортонормальный базис <math> V_k </math> подпространства <math> K_k </math> с помощью ортогонализации Арнольди; | ||
# | # найти <math> y_k </math>, минимизирующий <math> \|r_k\|_2 </math>; | ||
# вычислить <math> x_k = x_0 + V_ky_k </math>; | |||
# вычислить <math> r_k </math> и остановиться,если требуемая точность была достигнута, иначе повторить для k + 1. | |||
=== Вычислительное ядро алгоритма === | === Вычислительное ядро алгоритма === | ||
Вычислительное ядро последовательной версии метода GMRES состоит из двух частей: | Вычислительное ядро последовательной версии метода GMRES состоит из двух частей: | ||
* Вычисление ортонормального базиса <math> | * Вычисление ортонормального базиса <math> K_k </math>; | ||
: | * Формирование приближенного решения <math> x_k </math>. | ||
На каждой итерации для вычисления ортонормального базиса <math> K_k </math> метод использует процесс Арнольди: | |||
: <math> \hat{v}_{k+1} := Av_k - \sum_{i=1}^k h_{ik}v_{k} </math>, где <math> h_{ik} := (Av_k, v_i) </math>. | |||
Этот процесс требует <math> k(k + 1) n + kNZ </math> мультипликативных операций, где NZ - количество ненулевых элементов матрицы <math> A </math>. | |||
Для нахождения на каждой итерации приближённого решения метод использует формулу: | |||
: <math> x_k = x_0 + V_ky_k </math>. | |||
Вычисление этой формулы требует <math>nk</math> мультипликативных операций. | |||
=== Макроструктура алгоритма === | === Макроструктура алгоритма === | ||
Версия от 19:24, 15 октября 2016
Свойства и структура алгоритма
Общее описание алгоритма
Обобщённый метод минимальных невязок (англ. Generalized minimal residual method, GMRES) - итерационный метод численного решения системы линейных алгебраических уравнений с невырожденной матрицей. Метод основан на минимизации квадратичного функционала невязки на подпространствах Крылова. Разработан Юсефом Саадом и Мартином Шульцем в 1986 году как обобщение метода MINRES на случай систем с несимметричными матрицами.
Математическое описание алгоритма
Исходные данные:
- система линейных алгебраических уравнений вида [math]\displaystyle{ Ax = b }[/math], где [math]\displaystyle{ A }[/math] — невырожденная матрица размера [math]\displaystyle{ n }[/math]-на-[math]\displaystyle{ n }[/math].
Вычисляемые данные:
- [math]\displaystyle{ x_k }[/math] - приближённое решение исходной системы.
Подпространство Крылова размерности [math]\displaystyle{ k, k \leq n }[/math] для решения исходной системы:
- [math]\displaystyle{ K_k = K_k(A,b) = \operatorname{span} \, \{ b, Ab, A^2b, \ldots, A^{k-1}b \}. \, }[/math]
Метод GMRES приближает точное решение исходной системы [math]\displaystyle{ Ax = b }[/math] вектором [math]\displaystyle{ x_k \in K_k }[/math], минимизирующим Евклидову норму невязки [math]\displaystyle{ r_k = Ax_k-b }[/math].
Для решения исходной системы GMRES, используя [math]\displaystyle{ l_2 }[/math]-ортонормальный базис пространства [math]\displaystyle{ K_k }[/math], выполняет поиск приближённого решения [math]\displaystyle{ x_k }[/math] в виде:
- [math]\displaystyle{ x_k = x_0 + z_k }[/math],
где [math]\displaystyle{ x_0 }[/math] - некоторое начальное приближение, [math]\displaystyle{ z_k \in K_k }[/math] - поправка решения.
Для построения ортонормального базиса [math]\displaystyle{ K_k }[/math] метод использует ортогонализацию Арнольди. При введении для базиса [math]\displaystyle{ K_k }[/math] матричного обозначения [math]\displaystyle{ V_k }[/math] можно записать:
- [math]\displaystyle{ z_k = V_ky_k }[/math],
где [math]\displaystyle{ y_k \in \mathbb{R}^k }[/math] - вектор коэффициентов.
В общем виде k-aя итерация алгоритма GMRES может быть записан следующим образом:
- найти ортонормальный базис [math]\displaystyle{ V_k }[/math] подпространства [math]\displaystyle{ K_k }[/math] с помощью ортогонализации Арнольди;
- найти [math]\displaystyle{ y_k }[/math], минимизирующий [math]\displaystyle{ \|r_k\|_2 }[/math];
- вычислить [math]\displaystyle{ x_k = x_0 + V_ky_k }[/math];
- вычислить [math]\displaystyle{ r_k }[/math] и остановиться,если требуемая точность была достигнута, иначе повторить для k + 1.
Вычислительное ядро алгоритма
Вычислительное ядро последовательной версии метода GMRES состоит из двух частей:
- Вычисление ортонормального базиса [math]\displaystyle{ K_k }[/math];
- Формирование приближенного решения [math]\displaystyle{ x_k }[/math].
На каждой итерации для вычисления ортонормального базиса [math]\displaystyle{ K_k }[/math] метод использует процесс Арнольди:
- [math]\displaystyle{ \hat{v}_{k+1} := Av_k - \sum_{i=1}^k h_{ik}v_{k} }[/math], где [math]\displaystyle{ h_{ik} := (Av_k, v_i) }[/math].
Этот процесс требует [math]\displaystyle{ k(k + 1) n + kNZ }[/math] мультипликативных операций, где NZ - количество ненулевых элементов матрицы [math]\displaystyle{ A }[/math].
Для нахождения на каждой итерации приближённого решения метод использует формулу:
- [math]\displaystyle{ x_k = x_0 + V_ky_k }[/math].
Вычисление этой формулы требует [math]\displaystyle{ nk }[/math] мультипликативных операций.
Макроструктура алгоритма
В алгоритме можно выделить следующие макрооперации:
- Умножение матрицы на вектор;
- Вычисление скалярного произведения векторов;
- Вычисление Евклидовой нормы вектора;
- Умножение вектора на скаляр;
- Деление вектора на скаляр.
Схема реализации последовательного алгоритма
Для решения исходной системы методом GMRES можно воспользоваться следующим алгоритмом:
1 Подготовка перед итерационным процессом:
- 1.1 Выбрать начальное приближение [math]\displaystyle{ x_0 }[/math];
- 1.2 Посчитать невязку [math]\displaystyle{ r_0 = b - Ax_0 }[/math];
- 1.3 Вычислить [math]\displaystyle{ v_1 = \frac{r_0}{\|r_0\|_2} }[/math].
2 Построение ортонормального базиса [math]\displaystyle{ K_m }[/math]:
- Для всех [math]\displaystyle{ j }[/math] от 1 до m по нарастанию выполнять:
- 2.1 [math]\displaystyle{ h_{ij} := (Av_j, v_i), \quad i=1,\ldots,j }[/math];
- 2.2 [math]\displaystyle{ \hat{v}_{j+1} := Av_j - \sum_{i=1}^j h_{ij}v_{i} }[/math];
- 2.3 [math]\displaystyle{ h_{j+1j} = \|\hat{v}_{j+1}\|_2 }[/math];
- 2.4 [math]\displaystyle{ v_{j+1} = \frac{\hat{v}_{j+1}}{h_{j+1j}} }[/math].
3 Вычисление приближённого решения [math]\displaystyle{ x_m }[/math]:
- 3.1 [math]\displaystyle{ x_m = x_0 + V_my_m }[/math], где [math]\displaystyle{ y_m }[/math] минимизирует [math]\displaystyle{ \|r_0 - AV_my_m\|_2 }[/math];
- 3.2 Вычислить [math]\displaystyle{ r_m }[/math];
- 3.3 Если требуемая точность достигнута, остановиться.
4 Рестарт:
- 4.1 [math]\displaystyle{ x_0 = x_m }[/math];
- 4.2 [math]\displaystyle{ v_1 = \frac{r_m}{\|r_m\|_2} }[/math];
- 4.3 Перейти к шагу 2.