ManagedLinearAlgebraOperations.SymmetricRankUpdate Method

Definition

Namespace: Numerics.NET.LinearAlgebra.Implementation
Assembly: Numerics.NET (in Numerics.NET.dll) Version: 9.0.2

Overload List

SymmetricRankUpdate(MatrixTriangle, Int32, T, ArraySlice<T>, Array2D<T>)

Performs the symmetric rank 1 operation A := alpha*x*x**T + A, where alpha is a real scalar, x is an n element vector and A is an n by n symmetric matrix.

SymmetricRankUpdate(MatrixTriangle, Int32, T, ArraySlice<T>, ArraySlice<T>, Array2D<T>)

Performs the symmetric rank 2 operation A := alpha*x*y**T + alpha*y*x**T + A, where alpha is a scalar, x and y are n element vectors and A is an n by n symmetric matrix.

SymmetricRankUpdate(MatrixTriangle, Int32, Double, ReadOnlySpan<Double>, Int32, Span<Double>, Int32)

Performs the symmetric rank 1 operation A := alpha*x*x**T + A, where alpha is a real scalar, x is an n element vector and A is an n by n symmetric matrix.

SymmetricRankUpdate(MatrixTriangle, TransposeOperation, Int32, Int32, T, Array2D<T>, T, Array2D<T>)

Performs one of the symmetric rank k operations C := alpha*A*AT + beta*C, or C := alpha*AT*A + beta*C, where alpha and beta are scalars, C is an n by n symmetric matrix and A is an n by k matrix in the first case and a k by n matrix in the second case.

SymmetricRankUpdate(MatrixTriangle, TransposeOperation, Int32, Int32, Complex<T>, Array2D<Complex<T>>, Complex<T>, Array2D<Complex<T>>)

Performs one of the symmetric rank k operations C := alpha*A*AT + beta*C, or C := alpha*AT*A + beta*C, where alpha and beta are scalars, C is an n by n symmetric matrix and A is an n by k matrix in the first case and a k by n matrix in the second case.

SymmetricRankUpdate(MatrixTriangle, TransposeOperation, Int32, Int32, Complex<T>, ReadOnlySpan2D<Complex<T>>, Complex<T>, Span2D<Complex<T>>)

Performs one of the symmetric rank k operations C := alpha*A*AT + beta*C, or C := alpha*AT*A + beta*C, where alpha and beta are scalars, C is an n by n symmetric matrix and A is an n by k matrix in the first case and a k by n matrix in the second case.

SymmetricRankUpdate(MatrixTriangle, TransposeOperation, Int32, Int32, T, Array2D<T>, Array2D<T>, T, Array2D<T>)

Performs one of the symmetric rank 2k operations C := alpha*A*BT + alpha*B*AT + beta*C, or C := alpha*AT*B + alpha*BT*A + beta*C, where alpha and beta are scalars, C is an n by n symmetric matrix and A and B are n by k matrices in the first case and k by n matrices in the second case.

SymmetricRankUpdate(MatrixTriangle, TransposeOperation, Int32, Int32, Complex<T>, Array2D<Complex<T>>, Array2D<Complex<T>>, Complex<T>, Array2D<Complex<T>>)

Performs one of the symmetric rank 2k operations C := alpha*A*BT + alpha*B*AT + beta*C, or C := alpha*AT*B + alpha*BT*A + beta*C, where alpha and beta are scalars, C is an n by n symmetric matrix and A and B are n by k matrices in the first case and k by n matrices in the second case.

SymmetricRankUpdate(MatrixTriangle, TransposeOperation, Int32, Int32, Complex<T>, ReadOnlySpan2D<Complex<T>>, ReadOnlySpan2D<Complex<T>>, Complex<T>, Span2D<Complex<T>>)

Performs one of the symmetric rank 2k operations C := alpha*A*BT + alpha*B*AT + beta*C, or C := alpha*AT*B + alpha*BT*A + beta*C, where alpha and beta are scalars, C is an n by n symmetric matrix and A and B are n by k matrices in the first case and k by n matrices in the second case.

