# DSPF_dp_qrd_solver [DSPF_dp_qrd, DSPF_dp_qrd_cmplx]

Collaboration diagram for DSPF_dp_qrd_solver:

## Functions

int DSPF_dp_qrd_solver (const int Nrows, const int Ncols, double *restrict Q, double *restrict R, double *restrict b, double *restrict y, double *restrict x)
int DSPF_dp_qrd_solver_cmplx (const int Nrows, const int Ncols, double *restrict Q, double *restrict R, double *restrict b, double *restrict y, double *restrict x)

## Function Documentation

 int DSPF_dp_qrd_solver ( const int Nrows, const int Ncols, double *restrict Q, double *restrict R, double *restrict b, double *restrict y, double *restrict x )

This function solves the system of linear equations A*x=b for x using the inputs produced by DSPF_dp_qrd where A*x=Q*R*x=b. The following procedure is performed.

1. Use matrix multiplication to generate y: y = transpose(Q)*b
2. Use backward substitution for solve for x: x = inv(R)*y

The values stored in the matrices are assumed to be double precision floating point values. This code is suitable for dense matrices. No optimizations are made for sparse matrices.

Parameters:
 Nrows = number of rows in matrix A Ncols = number of columns in matrix A Q = pointer to lower triangular matrix Q[Nrows*Nrows] R = pointer to upper triangular matrix R[Nrows*Ncols] b = pointer to vector b[Nrows] y = pointer to temporary vector y[Nrows] x = pointer to final solver output vector x[Ncols]
Algorithm:
DSPF_dp_qrd_cn.c is the natural C equivalent of the optimized intrinsic C code without restrictions. Note that the intrinsic C code is optimized and restrictions may apply.
Assumptions:
The arrays P, L, U, and inv_A are stored in distinct arrays. In-place processing is not done.
Implementation Notes:
Interruptibility : The code is interruptible.
Endian support : supports both Little and Big endian modes.

 int DSPF_dp_qrd_solver_cmplx ( const int Nrows, const int Ncols, double *restrict Q, double *restrict R, double *restrict b, double *restrict y, double *restrict x )

This function solves the system of linear equations A*x=b for x using the inputs produced by DSPF_dp_qrd where A*x=Q*R*x=b. The following procedure is performed.

1. Use matrix multiplication to generate y: y = transpose(Q)*b
2. Use backward substitution for solve for x: x = inv(R)*y

The values stored in the matrices are assumed to be double precision floating point values. This code is suitable for dense matrices. No optimizations are made for sparse matrices.

Parameters:
 Nrows = number of rows in matrix A Ncols = number of columns in matrix A Q = pointer to lower triangular matrix Q[Nrows*2*Nrows] R = pointer to upper triangular matrix R[Nrows*2*Ncols] b = pointer to vector b[2*Nrows] y = pointer to temporary vector y[2*Nrows] x = pointer to final solver output vector x[2*Ncols]
Algorithm:
DSPF_dp_qrd_cmplx_cn.c is the natural C equivalent of the optimized intrinsic C code without restrictions. Note that the intrinsic C code is optimized and restrictions may apply.
Assumptions:
1. The arrays P, L, U, and inv_A are stored in distinct arrays. In-place processing is not done.
2. The arrays consist of complex number entries with alternating real and imaginary parts: real0,imag0,real1,imag1,...
Implementation Notes:
Interruptibility : The code is interruptible.
Endian support : supports both Little and Big endian modes.