Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Алгоритмы решения систем линейных уравнений с блочно-ленточными матрицами. Монография

.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
2 Мб
Скачать
Алгоритмы решения СЛАУ с блочно-ленточными матрицами. Глава 3 51
Количество параллельных шагов приведенного алгоритма (log N), разу- меется, существенно меньше, чем у последовательного. Но на каждом шаге выполняется много операций, как арифметических, так и по обращениям к памяти. Особенности эффективной реализации описанного здесь алгорит­ма могут быть связаны со структурой памяти, поскольку регистровой памя­ти для работы с блоками недостаточно. Если у ВС каждое вычислительное устройство имеет достаточную по объему локальную память для разме­щения перемножаемых блоков — то с реализацией алгоритма все хорошо. Если локальная память недостаточно велика, чтобы разместить перемножа­емые блоки, то эти блоки следует разбивать на блоки второго уровня так, чтобы в локальной памяти каждого вычислительного устройства блоки по­местились. Вероятно, реализация этого алгоритма может оказаться эффек­тивной на перспективных многоядерных микросхемах с распределенной локальной адресуемой памятью: вычислительных ядер должно быть много (высокая степень параллельности); пересылки должны быть не очень дол­гими; в локальной памяти должна быть возможность сохранять несколько блоков данных, не сбрасывая их в общую память.
У процессора 1879ВМ8Я (НТЦ «Модуль») реализована аппаратная поддержка умножения матриц размера 2*2, и это можно использовать, разбивая перемножаемые блоки на мелкие блоки второго уровня размера 2*2. В других случаях можно рассматривать блоки второго уровня разме­ра 4*8 и 8 *4 и пользоваться алгоритмом GotoBLAS. Возможно, процессор 1879ВМ8Я или его следующие версии смогут эффективно поддерживать описанный в данном параграфе алгоритм.
3.6. СЛАУ с ленточной матрицей с преобладанием по одной из диагоналей
Предположим, что в матрице СЛАУ одна из диагоналей преобладает над остальными (модуль элемента на этой диагонали больше суммы мо­дулей других элементов по строке). Тогда методом окаймления [64; 65] СЛАУ можно преобразовать так, что эта диагональ станет главной. При этом 1) будет увеличено количество операций; 2) число обусловленности не изменится (зависимость относительной погрешности выходных данных от погрешности входных данных останется прежней); 3) может снизиться погрешность машинного округления. Приведем эти известные преобразо­вания СЛАУ для полноты изложения, поскольку далее в данной работе при-
52 Б. Я. Штейнберг, О. Б. Штейнберг
11
22 2
33 3 3
44 4 4
55 5 5
66 6
11 11
...... . . . . .
...... . . . . .
nn nn
nn n
dh
bd h
cb d h
cb d h
cb h
cb dh
cb h
−− −−
             
 
11 1
222 2
3 33 3
44 4
22 2
1 11 1
.
....... . . .
nn n
n nnn
nnn
ac h
ac h
bach
bah
−−
− −−−
          
 
водятся новые алгоритмы быстрого выполнения СЛАУ с блочными двух-
диаго наль ны ми матрицами.
Рассматриваемая матрица может быть разбита на блоки так, что она станет блочной трехдиагональной матрицей. Этим самым задача решения СЛАУ сводится к уже описанной.
1
1
cb d h
1
1
1
.
1
1
1
Имеет место следующий очевидный факт.
Пусть для матрицы A = {a
ij}i, j = 1, …, n
m — такое наименьшее число, что
aij = 0, если |i – j| > m. Тогда для того, чтобы матрица A после разбиения на
блоки стала блочной трехдиагональной, необходимо и достаточно, чтобы размер блоков был не меньше m.
Решение СЛАУ с ленточной матрицей с невырожденной крайней диаго­налью можно свести к решению СЛАУ с треугольной ленточной матрицей, временно отбрасывая часть уравнений и решая систему относительно не­скольких свободных переменных. Рассмотрим эту идею на примере трех­диагональной матрицы.
bac h
bac h
ba h
.
.
.
.
(6)
.
.
.
Алгоритмы решения СЛАУ с блочно-ленточными матрицами. Глава 3 53
1 11
22 2 2
.0
.0
..... . . . .
.0
.0
c ha
ac h b
         

