Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
379498_A09A4_sarycheva_o_m_lekcii_po_kursu_chis...doc
Скачиваний:
22
Добавлен:
09.11.2019
Размер:
1.69 Mб
Скачать

5.5. Расширенный вещественный накопитель

Используется на этапе численной обработки разреженных векто­ров и матриц. Предположим, что на символическом этапе мы получим портрет результирующей матрицы C которая является суммой двух матриц Aи B . Очевидно, что на символическом этапе путем слия­ния списков столбцовых индексов JA и JB построчно мы получим портрет результирующей матрицы С : JC и IC (подробнее ниже). Рассмотрим теперь, как получить значения ненулевых элементов, т.е. массив СN. Для этого будем трактовать каждую строчку мат­риц как векторы a и b соответственно. Тогда:

Слияние массивов Ja и Jb дает:

массив Jc = 10 3 7 4 5

Введем в рассмотрение вещественный массив X , длина которого равна числу элементов в строке результирующей матрицы С (у нас в примере n=10., если 10 - длина строки матрицы С). Далее име­ем следующий порядок действий:

1) Обнуляем те позиции вектора X , которые указаны в масси­ве (другие нас не интересуют и в них может храниться все, что угодно) .

Символом * отмечены несущественные для нас позиции.

2) Загружаем aN в массив X:

3) Прибавляем bN к X:

4) Выбираем из X нужные числа, используя при этом массив Jc

1. Jc(1)=10 находим X(10)=0.7 и полагаем cN(1)=X(10);

Массив cN: 0.7 * * * *

2. Jc(2)=3 находим X(3)=0.3 и полагаем cN(2)=X(3);

Массив cN: 0.7 0.3 * * * 3. Jc(3)=7 находим X(7)=0.4 и полагаем cN(3)=X(7);

Массив cN: 0.7 0.3 0.4 * * 4. Jc(4)=4 находим X(4)=0 и полагаем cN(4)=X(4);

Массив cN: 0.7 0.3 0.4 0 * 5. Jc(5)=5 находим X(5)=0.6 и полагаем cN(5)=X(5);

Массив cN: 0.7 0.3 0.4 0 0.6 Окончательным результатом будет:

Jc = 10 3 7 4 5

cN = 0.7 0.3 0.4 0 0.6

Заметим, что мерности массивов Jc и cN совпадают.

5.6. Сложение двух матриц

Выполняется в два этапа;

1) Символический (слияние строк), на котором определяется портрет результирующей матрицы. При этом используется метод переменного переключателя. Сложение выполняется строка за строкой. Каждая строка характеризуется своим номером, который и берется за значение переключателя.

2)Численный выполняется по полученному портрету результирующей матрицы. Для накапливания значений ненулевых элементов используется расширенный вещественный накопитель. Рассмотрим алгоритм сложения матриц на примере. Пусть матрицы А и B заданы в формате RR (c)U :

Вычисляем матрицу С=A+B.

1. Символический этап (слияние строк).

Массивы столбцовых индексов JA и JB говорят нам о том, что длина строки равна 6. Следовательно, длина переменного переключателя IX также равна 6. Сначала массив IX обнуляется, т.е. перед началом процесса слияния, массив

IX = 0 0 0 0 0 0

Шаг 1. Слияние первых строк.

Механизм слияния строк описан выше и здесь приводится лишь

его результат:

JC = 5 3 1 6

IC = 1 5

IX = 1 0 1 0 1 1.

Значения элементов массива IС определяются так: первая цифра всегда 1, вторая равна 1 плюс количество цифр в массиве JC, соответствующих очередной отроке: 1 + 4 = 5.

Шаг 2. Слияние вторых строк. Меняем значение переключателя с1 на 2. Результат:

JC = 5 3 1 6 4 3 1 5

IC = 1 5 9

IX = 2 0 2 2 2 1.

Шаг З Слияние третьих строк. Меняем значение переключателя на 3. Результат:

