LinearAlgebraOperations<T> Class

Implements the BLAS (Basic Linear Algebra Subroutines) for generic element types.

Definition

Namespace: Extreme.Mathematics.LinearAlgebra.Implementation
Assembly: Extreme.Numerics (in Extreme.Numerics.dll) Version: 8.1.23
C#
public abstract class LinearAlgebraOperations<T> : ILinearAlgebraOperations<T>, 
	IImplementation, IParallelized, ILinearAlgebraOperations<Complex<T>>
Inheritance
Object  →  LinearAlgebraOperations<T>
Derived
Implements
IParallelized, ILinearAlgebraOperations<T>, ILinearAlgebraOperations<Complex<T>>, IImplementation

Type Parameters

T
The element type of the arrays.

Constructors

LinearAlgebraOperations<T>Initializes a new instance of the LinearAlgebraOperations<T> class

Properties

HasSharedDegreeOfParallelism Indicates whether the degree of parallelism is a property that is shared across instances.
MaxDegreeOfParallelism Gets or sets the maximum degree of parallelism enabled by the instance.
Name Gets the name of the implementation.
Platform Gets the processor architecture supported by the implementation.

Methods

AbsoluteMaxIndex(Int32, ArraySlice<T>)

Finds the index of element having max.

AbsoluteMaxIndex(Int32, ArraySlice<Complex<T>>)

Finds the index of element having max.

ApplyModifiedGivensRotation

THE MODIFIED GIVENS TRANSFORMATION, H, TO THE 2 BY N MATRIX (DXT) , WHERE **T INDICATES TRANSPOSE.

BandMultiplyAndAddInPlace(TransposeOperation, Int32, Int32, Int32, Int32, T, Array2D<T>, ArraySlice<T>, T, ArraySlice<T>)

Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*AT*x + beta*y, where alpha and beta are scalars, x and y are vectors and A is an m by n band matrix, with kl sub-diagonals and ku super-diagonals.

BandMultiplyAndAddInPlace(TransposeOperation, Int32, Int32, Int32, Int32, Complex<T>, Array2D<Complex<T>>, ArraySlice<Complex<T>>, Complex<T>, ArraySlice<Complex<T>>)

Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*AT*x + beta*y, or y := alpha*AH*x + beta*y, where alpha and beta are scalars, x and y are vectors and A is an m by n band matrix, with kl sub-diagonals and ku super-diagonals.

BandSymmetricMultiplyAndAddInPlace

Performs the matrix-vector operation y := alpha*A*x + beta*y, where alpha and beta are scalars, x and y are n element vectors and A is an n by n symmetric band matrix, with k super-diagonals.

BandTriangularMultiplyInPlace(MatrixTriangle, TransposeOperation, MatrixDiagonal, Int32, Int32, Array2D<T>, ArraySlice<T>)

Performs one of the matrix-vector operations x := A*x, or x := AT*x, where x is an n element vector and A is an n by n unit, or non-unit, upper or lower triangular band matrix, with ( k + 1 ) diagonals.

BandTriangularMultiplyInPlace(MatrixTriangle, TransposeOperation, MatrixDiagonal, Int32, Int32, Array2D<Complex<T>>, ArraySlice<Complex<T>>)

Performs one of the matrix-vector operations x := A*x, or x := AT*x, or x := AH*x, where x is an n element vector and A is an n by n unit, or non-unit, upper or lower triangular band matrix, with ( k + 1 ) diagonals.

BandTriangularSolveInPlace(MatrixTriangle, TransposeOperation, MatrixDiagonal, Int32, Int32, Array2D<T>, ArraySlice<T>)

Solves one of the systems of equations A*x = b, or AT*x = b, where b and x are n element vectors and A is an n by n unit, or non-unit, upper or lower triangular band matrix, with ( k + 1 ) diagonals.

BandTriangularSolveInPlace(MatrixTriangle, TransposeOperation, MatrixDiagonal, Int32, Int32, Array2D<Complex<T>>, ArraySlice<Complex<T>>)

