public SymmetricBinaryMatrix(SymmetricBinaryMatrix m) : this(m, m._cutoff, CliqueExtractionType.Upper) { }
private static Matrix SimulateLiberalStageOne(SymmetricBinaryMatrix G, Matrix C, Matrix R, Vector P, Matrix D, Matrix JC, double br) { Matrix DC = D * C; Matrix JCC = JC * C; int n = C.Rows; if (R == null) { R = new Matrix(n); for (int i = 0; i < R.Rows; ++i) for (int j = 0; j < R.Cols; ++j) if (G.GetValue(i, j) || P[i] == 1 || P[j] == 1) R[i, j] = 1; else R[i, j] = 0; } Matrix CR = R * C; Vector AO = new Vector(n); for (int i = 0; i < AO.Size; ++i) { if (Algorithms.MaxValue<double>(CR.GetRowEnumerator(i)) <= 0.0) AO[i] = 0; else AO[i] = br * (CR.GetRowSum(i) - C[i, i] ); } Matrix F = Matrix.Ones(n, n); F.SetDiagonalFromVector(Vector.Zero(n)); Matrix PAN = (F - R) * C; Matrix EA = Matrix.Zero(n, n); UpdateEAMatrix(AO, DC, EA); UpdateEAMatrix(AO, PAN, EA); UpdateEAMatrix(AO, JCC, EA); Matrix BEA = new Matrix(n); for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) BEA[i, j] = EA[i, j] < double.Epsilon ? 0 : 1; Matrix BEAT = BEA.GetTranspose(); return (BEA + BEAT) / 2; }