SymmetricRankUpdate(MatrixTriangle, Int32, Double, ReadOnlySpan<Double>, Int32, ReadOnlySpan<Double>, Int32, Span<Double>, Int32)

Performs the symmetric rank 2 operation A := alpha*x*y**T + alpha*y*x**T + A, where alpha is a scalar, x and y are n element vectors and A is an n by n symmetric matrix.

SymmetricRankUpdate(MatrixTriangle, TransposeOperation, Int32, Int32, Complex<Double>, ReadOnlySpan<Complex<Double>>, Int32, Complex<Double>, Span<Complex<Double>>, Int32)

Performs one of the symmetric rank k operations C := alpha*A*AT + beta*C, or C := alpha*AT*A + beta*C, where alpha and beta are scalars, C is an n by n symmetric matrix and A is an n by k matrix in the first case and a k by n matrix in the second case.

SymmetricRankUpdate(MatrixTriangle, TransposeOperation, Int32, Int32, Double, ReadOnlySpan<Double>, Int32, Double, Span<Double>, Int32)

Performs one of the symmetric rank k operations C := alpha*A*AT + beta*C, or C := alpha*AT*A + beta*C, where alpha and beta are scalars, C is an n by n symmetric matrix and A is an n by k matrix in the first case and a k by n matrix in the second case.

SymmetricRankUpdate(MatrixTriangle, TransposeOperation, Int32, Int32, Complex<Double>, ReadOnlySpan<Complex<Double>>, Int32, ReadOnlySpan<Complex<Double>>, Int32, Complex<Double>, Span<Complex<Double>>, Int32)

Performs one of the symmetric rank 2k operations C := alpha*A*BT + alpha*B*AT + beta*C, or C := alpha*AT*B + alpha*BT*A + beta*C, where alpha and beta are scalars, C is an n by n symmetric matrix and A and B are n by k matrices in the first case and k by n matrices in the second case.

SymmetricRankUpdate(MatrixTriangle, TransposeOperation, Int32, Int32, Double, ReadOnlySpan<Double>, Int32, ReadOnlySpan<Double>, Int32, Double, Span<Double>, Int32)

Performs one of the symmetric rank 2k operations C := alpha*A*BT + alpha*B*AT + beta*C, or C := alpha*AT*B + alpha*BT*A + beta*C, where alpha and beta are scalars, C is an n by n symmetric matrix and A and B are n by k matrices in the first case and k by n matrices in the second case.

SymmetricRankUpdate(MatrixTriangle, Int32, Double, ReadOnlySpan<Double>, Int32, Span<Double>, Int32)

Performs the symmetric rank 1 operation A := alpha*x*x**T + A, where alpha is a real scalar, x is an n element vector and A is an n by n symmetric matrix.

C#
public override void SymmetricRankUpdate(
	MatrixTriangle storedTriangle,
	int n,
	double alpha,
	ReadOnlySpan<double> x,
	int incx,
	Span<double> a,
	int lda
)

Parameters

storedTriangle  MatrixTriangle
Specifies whether the matrix is an upper or lower triangular matrix.
n  Int32
             On entry, N specifies the order of the matrix A.
             N must be at least zero.
            
alpha  Double
            ALPHA is DOUBLE PRECISION.
             On entry, ALPHA specifies the scalar alpha.
            
x  ReadOnlySpan<Double>
            X is DOUBLE PRECISION array of dimension at least
             ( 1 + ( n - 1 )*abs( INCX ) ).
             Before entry, the incremented array X must contain the n
             element vector x.
            
incx  Int32
             On entry, INCX specifies the increment for the elements of
             X. INCX must not be zero.
            
