MtxExpr.MulAndSub Method

Overload List

#SignatureDescription
1Matrix MulAndSub(TMtx X, TCplx Y, TMtxVec Z, TCplx zScale)Result = X*yScalar - Z*zScale, where X is a Matrix
2Matrix MulAndSub(TMtx X, TMtxVec Y, TCplx Z)Result = X*Y - zScalar, where X is a Matrix
3Matrix MulAndSub(TMtx X, TMtxVec Y, TCplx xyScale, TMtxVec Z)Result = X*Y*xyScale - Z, where X is a Matrix
4Matrix MulAndSub(TMtx X, TMtxVec Y, TMtxVec Z)Result = X*Y - Z, where X is a Matrix
5Matrix MulAndSub(TMtx X, TMtxVec Y, TMtxVec Z, TCplx zScale)Result = X*Y - Z*zScale, where X is a Matrix
6Matrix MulAndSub(TMtx X, TMtxVec Y, TMtxVec Z, Double zScale)Result = X*Y - Z*zScale, where X is a Matrix
7Matrix MulAndSub(TMtx X, TMtxVec Y, Double Z)Result = X*Y - zScalar, where X is a Matrix
8Matrix MulAndSub(TMtx X, TMtxVec Y, Double xyScale, TMtxVec Z)Result = X*Y*xyScale - Z, where X is a Matrix
9Matrix MulAndSub(TMtx X, Double Y, TMtxVec Z, Double zScale)Result = X*yScalar - Z*zScale, where X is a Matrix
10Vector MulAndSub(TVec X, TCplx Y, TMtxVec Z, TCplx zScale)Result = X*yScalar - Z*zScale
11Vector MulAndSub(TVec X, TMtxVec Y, TCplx Z)Result = X*Y - zScalar
12Vector MulAndSub(TVec X, TMtxVec Y, TCplx xyScale, TMtxVec Z)Result = X*Y*xyScale - Z
13Vector MulAndSub(TVec X, TMtxVec Y, TMtxVec Z)Result = X*Y - Z
14Vector MulAndSub(TVec X, TMtxVec Y, TMtxVec Z, TCplx zScale)Result = X*Y - Z*zScale
15Vector MulAndSub(TVec X, TMtxVec Y, TMtxVec Z, Double zScale)Result = X*Y - Z*zScale
16Vector MulAndSub(TVec X, TMtxVec Y, Double Z)Result = X*Y - zScalar
17Vector MulAndSub(TVec X, TMtxVec Y, Double xyScale, TMtxVec Z)Result = X*Y*xyScale - Z
18Vector MulAndSub(TVec X, Double Y, TMtxVec Z, Double zScale)Result = X*yScalar - Z*zScale

Overload 1: Matrix MulAndSub(TMtx X, TCplx Y, TMtxVec Z, TCplx zScale)

Compute X*yScalar - Z*zScale, where X is a Matrix

#NameTypeDescription
1XTMtxsource TMtx
2YTCplxscalar
3ZTMtxVecsource TVec or TMtx
4zScaleTCplxscalar

Returns: Matrix

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

Compute X*Y - zScalar, where X is a Matrix

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

Returns: Matrix

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

Compute X*Y*xyScale - Z, where X is a Matrix

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

Returns: Matrix

Overload 4: Matrix MulAndSub(TMtx X, TMtxVec Y, TMtxVec Z)

Compute X*Y - Z, where X is a Matrix

#NameTypeDescription
1XTMtxsource TMtx
2YTMtxVecsource TVec or TMtx
3ZTMtxVecsource TVec or TMtx

Returns: Matrix

Remarks:

The operation does only per-element math.

Overload 5: Matrix MulAndSub(TMtx X, TMtxVec Y, TMtxVec Z, TCplx zScale)

Compute X*Y - Z*zScale, where X is a Matrix

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

Returns: Matrix

Overload 6: Matrix MulAndSub(TMtx X, TMtxVec Y, TMtxVec Z, Double zScale)

Compute X*Y - Z*zScale, where X is a Matrix

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

Returns: Matrix

Remarks:

The operation does only per-element math.

Overload 7: Matrix MulAndSub(TMtx X, TMtxVec Y, Double Z)

Compute X*Y - zScalar, where X is a Matrix

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

Returns: Matrix

Remarks:

The operation does only per-element math.

Overload 8: Matrix MulAndSub(TMtx X, TMtxVec Y, Double xyScale, TMtxVec Z)

Compute X*Y*xyScale - Z, where X is a Matrix

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

Returns: Matrix

Remarks:

The operation does only per-element math.

Overload 9: Matrix MulAndSub(TMtx X, Double Y, TMtxVec Z, Double zScale)

Compute X*yScalar - Z*zScale, where X is a Matrix

#NameTypeDescription
1XTMtxsource TMtx
2YDoublescalar
3ZTMtxVecsource TVec or TMtx
4zScaleDoublescalar

Returns: Matrix

Overload 10: Vector MulAndSub(TVec X, TCplx Y, TMtxVec Z, TCplx zScale)

Compute X*yScalar - Z*zScale

#NameTypeDescription
1XTVecsource TVec
2YTCplxscalar
3ZTMtxVecsource TVec or TMtx
4zScaleTCplxscalar

Returns: Vector

Overload 11: Vector MulAndSub(TVec X, TMtxVec Y, TCplx Z)

Compute X*Y - zScalar

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

Returns: Vector

