PDF version (NAG web site
, 64-bit version, 64-bit version)
NAG Toolbox: nag_lapack_zgtrfs (f07cv)
Purpose
nag_lapack_zgtrfs (f07cv) computes error bounds and refines the solution to a complex system of linear equations
or
or
, where
is an
by
tridiagonal matrix and
and
are
by
matrices, using the
factorization returned by
nag_lapack_zgttrf (f07cr) and an initial solution returned by
nag_lapack_zgttrs (f07cs). Iterative refinement is used to reduce the backward error as much as possible.
Syntax
[
x,
ferr,
berr,
info] = f07cv(
trans,
dl,
d,
du,
dlf,
df,
duf,
du2,
ipiv,
b,
x, 'n',
n, 'nrhs_p',
nrhs_p)
[
x,
ferr,
berr,
info] = nag_lapack_zgtrfs(
trans,
dl,
d,
du,
dlf,
df,
duf,
du2,
ipiv,
b,
x, 'n',
n, 'nrhs_p',
nrhs_p)
Description
nag_lapack_zgtrfs (f07cv) should normally be preceded by calls to
nag_lapack_zgttrf (f07cr) and
nag_lapack_zgttrs (f07cs).
nag_lapack_zgttrf (f07cr) uses Gaussian elimination with partial pivoting and row interchanges to factorize the matrix
as
where
is a permutation matrix,
is unit lower triangular with at most one nonzero subdiagonal element in each column, and
is an upper triangular band matrix, with two superdiagonals.
nag_lapack_zgttrs (f07cs) then utilizes the factorization to compute a solution,
, to the required equations. Letting
denote a column of
,
nag_lapack_zgtrfs (f07cv) computes a
component-wise backward error,
, the smallest relative perturbation in each element of
and
such that
is the exact solution of a perturbed system
The function also estimates a bound for the component-wise forward error in the computed solution defined by , where is the corresponding column of the exact solution, .
References
Anderson E, Bai Z, Bischof C, Blackford S, Demmel J, Dongarra J J, Du Croz J J, Greenbaum A, Hammarling S, McKenney A and Sorensen D (1999)
LAPACK Users' Guide (3rd Edition) SIAM, Philadelphia
http://www.netlib.org/lapack/lug
Parameters
Compulsory Input Parameters
- 1:
– string (length ≥ 1)
-
Specifies the equations to be solved as follows:
- Solve for .
- Solve for .
- Solve for .
Constraint:
, or .
- 2:
– complex array
-
The dimension of the array
dl
must be at least
Must contain the subdiagonal elements of the matrix .
- 3:
– complex array
-
The dimension of the array
d
must be at least
Must contain the diagonal elements of the matrix .
- 4:
– complex array
-
The dimension of the array
du
must be at least
Must contain the superdiagonal elements of the matrix .
- 5:
– complex array
-
The dimension of the array
dlf
must be at least
Must contain the multipliers that define the matrix of the factorization of .
- 6:
– complex array
-
The dimension of the array
df
must be at least
Must contain the diagonal elements of the upper triangular matrix from the factorization of .
- 7:
– complex array
-
The dimension of the array
duf
must be at least
Must contain the elements of the first superdiagonal of .
- 8:
– complex array
-
The dimension of the array
du2
must be at least
Must contain the elements of the second superdiagonal of .
- 9:
– int64int32nag_int array
-
The dimension of the array
ipiv
must be at least
Must contain the pivot indices that define the permutation matrix . At the th step, row of the matrix was interchanged with row , and must always be either or , indicating that a row interchange was not performed.
- 10:
– complex array
-
The first dimension of the array
b must be at least
.
The second dimension of the array
b must be at least
.
The by matrix of right-hand sides .
- 11:
– complex array
-
The first dimension of the array
x must be at least
.
The second dimension of the array
x must be at least
.
The by initial solution matrix .
Optional Input Parameters
- 1:
– int64int32nag_int scalar
-
Default:
the first dimension of the arrays
b,
x and the dimension of the arrays
d,
df,
ipiv.
, the order of the matrix .
Constraint:
.
- 2:
– int64int32nag_int scalar
-
Default:
the second dimension of the arrays
b,
x.
, the number of right-hand sides, i.e., the number of columns of the matrix .
Constraint:
.
Output Parameters
- 1:
– complex array
-
The first dimension of the array
x will be
.
The second dimension of the array
x will be
.
The by refined solution matrix .
- 2:
– double array
-
Estimate of the forward error bound for each computed solution vector, such that
, where
is the
th column of the computed solution returned in the array
x and
is the corresponding column of the exact solution
. The estimate is almost always a slight overestimate of the true error.
- 3:
– double array
-
Estimate of the component-wise relative backward error of each computed solution vector (i.e., the smallest relative change in any element of or that makes an exact solution).
- 4:
– int64int32nag_int scalar
unless the function detects an error (see
Error Indicators and Warnings).
Error Indicators and Warnings
-
If , argument had an illegal value. An explanatory message is output, and execution of the program is terminated.
Accuracy
The computed solution for a single right-hand side,
, satisfies an equation of the form
where
and
is the
machine precision. An approximate error bound for the computed solution is given by
where
, the condition number of
with respect to the solution of the linear equations. See Section 4.4 of
Anderson et al. (1999) for further details.
Function
nag_lapack_zgtcon (f07cu) can be used to estimate the condition number of
.
Further Comments
The total number of floating-point operations required to solve the equations or or is proportional to . At most five steps of iterative refinement are performed, but usually only one or two steps are required.
The real analogue of this function is
nag_lapack_dgtrfs (f07ch).
Example
This example solves the equations
where
is the tridiagonal matrix
and
Estimates for the backward errors and forward errors are also output.
Open in the MATLAB editor:
f07cv_example
function f07cv_example
fprintf('f07cv example results\n\n');
du = [ 2 - 1i 2 + 1i -1 + 1i 1 - 1i ];
d = [-1.3 + 1.3i -1.3 + 1.3i -1.3 + 3.3i -0.3 + 4.3i -3.3 + 1.3i];
dl = [ 1 - 2i 1 + 1i 2 - 3i 1 + 1i ];
[dlf, df, duf, du2, ipiv, info] = ...
f07cr(dl, d, du);
b = [ 2.4 - 5i, 2.7 + 6.9i;
3.4 + 18.2i, -6.9 - 5.3i;
-14.7 + 9.7i, -6 - 0.6i;
31.9 - 7.7i, -3.9 + 9.3i;
-1 + 1.6i, -3 + 12.2i];
trans = 'No transpose';
[x, info] = f07cs( ...
trans, dlf, df, duf, du2, ipiv, b);
[x, ferr, berr, info] = ...
f07cv( ...
trans, dl, d, du, dlf, df, duf, du2, ipiv, b, x);
disp('Solution:');
disp(x);
fprintf('Forward error bounds = %10.1e %10.1e\n',ferr);
fprintf('Backward error bounds = %10.1e %10.1e\n',berr);
f07cv example results
Solution:
1.0000 + 1.0000i 2.0000 - 1.0000i
3.0000 - 1.0000i 1.0000 + 2.0000i
4.0000 + 5.0000i -1.0000 + 1.0000i
-1.0000 - 2.0000i 2.0000 + 1.0000i
1.0000 - 1.0000i 2.0000 - 2.0000i
Forward error bounds = 5.5e-14 7.7e-14
Backward error bounds = 3.6e-17 1.0e-16
PDF version (NAG web site
, 64-bit version, 64-bit version)
© The Numerical Algorithms Group Ltd, Oxford, UK. 2009–2015