a  Span<Double>
            A is DOUBLE PRECISION array of DIMENSION ( LDA, n ).
             Before entry with  UPLO = 'U' or 'u', the leading n by n
             upper triangular part of the array A must contain the upper
             triangular part of the symmetric matrix and the strictly
             lower triangular part of A is not referenced. On exit, the
             upper triangular part of the array A is overwritten by the
             upper triangular part of the updated matrix.
             Before entry with UPLO = 'L' or 'l', the leading n by n
             lower triangular part of the array A must contain the lower
             triangular part of the symmetric matrix and the strictly
             upper triangular part of A is not referenced. On exit, the
             lower triangular part of the array A is overwritten by the
             lower triangular part of the updated matrix.
            
lda  Int32
             On entry, LDA specifies the first dimension of A as declared
             in the calling (sub) program. LDA must be at least
             max( 1, n ).
            

Implements

ILinearAlgebraOperations<T>.SymmetricRankUpdate(MatrixTriangle, Int32, T, ReadOnlySpan<T>, Int32, Span<T>, Int32)

Remarks

Further Details:

            Level 2 LinearAlgebra routine.
            -- Written on 22-October-1986.
               Jack Dongarra, Argonne National Lab.
               Jeremy Du Croz, Nag Central Office.
               Sven Hammarling, Nag Central Office.
               Richard Hanson, Sandia National Labs.
            

Authors: Univ. of Tennessee, Univ. of California Berkeley, Univ. of Colorado Denver, NAG Ltd.

Date: November 2011

SymmetricRankUpdate(MatrixTriangle, Int32, Double, ReadOnlySpan<Double>, Int32, ReadOnlySpan<Double>, Int32, Span<Double>, Int32)

Performs the symmetric rank 2 operation A := alpha*x*y**T + alpha*y*x**T + A, where alpha is a scalar, x and y are n element vectors and A is an n by n symmetric matrix.

C#
public override void SymmetricRankUpdate(
	MatrixTriangle storedTriangle,
	int n,
	double alpha,
	ReadOnlySpan<double> x,
	int incx,
	ReadOnlySpan<double> y,
	int incy,
	Span<double> a,
	int lda
)

Parameters

storedTriangle  MatrixTriangle
Specifies whether the matrix is an upper or lower triangular matrix.
n  Int32
             On entry, N specifies the order of the matrix A.
             N must be at least zero.
            
alpha  Double
            ALPHA is DOUBLE PRECISION.
             On entry, ALPHA specifies the scalar alpha.
            
x  ReadOnlySpan<Double>
            X is DOUBLE PRECISION array of dimension at least
             ( 1 + ( n - 1 )*abs( INCX ) ).
             Before entry, the incremented array X must contain the n
             element vector x.
            
incx  Int32
             On entry, INCX specifies the increment for the elements of
             X. INCX must not be zero.
            
y  ReadOnlySpan<Double>
            Y is DOUBLE PRECISION array of dimension at least
             ( 1 + ( n - 1 )*abs( INCY ) ).
             Before entry, the incremented array Y must contain the n
             element vector y.
            
incy  Int32
             On entry, INCY specifies the increment for the elements of
             Y. INCY must not be zero.
            
a  Span<Double>
            A is DOUBLE PRECISION array of DIMENSION ( LDA, n ).
             Before entry with  UPLO = 'U' or 'u', the leading n by n
             upper triangular part of the array A must contain the upper
             triangular part of the symmetric matrix and the strictly
             lower triangular part of A is not referenced. On exit, the
             upper triangular part of the array A is overwritten by the
             upper triangular part of the updated matrix.
             Before entry with UPLO = 'L' or 'l', the leading n by n
             lower triangular part of the array A must contain the lower
             triangular part of the symmetric matrix and the strictly
             upper triangular part of A is not referenced. On exit, the
             lower triangular part of the array A is overwritten by the
             lower triangular part of the updated matrix.
            
lda  Int32
             On entry, LDA specifies the first dimension of A as declared
             in the calling (sub) program. LDA must be at least
             max( 1, n ).
            

Implements

