Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Алгоритмы решения систем линейных уравнений с блочно-ленточными матрицами. Монография
.pdf
Алгоритмы решения СЛАУ с блочно-ленточными матрицами. Глава 3 61
( ) ( 1) *(1 ( 1)) ( 1) * ( 1)
k k bk k hk
δ ≤δ − + − +ε − − ≤
++− +− + ε +
− ε− −+ε− −≤
23
(1 )* ( 2)* ( 2) ( 1)* ( 1)
kk
b b bh
b k hk k hk
−−
++ ε− −+ε− −≤
1
(1 )* ( 2)* ( 2) ( 1)* ( 1)
k
b k hk k hk
−
++ ε− −+ε− −≤
11
11
22
kk
ks
bb
−−
−−
−−
+ ε+
13
22
1
kk
bb
b
−−
−−
+ ε+
+ε =
−
Запишем следующую лемму, которая очевидным образом доказывается
методом математической индукции.
Лемма 1. Пусть имеется система неравенств
x
≤ u
k
k – 1*xk – 1
где все числа u
+ v
; k = 2, 3, …
k – 1
, vi, i = 1, 2, … и x1 положительны. Тогда для любого k = 2, 3, …
i
выполняется неравенство
x
≤ u
k
+…+ u
k – 1*uk – 2
*…*u1*x1 + u
k – 1*vk – 2
+ v
k – 1
k – 1*uk – 2
*…*u2*v1 + u
k – 1*uk – 2
*…*u3*v2
.
Используя эту лемму, получим оценку погрешности решения системы
(1 ( 1) ) *(1 ( 2 ) ) *. . . * (1 (1) ) *
bk bk b
≤+− +− + δ+
(1 ( 1) ) *(1 ( 2 ) ) *. . . * (1 ( 2) ) * (1) * (1)
bk bk b h
.........................................................................
(1 (
b
++ 1)) * ( 2) * ( 2) ( 1) * ( 1)k k hk k hk
22
(1 ) *(1 ) * . . . * (1 ) *
bb b
≤ + + + δ+
23
kk
−−
22 2
(1 ) *(1 ) * . . . * (1 ) * (1) * (1)
++ + + ε +
.........................................................................
2
k
−
2
(1 ... )*
≤ + + + + + δ+
(1 .. . ) * (1) * (1)
++++ + ε +
23 2 1
bb b b
246 2 2
bbb b h
−
k
1
−
−
.........................................................................
k
2
−
2
22
1 1
bb
−−
≤ δ+ ε +
...................................................................................
1 1
... *(2 * * )*( * ) ...
.....................
1 1
1
−
k
(2 * * )*( * )
* **
1
b
−
s
2
1
b
−
.................................................................
2
k
−
2
b
k
22 1
−−
bh
1
b
−
12 1
s
−−
bh
k
32 1
k
−−
*(2 * * )*( * )
−
bh
2
2
1
s
−
3
−
1
h
1
b
−
1
b
−
2
k
−
2
b
−

62 Б. Я. Штейнберг, О. Б. Штейнберг
-1
1
1
s
b
s
= δ+ ε =
=
11
1sb
+
2
k
s
b
=+ + + ++ =
2
1
b
≤+ ++++++++ ≤
≤+
−
-1 1 2
2 2 21
12
22
1 1 21
1 21
kk k
kk
bb b
bb b
bb
−−
−−
−− −
δ ≤ δ+ ε + ≤
−− −
≤ δ+ε + ≤
−−
24
1 21
1 21
nn
bb
bb
−−
δ ≤ δ+ε + ≤
−−
≤ δ+ε +
−−
11
kk
−−
22
1 1
bb
−−
1 1
−−
= δ+ ε
* ** * 2 * *
11
bb
−−
11
kk
−−
22
bb
* ** * 2 * *
11
bb
−−
1
k
−
hb
hb
s
∑
1
s
=
1
k
−
s
∑
1
s
−
12 1
−−
1
s
−
12 1
−−
2
1
b
−
s
2
1
b
−
1
1
s
−
2
+
Заметим, что при b<1 выполняются
;
≤
1
−
2
2
1
−
s
2 * 1 *( 2* 4* ... 2 * )
∑
s
1
=
2
=+ ++++++++ ≤
1 *( ... )
1 *( ... )
b
1 2* * .
1
−
12 1
−−
b bbb b
2 4 8 32
k
−
b
k
2
24 48888 2
bbbbbbb b
2345678 2
bbbbbbb b
k
−
2
−
21
1
−
b
b
−
2
k
−
k
2
−
Это позволяет продолжить основную цепочку неравенств следующим
образом:
1 1 1 1
( ) * * * * (1 2 * * )
k hb
−
1 1
b bb
−−
*( * * (1 2* ))
h
Вспоминая, что n = 2**k, получаем
1 1
( ) *( * * (1 2* ))
kh
1 1
b bb
*( * * (1 2* ))
h
b
Следует отметить, что при b > 1 проведенные оценки показывают, что
оценка погрешности растет как экспонента от размерности матрицы.
В этом случае данным алгоритмом пользоваться нецелесообразно, т. к. при

