# Small residual but wrong results

When I use BiCGStab to solve a linear matrix system, I use the relative residual to exit the iteration and output the results. For calculating the relative residual I divide the norm of vector $$r$$ through the norm of vector $$b$$. Where $$r$$ is according to the definition of BiCGStab algorithm and $$b$$ is the right hand side of the matrix equation.
But even if I set the relative residual for convergency to 1e-8 the difference between calculated and exact results are quite big. When setting relative residual for convergency to 1e-14, I get good results.
The matrix systems I am solving have about 100k unknowns. A lot of entries in the result vector match the exact result. Only a few are off. But these few are enough to propagate the error.
Question: Is the relative residual really a good measure for convergency? Is this a normal behavior of the algorithm?

• It appears that your system of equations is ill-conditioned, which is a common problem. You need to find a different system of equations to solve. – Brian Borchers Sep 15 '19 at 2:26
• Yes, the system of equations is ill-conditioned. I already use preconditioner like incomplete LU but still can observe the above mentioned problem. – vydesaster Sep 15 '19 at 17:54
• Is 1e-8 and 1e-14 a relative or an absolute tolerance? You need to choose a tolerance that is small relative to the norm of the right hand side. – Wolfgang Bangerth Sep 15 '19 at 20:59
• Also note that preconditioning changes the residual measure: BICGStab stops on $\|P(Ax-b)\|$ small, not $\|Ax-b\|$. The two may differ a lot, when $A$ is ill-conditioned. – Federico Poloni Sep 16 '19 at 8:37
• 1e-8 and 1e-14 are relative tolerance. Is it possible to get the unpreconditioned residual without too much computation? But this is an interesting hint. Never thought about it, but you are right. – vydesaster Sep 16 '19 at 11:59