JC = 5 3 1 6 4 3 1 5 1 6 4 2

IC = 1 5 9 13

IX = 3 3 2 3 2 3.

Шаг 4 Слияние четвертых отрок. Меняем значение переключа­теля на 4. Результат:

JC = 5 3 1 6 4 3 1 5 1 6 4 2 4 2 3

IC = 1 5 9 13 16

IX = 3 4 4 4 2 3

2. Численный этап.

Используем расширений вещественный накопитель X длиной 6. Исходными данными являются массивы JC и IC .

Строка 1.

1) Просматриваем массивы JC и IC . Первые две цифры масси­ва IС (т.е. цифры 1 и 5) говорят нам о том, что первые четыре цифры массива JC относятся к первой строке матрицы С , т.е. цифры: 5 3 I 6. Они дают информацию о том какие позиций в мас­сиве IX нужно обнулять. Как уже говорилось выше , в алгебре разре­женных матриц экономить приходится даже на операции обнуления мас­сивов. Здесь обнулять массив X придется каждый раз перед сложени­ем элементов очередных строк, Поэтому не следует писать нули в те позиции массива X , которые при сложении данных строк не исполь­зуются. Таким образом, состояние массива X перед сложением пер­вых с трок имеет вид :

X= 0 * 0 * 0 0

"* " означает, что значение этих позиций в массиве X нас не инте­ресует и в них может быть машинный "мусор".

2. Заносим на обнуленные позиции массива X значения массива AN , соответствующие первой строке: -1 и 2. Причем в массиве JA указано, что -1 должна быть занесена в 5-ю позицию массивна X , а 2 - в 3-ю позицию. Итак, состояние массива X на этом шаге имеет вид:

X= 0 * 2 * -1 0

3. Прибавляем к массиву X значения первой строки матрицы B . Это цифры 1 -5 и -1, которые должны быть прибавлены к значениям 1-й, 6-й и 3-й позиции массива соответственно:

X= 1 * 1 * -1 5

4. Заполняем первую строку массива CN в том порядке, который соответствует столбцовым индексам первой строки, заданным в массиве. JC : 5 3 I 6

CN = -1 1 1 5

Заметим, что длина массива CN равна значению последнего элемента массива IC минус 1: 16 - 1 = 15. Значения элементов массива IC определяют позиции массива CN , соответствующие очередной отроке.

Строка 2

1.Просматриваем массивы IC и JC . Значения элементов IС(2)= 5 и IС(3) = 9 дают нам информацию о том, что начиная с JС (5) и кончая JC (8) следуют столбцовые индексы ненулевых элементов матрицы С во второй

строке: 4 3 1 5. Таким образом, обнуляем следующие позиции массива X :

0 * 0 0 0 *

2. Заносим на обнуленные позиции массива X значения элементов массива AN , соответствующие второй строке:

4 * 3 3 7 *

При этом просматриваются массивы JA и AN , начиная с 3-го по 6-й элементы в соответствии со 2-м и 3-м элементами массива IA,

3. Прибавляем к массиву X значения второй строки матрицы В : это число - 2, которое должно быть прибавлено к 5-й позиции массива X :

4 * 3 3 5 *

4. Заполняем вторую строку матрицы С , т.е. элементы массива CN , начиная с 5-й по 8-ю позицию (см. массив IС) в порядке, указанном 5, 6, 7, 8-м элементами массива JC : 4 3 1 5. Итак,состояние массива CN :

CN = -1 1 1 5 3 3 4 5.

Действуя аналогично для остальных двух строк матрицы С, получим:

JC = 5 3 1 6 4 3 1 5 1 6 4 2 4 2 3

IC = 1 5 9 13 16

CN = -1 1 1 5 , 3 3 4 5 , 2 -1 2 6 , 0 1 1 .

Таким образом, появился новый нулевой элемент. Тогда последняя строка может быть скорректирована.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]