Solves one of the systems of equations A*x = b, or AT*x = b, or AH*x = b, where b and x are n element vectors and A is an n by n unit, or non-unit, upper or lower triangular band matrix, with ( k + 1 ) diagonals.

ComplexOneNorm

Computes the sum of the absolute values of a complex number

ConjugateDotProduct(Int32, ArraySlice<T>, ArraySlice<T>) Returns the inner product of two vectors.
ConjugateDotProduct(Int32, ArraySlice<Complex<T>>, ArraySlice<Complex<T>>)

Forms the dot product of a vector.

ConjugateRankUpdate(Int32, Int32, T, ArraySlice<T>, ArraySlice<T>, Array2D<T>) Performs a rank one update of a matrix.
ConjugateRankUpdate(Int32, Int32, Complex<T>, ArraySlice<Complex<T>>, ArraySlice<Complex<T>>, Array2D<Complex<T>>)

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

Copy(Int32, ArraySlice<T>, ArraySlice<T>)

Copies a vector, x, to a vector, y.

Copy(Int32, ArraySlice<Complex<T>>, ArraySlice<Complex<T>>)

Copies a vector, x, to a vector, y.

Copy(MatrixTriangle, Int32, Int32, Array2D<T>, Array2D<T>)

Copies all or part of a two-dimensional matrix A to another matrix B.

Copy(MatrixTriangle, Int32, Int32, Array2D<Complex<T>>, Array2D<Complex<T>>) Copies the specified elements of a complex matrix.
CreateGivensRotation(Complex<T>, Complex<T>, T, Complex<T>)

Determines a complex Givens rotation.

CreateGivensRotation(T, T, T, T)

Construct givens plane rotation.

CreateModifiedGivensRotation

THE MODIFIED GIVENS TRANSFORMATION MATRIX H WHICH ZEROS THE SECOND COMPONENT OF THE 2-VECTOR (DSQRT(DD1)*DX1,DSQRT(DD2)*> DY2)**T.

DotProduct(Int32, ArraySlice<T>, ArraySlice<T>)

Forms the dot product of two vectors.

DotProduct(Int32, ArraySlice<Complex<T>>, ArraySlice<Complex<T>>)

Forms the dot product of two vectors.

EqualsDetermines whether the specified object is equal to the current object.
(Inherited from Object)
FinalizeAllows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.
(Inherited from Object)
FullMatrixNorm(MatrixNorm, Int32, Int32, Array2D<T>)

Returns the value of the one norm, or the Frobenius norm, or the infinity norm, or the element of largest absolute value of a real matrix A.

FullMatrixNorm(MatrixNorm, Int32, Int32, Array2D<Complex<T>>) Computes the norm of a general rectangular matrix.
GetHashCodeServes as the default hash function.
(Inherited from Object)
GetTypeGets the Type of the current instance.
(Inherited from Object)
HermitianMatrixNorm(MatrixNorm, MatrixTriangle, Int32, Array2D<T>) Computes the norm of a Hermitian matrix.
HermitianMatrixNorm(MatrixNorm, MatrixTriangle, Int32, Array2D<Complex<T>>) Computes the norm of a Hermitian matrix.
HermitianMultiplyAndAddInPlace(MatrixTriangle, Int32, T, Array2D<T>, ArraySlice<T>, T, ArraySlice<T>) Product of a hermitian matrix and a vector.
HermitianMultiplyAndAddInPlace(MatrixTriangle, Int32, Complex<T>, Array2D<Complex<T>>, ArraySlice<Complex<T>>, Complex<T>, ArraySlice<Complex<T>>)

Performs the matrix-vector operation y := alpha*A*x + beta*y, where alpha and beta are scalars, x and y are n element vectors and A is an n by n hermitian matrix.