ILinearAlgebraOperations<T>.SymmetricRankUpdate(MatrixTriangle, Int32, T, ReadOnlySpan<T>, Int32, ReadOnlySpan<T>, Int32, Span<T>, Int32)

Remarks

Further Details:

            Level 2 LinearAlgebra routine.
            -- Written on 22-October-1986.
               Jack Dongarra, Argonne National Lab.
               Jeremy Du Croz, Nag Central Office.
               Sven Hammarling, Nag Central Office.
               Richard Hanson, Sandia National Labs.
            

Authors: Univ. of Tennessee, Univ. of California Berkeley, Univ. of Colorado Denver, NAG Ltd.

Date: November 2011

SymmetricRankUpdate(MatrixTriangle, TransposeOperation, Int32, Int32, Complex<Double>, ReadOnlySpan<Complex<Double>>, Int32, Complex<Double>, Span<Complex<Double>>, Int32)

Performs one of the symmetric rank k operations C := alpha*A*AT + beta*C, or C := alpha*AT*A + beta*C, where alpha and beta are scalars, C is an n by n symmetric matrix and A is an n by k matrix in the first case and a k by n matrix in the second case.

C#
public override void SymmetricRankUpdate(
	MatrixTriangle uplo,
	TransposeOperation trans,
	int n,
	int k,
	Complex<double> alpha,
	ReadOnlySpan<Complex<double>> a,
	int lda,
	Complex<double> beta,
	Span<Complex<double>> c,
	int ldc
)

Parameters

uplo  MatrixTriangle
             On  entry,   UPLO  specifies  whether  the  upper  or  lower
             triangular  part  of the  array  C  is to be  referenced  as
             follows:
                UPLO = 'U' or 'u'   Only the  upper triangular part of  C
                                    is to be referenced.
                UPLO = 'L' or 'l'   Only the  lower triangular part of  C
                                    is to be referenced.
            
trans  TransposeOperation
             On entry,  TRANS  specifies the operation to be performed as
             follows:
                TRANS = 'N' or 'n'   C := alpha*A*AT + beta*C.
                TRANS = 'T' or 't'   C := alpha*AT*A + beta*C.
            
n  Int32
             On entry,  N specifies the order of the matrix C.  N must be
             at least zero.
            
k  Int32
             On entry with  TRANS = 'N' or 'n',  K  specifies  the number
             of  columns   of  the   matrix   A,   and  on   entry   with
             TRANS = 'T' or 't',  K  specifies  the number of rows of the
             matrix A.  K must be at least zero.
            
alpha  Complex<Double>
             On entry, ALPHA specifies the scalar alpha.
            
a  ReadOnlySpan<Complex<Double>>
            A is complex array of DIMENSION ( LDA, ka ), where ka is
             k  when  TRANS = 'N' or 'n',  and is  n  otherwise.
             Before entry with  TRANS = 'N' or 'n',  the  leading  n by k
             part of the array  A  must contain the matrix  A,  otherwise
             the leading  k by n  part of the array  A  must contain  the
             matrix A.
            
lda  Int32
             On entry, LDA specifies the first dimension of A as declared
             in  the  calling  (sub)  program.   When  TRANS = 'N' or 'n'
             then  LDA must be at least  max( 1, n ), otherwise  LDA must
             be at least  max( 1, k ).
            
beta  Complex<Double>
             On entry, BETA specifies the scalar beta.
            
c  Span<Complex<Double>>
            C is complex array of DIMENSION ( LDC, n ).
             Before entry  with  UPLO = 'U' or 'u',  the leading  n by n
             upper triangular part of the array C must contain the upper
             triangular part  of the  symmetric matrix  and the strictly
             lower triangular part of C is not referenced.  On exit, the
             upper triangular part of the array  C is overwritten by the
             upper triangular part of the updated matrix.
             Before entry  with  UPLO = 'L' or 'l',  the leading  n by n
             lower triangular part of the array C must contain the lower
             triangular part  of the  symmetric matrix  and the strictly
             upper triangular part of C is not referenced.  On exit, the
             lower triangular part of the array  C is overwritten by the
             lower triangular part of the updated matrix.
            
