Метод последовательной верхней релаксации (SOR)
3.5. Метод последовательной верхней релаксации (SOR)
В индексном виде этот метод записывается следующим образом:
(3.23)
Очевидно, что при он совпадает с методом Гаусса-Зейделя. С использованием текущего вектора формула (3.23) преобразуется к виду
(3.24)
Эту формулу легко запрограммировать при любой схеме хранения.
Выясним, при каких условиях метод SOR сходится. Для этого перепишем (3.23) в матричном виде.
или
Рекомендуемые материалы
. (3.25)
Для сходимости этого процесса достаточно, чтобы выполнялось условие
,
или . При имеем , и условие сходимости выполнено при .
Оптимальное значение итерационного параметра равно
,
но чаще всего спектральный радиус неизвестен, поэтому рекомендуют формулу
. (3.26)
При хорошем подборе параметра релаксации метод сходится гораздо быстрее, чем все ранее изученные.
Пример применения SOR.
Решаем линейную одномерную задачу Дирихле для уравнения теплопроводности
.
Очевидно, , т.е. выполнены условия применимости SOR. В самом деле, в пространстве функций, обращающихся в ноль на границе, самосопряженность оператора означает Проверим для нашего оператора:
.
Положительная определенность означает, что Проверяем:
.
Выберем тестовое точное решение в виде , подставим в уравнение и найдем правую часть .
Построим равномерную сетку и запишем симметричную РС 2-го порядка аппроксимации
(3.27)
Зададим начальное приближение , выберем параметр экстраполяции и применим SOR для решения КРС (3.27), учитывая 3-диагональную структуру ее матрицы. Ниже приводится псевдотекст программы
h:=1e0/N; h2:=sqr(h);
// Initial guess and exact solution and RHS
For i:=0 to N do
begin
x:=i*h;
y^[i]:=fY0(x); // Initial guess
u^[i]:=fy(x); // exact solution
f^[i]:=fF(x); // RHS
end;
y^[0]:=0; y^[N]:=1; // Boundary conditions
For Iter:=1 to MaxIt do // Main iterative cycle
begin
Case Method of
Zeidel,SOR: ZS_iter;
else;
end; //case
if (Iter mod Skiper)=0 then Info; // Save solution
end;//Iter
end; //IterativeSolver
//............. An iteration of Zeidel or SOR .............................
Procedure ZS_iter;
var i:integer;
begin
For i:=1 to N-1 do
begin
A:=1; B:=1; C:=A+B; Fi:=F^[i]*h2; {Эти к-ты матрицы постоянны, поэтому их надо вычислять один раз и хранить как массивы}
yZeidel:=(A*y^[i-1] + B*y^[i+1] + Fi)/C;
if Method=Zeidel then y^[i]:=yZeidel else
y^[i]:=w*yZeidel + (1-w)*y^[i]; // SOR
end; //i
end; //ZS_iter
А вот что получилось при .
Рис. 3.1. Сходимость приближенного решения к точному для SOR.
Видно, что высокочастотные гармоники (sin) воспроизводятся в решении уже после нескольких итераций, однако основной тренд () восстанавливается медленно. При этом виден скачок функции, продвигающийся от г.у. при справа-налево; поскольку шаблон 3-точечный, за одну итерацию возмущение распространяется на один узел сетки.
Рис. 3.2. Зависимость скорости сходимости метода SOR от параметра .
Рис. 3.2. показывает, что параметр экстраполяции критически влияет на скорость сходимости метода SOR.
"7.1 - Анализ и применение уравнения Бернулли" - тут тоже много полезного для Вас.
Задание. 1) Составить программу решения задачи Дирихле для стационарного уравнения теплопроводности с переменными коэффициентами методом SOR.
2) Численно исследовать сходимость. Сравнить с решением по методу Зейделя.
3) Оцениить, как влияет частота и амплитуда осцилляций коэффициента на сходимость.
4) Как известно, собственные числа оператора равны
Поэтому сперктральный радиус