6CAD-CAE-22 Хранение матриц (1014141), страница 3
Текст из файла (страница 3)
Адресная функция в этом случае является функцией индексов
loc (i, j, ... , )= loc (1, 1, ... , 1 )+ Со+ С1 i + С2 j + ... + Сt , (1)
где C0 , C1 , ... , C t - коэффициенты линейной формы, представляющей
адресную функцию;
t - размерность (т.е. число индексов массива).
Обозначим через n1 , n2 , ..., nt , размер исходного массива, соответственно по индексам i , j , ... , .Можно показать, что :
С t = 1
С t-1 = nt
С t -2= nt nt-1
........................
С 2= nt ...... n3
С 1 = nt...... n3 n2
C0 = - (C1 + C2 + ... + Ct )
В loc (1, 1, ... , 1 ) хранится адрес начала записи массива в ЗУ.
Постоянное смещение C0 возникает вследствие того, что индексы i, j, ... , начинаются не с нуля, а с единицы. Объем памяти, необходимый для записи массива описываемой структуры
l1 = n1 n2 n3 ...... nt
Например, при t = 3 будет:
loc (i, j,k )= loc (1, 1,1 )+ Со+ С1 i +С2 j + ... + С3k
Пусть i = n1 = 5 j = n2 = 3 k = n3= 7
C3 =1 C2 =7 C1 = n3 n2 = 21
C0 = - (C1 + C2 + C3 ) = - (21 + 7 + 1) = - 29
loc (1, 1,2 )= - 29 + 211 + 71 + 12 = 1
loc (1, 1,3 )= - 29 + 211 + 71 + 13 = 2
loc (1, 1,7 )= - 29 + 211 + 71 + 17 = 6
loc (1, 2,1 )= - 29 + 211 + 72 + 11 = 7
2. Симметричные матрицы
В большинстве алгоритмических языков высокого уровня стандартом языка предусматривается использование только прямоугольных массивов, в которых присутствуют элементы, соответствующие всем возможным комбинациям индексов. В ряде случаев, однако, учет специфичности структуры матрицы позволяет ограничиться хранением только части ее элементов. Так, при расчетах по МСЭ наибольшие затраты памяти связаны с запоминанием матриц жесткости подструктур и суперэлементов.
Эти матрицы жесткости симметричны, т.е. ai j = a ji и в силу этого достаточно запоминания только элементов ai j , для которых j i .
Если порядок соответствующей матрицы равен n, то число таких элементов
l2 =
3. Симметричные ленточные матрицы
Матрицы жесткости подструктур при надлежащей нумерации узловых неизвестных приобретают ленточную структуру. Не равными нулю оказываются элементы, расположенные на ( h-1 ) линиях, параллельных главной диагонали ( h - ширина ленты)
a ji = 0 ( j i + h-1, j i - h+1 )
В этом случае с учетом симметрии матриц достаточно ограничиться запоминанием только элементов главной диагонали и ( h-1) наддиагоналей.
Часто для упрощения адресной функции таких матриц не учитывают сокращения длины строки при i > n - h +1 ( i - h+1 < j < i + h-1).
При этом адресная функция принимает вид
loc (i , j)= loc (1,1) - h + i ( h - 1) + j
Подобное представление целесообразно при малых h, так как с ростом этой величины потери памяти на дополнение строк матрицы стремительно возрастают. В этом случае число хранимых элементов матрицы
l3 = n h
В качестве примера можно предложить адресную функцию более совершенного вида, используемую в комплексе КАСКАД-2.
Количество хранимых элементов в этом случае
;
Эта адресная функция приводит к появлению лишних ячеек, что демонстрируется ниже в последнем примере.
Для записи ленточных верхних треугольных матриц можно использовать этот же метод. Такие матрицы появляются, например, в алгоритме МКЭ в результате выполнения прямого хода методом исключения Гаусса в системе уравнений равновесия подструктуры с симметричной ленточной матрицей.
Иллюстрация приведенных методов хранения матриц:
a11 | a12 | a13 | a14 | a15 | a16 | |
a21 | l1 = n2 | |||||
a31 | a11 a12 a13.... a16 a21 a22... a26 a31 a32... a66 | |||||
a41 | ||||||
a51 | ||||||
a61 | a62 | a63 | a64 | a65 | a66 |
l2= | a12 | a13 | a14 | a15 | a16 | |
a22 | a23 | a24 | a25 | a26 | ||
a33 | a34 | a35 | a36 | |||
a44 | a45 | a46 | a11 a12 a13.... a16 a22 a23... a26 a33 a34... a55 a56 a66 | |||
0 или симметрично | a55 | a56 | ||||
a66 |
j
4
6
5
3
2
1
l4 = n h - i 1 a11 | a12 | a13 | l3 = n h | |||
1 a21 | a22 | a23 | a24 | |||
1 a31 | a32 | a33 | a34 | a35 | ||
4 | a44 | a45 | a46 | a11 a12 a13 a22 a23... a55 a56 a66 | ||
0 упрощенная адресная функция 0 0 или симметрично 5 | a55 | a56 | ||||
0 6 | a66 |
Для сокращения записи матрицы и ускорения ее обработки следует стремиться к минимизации ширины ленты. Однако часто, особенно в конструкциях с вырезами, затруднительно получить малую по сравнению с порядком системы ширину ленты.
В заключение следует упомянуть еще об одном методе уплотнения записи больших матриц, основанном на различном представлении в ЭВМ чисел с фиксированным положением десятичной точки и чисел, представленных в виде мантиссы и порядка. При обычном развороте матрицы с учетом ее структуры (симметричная, ленточная и т.д.) каждая группа подряд идущих нулевых элементов заменяется целым числом, равным количеству таких элементов.
Поскольку это целое число имеет соответствующее представление в памяти, оно может быть автоматически выделено в процессе обработки матрицы, и ее структура будет восстановлена. Объем хранимой информации при таком методе не превышает объема исходной матрицы, при значительном количестве групп нулевых элементов может быть получена большая экономия памяти. Такая форма записи целесообразна для матриц жесткости подструктур, особенно нижних уровней.
Использование связных списков с непосредственной алресацией при упаковке.
Сначала вспомним основные понятия, причем безотносительно к непосредственной адресации.
Итак, массив – это простейшая структура данных. Примеры — А (I), В (I, J) и т. д. В массиве могут храниться просто числа.
Другая возможность: массив содержит указатели на элементы более сложной природы, хранящиеся в действительности где-то в другом месте. Все элементы массива доступны непосредственно за время, не зависящее от его размера. Однако следует иметь в виду, что машинная память одномерна, а потому за использование двойных или кратных индексов приходится расплачиваться. Нужно заметить также, что в машинах с виртуальной памятью массив может находиться на периферийном запоминающем устройстве и не быть легко доступным.
позиция | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
A(I) | b | d | a | c | ||||
NEXT(I) | 7 | 0 | 2 | 4 | ||||
IP | 5 | |||||||
Признак конца | 0 |
В массиве А (I) хранятся элементы списка, а в NEXT (I)— указатели позиций следующих элементов. Необходим еще указатель входа IP, показывающий расположение первого элемента. В данном случае он равен 5. В позиции 5 находим первый элемент А (5) — a, a NEXT (5) = 2 сообщает, что следующий элемент нужно искать в позиции 2, Этим путем можно просмотреть весь список. В последнюю ячейку должен быть помещен признак конца, указывающий окончание списка; в нашем примере таким признаком служит 0.