public MatrixValue Function(MatrixValue M, MatrixValue phi) { if (M.IsSymmetric) { var cg = new CGSolver(M); return cg.Solve(phi); } else if (M.DimensionX == M.DimensionY && M.DimensionY > 64) // Is there a way to "guess" a good number for this? { var gmres = new GMRESkSolver(M); gmres.Restart = 30; return gmres.Solve(phi); } return M.Inverse() * phi; }
public MatrixValue Function(MatrixValue A, MatrixValue x, MatrixValue b) { var gmres = new GMRESkSolver(A); gmres.X0 = x; return gmres.Solve(b); }