Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Алгоритмы решения систем линейных уравнений с блочно-ленточными матрицами. Монография
.pdf
Алгоритмы решения СЛАУ с блочно-ленточными матрицами. Глава 5 111
aa a
aa a
aa
aa
aa
Рассмотрим матрицы A и AL (при L = 1) размера M x N:
1,1 1,2 1,
2,1 2,2 2,
A
=
... ... ... ...
aa a
,1 ,2 ,
M M MN
...
...
...
Можно воспринимать, что A
N
N
получена из A сдвигом всех ее элементов
L
0 ...
0 ...
A
=
L
... ... ... ...
0 ...
1,1 1, 1
2,1 2, 1
,1 , 1
M MN
N
N
−
−
−
слева в правую сторону, с возникновением нулей в позициях первого столбца и исчезновением элементов, которые стояли на местах последнего.
Рассмотрим представление A и AL в виде одномерного массива A΄ и AL΄.
Тогда можно говорить о линейном операторе OperL, переводящем A΄ в AL΄.
Также можно говорить об операторе OperLL сдвига на L позиций (т. е. если
нижний индекс не указан, то сдвиг подразумевается равным 1).
Оператор OperL действует следующим образом. Всякий двумерный
массив A размерности M * N можно рассматривать как функцию на прямоугольной области D = [0, M] x [0, N]. Оператор определен на множестве таких функций C(D) (т. е. на множестве двумерных массивов).
OperL(A)[i, j] = X[i, j – 1].
C(D) — конечномерное линейное пространство. Если зафиксировать
базис в этом пространстве, то линейному оператору OpenL будет соответствовать некоторая матрица, умножение на которую действует так же, как
оператор OperL.
Задача 3. Найти линейный оператор OperLL. Нижний индекс L оператора OperL указывает величину сдвига.
Решение: OperL
имеет вид:
имеет матрицу размера (M *N)x(M *N), которая
L
.

112 Б. Я. Штейнберг, О. Б. Штейнберг
*' * '
a
aaaa
aaaa
00
aa
aa
0 0 ... 0 0 0 0 ... 0 ...
... ... ... ... ... ... ... ... ... ...
0 0 ... 0 0 0 0 ... 0 ...
1 0 ... 0 0 0 0 ... 0 ...
0 1 ... 0 0 0 0 ... 0 ...
... ... ... ... ... ... ... ... ... ...
0 0 ... 1 0 0 0 ... 0 ...
OperL =
0 0 ... 0 0 0 0 ... 0 ...
L
... ... ... ... ... ... ... ... ... ...
0 0 ... 0 0
0 0 ... 0 ...
0 0 ... 0 0 1 0 ... 0 ...
0 0 ... 0 0 0 1 ... 0 ...
... ... ... ... ... ... ... ... ... ...
0 0 ... 0 0 0 0 ... 1 ...
... ... ... ... ... ... ... ... ... ...
В этой матрице все нули, кроме некоторых единиц, находящихся на
дигонали, расположенной ниже главной на L позиций. В этой диагонали единицы стоят на всех местах, кроме строк с номерами i (такими, что i mod N < L), в которых стоят нули.
Конец решения.
Пример 50. В примере показано, как действует линейный оператор
OperL
(т. е. L = 2) на матрицу A (размера 2 x 4), представленную од-
2
номерным массивом (размера 1 x (2 * 4)) A'.
00000000
00000000
10000000
OperL A A
2
01000000
= = =
00000000 0
00000000 0
00001000
00000100
Матрицы A и AL имеют вид:
1,1
a
1,2
aa
1,3 1,1
aa
1,4 1, 2
a
2,1
a
2,2
a
2,3
a
2,4
1,1 1,2 1, 3 1, 4
A
=
2,1 2,2 2,3 2,4
Конец примера.
A
=
L
00
.
0
0
a
2,1
a
2,2
1,1 1,2
2,1 2,2
.
L
.