11 1
222 2
3 33 3
44 4
22 2
1 111
...... . . .
nn n
n nnn
n nn
ac h
ac h
bach
bah
−−
− −−−
          
 
Отбросим (временно) последнее уравнение системы. Оставшуюся си-
стему будем решать относительно первого неизвестного. Это все равно, что решать систему уравнений с двумя правыми частями. Матрица новой системы будет ленточной нижнетреугольной с элементами ci по главной диагонали.
.
.
bac h
3 33 3
ba h
44 4
ac h
nn n
−−
22 2
bach
n nnn
− −−−
1 11 1
.
Решение этой системы имеет вид
x
= d2*x1 + e
2
x3 = d3*x1 + e
2
3
(7)
x
= d
n –1
xn = dn*x1 + e
n –1*x1
+ e
n
n –1
Подставляя последние два равенства в отброшенное уравнение
b
+ cn*xn = hn,
n*xn –1
найдем x
. Теперь x1 можно одновременно подставить во все равенства (7) и
1
получим значения всех неизвестных.
Отбрасывая первое уравнение в системе (6), можно было бы получить
систему с верхнетреугольной матрицей. Эту систему можно было бы разре­шить аналогичным образом относительно последнего неизвестного.
.
bac h
bac h
.
.
.
ba h
..
.
.
.
54 Б. Я. Штейнберг, О. Б. Штейнберг
. .. .
kk k
ss s
aa a h
a a aa h
aa h
aa h
a a a ah
                
Пусть у ленточной матрицы A = ( aij)
i, j = 1, …, n
имеется преобладание по диа гонали i j = k (> 0). Тогда окаймление следует сделать, отбросив пер­вые k строк и разрешив оставшуюся систему относительно последних k переменных. Получатся формулы, в которых первые n k переменных вы­ражаются линейно через последние k переменных. Подставив полученные решения в отброшенные k первых уравнений, получим систему из k урав­нений относительно k последних неизвестных. Вычислив из этой системы k последних неизвестных и подставив их в полученные формулы, найдем и значения первых n k переменных.
11 12 1 1
21 22 2 2, 1 2
. . . . . ....... . . . . . . .
12
aa
kk
++
1,1 1, 2
. . . . . ....... . . . . . . .
12
a
s
+
1,2
Если у ленточной матрицы A = (a
r
. .. .
+
rr
. .. .
. .. .
. .. .
. .. .
. .. .
. .. .
. .. .
n s n n k n n k n nn nn
−+ −+
1, , 1,
ij)i, j = 1, …, n
имеется преобладание по ди-
.
агонали i j = k (< 0), то окаймление следует сделать, отбросив последние – k строк и разрешив оставшуюся систему относительно первых – k пере- менных, и т. д.
Пусть теперь у ленточной матрицы A=(aij)
i, j = 1, …, n
сначала в первых m строках имеется преобладание по диагонали i j = u, а затем в остальных n m строках имеется преобладание по диагонали i j = v. Тогда матрицу следует разрезать на две части, в каждой из которых окаймление следует сделать так, чтобы преобладающая диагональ стала главной.
Для примера рассмотрим диагональную матрицу, у которой в первых m строках преобладает поддиагональ, а в остальных n m строках преоблада­ет главная диагональ.
Алгоритмы решения СЛАУ с блочно-ленточными матрицами. Глава 3 55
11
22 2
33 3
11 1
.... . . .. .
.... . . .. .
mm m
mm m
nn n
ah
ba h
ba h
++ +
          
 
2 1 21 21 2 1
2 1 21 21 2 1
**
(* *)* (* *)
(* *)* (* * )
a xb a xb
aa bc x abbd
ca d c x cbd d
++
ba h
ba h
.
ba h
Для решения этой системы следует
1) временно отбросить первое уравнение;
2) уравнения с номерами от 2 до m следует решить (параллельно) отно-
сительно переменной x
;
1
3) найти x1 из временно отброшенного первого уравнения и, подставив в
уравнения с номерами от 2 до m, получить значения неизвестных x2, …, xm;
4) в уравнение с номером m + 1 подставить значение переменной xm;
5) уравнения с номерами от m + 1 до n решить параллельно.
Если матрица состоит из нескольких кусков, каждый из которых имеет
преобладающую диагональ, то данную матрицу следует разрезать на эти несколько кусков. Если матрицу невозможно представить в виде несколь­ких подматриц, в каждой из которых преобладает некоторая диагональ, то об устойчивом численном методе для такой матрицы ничего сказать нельзя.
3.7. Параллельное вычисление дробнолинейных рекуррентных последовательностей
Будем использовать тот факт, что суперпозиция двух дробнолинейных
отображений опять является дробнолинейным отображением.
11 2 2
() ; ()
gx gx
= =
12
c xd c xd
++
**
fx g g x
11 2 2
= =
() ( ())
21
+ ++
+ ++
.
56 Б. Я. Штейнберг, О. Б. Штейнберг
11 1
11 1
*
nn n
nn n
axb
−− −
−− −
+
11
11
nn
nn
ab
cd
−−
−−
 

ab
′′
 

