Integer type:  int32  int64  nag_int  show int32  show int32  show int64  show int64  show nag_int  show nag_int

Chapter Contents
Chapter Introduction
NAG Toolbox

# NAG Toolbox: nag_lapack_dgebak (f08nj)

## Purpose

nag_lapack_dgebak (f08nj) transforms eigenvectors of a balanced matrix to those of the original real nonsymmetric matrix.

## Syntax

[v, info] = f08nj(job, side, ilo, ihi, scale, v, 'n', n, 'm', m)
[v, info] = nag_lapack_dgebak(job, side, ilo, ihi, scale, v, 'n', n, 'm', m)

## Description

nag_lapack_dgebak (f08nj) is intended to be used after a real nonsymmetric matrix $A$ has been balanced by nag_lapack_dgebal (f08nh), and eigenvectors of the balanced matrix ${A}_{22}^{\prime \prime }$ have subsequently been computed.
For a description of balancing, see the document for nag_lapack_dgebal (f08nh). The balanced matrix ${A}^{\prime \prime }$ is obtained as ${A}^{\prime \prime }=DPA{P}^{\mathrm{T}}{D}^{-1}$, where $P$ is a permutation matrix and $D$ is a diagonal scaling matrix. This function transforms left or right eigenvectors as follows:
• if $x$ is a right eigenvector of ${A}^{\prime \prime }$, ${P}^{\mathrm{T}}{D}^{-1}x$ is a right eigenvector of $A$;
• if $y$ is a left eigenvector of ${A}^{\prime \prime }$, ${P}^{\mathrm{T}}Dy$ is a left eigenvector of $A$.

None.

## Parameters

### Compulsory Input Parameters

1:     $\mathrm{job}$ – string (length ≥ 1)
This must be the same argument job as supplied to nag_lapack_dgebal (f08nh).
Constraint: ${\mathbf{job}}=\text{'N'}$, $\text{'P'}$, $\text{'S'}$ or $\text{'B'}$.
2:     $\mathrm{side}$ – string (length ≥ 1)
Indicates whether left or right eigenvectors are to be transformed.
${\mathbf{side}}=\text{'L'}$
The left eigenvectors are transformed.
${\mathbf{side}}=\text{'R'}$
The right eigenvectors are transformed.
Constraint: ${\mathbf{side}}=\text{'L'}$ or $\text{'R'}$.
3:     $\mathrm{ilo}$int64int32nag_int scalar
4:     $\mathrm{ihi}$int64int32nag_int scalar
The values ${i}_{\mathrm{lo}}$ and ${i}_{\mathrm{hi}}$, as returned by nag_lapack_dgebal (f08nh).
Constraints:
• if ${\mathbf{n}}>0$, $1\le {\mathbf{ilo}}\le {\mathbf{ihi}}\le {\mathbf{n}}$;
• if ${\mathbf{n}}=0$, ${\mathbf{ilo}}=1$ and ${\mathbf{ihi}}=0$.
5:     $\mathrm{scale}\left(:\right)$ – double array
The dimension of the array scale must be at least $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$
Details of the permutations and/or the scaling factors used to balance the original real nonsymmetric matrix, as returned by nag_lapack_dgebal (f08nh).
6:     $\mathrm{v}\left(\mathit{ldv},:\right)$ – double array
The first dimension of the array v must be at least $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
The second dimension of the array v must be at least $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{m}}\right)$.
The matrix of left or right eigenvectors to be transformed.

### Optional Input Parameters

1:     $\mathrm{n}$int64int32nag_int scalar
Default: the first dimension of the array v.
$n$, the number of rows of the matrix of eigenvectors.
Constraint: ${\mathbf{n}}\ge 0$.
2:     $\mathrm{m}$int64int32nag_int scalar
Default: the second dimension of the array v.
$m$, the number of columns of the matrix of eigenvectors.
Constraint: ${\mathbf{m}}\ge 0$.

### Output Parameters

1:     $\mathrm{v}\left(\mathit{ldv},:\right)$ – double array
The first dimension of the array v will be $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
The second dimension of the array v will be $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{m}}\right)$.
The transformed eigenvectors.
2:     $\mathrm{info}$int64int32nag_int scalar
${\mathbf{info}}=0$ unless the function detects an error (see Error Indicators and Warnings).

## Error Indicators and Warnings

${\mathbf{info}}=-i$
If ${\mathbf{info}}=-i$, parameter $i$ had an illegal value on entry. The parameters are numbered as follows:
1: job, 2: side, 3: n, 4: ilo, 5: ihi, 6: scale, 7: m, 8: v, 9: ldv, 10: 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.

## Accuracy

The errors are negligible.

The total number of floating-point operations is approximately proportional to $nm$.
The complex analogue of this function is nag_lapack_zgebak (f08nw).

## Example

See Example in nag_lapack_dgebal (f08nh).
```function f08nj_example

fprintf('f08nj example results\n\n');

n = int64(4);
a = [ 5.14, 0.91,  0.00, -32.80;
0.91, 0.20,  0.00,  34.50;
1.90, 0.80, -0.40,  -3.00;
-0.33, 0.35,  0.00,   0.66];

% Balance a
[a, ilo, ihi, scale, info] = f08nh( ...
'Both', a);

% Reduce a to upper Hessenberg form
[H, tau, info] = f08ne( ...
ilo, ihi, a);

% Form Q
[Q, info] = f08nf( ...
ilo, ihi, H, tau);

% Calculate the eigenvalues and Schur factorisation of A
[H, wr, wi, Z, info] = f08pe( ...
'Schur Form', 'Vectors', ilo, ihi, H, Q);

w = wr + i*wi;
disp('Eigenvalues:');
disp(w);

% Calculate the eigenvectors of A
[select, ~, VR, m, info] = ...
f08qk( ...
'Right', 'Backtransform', false, H, zeros(1), Z, n);

% Back scale to get eigenvectors of A
[VR, info] = f08nj( ...
'Both', 'Right', ilo, ihi, scale, VR);

% Normalize eigenvectors: largest element positive
for j = 1:n
[~,k] = max(abs(VR(:,j)));
VR(:,j) =VR(:,j)/norm(VR(:,j));
if VR(k,j) < 0;
VR(:,j) = -VR(:,j);
end
end

disp('Eigenvectors:');
disp(VR);

```
```f08nj example results

Eigenvalues:
-0.4000
-4.0208
3.0136
7.0072

Eigenvectors:
0   -0.4381    0.4654    0.9513
0    0.8923    0.7888   -0.1714
1.0000   -0.0481    0.3981    0.2494
0   -0.0976    0.0521   -0.0589

```