public static int Rank(MMatrix A) { MMatrix temp = A.EchelonForm(); int index = Math.Min(temp.row, temp.col); int rank = 0; for (int i = 0; i < index; ++i) { if (temp[i, i] != 0) rank++; } return rank; }
//Homogenious system: Solve A*x = 0 public static Vector SolveSystemOfEquations(MMatrix A) { MMatrix Ref = new MMatrix(); Vector x = new Vector(A.col); double sum; Ref = A.EchelonForm(); for (int i = A.row - 1; i >= 0; i--) { //The system has more than one solutions. Get one. if (Ref[i, i] == 0) x[i] = 1; else { sum = 0; for (int j = i + 1; j < Ref.col; ++j) { sum += Ref[i, j] * x[j]; } x[i] = -sum / Ref[i, i]; } } return x; }