IterativeSolvers.jl icon indicating copy to clipboard operation
IterativeSolvers.jl copied to clipboard

BiCGStab Fails Silently

Open packquickly opened this issue 2 years ago • 0 comments

I mentioned here https://github.com/JuliaLinearAlgebra/IterativeSolvers.jl/issues/338 that GMRES was failing silently from stagnation. Turns out BiCGStab is also failing silently from (some form of) breakdown.

Not so surprising that this fails given how I'm (mis)using the algorithm, but the failure should not be silent.

Reproducing code:

import IterativeSolvers: bicgstabl
import LinearAlgebra: cond, norm

for problem_dim in [25, 100]
    succeeded = 0
    for i = 1:100 
        condition_number = Inf
        matrix = nothing
        while condition_number > 1000
            matrix = randn(Float64, (problem_dim, problem_dim))
            condition_number = cond(matrix)
        end

        true_vec = randn(Float64, (problem_dim,))
        b = matrix * true_vec

        julia_soln = bicgstabl(matrix, b)

        residual_norm = norm(julia_soln - true_vec)

        succeeded += (residual_norm < 1)  # very loose tolerance!
    end
    println("problem dim: $problem_dim. succeeded: $succeeded")
end

packquickly avatar May 03 '23 22:05 packquickly