Обычно матрица жёсткости получается
разреженной
, то есть содержащая большое количество нулей. Для работы с подобным типом матриц созданы специальные библиотеки (
mtl4
,
SparseLib++
,
SPARSPAK
и другие)
— это известные значения функции в узлах, а
— некие базисные функции
то
Создание матрицы
Для одного треугольника
Пусть дан один конечный элемент, для простоты — треугольный. Матрица жёсткости, по сути, задаёт связи между узлами. Так как у элемента три узла (в локальной нумерации — 0, 1 и 2), то матрица будет иметь вид
В дальнейшем матрицу для одного треугольника будем называть
локальной
, для всей сетки сразу -
глобальной
.
В общем случае, элементы
определяются через линейные функции
где
— площадь треугольного элемента.
и
получаются из
цикличной перестановкой индексов. Удобно искать
как определитель матрицы
Сами
В описываемом случае для каждого треугольника составляется такая матрица:
Первый вид обобщения на несколько треугольников
Для того, чтобы сделать из многих раздельных матриц, полученных выше, одну большую матрицу, описывающую отношения между узлами
всей
области расчёта, необходимо произвести процедуру объединения матриц. Пусть символ
обозначает разделённые элементы (рис. а), а символ
— объединённые элементы (рис. б).
Обозначим
— вектор-строку значений функции в вершинах двух треугольников (см.рис). Символ
обозначает
транспонирование
матрицы
То есть, это вектор значений функции в шести узлах треугольников. Очевидно, что при объединении оных получится вектор
, содержащий только четыре компоненты.
Преобразование происходит по схеме
Нумерация, конечно же, произвольная: необходимо равенство функции в соответствующих вершинах. Матрицу
называют матрицей преобразования, а само уравнение называют связанной системой.
Запишем теперь матрицу жёсткости для двух треугольников:
Результирующая матрица
То есть, на каждом следующем шаге необходимо добавлять новые элементы к уже существующим.
Второй вид обобщения на несколько треугольников
Пусть есть область, представленная и разбитая на треугольники так, как представлено на рисунке. Пусть данная сетка содержит
узлов. Создадим глобальную матрицу
(размера, очевидно,
) и заполним её нулями. Начнём строить локальные матрицы
для треугольников, например, для
Введём локальную нумерацию для данного треугольника: пусть его верхняя вершина имеет локальный номер
, далее по часовой стрелке
и
. Иначе говоря, пусть
глобальным
номерам
соответствуют
локальные
номера
соответственно.
Составим матрицу для этого треугольника так, как описано выше, получив что-то типа
Теперь заменим локальную нумерацию на глобальную. То есть запишем
локальное
число
как
глобальное
число
,
- как
,
- как
и так далее.
Получим
С остальными треугольниками поступаем аналогично. Необходимо помнить, что надо "дописать" число в глобальную ячейку, то есть прибавить к уже существующему.
Граничное условие гласит, что функция в узлах на границе равна нулю. Для узла
необходимо вычеркнуть
-й столбец и
-ю строку в матрице
, а также вычеркнуть сам узел из массива узлов решётки.