Hey Toby,
My two cents:
Don't forget that while matrix-vector multiplication will still introduce
some round-off errors. Ie, when you are computing
y = A*[1,1,...]
then you are actually computing something like
y' = A*( [1,1,...]+eps).
GEMV is (backward stable) so you are sure that y' will be close to y.
This being said, I don't know much about the stability/back-ward stability
of GMRES, but if it's not backward stable you won't be able to get your
result "close" to [1,1,...].
In other words, you're probably better of comparing y' with A*x', where x'
is the output of the GMRES procedure, rather than x with x'
Philippe
2014-08-05 22:10 GMT+02:00 Toby St Clere Smithe <m...@tsmithe.net>:
> Hi all,
>
> I've now implemented a test for the iterative solvers and
> preconditioners, using generate_fdm_laplace. This is good because it
> gives consistent results, though compared to using a randomly generated
> system matrix it means that the solvers are only tested on one set of
> input data.
>
> My test works by constructing the system matrix, choosing a solution
> vector that is just a vector of 1.0s of the correct size, and
> multiplying to find the RHS to put into the solver. I then run the
> solver and compare the output to my vector of 1.0s. I report a failure
> if the error is greater than some tolerance value specific for the
> datatype.
>
> Of course, this absolute error tolerance has a different definition to
> that in (for instance) the GMRES solver, where we have
>
> "solver quits if ||r|| < tolerance * ||r_initial|| obtains."
>
> This means that the solver might return successfully, and yet cause a
> false test failure. I have a crude work-around for this. It seems to
> suffice to set the solver tolerance to 1e-1 times the test tolerance,
> which strictly might be stronger than is ideally warranted. I think this
> should suffice for the purposes of this test, however; else I'll have to
> do silly solver-specific things like computing ||r_initial||.
>
> Currently, I use a test tolerance of 1e-2 for single-precision, which
> means a solver tolerance of 1e-3. This seems less precise than I'd like;
> machine epsilon should be around 1e-7, and so I feel like I should be
> able to use a test tolerance of 1e-3 and a solver tolerance of
> 1e-4. However, using GMRES, this gives incorrect results (regardless of
> max_iterations) -- wildly so when combined with some preconditioners. I
> suspect that this is caused by rounding errors, but I'm not sure.
>
> I tried to check for what the ViennaCL test does, but I couldn't find
> one for the iterative solvers!
>
> Cheers,
>
> Toby
>
>
>
> --
> Toby St Clere Smithe
> http://tsmithe.net
>
>
>
> ------------------------------------------------------------------------------
> Infragistics Professional
> Build stunning WinForms apps today!
> Reboot your WinForms applications with our WinForms controls.
> Build a bridge from your legacy apps to the future.
>
> http://pubads.g.doubleclick.net/gampad/clk?id=153845071&iu=/4140/ostg.clktrk
> _______________________________________________
> ViennaCL-devel mailing list
> ViennaCL-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/viennacl-devel
>
------------------------------------------------------------------------------
Infragistics Professional
Build stunning WinForms apps today!
Reboot your WinForms applications with our WinForms controls.
Build a bridge from your legacy apps to the future.
http://pubads.g.doubleclick.net/gampad/clk?id=153845071&iu=/4140/ostg.clktrk
_______________________________________________
ViennaCL-devel mailing list
ViennaCL-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/viennacl-devel