Multiplies a real matrix by the real orthogonal matrix Q determined by ?sptrd.

Syntax

lapack_int LAPACKE_sopmtr (int matrix_layout, char side, char uplo, char trans, lapack_int m, lapack_int n, const float* ap, const float* tau, float* c, lapack_int ldc);

lapack_int LAPACKE_dopmtr (int matrix_layout, char side, char uplo, char trans, lapack_int m, lapack_int n, const double* ap, const double* tau, double* c, lapack_int ldc);

Include Files

  • mkl.h

Description

The routine multiplies a real matrix C by Q or QT, where Q is the orthogonal matrix Q formed by sptrd when reducing a packed real symmetric matrix A to tridiagonal form: A = Q*T*QT. Use this routine after a call to ?sptrd.

Depending on the parameters side and trans, the routine can form one of the matrix products Q*C, QT*C, C*Q, or C*QT (overwriting the result on C).

Input Parameters

In the descriptions below, r denotes the order of Q:

If side = 'L', r = m; if side = 'R', r = n.

matrix_layout

Specifies whether matrix storage layout is row major (LAPACK_ROW_MAJOR) or column major (LAPACK_COL_MAJOR).

side

Must be either 'L' or 'R'.

If side = 'L', Q or QT is applied to C from the left.

If side = 'R', Q or QT is applied to C from the right.

uplo

Must be 'U' or 'L'.

Use the same uplo as supplied to ?sptrd.

trans

Must be either 'N' or 'T'.

If trans = 'N', the routine multiplies C by Q.

If trans = 'T', the routine multiplies C by QT.

m

The number of rows in the matrix C (m 0).

n

The number of columns in C (n 0).

ap, tau, c

ap and tau are the arrays returned by ?sptrd.

The dimension of ap must be at least max(1, r(r+1)/2).

The dimension of tau must be at least max(1, r-1).

c(size max(1, ldc*n) for column major layout and max(1, ldc*m) for row major layout) contains the matrix C.

ldc

The leading dimension of c; ldc max(1, n) for column major layout and ldc max(1, m) for row major layout .

Output Parameters

c

Overwritten by the product Q*C, QT*C, C*Q, or C*QT (as specified by side and trans).

Return Values

This function returns a value info.

If info=0, the execution is successful.

If info = -i, the i-th parameter had an illegal value.

Application Notes

The computed product differs from the exact product by a matrix E such that ||E||2 = O(ε) ||C||2, where ε is the machine precision.

The total number of floating-point operations is approximately 2*m2*n if side = 'L', or 2*n2*m if side = 'R'.

The complex counterpart of this routine is upmtr.

有关编译器优化的更完整信息,请参阅优化通知
选择粘滞按钮颜色: 
Orange (only for download buttons)