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_dgetrs (f07ae)

## Purpose

nag_lapack_dgetrs (f07ae) solves a real system of linear equations with multiple right-hand sides,
 $AX=B or ATX=B ,$
where $A$ has been factorized by nag_lapack_dgetrf (f07ad).

## Syntax

[b, info] = f07ae(trans, a, ipiv, b, 'n', n, 'nrhs_p', nrhs_p)
[b, info] = nag_lapack_dgetrs(trans, a, ipiv, b, 'n', n, 'nrhs_p', nrhs_p)

## Description

nag_lapack_dgetrs (f07ae) is used to solve a real system of linear equations $AX=B$ or ${A}^{\mathrm{T}}X=B$, the function must be preceded by a call to nag_lapack_dgetrf (f07ad) which computes the $LU$ factorization of $A$ as $A=PLU$. The solution is computed by forward and backward substitution.
If ${\mathbf{trans}}=\text{'N'}$, the solution is computed by solving $PLY=B$ and then $UX=Y$.
If ${\mathbf{trans}}=\text{'T'}$ or $\text{'C'}$, the solution is computed by solving ${U}^{\mathrm{T}}Y=B$ and then ${L}^{\mathrm{T}}{P}^{\mathrm{T}}X=Y$.

## References

Golub G H and Van Loan C F (1996) Matrix Computations (3rd Edition) Johns Hopkins University Press, Baltimore

## Parameters

### Compulsory Input Parameters

1:     $\mathrm{trans}$ – string (length ≥ 1)
Indicates the form of the equations.
${\mathbf{trans}}=\text{'N'}$
$AX=B$ is solved for $X$.
${\mathbf{trans}}=\text{'T'}$ or $\text{'C'}$
${A}^{\mathrm{T}}X=B$ is solved for $X$.
Constraint: ${\mathbf{trans}}=\text{'N'}$, $\text{'T'}$ or $\text{'C'}$.
2:     $\mathrm{a}\left(\mathit{lda},:\right)$ – double array
The first dimension of the array a must be at least $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
The second dimension of the array a must be at least $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
The $LU$ factorization of $A$, as returned by nag_lapack_dgetrf (f07ad).
3:     $\mathrm{ipiv}\left(:\right)$int64int32nag_int array
The dimension of the array ipiv must be at least $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$
The pivot indices, as returned by nag_lapack_dgetrf (f07ad).
4:     $\mathrm{b}\left(\mathit{ldb},:\right)$ – double array
The first dimension of the array b must be at least $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
The second dimension of the array b must be at least $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{nrhs_p}}\right)$.
The $n$ by $r$ right-hand side matrix $B$.

### Optional Input Parameters

1:     $\mathrm{n}$int64int32nag_int scalar
Default: the first dimension of the arrays a, b and the second dimension of the arrays a, ipiv.
$n$, the order of the matrix $A$.
Constraint: ${\mathbf{n}}\ge 0$.
2:     $\mathrm{nrhs_p}$int64int32nag_int scalar
Default: the second dimension of the array b.
$r$, the number of right-hand sides.
Constraint: ${\mathbf{nrhs_p}}\ge 0$.

### Output Parameters

1:     $\mathrm{b}\left(\mathit{ldb},:\right)$ – double array
The first dimension of the array b will be $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
The second dimension of the array b will be $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{nrhs_p}}\right)$.
The $n$ by $r$ solution matrix $X$.
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}}<0$
If ${\mathbf{info}}=-i$, argument $i$ had an illegal value. An explanatory message is output, and execution of the program is terminated.

## Accuracy

For each right-hand side vector $b$, the computed solution $x$ is the exact solution of a perturbed system of equations $\left(A+E\right)x=b$, where
 $E≤cnεPLU ,$
$c\left(n\right)$ is a modest linear function of $n$, and $\epsilon$ is the machine precision.
If $\stackrel{^}{x}$ is the true solution, then the computed solution $x$ satisfies a forward error bound of the form
 $x-x^∞ x∞ ≤cncondA,xε$
where $\mathrm{cond}\left(A,x\right)={‖\left|{A}^{-1}\right|\left|A\right|\left|x\right|‖}_{\infty }/{‖x‖}_{\infty }\le \mathrm{cond}\left(A\right)={‖\left|{A}^{-1}\right|\left|A\right|‖}_{\infty }\le {\kappa }_{\infty }\left(A\right)$.
Note that $\mathrm{cond}\left(A,x\right)$ can be much smaller than $\mathrm{cond}\left(A\right)$, and $\mathrm{cond}\left({A}^{\mathrm{T}}\right)$ can be much larger (or smaller) than $\mathrm{cond}\left(A\right)$.
Forward and backward error bounds can be computed by calling nag_lapack_dgerfs (f07ah), and an estimate for ${\kappa }_{\infty }\left(A\right)$ can be obtained by calling nag_lapack_dgecon (f07ag) with ${\mathbf{norm_p}}=\text{'I'}$.

The total number of floating-point operations is approximately $2{n}^{2}r$.
This function may be followed by a call to nag_lapack_dgerfs (f07ah) to refine the solution and return an error estimate.
The complex analogue of this function is nag_lapack_zgetrs (f07as).

## Example

This example solves the system of equations $AX=B$, where
 $A= 1.80 2.88 2.05 -0.89 5.25 -2.95 -0.95 -3.80 1.58 -2.69 -2.90 -1.04 -1.11 -0.66 -0.59 0.80 and B= 9.52 18.47 24.35 2.25 0.77 -13.28 -6.22 -6.21 .$
Here $A$ is nonsymmetric and must first be factorized by nag_lapack_dgetrf (f07ad).
```function f07ae_example

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

trans = 'N';
a = [1.8, 2.88, 2.05, -0.89;
5.25, -2.95, -0.95, -3.8;
1.58, -2.69, -2.9, -1.04;
-1.11, -0.66, -0.59, 0.8];
b = [9.52, 18.47;
24.35, 2.25;
0.77, -13.28;
-6.22, -6.21];

% Factorize A

% Compute Solution
[x, info] = f07ae(trans, LU, ipiv, b);

[ifail] = x04ca( ...
'General', ' ', x, 'Solution(s)');

```
```f07ae example results

Solution(s)
1          2
1      1.0000     3.0000
2     -1.0000     2.0000
3      3.0000     4.0000
4     -5.0000     1.0000
```