*
kk
kk
axb
cx d
′′
+
′′
Поскольку коэффициенты любого дробнолинейного отображения мо­гут быть записаны в виде матрицы 2 x 2, то коэффициенты суперпозиции отображений представляют собой элементы матрицы произведения матриц коэффициентов исходных отображений.
Рассмотрим рекуррентную последовательность
x fx
n nn
и обозначим матрицу коэффициентов отображения f
Тогда для вычисления членов последовательности x
()
= =
11
−−
A
=
1
n
*
cx d
+
n
.
достаточно вычис-
n
лить все произведения матриц
B
= A
0
0
B1 = A0*A B2 = A0*A1*A
1
2
B
= A0*A1*A2 *…* An.
n –1
Параллельный алгоритм вычисления всех таких произведений сводит­ся к решению СЛАУ с блочной двухдиагональной матрицей и приводился ранее. Вычислив все такие произведения, можно одновременно найти все члены последовательности x
по элементам матриц
k
=
k
kk
′′
cd
kk
B
по формулам
0
x
=
k
*
.
+
0
Алгоритмы решения СЛАУ с блочно-ленточными матрицами. Глава 3 57
1 ..
.. .. . ..
.. . ..
vw ac
                                     
       
3.8. Разложения трехдиагональных матриц в произведение двухдиагональных
Иногда возникает необходимость многократного решения СЛАУ с од­ной и той же трехдиагональной матрицей. Например, такая потребность возникает при итерационном алгоритме решения СЛАУ с большой блоч­но-ленточной матрицей, имеющей более трех блочных диагоналей. В та­ких случаях алгоритм решения СЛАУ с трехдиагональной матрицей может быть вспомогательным, а трехдиагональная матрица может быть специ­альным образом подготовлена. Если трехдиагональная матрица не треу­гольная и имеет преобладание по главной диагонали, то обычно исполь­зуется LU-разложение этой матрицы, после чего, вместо решения СЛАУ с трехдиагональной матрицей, решается две СЛАУ с двухдиагональными матрицами (одна верхнетреугольная, другая — нижнетреугольная). Такое разложение дает ускорение не только потому, что уменьшает количество выполняемых операций, но и потому, что двухдиагональная матрица за­нимает меньше памяти и может поместиться в кэш-памяти. Для лучшего попадания в кэш-память может иметь смысл и разложение треугольной трехдиагональной матрицы в произведение двух матриц: двух верхнетре­угольных (UU-разложение) или двух нижнетреугольных (LL-разложение трехдиагональной треугольной матрицы).
UU-разложение или LL-разложение трехдиагональной треугольной ма­трицы делаются по аналогии с LU-разложением. Приведем известный алго- ритм LU-разложения трехдиагональной матрицы в произведение нижне- и верхнетреугольных матриц, который может быть распараллелен. Эта зада­ча приводит к матричному уравнению
1
1
u v w bac
2 2 2 222
1
u v w bac
3 3 3 333
u v ba
4 4 44
1 1 11
*
=
.
58 Б. Я. Штейнберг, О. Б. Штейнберг
5 5 55
666
11 1
11 1
11 1
11 1
11 1
11 1
111
x y ab
x y ab
xya
                      