Алгоритмы решения СЛАУ с блочно-ленточными матрицами. Глава 3 63
относительно небольших размерностях матриц решению системы нельзя
доверять.
Требование b < 1 можно смягчить, например, условием, чтобы произве-
дение соседних элементов матрицы было меньше единицы.
b
* b
< 1 для всех i = 1, 2, …, (n – 1).
i
i +1
В этом случае матрица, которая получается на втором шаге алгоритма,
удовлетворяет условию b < 1.
Если выполняется условие
b
*b
i
i +1*bi +2
*b
< 1 для всех i = 1, 2, …, (n – 3),
i +3
то требование b < 1 выполняется для матрицы, которая получается на треть-
ем шаге алгоритма.

4. РАСПАРАЛЛЕЛИВАНИЕ
РЕКУРРЕНТНЫХ ЦИКЛОВ
4.1. Рекуррентно вычисляемые переменные
и рекуррентные циклы
Рекуррентные циклы будем определять через рекуррентно вычисляе-
мые переменные.
Будем говорить, что переменная в цикле вычисляется рекуррентно, если
генератор этой переменной на некоторой итерации цикла k использует (воз-
можно, через другие промежуточные переменные) значения, вычисленные
этим же генератором на итерации с некоторым номером m, меньшим k.
Пример 11. Рекуррентно вычисляемая индексная переменная A.
for (i = 0; i < N; i++) {
A[i+2] = 3*A[i]+B[i];
}
Конец примера.
Пример 12. Переменная A не является рекуррентно вычисляемой,
поскольку в данном примере используются элементы массива А, вычисленные до выполнения данного цикла (оба вхождения переменной А не являются информационно зависимыми).
for (i = 0; i < N; i = i+1) {
A[i+N] = 3*A[i]+B[i];
}
Конец примера.
Пример 13. Рекуррентно вычисляемая индексная переменная A.
for (i = 0; i < N; i = i+1) {
A[i] = B[i] + C[i];
C[i+1] = A[i] + B[i];
}
Здесь на итерации k используется значение переменной C, которое
генерируется на предыдущей итерации k – 1. При этом вычисление C
на k-ой итерации зависит от значения C, вычисленного на (k – 1)-ой

Алгоритмы решения СЛАУ с блочно-ленточными матрицами. Глава 4 65
итерации через переменную A. Аналогично, и переменная С также
является рекуррентно вычисляемой.
Конец примера.
Пример 14. Нерекуррентно вычисляемая индексная переменная.
for (i = 0; i < N; i++) {
A[i] = B[i] + C[i];
C[i+1] = A[i+1] + B[i];
}
Здесь на итерации k используется значение переменной C, которое
генерируется на итерации k – 1, но используется оно не для вычисления C.
Конец примера.
Пример 15. Нерекуррентный цикл.
for (i = 0; i < N; i++) {
A[i+50] = B[i] + C[i];
B[i+50] = A[i];
}
Поучительность этого примера состоит в том, что граф информационных связей тела этого цикла является сильно связным, но переменные А и В не являются рекуррентно вычисляемыми.
Конец примера.
Пример 16. Программный цикл с рекуррентно вычисляемой пере-
менной x, реализующий алгоритм Гаусса-Зейделя решения (трех-
мерной) задачи Дирихле в пространстве итераций, имеющем форму
прямоугольного параллелепипеда.
for (It = 0; It < maxIt; It++) {
for (i1 = 1; i1 < N; i1++) {
for (i2 = 1; i2 < N; i2++) {
for (i3 = 1; i3 < N; i3++) {
x[i1, i2, i3] = 1/6*(x[i1–1, i2, i3] +
x[i1+1, i2, i3] + x[i1, i2–1, i3] +
x[i1, i2+1, i3] + x[i1, i2, i3–1] +
x[i1, i2, i3+1]);
}}}}
Конец примера.

