
- •Постановка задачи 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. 7. Скалярное умножение двух разреженных векторов
Оба вектора заданы в формате RR (c) U :
JA = 10 3 7 4
AN = 0.2 0.3 0.4 -0.7
JB = 5 4 10
BN = 0.6 0.7 0.5
Скалярное произведение двух векторов
.
Прямолинейная попытка
вычислить С привела бы к многочисленным
просмотрам массива JB
. Действительно, первый ненулевой
элемент массива AN
(1) = 0,2 и занимает в массиве А десятое
место, так как JА
(1) = 10. Следовательно, 0,2 надо умножить
на 10-й элемент вектора B
, т.е. на 0, 5. Чтобы его найти, нужно
просмотреть весь массив JВ
и выяснить, что
находится
в BN
(3) = 0.5. Таким образом, определим
произведение
.
Следующий ненулевой
элемент вектора А JA
(2) =3 и AN
(2) = 0,3. Мы должны просмотреть весь массив
JB , чтобы выяснить, что
.
Таким образом, для каждого элемента
вектора А мы просматриваем сначала
весь массив JВ . Эта процедура очень
неэффективна.
Рассматриваемая ниже процедура требует только одного просмотра A и B плюс небольшое число арифметических операций доя каждого ненулевого элемент векторов. Введем в рассмотрение некоторый массив IР , длина которого равна длине векторов. Этот массив указывает позиции ненулевых элементов в AN в порядке их следования в JA :
позиция = 1 2 3 4 5 6 7 8 9 10
значение IP = 0 0 2 4 0 0 3 0 0 1 (5.2)
Этот массив сообщает,
что
хранится во второй позиции AN
,
-в
третьей и т.д. С использованием массива
указателей IР
алгоритм выглядит следующим образом:
-обнуляем весь массив IР;
- просматриваем массив JА и в позиции массива IP , номера которых содержатся в массиве JA , заносим последовательно цифры 1, 2, 3 и 4, Например, цифру 1 заносим в IP (10), цифру 2 в IP (3) и т.д. Получаем (5.2):
-обращаемся к первому
элементу массива JB , который говорит
нам о том, что
находится в первой позиции массива BN
и
;
-обращаемся к массиву
IP и обнаруживаем, что IP(5)= 0. Значит,
, Произведение не вычисляется:
-обращаемся ко 2-му
элементу массива JB и находим, что
-обращаемся к массиву
IP и обнаруживаем, что IР(4) = 4. Значит,
- прибавляем к ячейке
С произведение
-обращаемся к третьему
элементу массива JB и видим JB(3)=10. Значит,
-обращаемся к массиву
IP и обнаруживаем, что IP(10)=1. Значит
-прибавляем к ячейке
С произведение
получаем С =-0.49+0.1=-0.39
Ввиду того, что массив JB исчерпан, вычисление скалярного произведения на этом прекращается,
Если вектор A надо скалярно умножить на несколько векторов . B, то массив IP заполняется один раз и затем используется для вычисления соответствующих скалярных произведений. Этот алгоритм используется в случае умножения матрицы A на разреженный вектор b . При этом очевидно, что по вектору b один раз формируется массив указателей IP, а затем каждая 1-я строка матрицы умножается на вектор b , образуя скалярное произведение С(1). Просмотрев всю матрицу А с 1-й по n -ю строки мы получим разреженный вектор С . Часть элементов этого вектора могут быть нулевыми, если были нулевыми соответствующие, строки матрицы, либо номер ни одного из ННЭ данной строки матрица А не совпал с номером ННЭ вектора b.