PDF version (NAG web site
, 64-bit version, 64-bit version)
NAG Toolbox: nag_lapack_dtrsyl (f08qh)
Purpose
nag_lapack_dtrsyl (f08qh) solves the real quasi-triangular Sylvester matrix equation.
Syntax
[
c,
scale,
info] = f08qh(
trana,
tranb,
isgn,
a,
b,
c, 'm',
m, 'n',
n)
[
c,
scale,
info] = nag_lapack_dtrsyl(
trana,
tranb,
isgn,
a,
b,
c, 'm',
m, 'n',
n)
Description
nag_lapack_dtrsyl (f08qh) solves the real Sylvester matrix equation
where
or
, and the matrices
and
are upper quasi-triangular matrices in canonical Schur form (as returned by
nag_lapack_dhseqr (f08pe));
is a scale factor (
) determined by the function to avoid overflow in
;
is
by
and
is
by
while the right-hand side matrix
and the solution matrix
are both
by
. The matrix
is obtained by a straightforward process of back-substitution (see
Golub and Van Loan (1996)).
Note that the equation has a unique solution if and only if , where and are the eigenvalues of and respectively and the sign ( or ) is the same as that used in the equation to be solved.
References
Golub G H and Van Loan C F (1996) Matrix Computations (3rd Edition) Johns Hopkins University Press, Baltimore
Higham N J (1992) Perturbation theory and backward error for Numerical Analysis Report University of Manchester
Parameters
Compulsory Input Parameters
- 1:
– string (length ≥ 1)
-
Specifies the option
.
- .
- or
- .
Constraint:
, or .
- 2:
– string (length ≥ 1)
-
Specifies the option
.
- .
- or
- .
Constraint:
, or .
- 3:
– int64int32nag_int scalar
-
Indicates the form of the Sylvester equation.
- The equation is of the form .
- The equation is of the form .
Constraint:
or .
- 4:
– double array
-
The first dimension of the array
a must be at least
.
The second dimension of the array
a must be at least
.
The
by
upper quasi-triangular matrix
in canonical Schur form, as returned by
nag_lapack_dhseqr (f08pe).
- 5:
– double 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
upper quasi-triangular matrix
in canonical Schur form, as returned by
nag_lapack_dhseqr (f08pe).
- 6:
– double array
-
The first dimension of the array
c must be at least
.
The second dimension of the array
c must be at least
.
The by right-hand side matrix .
Optional Input Parameters
- 1:
– int64int32nag_int scalar
-
Default:
the first dimension of the array
a and the second dimension of the array
a. (An error is raised if these dimensions are not equal.)
, the order of the matrix , and the number of rows in the matrices and .
Constraint:
.
- 2:
– int64int32nag_int scalar
-
Default:
the first dimension of the array
b and the second dimension of the array
b. (An error is raised if these dimensions are not equal.)
, the order of the matrix , and the number of columns in the matrices and .
Constraint:
.
Output Parameters
- 1:
– double array
-
The first dimension of the array
c will be
.
The second dimension of the array
c will be
.
c stores the solution matrix
.
- 2:
– double scalar
-
The value of the scale factor .
- 3:
– int64int32nag_int scalar
unless the function detects an error (see
Error Indicators and Warnings).
Error Indicators and Warnings
Cases prefixed with W are classified as warnings and
do not generate an error of type NAG:error_n. See nag_issue_warnings.
-
If , parameter had an illegal value on entry. The parameters are numbered as follows:
1:
trana, 2:
tranb, 3:
isgn, 4:
m, 5:
n, 6:
a, 7:
lda, 8:
b, 9:
ldb, 10:
c, 11:
ldc, 12:
scale, 13:
info.
It is possible that
info refers to a parameter that is omitted from the MATLAB interface. This usually indicates that an error in one of the other input parameters has caused an incorrect value to be inferred.
- W
-
and have common or close eigenvalues, perturbed values of which were used to solve the equation.
Accuracy
Consider the equation . (To apply the remarks to the equation , simply replace by .)
Let
be the computed solution and
the residual matrix:
Then the residual is always small:
However,
is
not necessarily the exact solution of a slightly perturbed equation; in other words, the solution is not backwards stable.
For the forward error, the following bound holds:
but this may be a considerable over estimate. See
Golub and Van Loan (1996) for a definition of
, and
Higham (1992) for further details.
These remarks also apply to the solution of a general Sylvester equation, as described in
Further Comments.
Further Comments
The total number of floating-point operations is approximately .
To solve the
general real Sylvester equation
where
and
are general nonsymmetric matrices,
and
must first be reduced to Schur form
(by calling
nag_lapack_dgees (f08pa), for example):
where
and
are upper quasi-triangular and
and
are orthogonal. The original equation may then be transformed to:
where
and
.
may be computed by matrix multiplication;
nag_lapack_dtrsyl (f08qh) may be used to solve the transformed equation; and the solution to the original equation can be obtained as
.
The complex analogue of this function is
nag_lapack_ztrsyl (f08qv).
Example
This example solves the Sylvester equation
, where
and
Open in the MATLAB editor:
f08qh_example
function f08qh_example
fprintf('f08qh example results\n\n');
a = [ 0.10, 0.50, 0.68, -0.21;
-0.50, 0.10, -0.24, 0.67;
0, 0, 0.19, -0.35;
0, 0, 0, -0.72];
b = [-0.99, -0.17, 0.39, 0.58;
0, 0.48, -0.84, -0.15;
0, 0, 0.75, 0.25;
0, 0, -0.25, 0.75];
c = [ 0.63, -0.56, 0.08, -0.23;
-0.45, -0.31, 0.27, 1.21;
0.20, -0.35, 0.41, 0.84;
0.49, -0.05, -0.52, -0.08];
trana = 'No transpose';
tranb = 'No transpose';
isgn = int64(1);
[X, scale, info] = f08qh( ...
trana, tranb, isgn, a, b, c);
disp('Solution matrix');
disp(X);
f08qh example results
Solution matrix
-0.4209 0.1764 0.2438 -0.9577
0.5600 -0.8337 -0.7221 0.5386
-0.1246 -0.3392 0.6221 0.8691
-0.2865 0.4113 0.5535 0.3174
PDF version (NAG web site
, 64-bit version, 64-bit version)
© The Numerical Algorithms Group Ltd, Oxford, UK. 2009–2015