MtxExpr.MulAndDiv Method

Overload List

#SignatureDescription
1Matrix MulAndDiv(TMtx X, TMtxVec Y, TCplx Z)Result = X * Y / zScalar, where X is a Matrix
2Matrix MulAndDiv(TMtx X, TMtxVec Y, TCplx xyScale, TMtxVec Z)Result = X * Y * xyScale / Z, where X is a Matrix
3Matrix MulAndDiv(TMtx X, TMtxVec Y, TMtxVec Z)Result = X * Y / Z, where X is a Matrix
4Matrix MulAndDiv(TMtx X, TMtxVec Y, Double Z)Result = X * Y / zScalar, when X is a Matrix
5Matrix MulAndDiv(TMtx X, TMtxVec Y, Double xyScale, TMtxVec Z)Result = X * Y * xyScale / Z, when X is a Matrix
6Vector MulAndDiv(TVec X, TMtxVec Y, TCplx Z)Result = X * Y / zScalar
7Vector MulAndDiv(TVec X, TMtxVec Y, TCplx xyScale, TMtxVec Z)Result = X * Y * xyScale / Z
8Vector MulAndDiv(TVec X, TMtxVec Y, TMtxVec Z)Result = X * Y / Z
9Vector MulAndDiv(TVec X, TMtxVec Y, Double Z)Result = X * Y / zScalar
10Vector MulAndDiv(TVec X, TMtxVec Y, Double xyScale, TMtxVec Z)Result = X * Y * xyScale / Z

Overload 1: Matrix MulAndDiv(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 2: Matrix MulAndDiv(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 3: Matrix MulAndDiv(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 4: Matrix MulAndDiv(TMtx X, TMtxVec Y, Double Z)

Compute X * Y / zScalar, when X is a Matrix.

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

Returns: Matrix

Remarks:

The operation does only per-element math.

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

Compute X Y xyScale / Z, when 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 6: Vector MulAndDiv(TVec X, TMtxVec Y, TCplx Z)

Compute X * Y / zScalar

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

Returns: Vector

Overload 7: Vector MulAndDiv(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 8: Vector MulAndDiv(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 divides the result by Z, all without creating temporary objects.

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

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

Overload 9: Vector MulAndDiv(TVec X, TMtxVec Y, Double Z)

Compute X * Y / zScalar

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

Returns: Vector

Remarks:

Computes the product of X and Y divided by the scalar zScalar without 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 = MulAndDiv(X, Y, zScalar);
        Vector A3 = new Vector();
        A3.MulAndDiv(X, Y, zScalar);
        if (!A2.IsEqual(A1)) Math387.ERaise("Problem");
        if (!A3.IsEqual(A1)) Math387.ERaise("Problem");
    }
}

Overload 10: Vector MulAndDiv(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 product of X and Y scaled by xyScale, then divided by Z, without temporary objects.

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

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