//--------------------------------------------------------------------- // Gauss method solver //--------------------------------------------------------------------- public static decimal[] gauss_solver(DMatrix A, decimal[] b) { int n = A.rows; decimal[] x = new decimal[n]; decimal c = 0; // Forward (A to uptriangle form) for (int i = 0; i < n - 1; i++) { for (int j = i; j < n - 1; j++) { c = A.M[j + 1, i] / A.M[i, i]; for (int k = 0; k < n; k++) A.M[j + 1, k] = A.M[j + 1, k] - c * A.M[i, k]; b[j + 1] = b[j + 1] - c * b[i]; } } // Backward (roots found) for (int i = n - 1; i >= 0; i--) { decimal sum = b[i]; for (int j = n - 1; j >= i + 1; j--) sum -= A.M[i, j] * x[j]; x[i] = sum / A.M[i, i]; } return x; }
public static DMatrix operator -(DMatrix a, DMatrix b) { DMatrix c = new DMatrix(a.rows, a.columns); for (int i = 0; i < a.rows; i++) { for (int j = 0; j < a.columns; j++) c.M[i, j] = a.M[i, j] - b.M[i, j]; } return c; }
public static DMatrix operator *(DMatrix a, decimal lambda) { DMatrix c = new DMatrix(a.rows, a.columns); for (int i = 0; i < a.rows; i++) { for (int j = 0; j < a.columns; j++) c.M[i, j] = a.M[i, j]*lambda; } return c; }