You are here: Symbol Reference > MtxExpr Namespace > Classes > Vector Record > public > TensorProd Method > Vector.TensorProd Method (TMtx, TVec, TMtxType, TMtxOperation)
MtxVec VCL
ContentsIndex
PreviousUpNext
Vector.TensorProd Method (TMtx, TVec, TMtxType, TMtxOperation)

Tensor product between vector and matrix.

Pascal
function TensorProd(const Mtx: TMtx; Vec: TVec; MtxType: TMtxType = mtGeneral; Operation: TMtxOperation = opNone): TVec; overload;

Calculates the right tensor product between matrix and vector. The result is placed in the calling vector. Depending on the TMtxType the following operations are available: 

 

  • mtSymmetric: y = alfa*a*X + beta*y
  • mtSymmPosDef: y = alfa*a*X + beta*y
  • mtHermitian: y = alfa*a*X + beta*y
  • mtHermPosDef: y = alfa*a*X + beta*y
  • mtTriangular: y = op(a)*X
  • mtGeneral: y = alfa*op(a)*X + beta*y

 

The Alfa and Beta are TVec complex public variables. Their default values are: 

Alfa = Cplx(1,0) Beta = Cplx(0,0). 

Each time you call TensorProd the values of Alfa and Beta are reset to default. If the matrix is not complex, only the real part of Alfa and Beta is used. If matrix complex and symmetric the general type is used.

TensorProd

var a,b,c,t: Matrix; d,e,f: Vector; begin // Test non quadratic general matrix a.SetIt(2,3,False,[4,3,3, 3,4,2]); e.SetIt(false,[1,2]); d.TensorProd(e,a); f.SetIt(False,[10,11,7]); if not f.Equal(d) then raise Exception.Create('Not same'); // Test on triangular matrices, left a.TriangleForm := tfUpper; a.TriangleUnit := False; a.SetIt(2,2,False,[4,3, 0,4]); e.SetIt(false,[1,2]); d.TensorProd(e,a,mtTriangle); f.SetIt(False,[4,11]); if not f.Equal(d) then raise Exception.Create('Not same'); // Test on triangular matrices, right a.Reset; a.TriangleForm := tfUpper; // data to be referenced is in upper triangle a.TriangleUnit := False; // non unit diagonal a.SetIt(2,2,False,[4,3, 0,4]); e.SetIt(false,[1,2]); d.TensorProd(a,e,mtTriangle); f.SetIt(False,[10,8]); if not f.Equal(d) then raise Exception.Create('Not same'); // Test on symmetric matrices, right a.Reset; a.TriangleForm := tfUpper; a.SetIt(2,2,False,[4,3, 3,4]); e.SetIt(false,[1,2]); d.TensorProd(e,a,mtSymmetric); f.SetIt(False,[10,11]); if not f.Equal(d) then raise Exception.Create('Not same'); // Test on symmetric matrices, Left a.Reset; a.TriangleForm := tfUpper; a.SetIt(2,2,False,[4,3, 3,4]); e.SetIt(false,[1,2]); d.TensorProd(a,e,mtSymmetric); f.SetIt(False,[10,11]); if not f.Equal(d) then raise Exception.Create('Not same'); end;
Examples on GitHub
Copyright (c) 1999-2025 by Dew Research. All rights reserved.
What do you think about this topic? Send feedback!