MtxExpr::MulAndAdd Function

Overload List

#SignatureDescription
1Vector MulAndAdd(TVec *X, TMtxVec *Y, const double xyScale, TMtxVec *Z, const double zScale);Compute (X*Y)*xyScale + Z*zScale
2Matrix MulAndAdd(TMtx *X, TMtxVec *Y, const double xyScale, TMtxVec *Z, const double zScale);Compute (X*Y)*xyScale + Z*zScale, where X is a Matrix.
3Vector MulAndAdd(TVec *X, TMtxVec *Y, const TCplx &xyScale, TMtxVec *Z, const TCplx &zScale);Compute (X*Y)*xyScale + Z*zScale.
4Matrix MulAndAdd(TMtx *X, TMtxVec *Y, const TCplx &xyScale, TMtxVec *Z, const TCplx &zScale);Compute (X*Y)*xyScale + Z*zScale, where X is a Matrix.
5Vector MulAndAdd(TVec *X, TMtxVec *Y, const double xyScale, const double Z);Compute (X*Y)*xyScale + zScalar
6Matrix MulAndAdd(TMtx *X, TMtxVec *Y, const double xyScale, const double Z);Compute (X*Y)*xyScale + zScalar, where X is a Matrix.
7Vector MulAndAdd(TVec *X, TMtxVec *Y, const TCplx &xyScale, const TCplx &Z);Compute (X*Y)*xyScale + zScalar
8Matrix MulAndAdd(TMtx *X, TMtxVec *Y, const TCplx &xyScale, const TCplx &Z);Compute (X*Y)*xyScale + zScalar, where X is a Matrix.
9Vector MulAndAdd(TVec *X, const double Y, const double Z);Compute (X*yScalar) + zScalar
10Matrix MulAndAdd(TMtx *X, const double Y, const double Z);Compute (X*yScalar) + zScalar, where X is a Matrix.
11Vector MulAndAdd(TVec *X, const TCplx &Y, const TCplx &Z);Compute (X*yScalar) + zScalar, where X is a Matrix.
12Matrix MulAndAdd(TMtx *X, const TCplx &Y, const TCplx &Z);Compute (X*yScalar) + zScalar, where X is a Matrix.

Overload 1: Vector MulAndAdd(TVec *X, TMtxVec *Y, const double xyScale, TMtxVec *Z, const double zScale);

Compute (X*Y)*xyScale + Z*zScale

#NameTypeDescription
1XTVec *
2YTMtxVec *
3xyScaleconst double
4ZTMtxVec *
5zScaleconst double
Remarks:

Computes the product of X and Y scaled by xyScale, and then adds Z scaled by zScale, without creating temporary objects.

Examples
#include "MtxExpr.h"
#include "Units.Math387.h"
#include "Units.MtxExpr.h"

using namespace Dew;
using namespace Dew::Math;
using namespace Dew::Math::Units::Math387;
using namespace Dew::Math::Units::MtxExpr;

void Example()
{
    double xyScale = 1.5, zScale = 2.0;
    Vector X = {2, 4, 6, 8};
    Vector Y = {1, 1, 1, 1};
    Vector Z = {3, 4, 5, 6};
    Vector A1 = (X * Y * xyScale) + (Z * zScale);
    Vector A2 = MulAndAdd(X, Y, xyScale, Z, zScale);
    Vector A3;
    A3.MulAndAdd(X, Y, xyScale, Z, zScale);
    if (!A2.IsEqual(A1)) ERaise("Problem");
    if (!A3.IsEqual(A1)) ERaise("Problem");
}
Declared in Dew::Math::Units::MtxExpr · Dew.Math/Units.MtxExpr.h · Cross-compiler

Overload 2: Matrix MulAndAdd(TMtx *X, TMtxVec *Y, const double xyScale, TMtxVec *Z, const double zScale);

Compute (X*Y)*xyScale + Z*zScale, where X is a Matrix.

#NameTypeDescription
1XTMtx *
2YTMtxVec *
3xyScaleconst double
4ZTMtxVec *
5zScaleconst double
Remarks:

The operation does only per-element math.

Declared in Dew::Math::Units::MtxExpr · Dew.Math/Units.MtxExpr.h · Cross-compiler

Overload 3: Vector MulAndAdd(TVec *X, TMtxVec *Y, const TCplx &xyScale, TMtxVec *Z, const TCplx &zScale);

Compute (X*Y)*xyScale + Z*zScale.

#NameTypeDescription
1XTVec *
2YTMtxVec *
3xyScaleconst TCplx &
4ZTMtxVec *
5zScaleconst TCplx &
Remarks:

The operation does only per-element math.

Declared in Dew::Math::Units::MtxExpr · Dew.Math/Units.MtxExpr.h · Cross-compiler

Overload 4: Matrix MulAndAdd(TMtx *X, TMtxVec *Y, const TCplx &xyScale, TMtxVec *Z, const TCplx &zScale);

Compute (X*Y)*xyScale + Z*zScale, where X is a Matrix.

#NameTypeDescription
1XTMtx *
2YTMtxVec *
3xyScaleconst TCplx &
4ZTMtxVec *
5zScaleconst TCplx &
Remarks:

The operation does only per-element math.

