Оглавление справочника

Два контейнера для одной системы

Плотная матрица заранее выделяет n² ячеек. Триплетная сборка резервирует линейные массивы только под вклады элементов.

Шаг 1 из 5

Цепочка элементов и глобальные степени свободы

Выберите стержень: его четыре коэффициента подсветятся в обоих представлениях.

Полная матрица системы

Наглядно, но память выделяется и для всех нулей.

81 ячейка

Разреженная сборка МКЭ‑Ф

Линейные буферы → объединение адресов → разреженная матрица.

32 вклада
1

Карта СС и ndgrid

dofsглобальные СС элемента
elementRows(:)номера строк
elementColumns(:)номера столбцов
stiffness(:)коэффициенты жёсткости

Один цвет связывает строку, столбец и значение одного триплета. Для матрицы 2 × 2 получаются четыре пары адресов.

2

Триплеты до суммирования

Выберите элемент в цепочке эл-тов
globalK = sparse(rows, columns, stiffnessValues, n, n);

Библиотечная функция GNU Octave принимает координаты и значения, складывает записи с одинаковым адресом и создаёт разреженную матрицу заданного размера.

3

После sparse()

уникальных адресов
повторов сложено
заполнение
Две полные K и M
По n² чисел на каждую матрицу, включая нули.
Буферы текущей сборки
rows, columns, значения K и значения M; по четыре записи на элементную матрицу 2 × 2.
Ненулевые значения K и M
Без учёта служебных индексов внутреннего формата Octave.

sparse() строит матрицу, но не решает систему

После сборки разреженная матрица ведёт себя как обычная: из неё можно выделить Kff, умножить её на вектор или передать стандартному оператору решения. Octave видит разреженный тип и использует подходящие численные алгоритмы, не требуя вручную восстанавливать квадрат со всеми нулями.

Статическая система

Первая СС закреплена, нагрузка приложена к последней. Решается только свободная часть.

u(freeDOFs) = Kff \ Ff