Алгоритмы решения СЛАУ с блочно-ленточными матрицами. Глава 5 113
Задача 4. Найти линейный оператор OperRR. Нижний индекс R оператора OperR указывает величину сдвига.
Решение: OperR
имеет матрицу размера (M * N)x(M *N), содержащую
R
все нули, кроме некоторых единиц, находящихся на диагонали, расположенной выше главной на R позиций. В этой диагонали единицы стоят
на всех местах, кроме строк с номерами i (такими, что i mod N ≥ N – L),
в которых стоят нули.
Конец решения.
Задача 5. Найти линейный оператор OperU
. Нижний индекс U опе-
U
ратора OperU указывает величину сдвига.
Решение: OperU
имеет матрицу размера (M *N) x (M *N), содер-
U
жащую все нули, кроме одной диагонали, все элементы которой
равны единицам. Эта диагональ расположена ниже главной на U *N
позиций.
Конец решения.
Задача 6. Найти линейный оператор OperD
. Нижний индекс D опе-
D
ратора OperD указывает величину сдвига.
Решение: OperD
имеет матрицу размера (M *N)x(M *N), содер-
D
жащую все нули, кроме одной диагонали, все элементы которой
равны единицам. Эта диагональ расположена выше главной на D *N
позиций.
Конец решения.
Всякая квадратная матрица (см. рисунок 15) с одной диагональю соответствует некоторому оператору, равному произведению операторов сдвига, умножения на функцию и проектора (17), которые в свою очередь соответствуют некоторому программному коду вида (16). Всякая ленточная
матрица с несколькими диагоналями соответствует некоторой сумме операторов (17).

114 Б. Я. Штейнберг, О. Б. Штейнберг
5.6. Действия операторов сдвига
на массивы и примеры соответствующих
этим действиям матриц
Матрица оператора сдвига OperL
Рассмотрим примеры, в которых
M = 3; N = 4.
L = 1, R = 0, U = 0, D = 0.
Оператор сдвига действует на двумерный массив X, определенный на
целых точках прямоугольника {0, 1, …, M – 1} x {0, 1, …, N – 1} (удобно
считать, что массив X определен и за границами прямоугольника и равен 0). Результат действия (левого) сдвига — это новый массив OperL (X),
(i, j)-элемент которого определен формулой
OperL (X) [ i, j] = X[i, j – 1].
Рассматривая программу
for (i = 1; i < M; i++) {
for {j = 1; j++, j<N) {
Y[i,j] = F[i,j]*X[i,j – 1];
}}
можно полагать, что здесь участвует оператор OperL(X):
for (i = 1; i < M; i++) {
for {j = 1; j++, j<N) {
Y[i,j] = F[i,j]*OperL(X)[i,j];
}}
Все массивы Y[i, j], F[i, j], X[i, j]; определены на двумерной области раз-
мерности M х N.
Строки и столбцы области занумерованы от 0.
2 * * * *
1 * * * *
0 * * * *
0 1 2 3
Сквозная нумерация точек данной области начинается от 0 (до M *N–1).
i < M
2 08 09 10 11 k < M x N
1 04 05 06 07
0 00 01 02 03
0 1 2 3 j < N

Алгоритмы решения СЛАУ с блочно-ленточными матрицами. Глава 5 115
Двумерные массивы Y[i, j], F[i, j], X[i, j], используемые в программе, за-
меним одномерными YY[k], FF[k], XX [k] соответственно. При этом индексы пересчитываются с учетом нумерации узлов сетки (точек рассматриваемой прямоугольной области)
k = M*i+j;
и в обратную сторону
i = k//M; (частное при целочисленном делении)
j = k mod M; (остаток при целочисленном делении)
Напомним, что элемент W
матрицы W в строке s и столбце t равен ска-
st
лярному произведению <es, W(et )> базисного вектора es на вектор W(et).
В пространстве векторов размерности M*N, как обычно, k-ый базисный
вектор ek имеет 1 на месте k и 0 на остальных местах.
Вычислим значение оператора OperL на базисных векторах ek.
Если числа (i, j) такие, что 0<j<N, и M*i+(j – 1) = k, то
OperL(e
) = ek[i, j – 1] = 1;
k
иначе OperL(ek) = 0.
Условие M*i+(j – 1)) = k выполняется, если числа (i, j) такие, что j – 1>0
и OperL(e
) = e
k
Пример 51. Пусть M = 3, N = 4.
Матрица оператора OperL имеет следующий вид (строки и столбцы
занумерованы от 0 до 3 * 4 – 1 = 11):
В данной матрице ненулевой является только одна диагональ
(«наддиагональ»), у которой элементы W
ям s – t = + 1. В этой диагонали встречаются нулевые элементы, у
которых t mod 4 = 0.
.
k – 1
0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0 0 0 0 0
2 0 1 0 0 0 0 0 0 0 0 0 0
3 0 0 1 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0 0 0
5 0 0 0 0 1 0 0 0 0 0 0 0
6 0 0 0 0 0 1 0 0 0 0 0 0
7 0 0 0 0 0 0 1 0 0 0 0 0
8 0 0 0 0 0 0 0 0 0 0 0 0
9 0 0 0 0 0 0 0 0 1 0 0 0
10 0 0 0 0 0 0 0 0 0 1 0 0
11 0 0 0 0 0 0 0 0 0 0 1 0
Конец примера.
удовлетворяют услови-
st