66 Б. Я. Штейнберг, О. Б. Штейнберг
Теорема 1 (см.: [54]). Одномерный цикл содержит рекуррентно вычисляемые переменные тогда и только тогда, когда существует такая последовательность вхождений G1, U1, G2, U2, ..., Gk, Uk, G
= G1, в которой Ui —
k + 1
использования, а Gi — генераторы, и такая последовательность итераций
I1 ≤ I2 ≤...≤ Ik ≤ I
дуги (Ui, G
i +1
чем вхождение Ui на I
, что в графе информационных связей есть тривиальные
k +1
) и дуги истинной информационной зависимости (Gi, Ui), при-
итерации использует результат срабатывания гене-
i +1
ратора Gi на Ii итерации.
При раскрутке цикла одному вхождению исходного цикла соответствует
много вхождений результирующего фрагмента программы, которые далее
будут называться копиями исходного вхождения.
Теорема 2. Переменная в одномерном цикле является рекуррентно вычисляемой тогда и только тогда, когда в графе информационных связей раскрутки этого цикла существует путь между копиями некоторого генератора
этой переменной.
Далее под рекуррентным циклом понимается цикл, содержащий хотя бы
одну рекуррентно вычисляемую переменную. При этом будем рассматривать рекуррентно вычисляемые переменные только с регулярной информационной зависимостью.
4.2. Рекуррентно замкнутое множество
отображений
Опишем требования к рекуррентным циклам, при выполнении которых эти
циклы можно будет преобразовывать к виду, допускающему распараллеливание с помощью расматриваемого метода. Ранее предлагались и исследовались
алгоритмы распараллеливания рекуррентных циклов [66; 54; 30]. В данной
работе предлагаются новые алгоитмы, которые ориентированы на новые ВС.
Пусть D — подмножество Rm и ∆ — множество отображений пространства D в D, замкнутое относительно суперпозиции.
Разумеется, суперпозиция любых отображений является отображением,
но не обязательно эта суперпозиция будет принадлежать этому же множеству.
Пример 17. Множество многочленов степени не более 2, отображающее отрезок [0, 1] в себя не является замкнутым относительно суперпозиции, поскольку суперпозиция многочленов степени 2 может
иметь степень 4.
Конец примера.

Алгоритмы решения СЛАУ с блочно-ленточными матрицами. Глава 4 67
Множество отображений ∆ называется рекуррентно замкнутым при вы-
полнении условий:
1. Множество ∆ замкнуто относительно суперпозиции.
2. Существует такая константа T
суперпозиции
позиции любых двух отображений G1 и G2 из ∆ не более T
3. Существует такая константа T
функции
бой функции G из ∆ для любого x из D не более T
, что время выполнения супер-
суперпозиции
.
, что время вычисления G(x) лю-
.
функции
4. На множестве ∆ вычисление суперпозиции отображений на компью-
тере ассоциативно. (Суперпозиция математических отображений всегда
ассоциативна, но это свойство может нарушаться из-за погрешности округлений или переполнения регистров на компьютере).
Множество ∆ будем называть N-рекуррентно замкнутым, если выполня-
ются условия 1-3, а вместо условия 4 выполняется:
4а. Если вычисление суперпозиции N отображений из ∆ на компьютере
выполнить с различным порядком взятия операций суперпозиции, то результаты будут отличаться на незначительную величину.
Описанное множество ∆ введено в [54; 66].
Очевидно, что множество ∆ рекуррентно замкнуто тогда и только тогда,
когда для каждого N это множество N-рекуррентно замкнуто. Далее будем
исследовать программные циклы с N итерациями, тело которых может рассматриваться как отображение данных из некоторого N-рекуррентно замкнутого множества ∆.
Пример 18. Пусть в качестве D будем рассматривать множество
всех векторов длины m с целыми координатами D = Zm, тогда мно-
жество ∆ всех линейных отображений из Zm в Zm вида y = A*x, где
матрица A с целыми элементами, удовлетворяет указанным выше
требованиям.
Конец примера.
Пример 19. Пусть в качестве D будем рассматривать множество
всех векторов длины m с целыми координатами D = Z
ство ∆ всех аффинных отображений из Zm в Zm вида y = A*x + b, где
матрица A с целыми элементами, b — фиксированный вектор из Zm,
удовлетворяет указанным выше требованиям.
Конец примера.
m
, тогда множе-