ldc  Int32
             On entry, LDC specifies the first dimension of C as declared
             in  the  calling  (sub)  program.   LDC  must  be  at  least
             max( 1, n ).
            

Implements

ILinearAlgebraOperations<T>.SymmetricRankUpdate(MatrixTriangle, TransposeOperation, Int32, Int32, T, ReadOnlySpan<T>, Int32, T, Span<T>, Int32)

Remarks

Further Details:

            Level 3 LinearAlgebra routine.
            -- Written on 8-February-1989.
               Jack Dongarra, Argonne National Laboratory.
               Iain Duff, AERE Harwell.
               Jeremy Du Croz, Numerical Algorithms Group Ltd.
               Sven Hammarling, Numerical Algorithms Group Ltd.
            

Authors: Univ. of Tennessee, Univ. of California Berkeley, Univ. of Colorado Denver, NAG Ltd.

Date: November 2011

SymmetricRankUpdate(MatrixTriangle, TransposeOperation, Int32, Int32, Double, ReadOnlySpan<Double>, Int32, Double, Span<Double>, Int32)

Performs one of the symmetric rank k operations C := alpha*A*AT + beta*C, or C := alpha*AT*A + beta*C, where alpha and beta are scalars, C is an n by n symmetric matrix and A is an n by k matrix in the first case and a k by n matrix in the second case.

C#
public override void SymmetricRankUpdate(
	MatrixTriangle storedTriangle,
	TransposeOperation trans,
	int n,
	int k,
	double alpha,
	ReadOnlySpan<double> a,
	int lda,
	double beta,
	Span<double> c,
	int ldc
)

Parameters

storedTriangle  MatrixTriangle
Specifies whether the elements of the matrix c are stored in the upper or lower triangular part.
trans  TransposeOperation
             On entry,  TRANS  specifies the operation to be performed as
             follows:
                TRANS = 'N' or 'n'   C := alpha*A*AT + beta*C.
                TRANS = 'T' or 't'   C := alpha*AT*A + beta*C.
                TRANS = 'C' or 'c'   C := alpha*AT*A + beta*C.
            
n  Int32
             On entry,  N specifies the order of the matrix C.  N must be
             at least zero.
            
k  Int32
             On entry with  TRANS = 'N' or 'n',  K  specifies  the number
             of  columns   of  the   matrix   A,   and  on   entry   with
             TRANS = 'T' or 't' or 'C' or 'c',  K  specifies  the  number
             of rows of the matrix  A.  K must be at least zero.
            
alpha  Double
            ALPHA is DOUBLE PRECISION.
             On entry, ALPHA specifies the scalar alpha.
            
a  ReadOnlySpan<Double>
            A is DOUBLE PRECISION array of DIMENSION ( LDA, ka ), where ka is
             k  when  TRANS = 'N' or 'n',  and is  n  otherwise.
             Before entry with  TRANS = 'N' or 'n',  the  leading  n by k
             part of the array  A  must contain the matrix  A,  otherwise
             the leading  k by n  part of the array  A  must contain  the
             matrix A.
            
lda  Int32
             On entry, LDA specifies the first dimension of A as declared
             in  the  calling  (sub)  program.   When  TRANS = 'N' or 'n'
             then  LDA must be at least  max( 1, n ), otherwise  LDA must
             be at least  max( 1, k ).
            
beta  Double
            BETA is DOUBLE PRECISION.
             On entry, BETA specifies the scalar beta.
            
c  Span<Double>
            C is DOUBLE PRECISION array of DIMENSION ( LDC, n ).
             Before entry  with  UPLO = 'U' or 'u',  the leading  n by n
             upper triangular part of the array C must contain the upper
             triangular part  of the  symmetric matrix  and the strictly
             lower triangular part of C is not referenced.  On exit, the
             upper triangular part of the array  C is overwritten by the
             upper triangular part of the updated matrix.
             Before entry  with  UPLO = 'L' or 'l',  the leading  n by n
             lower triangular part of the array C must contain the lower
             triangular part  of the  symmetric matrix  and the strictly
             upper triangular part of C is not referenced.  On exit, the
             lower triangular part of the array  C is overwritten by the
             lower triangular part of the updated matrix.
            
