Note: before using this routine, please read the Users' Note for your implementation to check the interpretation of bold italicised terms and other implementation-dependent details.
F06QVF transforms an n by n real upper triangular matrix U to an upper Hessenberg matrix H, by applying a given sequence of plane rotations from either the left or the right, in planes k1 to k2; H has nonzero subdiagonal elements hk+1,k, for k=k1,…,k2-1 only.
If SIDE='L', the rotations are applied from the left:
H=PU,
where P=Pk1Pk1+1⋯Pk2-1.
If SIDE='R', the rotations are applied from the right:
H=UPT,
where P=Pk2-1⋯Pk1+1Pk1.
In either case, Pk is a rotation in the k,k+1 plane.
The 2 by 2 plane rotation part of Pk has the form
cksk-skck.
4 References
None.
5 Parameters
1: SIDE – CHARACTER(1)Input
On entry: specifies whether U is operated on from the left or the right.
SIDE='L'
U is pre-multiplied from the left.
SIDE='R'
U is post-multiplied from the right.
Constraint:
SIDE='L' or 'R'.
2: N – INTEGERInput
On entry: n, the order of the matrices U and H.
Constraint:
N≥0.
3: K1 – INTEGERInput
4: K2 – INTEGERInput
On entry: the values k1 and k2.
If K1<1 or K2≤K1 or K2>N, an immediate return is effected.
5: C(*) – REAL (KIND=nag_wp) arrayInput
Note: the dimension of the array C
must be at least
K2-K1.
On entry: Ck must hold ck, the cosine of the rotation Pk, for k=k1,…,k2-1.
6: S(*) – REAL (KIND=nag_wp) arrayInput/Output
Note: the dimension of the array S
must be at least
K2-K1.
On entry: Sk must hold sk, the sine of the rotation Pk, for k=k1,…,k2-1.
On exit: Sk holds hk+1,k, the subdiagonal element of H, for k=k1,…,k2-1.
7: A(LDA,*) – REAL (KIND=nag_wp) arrayInput/Output
Note: the second dimension of the array A
must be at least
N.
On entry: the n by n upper triangular matrix U.
On exit: the upper triangular part of the upper Hessenberg matrix H.
8: LDA – INTEGERInput
On entry: the first dimension of the array A as declared in the (sub)program from which F06QVF is called.