There is one prototype of iter_gesv
available, please see below.
iter_gesv( MatrixA& a, VectorIPIV& ipiv, const MatrixB& b, MatrixX& x, int_t& iter );
iter_gesv (short for
$FRIENDLY_NAME) provides a C++ interface to LAPACK routines DSGESV and
ZCGESV. iter_gesv computes
the solution to a complex system of linear equations A * X = B, where
A is an N-by-N matrix and X and B are N-by-NRHS matrices.
iter_gesv first attempts
to factorize the matrix in COMPLEX and use this factorization within
an iterative refinement procedure to produce a solution with COMPLEX*16
normwise backward error quality (see below). If the approach fails the
method switches to a COMPLEX*16 factorization and solve.
The iterative refinement is not going to be a winning strategy if the ratio COMPLEX performance over COMPLEX*16 performance is too small. A reasonable strategy should take the number of right-hand sides and the size of the matrix into account. This might be done with a call to ILAENV in the future. Up to now, we always try iterative refinement.
The iterative refinement process is stopped if ITER > ITERMAX or for all the RHS we have: RNRM < SQRT(N)*XNRM*ANRM*EPS*BWDMAX where o ITER is the number of the current iteration in the iterative refinement process o RNRM is the infinity-norm of the residual o XNRM is the infinity-norm of the solution o ANRM is the infinity-operator-norm of the matrix A o EPS is the machine epsilon returned by DLAMCH('Epsilon') The value ITERMAX and BWDMAX are fixed to 30 and 1.0D+00 respectively.
The selection of the LAPACK routine is done during compile-time, and
is determined by the type of values contained in type MatrixA.
The type of values is obtained through the value_type
meta-function typename value_type<MatrixA>::type. The dispatching table below illustrates
to which specific routine the code path will be generated.
Table 1.137. Dispatching of iter_gesv
|
Value type of MatrixA |
LAPACK routine |
|---|---|
|
|
DSGESV |
|
|
ZCGESV |
Defined in header boost/numeric/bindings/lapack/driver/iter_gesv.hpp.
Parameters
The definition of term 1
The definition of term 2
The definition of term 3.
Definitions may contain paragraphs.
#include <boost/numeric/bindings/lapack/driver/iter_gesv.hpp> using namespace boost::numeric::bindings; lapack::iter_gesv( x, y, z );
this will output
[5] 0 1 2 3 4 5