Разреженные матрицы

Будем представлять разреженные матрицы в виде массива строк. Каждая строка - это набор ненулевых элементов, которые заданы при помощи пары: индекс столбца и значение элемента ( SortItem<nat, double> ). Обычно элементы располагаются по возрастанию индексов столбцов. Далее будем рассматривать системы линейных уравнений.

Функция slu_LDLt решает систему уравнений с симметричной матрицей:

typedef unsigned int nat;

bool slu_LDLt ( nat n, const Suite<SortItem<nat, double> > * data, const double * b, double * x );

Функция slu_LDLtO ( O - оптимизирующая ) вначале переставляет строки и столбцы матрицы для того, чтобы увеличить количество лидирующих нулей и тем самым в некоторых случаях ускоряет вычисления:

bool slu_LDLtO ( nat n, const Suite<SortItem<nat, double> > * data, const double * b, double * x );
Функция sluGaussRow решает систему линейных уравнений методом Гаусса. Выбор ведущего элемента проиходит по строкам. Матрица a и столбец свободных членов b при этом меняются:
bool sluGaussRow ( nat n, Suite<SortItem<nat, double> > * a, double * b, double * x );

Описание шаблона классов SortItem находится здесь.
Описание шаблона классов Suite находится здесь.

Исходники алгоритма находятся в файле mathem.cpp.

Наверх