ldc  Int32
             On entry, LDC specifies the first dimension of C as declared
             in  the  calling  (sub)  program.   LDC  must  be  at  least
             max( 1, n ).
            

Implements

ILinearAlgebraOperations<T>.SymmetricRankUpdate(MatrixTriangle, TransposeOperation, Int32, Int32, T, ReadOnlySpan<T>, Int32, T, Span<T>, Int32)

Remarks

Further Details:

            Level 3 LinearAlgebra routine.
            -- Written on 8-February-1989.
               Jack Dongarra, Argonne National Laboratory.
               Iain Duff, AERE Harwell.
               Jeremy Du Croz, Numerical Algorithms Group Ltd.
               Sven Hammarling, Numerical Algorithms Group Ltd.
            

Authors: Univ. of Tennessee, Univ. of California Berkeley, Univ. of Colorado Denver, NAG Ltd.

Date: November 2011

SymmetricRankUpdate(MatrixTriangle, TransposeOperation, Int32, Int32, Complex<Double>, ReadOnlySpan<Complex<Double>>, Int32, ReadOnlySpan<Complex<Double>>, Int32, Complex<Double>, Span<Complex<Double>>, Int32)

Performs one of the symmetric rank 2k operations C := alpha*A*BT + alpha*B*AT + beta*C, or C := alpha*AT*B + alpha*BT*A + beta*C, where alpha and beta are scalars, C is an n by n symmetric matrix and A and B are n by k matrices in the first case and k by n matrices in the second case.

C#
public override void SymmetricRankUpdate(
	MatrixTriangle uplo,
	TransposeOperation trans,
	int n,
	int k,
	Complex<double> alpha,
	ReadOnlySpan<Complex<double>> a,
	int lda,
	ReadOnlySpan<Complex<double>> b,
	int ldb,
	Complex<double> beta,
	Span<Complex<double>> c,
	int ldc
)

Parameters

uplo  MatrixTriangle
             On  entry,   UPLO  specifies  whether  the  upper  or  lower
             triangular  part  of the  array  C  is to be  referenced  as
             follows:
                UPLO = 'U' or 'u'   Only the  upper triangular part of  C
                                    is to be referenced.
                UPLO = 'L' or 'l'   Only the  lower triangular part of  C
                                    is to be referenced.
            
trans  TransposeOperation
             On entry,  TRANS  specifies the operation to be performed as
             follows:
                TRANS = 'N' or 'n'    C := alpha*A*BT + alpha*B*AT +
                                           beta*C.
                TRANS = 'T' or 't'    C := alpha*AT*B + alpha*BT*A +
                                           beta*C.
            
n  Int32
             On entry,  N specifies the order of the matrix C.  N must be
             at least zero.
            
k  Int32
             On entry with  TRANS = 'N' or 'n',  K  specifies  the number
             of  columns  of the  matrices  A and B,  and on  entry  with
             TRANS = 'T' or 't',  K  specifies  the number of rows of the
             matrices  A and B.  K must be at least zero.
            
alpha  Complex<Double>
             On entry, ALPHA specifies the scalar alpha.
            
a  ReadOnlySpan<Complex<Double>>
            A is complex array of DIMENSION ( LDA, ka ), where ka is
             k  when  TRANS = 'N' or 'n',  and is  n  otherwise.
             Before entry with  TRANS = 'N' or 'n',  the  leading  n by k
             part of the array  A  must contain the matrix  A,  otherwise
             the leading  k by n  part of the array  A  must contain  the
             matrix A.
            
