- •Постановка задачи 42
- •1.1 Введение
- •1.2. Понятие устойчивости состояния равновесия эо
- •1.3. Критерий устойчивости систем линейных оду
- •1.4. Критерий устойчивости дискретных систем
- •2. Методы численного интегрирования систем оду
- •2.1 Постановка задачи
- •2.2. Явный метод Эйлера и его характеристики
- •2.3. Явные методы Рунге-Кутта
- •2.4. Понятие "жесткой" системы
- •2.5. Неявный метод Эйлера
- •3 Выбор шага
- •2.6. Неявные методы Рунге-Кугта
- •3. Методы решения нелинейных сау
- •3.1. Постановка задачи
- •3.2. Метод Ньютона
- •3.3. Метод продолжения решения по параметру
- •3.4. Метод дифференцирования по параметру
- •4. Решение систем линейных ау
- •4.1. Метод Гаусса
- •4.2. Способы повышения точности решении
- •4.3. Метод Зейделя
- •4.4. Метод наискорейшего спуска
- •5. Технология разреженных матриц
- •5.1 Постановка задачи
- •5.2. Разреженный строчный формат
- •5.3. Статические и динамические схемы хранения.
- •5.4. Метод переменного переключателя
- •5.5. Расширенный вещественный накопитель
- •5.6. Сложение двух матриц
- •5. 7. Скалярное умножение двух разреженных векторов
- •5.8. Произведение разреженной матрицы общего вида и заполненного вектора-столбца
- •5.9. Произведение двух разреженных матриц
- •5.10. Транспонирование разреженной матрицы
- •5.11. Треугольное разложение разреженной симметричной матрицы
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 .
Таким образом, появился новый нулевой элемент. Тогда последняя строка может быть скорректирована.