SparseLU.NET - это проект, созданный для работы с разреженными матрицами на платформе .NET, а также для анализа эффективности различных реализаций метода LU-разложения для разреженных матриц. Большая часть кода задокументирована, основное внимание уделено алгоритмам LU-разложения.
Консольное приложение, содержащее примеры работы с библиотекой SparseMatrixAlgebra
.
Юнит-тесты для методов LU-разложения. Проверка проводится путем поэлементного сравнения произведения NUnit
.
Содержит бенчмарки, измеряющие производительность алгоритмов LU-разложения на случайных матрицах и некоторых матрицах из коллекции SuiteSparse
.
Для сравнения также добавлены бенчмарки методов LU-разложения, реализованных в библиотеке Math.NET Numerics
.
Тестирование проводится с использованием фреймворка BenchmarkDotNet
.
Библиотека, содержащая классы и методы для работы с разреженными матрицами. Хранение разреженных матриц осуществляется в формате CSR. LU-разложение реализовано в нескольких вариациях:
- LuFactorize() - разложение с выбором ведущего элемента по столбцу.
- LuFactorizeMarkowitz() - разложение с выбором ведущего элемента по стратегии Марковица.
- LuFactorizeMarkowitz2() - разложение с выбором ведущего элемента по стратегии Марковица. Версия с отложенной перестановкой столбцов.
Соответствующие методы, где этап вычитания строк матрицы распараллелен:
- LuFactorizeParallel()
- LuFactorizeMarkowitzParallel()
- LuFactorizeMarkowitz2Parallel()
Файл Settings.cs
содержит настройки проекта. Переменная eps
- точность вычислений, может изменяться динамически.
Значения, меньшие либо равные eps
, будут считаться нулем и, соответственно, не будут храниться в объекте матрицы.
Глобальные псевдонимы типов stype
и vtype
используются для индексации и хранения значений элементов матрицы соответственно.
При желании их можно изменить и пересобрать проект.
Версия платформы: .NET 7.0
Версия языка: C# 11.0
Оконное приложение на платформе WPF
, включающее инструменты для анализа методов LU-разложения.
Все графики строятся с помощью библиотеки OxyPlot
.