The routine may be called by the names f06qrf or nagf_blas_duhqr.
f06qrf transforms an real upper Hessenberg matrix to upper triangular form by applying an orthogonal matrix from the left or the right. is assumed to have nonzero subdiagonal elements , for , only. is formed as a sequence of plane rotations in planes to .
If , the rotations are applied from the left:
If , the rotations are applied from the right:
In either case, is a rotation in the plane, chosen to annihilate .
The plane rotation part of has the form
1: – Character(1)Input
On entry: specifies whether is operated on from the left or the right.
is pre-multiplied from the left.
is post-multiplied from the right.
2: – IntegerInput
On entry: , the order of the matrix .
3: – IntegerInput
4: – IntegerInput
On entry: the values and .
If or or , an immediate return is effected.
5: – Real (Kind=nag_wp) arrayOutput
On exit: holds , the cosine of the rotation , for .
6: – Real (Kind=nag_wp) arrayInput/Output
On entry: the nonzero subdiagonal elements of :
must hold , for .
On exit: holds , the sine of the rotation , for .
7: – Real (Kind=nag_wp) arrayInput/Output
Note: the second dimension of the array a
must be at least
On entry: the upper triangular part of the upper Hessenberg matrix .
On exit: the upper triangular matrix .
8: – IntegerInput
On entry: the first dimension of the array a as declared in the (sub)program from which f06qrf is called.