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?
$\begingroup$
$\endgroup$
-
6$\begingroup$ 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. $\endgroup$ – Brian Borchers Sep 15 '19 at 2:26
-
$\begingroup$ Yes, the system of equations is ill-conditioned. I already use preconditioner like incomplete LU but still can observe the above mentioned problem. $\endgroup$ – vydesaster Sep 15 '19 at 17:54
-
2$\begingroup$ 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. $\endgroup$ – Wolfgang Bangerth Sep 15 '19 at 20:59
-
1$\begingroup$ 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. $\endgroup$ – Federico Poloni Sep 16 '19 at 8:37
-
$\begingroup$ 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. $\endgroup$ – vydesaster Sep 16 '19 at 11:59