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