HermitianMultiplyAndAddInPlace(MatrixOperationSide, MatrixTriangle, Int32, Int32, T, Array2D<T>, Array2D<T>, T, Array2D<T>) Sum of the product of a hermitian and a general matrix and a scaled matrix.
HermitianMultiplyAndAddInPlace(MatrixOperationSide, MatrixTriangle, Int32, Int32, Complex<T>, Array2D<Complex<T>>, Array2D<Complex<T>>, Complex<T>, Array2D<Complex<T>>)

Performs one of the matrix-matrix operations C := alpha*A*B + beta*C, or C := alpha*B*A + beta*C, where alpha and beta are scalars, A is an hermitian matrix and B and C are m by n matrices.

HermitianRankUpdate(MatrixTriangle, Int32, T, ArraySlice<T>, Array2D<T>) Performs a rank one update of a hermitian.
HermitianRankUpdate(MatrixTriangle, Int32, T, ArraySlice<Complex<T>>, Array2D<Complex<T>>)

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

HermitianRankUpdate(MatrixTriangle, Int32, T, ArraySlice<T>, ArraySlice<T>, Array2D<T>) Performs a hermitian rank two update of a hermitian matrix.
HermitianRankUpdate(MatrixTriangle, Int32, Complex<T>, ArraySlice<Complex<T>>, ArraySlice<Complex<T>>, Array2D<Complex<T>>)

Performs the hermitian rank 2 operation A := alpha*x*y**H + conjg( alpha )*y*x**H + A, where alpha is a scalar, x and y are n element vectors and A is an n by n hermitian matrix.

HermitianRankUpdate(MatrixTriangle, TransposeOperation, Int32, Int32, T, Array2D<T>, T, Array2D<T>) Performs a rank k update of a hermitian matrix.
HermitianRankUpdate(MatrixTriangle, TransposeOperation, Int32, Int32, T, Array2D<Complex<T>>, T, Array2D<Complex<T>>)

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

HermitianRankUpdate(MatrixTriangle, TransposeOperation, Int32, Int32, T, Array2D<T>, Array2D<T>, T, Array2D<T>) Performs a rank 2k update of a hermitian matrix.
HermitianRankUpdate(MatrixTriangle, TransposeOperation, Int32, Int32, Complex<T>, Array2D<Complex<T>>, Array2D<Complex<T>>, T, Array2D<Complex<T>>)

Performs one of the hermitian rank 2k operations C := alpha*A*BH + conjg( alpha )*B*AH + beta*C, or C := alpha*AH*B + conjg( alpha )*BH*A + beta*C, where alpha and beta are scalars with beta real, C is an n by n hermitian matrix and A and B are n by k matrices in the first case and k by n matrices in the second case.

MemberwiseCloneCreates a shallow copy of the current Object.
(Inherited from Object)
MultiplyAndAddInPlace(Int32, T, ArraySlice<T>, ArraySlice<T>)

Constant times a vector plus a vector.

MultiplyAndAddInPlace(Int32, Complex<T>, ArraySlice<Complex<T>>, ArraySlice<Complex<T>>)

Constant times a vector plus a vector.

MultiplyAndAddInPlace(TransposeOperation, Int32, Int32, T, Array2D<T>, ArraySlice<T>, T, ArraySlice<T>)

Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*AT*x + beta*y, where alpha and beta are scalars, x and y are vectors and A is an m by n matrix.

MultiplyAndAddInPlace(TransposeOperation, Int32, Int32, Complex<T>, Array2D<Complex<T>>, ArraySlice<Complex<T>>, Complex<T>, ArraySlice<Complex<T>>)

Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*AT*x + beta*y, or y := alpha*AH*x + beta*y, where alpha and beta are scalars, x and y are vectors and A is an m by n matrix.

MultiplyAndAddInPlace(TransposeOperation, TransposeOperation, Int32, Int32, Int32, T, Array2D<T>, Array2D<T>, T, Array2D<T>)

Performs one of the matrix-matrix operations C := alpha*op( A )*op( B ) + beta*C, where op( X ) is one of op( X ) = X or op( X ) = XT, alpha and beta are scalars, and A, B and C are matrices, with op( A ) an m by k matrix, op( B ) a k by n matrix and C an m by n matrix.

