/// <summary> /// Expand matrix to full storage (symmetric matrix is expected to store upper part only). /// </summary> public static SparseMatrix Expand(this SparseMatrix A) { if (A.Any((i, j, a) => i > j && a != 0.0)) { throw new Exception("Expected matrix to be upper."); } // Transpose A. var T = A.Transpose(); // Remove diagonal. T.Keep((i, j, a) => i != j); return((SparseMatrix)A.Add(T)); }