MtxExpr.MulAndAdd Method

Overload List

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

Overload 1: Matrix MulAndAdd(TMtx X, TCplx Y, TCplx Z)

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

#NameTypeDescription
1XTMtxsource TMtx
2YTCplxscalar
3ZTCplxscalar

Returns: Matrix

Overload 2: Matrix MulAndAdd(TMtx X, TMtxVec Y, TCplx xyScale, TCplx Z)

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

#NameTypeDescription
1XTMtxsource TMtx
2YTMtxVecsource TVec or TMtx
3xyScaleTCplxscalar
4ZTCplxscalar

Returns: Matrix

Remarks:

The operation does only per-element math.

Overload 3: Matrix MulAndAdd(TMtx X, TMtxVec Y, TCplx xyScale, TMtxVec Z, TCplx zScale)

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

#NameTypeDescription
1XTMtxsource TMtx
2YTMtxVecsource TVec or TMtx
3xyScaleTCplxscalar
4ZTMtxVecsource TVec or TMtx
5zScaleTCplxscalar

Returns: Matrix

Remarks:

The operation does only per-element math.

Overload 4: Matrix MulAndAdd(TMtx X, TMtxVec Y, Double xyScale, TMtxVec Z, Double zScale)

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

#NameTypeDescription
1XTMtxsource TMtx
2YTMtxVecsource TVec or TMtx
3xyScaleDoublescalar
4ZTMtxVecsource TVec or TMtx
5zScaleDoublescalar

Returns: Matrix

Remarks:

The operation does only per-element math.

Overload 5: Matrix MulAndAdd(TMtx X, TMtxVec Y, Double xyScale, Double Z)

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

#NameTypeDescription
1XTMtxsource TMtx
2YTMtxVecsource TVec or TMtx
3xyScaleDoublescalar
4ZDoublescalar

Returns: Matrix

Remarks:

The operation does only per-element math.

Overload 6: Matrix MulAndAdd(TMtx X, Double Y, Double Z)

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

#NameTypeDescription
1XTMtxsource TMtx
2YDoublescalar
3ZDoublescalar

Returns: Matrix

Overload 7: Vector MulAndAdd(TVec X, TCplx Y, TCplx Z)

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

#NameTypeDescription
1XTVecsource TVec
2YTCplxscalar
3ZTCplxscalar

Returns: Vector

Overload 8: Vector MulAndAdd(TVec X, TMtxVec Y, TCplx xyScale, TCplx Z)

Compute (X*Y)*xyScale + zScalar

#NameTypeDescription
1XTVecsource TVec
2YTMtxVecsource TVec or TMtx
3xyScaleTCplxscalar
4ZTCplxscalar

Returns: Vector

Remarks:

The operation does only per-element math.

Overload 9: Vector MulAndAdd(TVec X, TMtxVec Y, TCplx xyScale, TMtxVec Z, TCplx zScale)

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

#NameTypeDescription
1XTVecsource TVec
2YTMtxVecsource TVec or TMtx
3xyScaleTCplxscalar
4ZTMtxVecsource TVec or TMtx
5zScaleTCplxscalar

Returns: Vector

Remarks:

The operation does only per-element math.

Overload 10: Vector MulAndAdd(TVec X, TMtxVec Y, Double xyScale, TMtxVec Z, Double zScale)

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

#NameTypeDescription
1XTVecsource TVec
2YTMtxVecsource TVec or TMtx
3xyScaleDoublescalar
4ZTMtxVecsource TVec or TMtx
5zScaleDoublescalar

Returns: Vector

Remarks:

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

Examples
using Dew.Math;
using Dew.Math.Units;

namespace Dew.Examples
{
    void Example()
    {
        double xyScale = 1.5, zScale = 2.0;
        Vector X = (Vector) new double[] { 2, 4, 6, 8 };
        Vector Y = (Vector) new double[] { 1, 1, 1, 1 };
        Vector Z = (Vector) new double[] { 3, 4, 5, 6 };
        Vector A1 = (X * Y * xyScale) + (Z * zScale);
        Vector A2 = MulAndAdd(X, xyScale, Y, xyScale, Z, zScale);
        Vector A3 = new Vector();
        A3.MulAndAdd(X, xyScale, Y, xyScale, Z, zScale);
        if (!A2.IsEqual(A1)) Math387.ERaise("Problem");
        if (!A3.IsEqual(A1)) Math387.ERaise("Problem");
    }
}

Overload 11: Vector MulAndAdd(TVec X, TMtxVec Y, Double xyScale, Double Z)

Compute (X*Y)*xyScale + zScalar

#NameTypeDescription
1XTVecsource TVec
2YTMtxVecsource TVec or TMtx
3xyScaleDoublescalar
4ZDoublescalar

Returns: Vector

Remarks:

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

Examples
using Dew.Math;
using Dew.Math.Units;

namespace Dew.Examples
{
    void Example()
    {
        double xyScale = 1.5, zScalar = 2.0;
        Vector X = (Vector) new double[] { 2, 4, 6, 8 };
        Vector Y = (Vector) new double[] { 1, 1, 1, 1 };
        Vector A1 = (X * Y * xyScale) + zScalar;
        Vector A2 = MulAndAdd(X, xyScale, Y, xyScale, zScalar);
        Vector A3 = new Vector();
        A3.MulAndAdd(X, xyScale, Y, xyScale, zScalar);
        if (!A2.IsEqual(A1)) Math387.ERaise("Problem");
        if (!A3.IsEqual(A1)) Math387.ERaise("Problem");
    }
}

Overload 12: Vector MulAndAdd(TVec X, Double Y, Double Z)

Compute (X*yScalar) + zScalar

#NameTypeDescription
1XTVecsource TVec
2YDoublescalar
3ZDoublescalar

Returns: Vector

Remarks:

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

Examples
using Dew.Math;
using Dew.Math.Units;

namespace Dew.Examples
{
    void Example()
    {
        double yScalar = 2.0, zScalar = 3.0;
        Vector X = (Vector) new double[] { 2, 4, 6, 8 };
        Vector A1 = (X * yScalar) + zScalar;
        Vector A2 = MulAndAdd(X, yScalar, zScalar);
        Vector A3 = new Vector();
        A3.MulAndAdd(X, yScalar, zScalar);
        if (!A2.IsEqual(A1)) Math387.ERaise("Problem");
        if (!A3.IsEqual(A1)) Math387.ERaise("Problem");
    }
}