116 Б. Я. Штейнберг, О. Б. Штейнберг
Матрица оператора сдвига OperR
Рассмотрим пример, в котором
M = 3; N = 4.
L = 0, R = 1, U = 0, D = 0.
for (i = 1; i < M; i++) {
for {j = 1; j++, j<N) {
Y[i,j] = F[i,j]*X[i,j+1];
}}
OperR(X)[i, j] = X[i, j +1].
Пример 52. Пусть M = 3, N = 4.
Матрица оператора OperR имеет следующий вид (строки и столбцы
занумерованы от 0 до 3 * 4 – 1 = 11):
0 0 1 0 0 0 0 0 0 0 0 0 0
1 0 0 1 0 0 0 0 0 0 0 0 0
2 0 0 0 1 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 1 0 0 0 0 0 0
5 0 0 0 0 0 0 1 0 0 0 0 0
6 0 0 0 0 0 0 0 1 0 0 0 0
7 0 0 0 0 0 0 0 0 0 0 0 0
8 0 0 0 0 0 0 0 0 0 1 0 0
9 0 0 0 0 0 0 0 0 0 0 1 0
10 0 0 0 0 0 0 0 0 0 0 0 1
11 0 0 0 0 0 0 0 0 0 0 0 0
В данной матрице ненулевой является только одна диагональ
(«наддиагональ»), у которой элементы W
s – t = – 1. В этой диагонали встречаются нулевые элементы, у кото-
рых (t +1) mod 4 = 0.
Конец примера.
удовлетворяют условиям
st
Матрица оператора сдвига OperU
Рассмотрим примеры, в которых
M = 3; N = 4.
L = 0, R = 0, U = 1, D = 0.
Оператор сдвига действует на двумерный массив X, определенный на
целых точках прямоугольника {0, 1, …, M – 1}x {0, 1, …, N – 1} (удобно
считать, что массив X определен и за границами прямоугольника и равен 0).

Алгоритмы решения СЛАУ с блочно-ленточными матрицами. Глава 5 117
Результат действия сдвига — это новый массив OperU(X), (i, j)-элемент ко-
торого определен формулой
OperU(X)[i, j] = X[i – 1, j].
Рассматривая программу
for (i=1; i < M; i++) {
for {j=1; j++, j<N) {
Y[i, j] = F[i, j]*X[i – 1, j];
}}
можно полагать, что здесь участвует оператор OperU(X):
for (i=1; i < M; i++) {
for {j=1; j++, j<N) {
Y[i, j] = F[i, j]*OperU(X)[i, j];
}}
Все массивы Y[i, j], F[i, j], X[i, j]; определены на двумерной области раз-
мерности M х N.
Пример 53. Пусть M = 3, N = 4.
Матрица оператора OperU имеет следующий вид (строки и столбцы
занумерованы от 0 до 3 * 4 – 1 = 11):
0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0 0 0 0 0
2 0 1 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0 0 0
4 0 0 0 1 0 0 0 0 0 0 0 0
5 0 0 0 0 1 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 0 0 0 0 0
7 0 0 0 0 0 0 1 0 0 0 0 0
8 0 0 0 0 0 0 0 1 0 0 0 0
9 0 0 0 0 0 0 0 0 0 0 0 0
10 0 0 0 0 0 0 0 0 0 1 0 0
11 0 0 0 0 0 0 0 0 0 0 1 0
Конец примера.
Матрица оператора сдвига OperD
Рассмотрим примеры, в которых
M = 3; N=4.
L = 0, R = 0, U = 0, D = 1.
Оператор сдвига действует на двумерный массив X, определенный на
целых точках прямоугольника {0, 1, …, M – 1}x {0, 1, …, N – 1} (удобно
считать, что массив X определен и за границами прямоугольника и равен 0).

118 Б. Я. Штейнберг, О. Б. Штейнберг
Результат действия (левого) сдвига — это новый массив OperU(X), (i, j)-
элемент которого определен формулой
OperD(X)[i, j] = X[i +1, j].
Рассматривая программу
for (i=1; i < M; i++) {
for {j=1; j++, j<N) {
Y[i, j] = F[i, j]*X[i+1, j];
}}
можно полагать, что здесь участвует оператор OperD(X):
for (i=1; i < M; i++) {
for {j=1; j++, j<N) {
Y[i, j] = F[i, j]*OperD(X)[i, j];
}}
Все массивы Y[i, j], F[i, j], X[i, j] определены на двумерной области раз-
мерности M х N.
Двумерные массивы Y[i, j], F[i, j], X[i, j], используемые в программе, за-
меним одномерными YY[k], FF[k], XX [k] соответственно. При этом индексы пересчитываются с учетом нумерации узлов сетки (точек рассматриваемой прямоугольной области)
k = M * i + j;
и в обратную сторону
i = k //M; (частное при целочисленном делении)
j = k mod M; (остаток при целочисленном делении)
Пример 54. Пусть M = 3, N = 4.
Матрица оператора OperD имеет следующий вид (строки и столбцы
занумерованы от 0 до 3 * 4 – 1 = 11)
0 0 1 0 0 0 0 0 0 0 0 0 0
1 0 0 1 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 1 0 0 0 0 0 0 0
4 0 0 0 0 0 1 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 1 0 0 0 0
7 0 0 0 0 0 0 0 0 1 0 0 0
8 0 0 0 0 0 0 0 0 0 0 0 0
9 0 0 0 0 0 0 0 0 0 0 1 0
10 0 0 0 0 0 0 0 0 0 0 0 1
11 0 0 0 0 0 0 0 0 0 0 0 0