Overload 12: Vector MulAndSub(TVec X, TMtxVec Y, TCplx xyScale, TMtxVec Z)

Compute X*Y*xyScale - Z

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

Returns: Vector

Overload 13: Vector MulAndSub(TVec X, TMtxVec Y, TMtxVec Z)

Compute X*Y - Z

#NameTypeDescription
1XTVecsource TVec
2YTMtxVecsource TVec or TMtx
3ZTMtxVecsource TVec or TMtx

Returns: Vector

Remarks:

Computes the element-wise product of X and Y, then subtracts Z, without creating temporary objects.

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

namespace Dew.Examples
{
    void Example()
    {
        Vector X = (Vector) new double[] { 3, 6, 9, 12 };
        Vector Y = (Vector) new double[] { 1, 2, 3, 4 };
        Vector Z = (Vector) new double[] { 2, 2, 2, 2 };
        Vector A1 = (X * Y) - Z;
        Vector A2 = MulAndSub(X, Y, Z);
        Vector A3 = new Vector();
        A3.MulAndSub(X, Y, Z);
        if (!A2.IsEqual(A1)) Math387.ERaise("Problem");
        if (!A3.IsEqual(A1)) Math387.ERaise("Problem");
    }
}

Overload 14: Vector MulAndSub(TVec X, TMtxVec Y, TMtxVec Z, TCplx zScale)

Compute X*Y - Z*zScale

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

Returns: Vector

Overload 15: Vector MulAndSub(TVec X, TMtxVec Y, TMtxVec Z, Double zScale)

Compute X*Y - Z*zScale

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

Returns: Vector

Remarks:

Computes the element-wise product of X and Y, then subtracts (Z multiplied by zScale), without creating temporary objects.

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

namespace Dew.Examples
{
    void Example()
    {
        double zScale = 2.0;
        Vector X = (Vector) new double[] { 3, 6, 9, 12 };
        Vector Y = (Vector) new double[] { 1, 2, 3, 4 };
        Vector Z = (Vector) new double[] { 2, 2, 2, 2 };
        Vector A1 = (X * Y) - (Z * zScale);
        Vector A2 = MulAndSub(X, Y, Z, zScale);
        Vector A3 = new Vector();
        A3.MulAndSub(X, Y, Z, zScale);
        if (!A2.IsEqual(A1)) Math387.ERaise("Problem");
        if (!A3.IsEqual(A1)) Math387.ERaise("Problem");
    }
}

Overload 16: Vector MulAndSub(TVec X, TMtxVec Y, Double Z)

Compute X*Y - zScalar

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

Returns: Vector

Remarks:

Computes the element-wise product of X and Y, then subtracts a scalar zScalar, without creating temporary objects.

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

namespace Dew.Examples
{
    void Example()
    {
        double zScalar = 2.0;
        Vector X = (Vector) new double[] { 3, 6, 9, 12 };
        Vector Y = (Vector) new double[] { 1, 2, 3, 4 };
        Vector A1 = (X * Y) - zScalar;
        Vector A2 = MulAndSub(X, Y, zScalar);
        Vector A3 = new Vector();
        A3.MulAndSub(X, Y, zScalar);
        if (!A2.IsEqual(A1)) Math387.ERaise("Problem");
        if (!A3.IsEqual(A1)) Math387.ERaise("Problem");
    }
}

Overload 17: Vector MulAndSub(TVec X, TMtxVec Y, Double xyScale, TMtxVec Z)

Compute X*Y*xyScale - Z

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

Returns: Vector

Remarks:

Computes the element-wise product of X and Y scaled by xyScale, then subtracts Z, without creating temporary objects.

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

namespace Dew.Examples
{
    void Example()
    {
        double xyScale = 1.5;
        Vector X = (Vector) new double[] { 3, 6, 9, 12 };
        Vector Y = (Vector) new double[] { 1, 2, 3, 4 };
        Vector Z = (Vector) new double[] { 2, 2, 2, 2 };
        Vector A1 = (X * Y * xyScale) - Z;
        Vector A2 = MulAndSub(X, Y, xyScale, Z);
        Vector A3 = new Vector();
        A3.MulAndSub(X, Y, xyScale, Z);
        if (!A2.IsEqual(A1)) Math387.ERaise("Problem");
        if (!A3.IsEqual(A1)) Math387.ERaise("Problem");
    }
}

Overload 18: Vector MulAndSub(TVec X, Double Y, TMtxVec Z, Double zScale)

Compute X*yScalar - Z*zScale

#NameTypeDescription
1XTVecsource TVec
2YDoublescalar
3ZTMtxVecsource TVec or TMtx
4zScaleDoublescalar

Returns: Vector

Remarks:

Computes the result of multiplying X by a scalar yScalar and then subtracting Z multiplied by zScale, without creating temporary objects.

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

namespace Dew.Examples
{
    void Example()
    {
        double yScalar = 2.0, zScale = 3.0;
        Vector X = (Vector) new double[] { 3, 6, 9, 12 };
        Vector Z = (Vector) new double[] { 1, 1, 1, 1 };
        Vector A1 = (X * yScalar) - (Z * zScale);
        Vector A2 = MulAndSub(X, yScalar, Z, zScale);
        Vector A3 = new Vector();
        A3.MulAndSub(X, yScalar, Z, zScale);
        if (!A2.IsEqual(A1)) Math387.ERaise("Problem");
        if (!A3.IsEqual(A1)) Math387.ERaise("Problem");
    }
}