NAG Library Function Document
nag_ztrsyl (f08qvc)
1 Purpose
nag_ztrsyl (f08qvc) solves the complex triangular Sylvester matrix equation.
2 Specification
| #include <nag.h> |
| #include <nagf08.h> |
| void |
nag_ztrsyl (Nag_OrderType order,
Nag_TransType trana,
Nag_TransType tranb,
Nag_SignType sign,
Integer m,
Integer n,
const Complex a[],
Integer pda,
const Complex b[],
Integer pdb,
Complex c[],
Integer pdc,
double *scal,
NagError *fail) |
|
3 Description
nag_ztrsyl (f08qvc) solves the complex Sylvester matrix equation
where
or
, and the matrices
and
are upper triangular;
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.
4 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
5 Arguments
- 1:
order – Nag_OrderTypeInput
-
On entry: the
order argument specifies the two-dimensional storage scheme being used, i.e., row-major ordering or column-major ordering. C language defined storage is specified by
. See
Section 3.2.1.3 in the Essential Introduction for a more detailed explanation of the use of this argument.
Constraint:
or Nag_ColMajor.
- 2:
trana – Nag_TransTypeInput
-
On entry: specifies the option
.
- .
- .
Constraint:
or .
- 3:
tranb – Nag_TransTypeInput
-
On entry: specifies the option
.
- .
- .
Constraint:
or .
- 4:
sign – Nag_SignTypeInput
-
On entry: indicates the form of the Sylvester equation.
- The equation is of the form .
- The equation is of the form .
Constraint:
or .
- 5:
m – IntegerInput
-
On entry: , the order of the matrix , and the number of rows in the matrices and .
Constraint:
.
- 6:
n – IntegerInput
-
On entry:
, the order of the matrix , and the number of columns in the matrices and .
Constraint:
.
- 7:
a[] – const ComplexInput
-
Note: the dimension,
dim, of the array
a
must be at least
.
The
th element of the matrix
is stored in
- when ;
- when .
On entry: the by upper triangular matrix .
- 8:
pda – IntegerInput
-
On entry: the stride separating row or column elements (depending on the value of
order) in the array
a.
Constraint:
.
- 9:
b[] – const ComplexInput
-
Note: the dimension,
dim, of the array
b
must be at least
.
The
th element of the matrix
is stored in
- when ;
- when .
On entry: the by upper triangular matrix .
- 10:
pdb – IntegerInput
-
On entry: the stride separating row or column elements (depending on the value of
order) in the array
b.
Constraint:
.
- 11:
c[] – ComplexInput/Output
-
Note: the dimension,
dim, of the array
c
must be at least
- when
;
- when
.
The
th element of the matrix
is stored in
- when ;
- when .
On entry: the by right-hand side matrix .
On exit:
c is overwritten by the solution matrix
.
- 12:
pdc – IntegerInput
-
On entry: the stride separating row or column elements (depending on the value of
order) in the array
c.
Constraints:
- if ,
;
- if , .
- 13:
scal – double *Output
-
On exit: the value of the scale factor .
- 14:
fail – NagError *Input/Output
-
The NAG error argument (see
Section 3.6 in the Essential Introduction).
6 Error Indicators and Warnings
- NE_ALLOC_FAIL
Dynamic memory allocation failed.
- NE_BAD_PARAM
On entry, argument had an illegal value.
- NE_INT
On entry, .
Constraint: .
On entry, .
Constraint: .
On entry, .
Constraint: .
On entry, .
Constraint: .
On entry, .
Constraint: .
- NE_INT_2
On entry, and .
Constraint: .
On entry, and .
Constraint: .
On entry, and .
Constraint: .
On entry, and .
Constraint: .
- NE_INTERNAL_ERROR
An internal error has occurred in this function. Check the function call and any array sizes. If the call is correct then please contact
NAG for assistance.
- NE_PERTURBED
and have common or close eigenvalues, perturbed values of which were used to solve the equation.
7 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
Section 8.
The total number of real floating point operations is approximately .
To solve the
general complex Sylvester equation
where
and
are general matrices,
and
must first be reduced to Schur form
:
where
and
are upper triangular and
and
are unitary. The original equation may then be transformed to:
where
and
.
may be computed by matrix multiplication; nag_ztrsyl (f08qvc) may be used to solve the transformed equation; and the solution to the original equation can be obtained as
.
The real analogue of this function is
nag_dtrsyl (f08qhc).
9 Example
This example solves the Sylvester equation
, where
and
9.1 Program Text
Program Text (f08qvce.c)
9.2 Program Data
Program Data (f08qvce.d)
9.3 Program Results
Program Results (f08qvce.r)