MultiplyAndAddInPlace(TransposeOperation, TransposeOperation, Int32, Int32, Int32, Complex<T>, Array2D<Complex<T>>, Array2D<Complex<T>>, Complex<T>, Array2D<Complex<T>>)

Performs one of the matrix-matrix operations C := alpha*op( A )*op( B ) + beta*C, where op( X ) is one of op( X ) = X or op( X ) = XT or op( X ) = XH, alpha and beta are scalars, and A, B and C are matrices, with op( A ) an m by k matrix, op( B ) a k by n matrix and C an m by n matrix.

MultiplyInPlace(Int32, T, ArraySlice<T>)

Scales a vector by a constant.

MultiplyInPlace(Int32, T, ArraySlice<Complex<T>>)

Scales a vector by a constant.

MultiplyInPlace(Int32, Complex<T>, ArraySlice<Complex<T>>)

Scales a vector by a constant.

OneNorm

Takes the sum of the absolute values.

RankUpdate(Int32, Int32, T, ArraySlice<T>, ArraySlice<T>, Array2D<T>)

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

RankUpdate(Int32, Int32, Complex<T>, ArraySlice<Complex<T>>, ArraySlice<Complex<T>>, Array2D<Complex<T>>)

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

RealOneNorm(Int32, ArraySlice<T>) Returns the sum of the absolute values of the elements of a vector.
RealOneNorm(Int32, ArraySlice<Complex<T>>)

Takes the sum of the absolute values.

Rotate(Int32, ArraySlice<T>, ArraySlice<T>, T, T)

Applies a plane rotation.

Rotate(Int32, ArraySlice<Complex<T>>, ArraySlice<Complex<T>>, T, T)

A plane rotation, where the cos and sin (c and s) are real and the vectors cx and cy are complex.

Swap(Int32, ArraySlice<T>, ArraySlice<T>)

Swaps the elements of two vectors.

Swap(Int32, ArraySlice<Complex<T>>, ArraySlice<Complex<T>>)

Interchanges two vectors.

SymmetricMatrixNorm(MatrixNorm, MatrixTriangle, Int32, Array2D<T>)

Returns the value of the one norm, or the Frobenius norm, or the infinity norm, or the element of largest absolute value of a real symmetric matrix A.

SymmetricMatrixNorm(MatrixNorm, MatrixTriangle, Int32, Array2D<Complex<T>>) Computes the norm of a symmetric matrix.
SymmetricMultiplyAndAddInPlace(MatrixTriangle, Int32, T, Array2D<T>, ArraySlice<T>, T, ArraySlice<T>)

Performs the matrix-vector operation y := alpha*A*x + beta*y, where alpha and beta are scalars, x and y are n element vectors and A is an n by n symmetric matrix.

SymmetricMultiplyAndAddInPlace(MatrixOperationSide, MatrixTriangle, Int32, Int32, T, Array2D<T>, Array2D<T>, T, Array2D<T>)

Performs one of the matrix-matrix operations C := alpha*A*B + beta*C, or C := alpha*B*A + beta*C, where alpha and beta are scalars, A is a symmetric matrix and B and C are m by n matrices.

SymmetricMultiplyAndAddInPlace(MatrixOperationSide, MatrixTriangle, Int32, Int32, Complex<T>, Array2D<Complex<T>>, Array2D<Complex<T>>, Complex<T>, Array2D<Complex<T>>)

Performs one of the matrix-matrix operations C := alpha*A*B + beta*C, or C := alpha*B*A + beta*C, where alpha and beta are scalars, A is a symmetric matrix and B and C are m by n matrices.

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, 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, 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.

ToStringReturns a string that represents the current object.
(Inherited from Object)
TriangularMatrixNorm(MatrixNorm, MatrixTriangle, MatrixDiagonal, Int32, Int32, Array2D<T>)

Returns the value of the one norm, or the Frobenius norm, or the infinity norm, or the element of largest absolute value of a trapezoidal or triangular matrix A.

