Hello all,
Following advice on other threads, I am using iterative methods in order to solve a sparse system of equations. The matrix is 40000X40000. If I set the iteration limit to 10000 then I am able to get a solution value, however the resulting residual is highly off from 0. When I increase the iteration limit to 15000 or more, I get "Iterative solver experience numerical break down" error, and process is terminated. I was wondering if this is a common issue and if there is something - an earlier check- I can do to prevent this.
I have already tried with other solvers : TFQMR, GpBiCg ,MlkBiCgStab -I get the same error..
Also I expremented with solver Preconditioners. In that case I get NaN's as solution, regardless of iteration no.
/// Given SparseMatrix A, and DenseVector rhs:
Ahmet
                       Following advice on other threads, I am using iterative methods in order to solve a sparse system of equations. The matrix is 40000X40000. If I set the iteration limit to 10000 then I am able to get a solution value, however the resulting residual is highly off from 0. When I increase the iteration limit to 15000 or more, I get "Iterative solver experience numerical break down" error, and process is terminated. I was wondering if this is a common issue and if there is something - an earlier check- I can do to prevent this.
I have already tried with other solvers : TFQMR, GpBiCg ,MlkBiCgStab -I get the same error..
Also I expremented with solver Preconditioners. In that case I get NaN's as solution, regardless of iteration no.
/// Given SparseMatrix A, and DenseVector rhs:
      MathNet.Numerics.Control.DisableParallelization = true;
      BiCgStab solver = new BiCgStab();
    // Choose stop criterias
    var stopCriterias = new List<IIterationStopCriterium>()
    {
        new ResidualStopCriterium(1e-8),
        new IterationCountStopCriterium(15000),
        new DivergenceStopCriterium(),
        new FailureStopCriterium()
    };
    solver.SetIterator(new Iterator(stopCriterias));
    var solution = solver.Solve(A, rhs);
    bool success = false;
    foreach (var item in stopCriterias)
    {
        if (item.StopLevel == StopLevel.Convergence)
        {
            success = true;
            break;
        }
    }
    var residual = A* solution - rhs;
Thanks in advance,Ahmet