Поскольку этот вопрос также задает вопрос о Armadillo , здесь приведен соответствующий код на основе Armadillo. Лучше всего использовать Armadillo версии 9.100+ или более поздней и связываться с SuperLU.
#include <armadillo>
using namespace arma;
int main()
{
sp_mat A(4,4); // don't need to explicitly reserve the number of non-zeros
// fill with direct element access
A(0,0) = 1.0;
A(0,1) = 2.0;
A(1,1) = 3.0;
A(2,2) = 4.0;
A(2,3) = 5.0;
A(3,2) = 6.0;
A(3,3) = 7.0; // etc
// or load the sparse matrix from a text file with the data stored in coord format
sp_mat AA;
AA.load("my_sparse_matrix.txt", coord_ascii)
vec b; // ... fill b here ...
vec x = spsolve(A,b); // solve sparse system
return 0;
}
См. Также документацию для SpMat , доступ к элементу , .load () , spsolve () .
Формат файла координат прост. Он хранит ненулевые значения.
Каждая строка содержит:
row col value
Количество строк и столбцов начинается с нуля. Пример:
0 0 1.0
0 1 2.0
1 1 3.0
2 2 4.0
2 3 5.0
3 2 6.0
3 3 7.0
1000 2000 9.0
Значения, не указанные явно, предполагаются равными нулю.