68 Б. Я. Штейнберг, О. Б. Штейнберг
Пример 20. Пусть в качестве D будем рассматривать множество
всех векторов длины m с вещественными координатами D = Rm, тогда, если погрешность округлений на компьютере достаточно мала,
то множество ∆ всех аффинных отображений из Rm в Rm удовлетворяет указанным выше требованиям. Это свойство выполняется,
если количество разрядов в машинном слове достаточно велико для
рассматриваемых погрешностей и значений N.
Конец примера.
Пример 21. Множество всех булевых отображений вида f(X) = P∧X∨R
удовлетворяет перечисленным выше условиям множества ∆
(неслож но проверить, что суперпозиция таких отображений опять
является отображением такого же вида).
Конец примера.
Пример 22. Множество всех дробно-линейных отображений удовлетворяет указанным выше требованиям множества ∆, поскольку
суперпозиция дробно линейных отображений опять является дробно
линейным.
Конец примера.
Будем исследовать распараллеливаемость цикла вида:
for(i = 1; i < N + 1; i++) {
x
= Gi(x
i
i-1
)
}
где G
, i = 1, ..., N — отображения из некоторого N-рекуррентно замкнутого
i
множества D.
Пример 23. Следующий рекуррентный программный цикл, в котором
вычисляется одно число, может быть распараллелен по такой же
схеме, как и цикл, вычисляющий элементы массива.
for(i = 0; i < N; i++) {
X = A[i]*X+B[i];
}
Конец примера.

Алгоритмы решения СЛАУ с блочно-ленточными матрицами. Глава 4 69
Пример 24. Матричная рекуррентная зависимость. Следующий ре-
куррентный программный цикл написан на псевдокоде и обобщает
некоторые другие примеры.
for(i = 0; i < N; i++) {
xi = Ai*xi + bi;
}
Здесь Ai — матрица размера m * k, а xi, bi — векторы размеров m и
k соответственно.
Конец примера.
Пример 25. Следующий рекуррентный программный цикл, в котором
вычисляются два массива, может быть распараллелен по такой же
схеме, как и цикл, вычисляющий элементы одного массива.
for(i = 1; i < N+1; i++) {
X[i] = A1[i]*X[i-1] + B1[i]*Y[i-1] + C1[i];
Y[i] = A2[i]*X[i-1] + B2[i]*Y[i-1] + C2[i];
}
Конец примера.
4.3. Рекуррентные циклы с несколькими
использованиями рекуррентно вычисляемой
переменной
Всякое вычисление членов рекуррентной последовательности
x
= f(x
n
может быть описано с помощью программного цикла
for (i = k; i < N + k; i++) {
x
}
Если функция f линейна, то и рекуррентную последовательность, и ре-
куррентный цикл называют линейными.
n – 1
= f(x
i
, x
n – 2
i – 1
, …, x
, x
) (9)
n – k
,..., x
i – 2
i – k
)

70 Б. Я. Штейнберг, О. Б. Штейнберг
12 1 0
1 21 0
1 0 . 0 0 0 . . (0)
X
+ + +− +
Итак, линейный рекуррентный цикл имеет вид
for (i = k; i < N + k; i++) {
X[i] = A1[i]*X[i – 1] + A2[i]*X[i – 2] + ... + Ak[i]*X[i – k] +
A0[i];
}
Выполнение этого цикла равносильно решению системы линейных
уравнений с ленточной треугольной матрицей
0 1 . 0 0 0 . . (1)
X
. . . . . . .. .
0 0 . 1 0 0 . . ( 1)
() () . () 1 0 . . ()
Ak Ak A k A k
0 ( 1) . ( 1) ( 1) 1 . . ( 1)
Ak A k A k Ak
k
−
kk
−−
−
Xk
.
−
. . . . . . .. .
. . . . . . .. .
Если в формуле (9) x
является вектором, а f — линейное отображение,
n
то в теле соответствующего программного цикла будет несколько операторов присваивания.
В следующем примере по линейной рекуррентной формуле вычисляется пара массивов.
Пример 26.
for (i = 1; i < N+1; i++) {
X[i] = A[i]*X[i-1] + B[i]*Y[i-1] + C[i];
Y[i] = D[i]*X[i-1] + E[i]*Y[i-1] + F[i]; (10)
}
Выполнение такого цикла равносильно решению СЛАУ с блочной
двухдиагональной матрицей.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