lda  Int32
             On entry, LDA specifies the first dimension of A as declared
             in  the  calling  (sub)  program.   When  TRANS = 'N' or 'n'
             then  LDA must be at least  max( 1, n ), otherwise  LDA must
             be at least  max( 1, k ).
            
b  ReadOnlySpan<Complex<Double>>
            B is complex array of DIMENSION ( LDB, kb ), where kb is
             k  when  TRANS = 'N' or 'n',  and is  n  otherwise.
             Before entry with  TRANS = 'N' or 'n',  the  leading  n by k
             part of the array  B  must contain the matrix  B,  otherwise
             the leading  k by n  part of the array  B  must contain  the
             matrix B.
            
ldb  Int32
             On entry, LDB specifies the first dimension of B as declared
             in  the  calling  (sub)  program.   When  TRANS = 'N' or 'n'
             then  LDB must be at least  max( 1, n ), otherwise  LDB must
             be at least  max( 1, k ).
            
beta  Complex<Double>
             On entry, BETA specifies the scalar beta.
            
c  Span<Complex<Double>>
            C is complex array of DIMENSION ( LDC, n ).
             Before entry  with  UPLO = 'U' or 'u',  the leading  n by n
             upper triangular part of the array C must contain the upper
             triangular part  of the  symmetric matrix  and the strictly
             lower triangular part of C is not referenced.  On exit, the
             upper triangular part of the array  C is overwritten by the
             upper triangular part of the updated matrix.
             Before entry  with  UPLO = 'L' or 'l',  the leading  n by n
             lower triangular part of the array C must contain the lower
             triangular part  of the  symmetric matrix  and the strictly
             upper triangular part of C is not referenced.  On exit, the
             lower triangular part of the array  C is overwritten by the
             lower triangular part of the updated matrix.
            
ldc  Int32
             On entry, LDC specifies the first dimension of C as declared
             in  the  calling  (sub)  program.   LDC  must  be  at  least
             max( 1, n ).
            

Implements

ILinearAlgebraOperations<T>.SymmetricRankUpdate(MatrixTriangle, TransposeOperation, Int32, Int32, T, ReadOnlySpan<T>, Int32, ReadOnlySpan<T>, Int32, T, Span<T>, Int32)

Remarks

Further Details:

            Level 3 LinearAlgebra routine.
            -- Written on 8-February-1989.
               Jack Dongarra, Argonne National Laboratory.
               Iain Duff, AERE Harwell.
               Jeremy Du Croz, Numerical Algorithms Group Ltd.
               Sven Hammarling, Numerical Algorithms Group Ltd.
            

Authors: Univ. of Tennessee, Univ. of California Berkeley, Univ. of Colorado Denver, NAG Ltd.

Date: November 2011

SymmetricRankUpdate(MatrixTriangle, TransposeOperation, Int32, Int32, Double, ReadOnlySpan<Double>, Int32, ReadOnlySpan<Double>, Int32, Double, Span<Double>, Int32)

Performs one of the symmetric rank 2k operations C := alpha*A*BT + alpha*B*AT + beta*C, or C := alpha*AT*B + alpha*BT*A + beta*C, where alpha and beta are scalars, C is an n by n symmetric matrix and A and B are n by k matrices in the first case and k by n matrices in the second case.

C#
public override void SymmetricRankUpdate(
	MatrixTriangle storedTriangle,
	TransposeOperation trans,
	int n,
	int k,
	double alpha,
	ReadOnlySpan<double> a,
	int lda,
	ReadOnlySpan<double> b,
	int ldb,
	double beta,
	Span<double> c,
	int ldc
)

Parameters

storedTriangle  MatrixTriangle
Specifies whether the elements of the matrix a are stored in the upper or lower triangular part.
trans  TransposeOperation
             On entry,  TRANS  specifies the operation to be performed as
             follows:
                TRANS = 'N' or 'n'   C := alpha*A*BT + alpha*B*AT +
                                          beta*C.
                TRANS = 'T' or 't'   C := alpha*AT*B + alpha*BT*A +
                                          beta*C.
                TRANS = 'C' or 'c'   C := alpha*AT*B + alpha*BT*A +
                                          beta*C.
            