Алгоритмы решения СЛАУ с блочно-ленточными матрицами. Глава 5 119
В данной матрице ненулевой является только одна диагональ
(«поддиагональ»), у которой элементы Wst удовлетворяют условиям
s – t = –1. В этой диагонали встречаются нулевые элементы, у которых s mod 3 = 0.
Конец примера.
5.7. О восстановлении алгоритма типа
Гаусса-Зейделя по СЛАУ
с блочно-ленточной матрицей
В предыдущем параграфе по операторам сдвига OperL, OperR, OperU,
OperD строились матрицы, им соответствующие. Эти матрицы оказыва-
лись с одной ненулевой диагональю, на которой тоже с некоторой периодичностью могли быть нулевые элементы. В этом параграфе рассматривается обратная задача: по блочно-ленточной матрице найти массивы и
операторы сдвига, которые приводят некоторый алгоритм итерационного
типа к СЛАУ с исходной матрицей.
Основной результат данного параграфа — это формулировка направления исследований, которое должно принести ускорения для решения широкого класса СЛАУ с блочно-ленточными матрицами.
Идея состоит в том, чтобы по блочно-ленточной матрице СЛАУ
A*x = h
записать алгоритм решения этой СЛАУ в виде итерационного гнезда циклов (15), к которому применить метод работы [18] (сочетание скошенного
тайлинга и распараллеливания по методу гиперплоскостей).
В частности, предполагается проанализировать блочно-ленточные матрицы, которые получаются при применении метода конечных элементов.
Схема метода может выглядеть следующим образом.
Рассматриваются варианты: двумерный, трехмерный и четырехмерный
(большие размерности тоже возможны, но маловероятны). Рассмотрим двумерный случай (остальные аналогичны).
Для каждой ненулевой блочной диагонали найдем двумерный массив и
все операторы OperL, OperR, OperU, OperD, в результате действия которых
эта диагональ может быть получена. Затем следует найти набор двумерных
массивов и набор операторов OperL, OperR, OperU, OperD, с помощью которых можно задачу привести к вычислению СЛАУ итерационного типа.

120 Б. Я. Штейнберг, О. Б. Штейнберг
Далее, к алгоритму итерационного типа применить целевой метод (сочетание скошенного тайлинга и распараллеливания по методу гиперплоскостей), дающий высокое ускорение.
Пример 55.
Будем рассматривать уравнение
A*x = h
Q
в векторном пространстве R
имеет вид A = I+B, где B — матрица c несколькими ненулевыми
диагоналями.
Матрица B размера (M+2)*(N+2) имеет 4 ненулевых диагонали (две
диагонали выше главной и две — ниже) и имеет вид
0 ¼ 000 ¼ 000
0000…0 ¼ 000 ¼ 000
00000…0 ¼ 000 ¼ 000
…
0¼ 000000…0 ¼ 000 ¼ 000
00¼ 000000…0 ¼ 000 ¼ 000
…
¼ 000…¼ 000…0 ¼ 000 ¼ 000
0¼ 000…¼ 000…0 ¼ 000 ¼ 000
‘’’
000…¼ 000…¼ 000…0 ¼ 000 ¼
0000…¼ 000…¼ 000…0 ¼ 0000
…
000…0000…¼ 000…¼ 000…0 ¼
0000…0000…¼ 000…¼ 000…0
…
000…00000…0000…¼ 000…¼ 000
, где x и h — векторы, а матрица A
Здесь:
1 ) в первой строке первое число ¼ находится на позиции (номер
столбца) 2. Второе число ¼ находится в столбце N.
2 ) во второй строке первое число ¼ находится на позиции (номер
столбца) 3. Второе число ¼ находится в столбце (N+1).
3 ) в строке M уже 3 числа ¼, начиная с первого.
…
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