TriangularMatrixNorm(MatrixNorm, MatrixTriangle, MatrixDiagonal, Int32, Int32, Array2D<Complex<T>>) Computes the norm of a triangular matrix.
TriangularMultiplyInPlace(MatrixTriangle, TransposeOperation, MatrixDiagonal, Int32, Array2D<T>, ArraySlice<T>)

Performs one of the matrix-vector operations x := A*x, or x := AT*x, where x is an n element vector and A is an n by n unit, or non-unit, upper or lower triangular matrix.

TriangularMultiplyInPlace(MatrixTriangle, TransposeOperation, MatrixDiagonal, Int32, Array2D<Complex<T>>, ArraySlice<Complex<T>>)

Performs one of the matrix-vector operations x := A*x, or x := AT*x, or x := AH*x, where x is an n element vector and A is an n by n unit, or non-unit, upper or lower triangular matrix.

TriangularMultiplyInPlace(MatrixOperationSide, MatrixTriangle, TransposeOperation, MatrixDiagonal, Int32, Int32, T, Array2D<T>, Array2D<T>)

Performs one of the matrix-matrix operations B := alpha*op( A )*B, or B := alpha*B*op( A ), where alpha is a scalar, B is an m by n matrix, A is a unit, or non-unit, upper or lower triangular matrix and op( A ) is one of op( A ) = A or op( A ) = AT.

TriangularMultiplyInPlace(MatrixOperationSide, MatrixTriangle, TransposeOperation, MatrixDiagonal, Int32, Int32, Complex<T>, Array2D<Complex<T>>, Array2D<Complex<T>>)

Performs one of the matrix-matrix operations B := alpha*op( A )*B, or B := alpha*B*op( A ) where alpha is a scalar, B is an m by n matrix, A is a unit, or non-unit, upper or lower triangular matrix and op( A ) is one of op( A ) = A or op( A ) = AT or op( A ) = AH.

TriangularSolveInPlace(MatrixTriangle, TransposeOperation, MatrixDiagonal, Int32, Array2D<T>, ArraySlice<T>)

Solves one of the systems of equations A*x = b, or AT*x = b, where b and x are n element vectors and A is an n by n unit, or non-unit, upper or lower triangular matrix.

TriangularSolveInPlace(MatrixTriangle, TransposeOperation, MatrixDiagonal, Int32, Array2D<Complex<T>>, ArraySlice<Complex<T>>)

Solves one of the systems of equations A*x = b, or AT*x = b, or AH*x = b, where b and x are n element vectors and A is an n by n unit, or non-unit, upper or lower triangular matrix.

TriangularSolveInPlace(MatrixOperationSide, MatrixTriangle, TransposeOperation, MatrixDiagonal, Int32, Int32, T, Array2D<T>, Array2D<T>)

Solves one of the matrix equations op( A )*X = alpha*B, or X*op( A ) = alpha*B, where alpha is a scalar, X and B are m by n matrices, A is a unit, or non-unit, upper or lower triangular matrix and op( A ) is one of op( A ) = A or op( A ) = AT.

TriangularSolveInPlace(MatrixOperationSide, MatrixTriangle, TransposeOperation, MatrixDiagonal, Int32, Int32, Complex<T>, Array2D<Complex<T>>, Array2D<Complex<T>>)

Solves one of the matrix equations op( A )*X = alpha*B, or X*op( A ) = alpha*B, where alpha is a scalar, X and B are m by n matrices, A is a unit, or non-unit, upper or lower triangular matrix and op( A ) is one of op( A ) = A or op( A ) = AT or op( A ) = AH.

TwoNorm(Int32, ArraySlice<T>)

            Returns the euclidean norm of a vector via the function
            name, so that
               DNRM2 := sqrt( x'*x )
            

TwoNorm(Int32, ArraySlice<Complex<T>>)

            Returns the euclidean norm of a vector via the function
            name, so that
               DZNRM2 := sqrt( x**H*x )
            

See Also