Declared in Dew::Math::Units::MtxExpr · Dew.Math/Units.MtxExpr.h · Cross-compiler

Overload 5: Vector MulAndAdd(TVec *X, TMtxVec *Y, const double xyScale, const double Z);

Compute (X*Y)*xyScale + zScalar

#NameTypeDescription
1XTVec *
2YTMtxVec *
3xyScaleconst double
4Zconst double
Remarks:

Computes the product of X and Y scaled by xyScale, then adds a scalar zScalar, without creating temporary objects.

Examples
#include "MtxExpr.h"
#include "Units.Math387.h"
#include "Units.MtxExpr.h"

using namespace Dew;
using namespace Dew::Math;
using namespace Dew::Math::Units::Math387;
using namespace Dew::Math::Units::MtxExpr;

void Example()
{
    double xyScale = 1.5, zScalar = 2.0;
    Vector X = {2, 4, 6, 8};
    Vector Y = {1, 1, 1, 1};
    Vector A1 = (X * Y * xyScale) + zScalar;
    Vector A2 = MulAndAdd(X, Y, xyScale, zScalar);
    Vector A3;
    A3.MulAndAdd(X, Y, xyScale, zScalar);
    if (!A2.IsEqual(A1)) ERaise("Problem");
    if (!A3.IsEqual(A1)) ERaise("Problem");
}
Declared in Dew::Math::Units::MtxExpr · Dew.Math/Units.MtxExpr.h · Cross-compiler

Overload 6: Matrix MulAndAdd(TMtx *X, TMtxVec *Y, const double xyScale, const double Z);

Compute (X*Y)*xyScale + zScalar, where X is a Matrix.

#NameTypeDescription
1XTMtx *
2YTMtxVec *
3xyScaleconst double
4Zconst double
Remarks:

The operation does only per-element math.

Declared in Dew::Math::Units::MtxExpr · Dew.Math/Units.MtxExpr.h · Cross-compiler

Overload 7: Vector MulAndAdd(TVec *X, TMtxVec *Y, const TCplx &xyScale, const TCplx &Z);

Compute (X*Y)*xyScale + zScalar

#NameTypeDescription
1XTVec *
2YTMtxVec *
3xyScaleconst TCplx &
4Zconst TCplx &
Remarks:

The operation does only per-element math.

Declared in Dew::Math::Units::MtxExpr · Dew.Math/Units.MtxExpr.h · Cross-compiler

Overload 8: Matrix MulAndAdd(TMtx *X, TMtxVec *Y, const TCplx &xyScale, const TCplx &Z);

Compute (X*Y)*xyScale + zScalar, where X is a Matrix.

#NameTypeDescription
1XTMtx *
2YTMtxVec *
3xyScaleconst TCplx &
4Zconst TCplx &
Remarks:

The operation does only per-element math.

Declared in Dew::Math::Units::MtxExpr · Dew.Math/Units.MtxExpr.h · Cross-compiler

Overload 9: Vector MulAndAdd(TVec *X, const double Y, const double Z);

Compute (X*yScalar) + zScalar

#NameTypeDescription
1XTVec *
2Yconst double
3Zconst double
Remarks:

Computes the result of multiplying X by a scalar yScalar and then adding a scalar zScalar, without creating temporary objects.

Examples
#include "MtxExpr.h"
#include "Units.Math387.h"
#include "Units.MtxExpr.h"

using namespace Dew;
using namespace Dew::Math;
using namespace Dew::Math::Units::Math387;
using namespace Dew::Math::Units::MtxExpr;

void Example()
{
    double yScalar = 2.0, zScalar = 3.0;
    Vector X = { 2, 4, 6, 8 };
    Vector A1 = (X * yScalar) + zScalar;
    Vector A2 = MulAndAdd(X, yScalar, zScalar);
    Vector A3;
    A3.MulAndAdd(X, yScalar, zScalar);
    if (!A2.IsEqual(A1)) ERaise("Problem");
    if (!A3.IsEqual(A1)) ERaise("Problem");
}
Declared in Dew::Math::Units::MtxExpr · Dew.Math/Units.MtxExpr.h · Cross-compiler

Overload 10: Matrix MulAndAdd(TMtx *X, const double Y, const double Z);

Compute (X*yScalar) + zScalar, where X is a Matrix.

#NameTypeDescription
1XTMtx *
2Yconst double
3Zconst double
Declared in Dew::Math::Units::MtxExpr · Dew.Math/Units.MtxExpr.h · Cross-compiler

Overload 11: Vector MulAndAdd(TVec *X, const TCplx &Y, const TCplx &Z);

Compute (X*yScalar) + zScalar, where X is a Matrix.

#NameTypeDescription
1XTVec *
2Yconst TCplx &
3Zconst TCplx &
Declared in Dew::Math::Units::MtxExpr · Dew.Math/Units.MtxExpr.h · Cross-compiler

Overload 12: Matrix MulAndAdd(TMtx *X, const TCplx &Y, const TCplx &Z);

Compute (X*yScalar) + zScalar, where X is a Matrix.

#NameTypeDescription
1XTMtx *
2Yconst TCplx &
3Zconst TCplx &
Declared in Dew::Math::Units::MtxExpr · Dew.Math/Units.MtxExpr.h · Cross-compiler