Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Абстрактные классы.rtf
Скачиваний:
6
Добавлен:
10.07.2019
Размер:
2.25 Mб
Скачать

2.6. Практическое применение: Треугольные матрицы

Двумерный массив, часто называемый матрицей (matrix), предоставляет важную для математики структуру данных. В этом разделе мы исследуем квадратные матрицы (square matrices — матрицы с одинаковым числом строк и столбцов), чьи элементы данных являются действительными числами. Мы разрабатываем класс TriMat, определяющий верхние треугольные матрицы (upper triangular matrices), в которых все элементы, находящиеся ниже диагонали, имеют нулевые значения.

(пример треугольной матрицы)

В математических терминах, Аi,j=0 для j<i. Верхний треугольник определяется элементами Аi,j для j³i. Эти матрицы имеют важные алгебраическиесвойства и используются для решения систем уравнений. Реализация операций верхней треугольной матрицы в классе TriMat показывает способ эффективного хранения треугольной матрицы в виде одномерного массива.

2.6.1. Свойства верхней треугольной матрицы

Если верхняя треугольная матрица имеет n2 элементов, приблизительно половина из них являются нулевыми и нет необходимости сохранять их явно. Конкретно, если мы вычитаем n диагональных элементов из суммы n2 элементов, то половина оставшихся элементов являются нулевыми. Например, при n=25 имеется 300 элементов со значением 0:

(n2-n)/2 = (252-25)/2=(625-25)/2 = 300

Далее следует набор операций для треугольных матриц. Мы определяем сложение, вычитание и умножение матриц, а также детерминант, который имеет важное применение для решения уравнений.

Сумма или разность двух треугольных матриц А и В получается в результате сложения или вычитания соответствующих элементов матриц. Результирующая матрица является треугольной.

Сложение С = А + В

где С - это треугольная матрица с элементами Ci,j = Ai,j + Bi,j.

Вычитание С = А - В

где С - это треугольная матрица с элементами Ci,j = Ai,j + Bi,j.

Умножение С = А * В

Результирующая матрица С - это треугольная матрица с элементами Ci,j, значения которых вычисляются из элементов строки i матрицы А и столбца j матрицы В:

Ci,j=(Ai,0*B0,j)+ (Ai,1*B1,j)+ (Ai,2*B2,j)+…+ (Ai,n-1*Bn-1,j)

Для общей квадратной матрицы детерминант является сложной для вычисления функцией, однако вычислить детерминант треугольной матрицы не трудно. Просто получите произведение элементов на диагонали.

2.6.2. Хранение треугольной матрицы

Применение для хранения верхней треугольной матрицы стандартного двумерного массива требует использования всей памяти размером n2, несмотря на прогнозируемые нули, расположенные ниже диагонали. Для исключения этого пространства мы сохраняем элементы из треугольной матрицы в одномерном массиве М. Все элементы ниже главной диагонали не сохраняются. Таблица 3.1 показывает количество элементов, которые сохраняются в каждой строке.

Хранение треугольной матрицы

Таблица 1

Строка

Число элементов

Элементы

0

n

(A0,0…A0,n-1)

1

n-1

(A1,1…A1,n-1)

2

n-2

(A2,2…A2,n-1)

n-2

2

(An-2,n-2…An-2,n-1)

n-1

1

(An-1,n-1)

Алгоритму сохранения требуется функция доступа, которая должна определять местоположение в массиве М элемента Ai,j. Для j < i элемент Ai,j является равным 0 и не сохраняется в М. Для j ³ i функция доступа использует информацию о числе сохраняемых элементов в каждой строке вплоть до строки i. Эта информация может быть вычислена для каждой строки i и сохранена в массиве (rowTable) для использования функцией доступа.

Строка

rowTable

Замечание

0

rowTable[0] = 0

0 элементов перед строкой 0

1

rowTable [1] = n

n элементов перед строкой 1 (от строки 0)

2

rowTable [2] = n + n-1

n + n-1 элементов перед строкой 2

3

rowTable[3] = n + n-l+n-2

элементы перед строкой 3

n-1

rowTable[n-1] = n + n-1 + ... +2