n  Int32
             On entry,  N specifies the order of the matrix C.  N must be
             at least zero.
            
k  Int32
             On entry with  TRANS = 'N' or 'n',  K  specifies  the number
             of  columns  of the  matrices  A and B,  and on  entry  with
             TRANS = 'T' or 't' or 'C' or 'c',  K  specifies  the  number
             of rows of the matrices  A and B.  K must be at least  zero.
            
alpha  Double
            ALPHA is DOUBLE PRECISION.
             On entry, ALPHA specifies the scalar alpha.
            
a  ReadOnlySpan<Double>
            A is DOUBLE PRECISION array of DIMENSION ( LDA, ka ), where ka is
             k  when  TRANS = 'N' or 'n',  and is  n  otherwise.
             Before entry with  TRANS = 'N' or 'n',  the  leading  n by k
             part of the array  A  must contain the matrix  A,  otherwise
             the leading  k by n  part of the array  A  must contain  the
             matrix A.
            
lda  Int32
             On entry, LDA specifies the first dimension of A as declared
             in  the  calling  (sub)  program.   When  TRANS = 'N' or 'n'
             then  LDA must be at least  max( 1, n ), otherwise  LDA must
             be at least  max( 1, k ).
            
b  ReadOnlySpan<Double>
            B is DOUBLE PRECISION array of DIMENSION ( LDB, kb ), where kb is
             k  when  TRANS = 'N' or 'n',  and is  n  otherwise.
             Before entry with  TRANS = 'N' or 'n',  the  leading  n by k
             part of the array  B  must contain the matrix  B,  otherwise
             the leading  k by n  part of the array  B  must contain  the
             matrix B.
            
ldb  Int32
             On entry, LDB specifies the first dimension of B as declared
             in  the  calling  (sub)  program.   When  TRANS = 'N' or 'n'
             then  LDB must be at least  max( 1, n ), otherwise  LDB must
             be at least  max( 1, k ).
            
beta  Double
            BETA is DOUBLE PRECISION.
             On entry, BETA specifies the scalar beta.
            
c  Span<Double>
            C is DOUBLE PRECISION array of DIMENSION ( LDC, n ).
             Before entry  with  UPLO = 'U' or 'u',  the leading  n by n
             upper triangular part of the array C must contain the upper
             triangular part  of the  symmetric matrix  and the strictly
             lower triangular part of C is not referenced.  On exit, the
             upper triangular part of the array  C is overwritten by the
             upper triangular part of the updated matrix.
             Before entry  with  UPLO = 'L' or 'l',  the leading  n by n
             lower triangular part of the array C must contain the lower
             triangular part  of the  symmetric matrix  and the strictly
             upper triangular part of C is not referenced.  On exit, the
             lower triangular part of the array  C is overwritten by the
             lower triangular part of the updated matrix.
            
ldc  Int32
             On entry, LDC specifies the first dimension of C as declared
             in  the  calling  (sub)  program.   LDC  must  be  at  least
             max( 1, n ).
            

Implements

ILinearAlgebraOperations<T>.SymmetricRankUpdate(MatrixTriangle, TransposeOperation, Int32, Int32, T, ReadOnlySpan<T>, Int32, ReadOnlySpan<T>, Int32, T, Span<T>, Int32)

Remarks

Further Details:

            Level 3 LinearAlgebra routine.
            -- Written on 8-February-1989.
               Jack Dongarra, Argonne National Laboratory.
               Iain Duff, AERE Harwell.
               Jeremy Du Croz, Numerical Algorithms Group Ltd.
               Sven Hammarling, Numerical Algorithms Group Ltd.
            

Authors: Univ. of Tennessee, Univ. of California Berkeley, Univ. of Colorado Denver, NAG Ltd.

Date: November 2011

See Also