Overload List
| # | Signature | Description |
|---|---|---|
| 1 | function TensorProd(const Mtx: TMtx; Vec: TVec; MtxType: TMtxType; Operation: TMtxOperation): TVec; | Tensor product between vector and matrix. |
| 2 | function TensorProd(const Vec: TVec; Mtx: TMtx; MtxType: TMtxType; Operation: TMtxOperation): TVec; | Calculates the left tensor product between vector and matrix. |
Overload 1: function TensorProd(const Mtx: TMtx; Vec: TVec; MtxType: TMtxType; Operation: TMtxOperation): TVec;
Tensor product between vector and matrix.
| # | Name | Type | Description |
|---|---|---|---|
| 1 | Mtx | TMtx | |
| 2 | Vec | TVec | source TVec |
| 3 | MtxType | TMtxType | |
| 4 | Operation | TMtxOperation |
Result: stored in self (calling object), returns self for chaining
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 Vector.Alfa and Vector.Beta are TVec complex public variables. Their default values are:
Alfa = Cplx(1,0)
Beta = Cplx(0,0).
Note
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.
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;
Overload 2: function TensorProd(const Vec: TVec; Mtx: TMtx; MtxType: TMtxType; Operation: TMtxOperation): TVec;
Calculates the left tensor product between vector and matrix.
| # | Name | Type | Description |
|---|---|---|---|
| 1 | Vec | TVec | |
| 2 | Mtx | TMtx | source TMtx |
| 3 | MtxType | TMtxType | |
| 4 | Operation | TMtxOperation |
Result: stored in self (calling object), returns self for chaining