∗=
                      
  
Перемножив обе неизвестные скалярные матрицы, получим следую-
щую систему уравнений
v
= a
1
1
w1 = c
1
ui*v
= bi (8)
i –1
ui*w
+ vi = a
wi = c
i –1
i
i
где i = 2, …, n.
Из условий (8) вытекает рекуррентная формула для вычисления v
v
= ai– ui*w
i
Таким образом, параллельное вычисление массива v
= ai–(bi/v
i –1
i –1
)*c
= (ai*v
i –1
i –1
bi*c
) / v
i –1
i –1
сводится к парал-
i
:
i
.
лельному алгоритму вычисления дробнолинейных рекуррентных после-
довательностей, который приводится в разделе распараллеливания рекур-
рентных циклов.
Теперь рассмотрим UU-разложение верхнетреугольной трехдиагональ­ной матрицы. Если исходная матрица имеет преобладание по главной ди­агонали (это необходимо для устойчивости вычислений), то можно выде­лить в качестве множителя диагональную матрицу. В результате мы придем к задаче разложения матрицы A размером N x N с тремя ненулевыми диаго- налями: главной, состоящей из единиц, и двух диагоналей над ней.
1 1 11
x y ab
2 2 22
x y ab
3 3 33
x y ab
4 4 44
a1 = x1 + y
b1 = x1*y2 ai = xi + y
a2 = x2 + y
b
= x2*y
2
1
bi = xi*y
2
3
i+ 1
i
.
Данное разложение также сводится к вычислению цикла с дробно­линей ной рекуррентной зависимостью.
Алгоритмы решения СЛАУ с блочно-ленточными матрицами. Глава 3 59
11
333
.
nn n
yz
−−
=
11 1
11
*
nn n n
nn
nn
ax b b
xa
xx
−−
−−
Пусть y1 = z.
1
xay
=
111
y bx
=
/
2 11
xay
=
222
/
y bx
=
3 22
xay
=
⇒=
b
1
y
=
2
x
1
xa
22
b axb
=−=
xx
*
1 21 1
11
ax b
*
x
n
x
1
n
Пусть zy1 x1 ≠ 0.
= =
.
LL-разложение нижнетреугольных матриц может быть выполнено
аналогично.
Если нужно многократно решать СЛАУ с треугольной матрицей, у ко-
торой более 3 диагоналей, то ее также можно разложить в произведение нескольких матриц, у каждой из которых кроме главной только одна нену­левая диагональ.
После LU разложения ленточной матрицы каждую треугольную матри-
цу-сомножитель можно разложить в произведение двухдиагональных, у ко­торых по главной диагонали единицы, и есть еще одна ненулевая диагональ.
3.9. Оценки погрешностей решения СЛАУ с двухдиагональной матрицей
Исходные данные системы с двухдиагональной матрицей (4) — bi и hi — заданы с некоторой точностью. Обозначим через bi и hi точные значе­ния этих данных. И пусть εi = bi – bi и δi = hi – hi. Обозначим b = max |bi|, h = max |hi|, ε = max |εi|, δ = max |δi|. Далее будем оценивать погрешность решения системы через эти исходные данные при условии b < 1. Хорошо известно [15; 30], что при таком условии вычисления проводятся устойчи­во, погрешность сильно не растет. Но иногда бывают нужны более тонкие оценки погрешностей.
В описанном выше алгоритме матрица системы преобразуется, и на ка­ждом шаге новые данные пишутся вместо старых. Чтобы зафиксировать
60 Б. Я. Штейнберг, О. Б. Штейнберг
1
22
( ) ( 1)
k
bk bk b
( ) ( 1) ( 1) * ( 1) ( 1) * (1 ( 1))
hk hk bk hk hk bk
≤−+− −=− +−≤
1
b

kbkk bk bk b
k
   



22
bb bb
***...** **.
( ) ( 1)* (1 ( 1) ) ( 1) * ( 1)
1
k k bk k hk
b
δ ≤δ − + − +ε − − ≤
≤δ − + − + ε
все промежуточные матрицы, заменим одномерные массивы двумерными.
После этого алгоритм решения будет выглядеть следующим образом.
for (k = 0; k < ]log(N)[; k++) { for (i = 2**(k-1)+1; i < N; i++) { h[k,i] = h[k-1,i] – b[k-1,i]*h[k-1, i-2**(k-1)]; b[k,i] = – b[k-1,i]*b[k-1,i-2**(k-1)]; } }
Здесь каждому значению параметра k соответствует шаг алгоритма и
соответствующая матрица системы.
Обозначим элементы матрицы k-ой системы — b
(k) и hi(k); bi(k) и
i
hi(k) — их точные значения; εi(k) = bi(k) – bi(k) и δi(k) = hi(k) – hi(k). Обозна-
чим b(k) = max |bi (k)|, h(k) = max |hi(k)|, ε(k) = max |εi(k)|, δ(k) = max |δi(k)|.
Ввиду формулы b(k, I) = – b(k – 1, I)*b(k – 1, I – 2**(k – 1)) можно записать
≤ −≤
.
Из формулы h(k, I) = h(k – 1, I) – b(k – 1, I) * h(k – 1, I – 2**(k – 1)) вытекает
оценка
* (1 ( 1)) * (1 2 )) *. . . * (1 )
h bk b b
+ − +− + ≤
23
kk
−−
22
* (1 )) * (1 ) * . . . * (1 )
hb b b
≤ + + +≤
1
k
*(1 ... ) * .
h bb b b h
++ + ++ =
2 3 21
1
1
k
2
b
При оценках погрешностей, как обычно, будем пренебрегать слагаемы­ми, в которые входят погрешности исходных данных в квадрате и более высоких степенях.
Из формулы b(k, I) = – b(k – 1, I)*b(k – 1, I – 2**(k – 1)) можно записать неравенство
() ()() *( )( ) ... ()
21 12 121

23 1
kk k

12 2121
kk
1
Из формулы h(k, I) = h(k – 1, I)–b(k – 1, I)*h(k – 1, I – 2**(k – 1)) вытекает следующая оценка:
2
k
12 1
k
( 1) * (1 ( 1)) 2 * * * *
k bk b h
−−
k
-2
2
1
b
.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]