Overload List
Overload 1: Matrix SubScaled(TMtx X, TCplx xScale, TMtxVec Y, TCplx yScale, TMtxVec Z, TCplx zScale)
Compute X*xScale - Y*yScale - Z*zScale, where X is a Matrix
| # | Name | Type | Description |
|---|---|---|---|
| 1 | X | TMtx | source TMtx |
| 2 | xScale | TCplx | scalar |
| 3 | Y | TMtxVec | source TVec or TMtx |
| 4 | yScale | TCplx | scalar |
| 5 | Z | TMtxVec | source TVec or TMtx |
| 6 | zScale | TCplx | scalar |
Returns: Matrix
Overload 2: Matrix SubScaled(TMtx X, TMtxVec Y, TCplx yScale, TMtxVec Z, TCplx zScale)
Compute X - Y*yScale - Z*zScale, where X is a Matrix.
| # | Name | Type | Description |
|---|---|---|---|
| 1 | X | TMtx | source TMtx |
| 2 | Y | TMtxVec | source TVec or TMtx |
| 3 | yScale | TCplx | scalar |
| 4 | Z | TMtxVec | source TVec or TMtx |
| 5 | zScale | TCplx | scalar |
Returns: Matrix
Overload 3: Matrix SubScaled(TMtx X, TMtxVec Y, TMtxVec Z, TCplx zScale)
Compute X - Y - Z*zScale, where X is a Matrix.
| # | Name | Type | Description |
|---|---|---|---|
| 1 | X | TMtx | source TMtx |
| 2 | Y | TMtxVec | source TVec or TMtx |
| 3 | Z | TMtxVec | source TVec or TMtx |
| 4 | zScale | TCplx | scalar |
Returns: Matrix
Overload 4: Matrix SubScaled(TMtx X, TMtxVec Y, TMtxVec Z, Double zScale)
Compute X - Y - Z*zScale, where X is a Matrix.
| # | Name | Type | Description |
|---|---|---|---|
| 1 | X | TMtx | source TMtx |
| 2 | Y | TMtxVec | source TVec or TMtx |
| 3 | Z | TMtxVec | source TVec or TMtx |
| 4 | zScale | Double | scalar |
Returns: Matrix
Overload 5: Matrix SubScaled(TMtx X, TMtxVec Y, Double yScale, TMtxVec Z, Double zScale)
Compute X - Y*yScale - Z*zScale, where X is a Matrix.
| # | Name | Type | Description |
|---|---|---|---|
| 1 | X | TMtx | source TMtx |
| 2 | Y | TMtxVec | source TVec or TMtx |
| 3 | yScale | Double | scalar |
| 4 | Z | TMtxVec | source TVec or TMtx |
| 5 | zScale | Double | scalar |
Returns: Matrix
Overload 6: Matrix SubScaled(TMtx X, Double xScale, TMtxVec Y, Double yScale, TMtxVec Z, Double zScale)
Compute X*xScale - Y*yScale - Z*zScale, when X is a Matrix.
| # | Name | Type | Description |
|---|---|---|---|
| 1 | X | TMtx | source TMtx |
| 2 | xScale | Double | scalar |
| 3 | Y | TMtxVec | source TVec or TMtx |
| 4 | yScale | Double | scalar |
| 5 | Z | TMtxVec | source TVec or TMtx |
| 6 | zScale | Double | scalar |
Returns: Matrix
Overload 7: Vector SubScaled(TVec X, TCplx xScale, TMtxVec Y, TCplx yScale, TMtxVec Z, TCplx zScale)
Compute X*xScale - Y*yScale - Z*zScale
| # | Name | Type | Description |
|---|---|---|---|
| 1 | X | TVec | source TVec |
| 2 | xScale | TCplx | scalar |
| 3 | Y | TMtxVec | source TVec or TMtx |
| 4 | yScale | TCplx | scalar |
| 5 | Z | TMtxVec | source TVec or TMtx |
| 6 | zScale | TCplx | scalar |
Returns: Vector
Overload 8: Vector SubScaled(TVec X, TMtxVec Y, TCplx yScale, TMtxVec Z, TCplx zScale)
Compute X - Y*yScale - Z*zScale
| # | Name | Type | Description |
|---|---|---|---|
| 1 | X | TVec | source TVec |
| 2 | Y | TMtxVec | source TVec or TMtx |
| 3 | yScale | TCplx | scalar |
| 4 | Z | TMtxVec | source TVec or TMtx |
| 5 | zScale | TCplx | scalar |
Returns: Vector
Overload 9: Vector SubScaled(TVec X, TMtxVec Y, TMtxVec Z, TCplx zScale)
Compute X - Y - Z*zScale
| # | Name | Type | Description |
|---|---|---|---|
| 1 | X | TVec | source TVec |
| 2 | Y | TMtxVec | source TVec or TMtx |
| 3 | Z | TMtxVec | source TVec or TMtx |
| 4 | zScale | TCplx | scalar |
Returns: Vector
Overload 10: Vector SubScaled(TVec X, TMtxVec Y, TMtxVec Z, Double zScale)
Compute X - Y - Z*zScale
| # | Name | Type | Description |
|---|---|---|---|
| 1 | X | TVec | source TVec |
| 2 | Y | TMtxVec | source TVec or TMtx |
| 3 | Z | TMtxVec | source TVec or TMtx |
| 4 | zScale | Double | scalar |
Returns: Vector
Computes the difference between X and Y, then subtracts Z scaled by zScale, without creating temporary objects.
using Dew.Math;
using Dew.Math.Units;
namespace Dew.Examples
{
void Example()
{
double zScale = 2.0;
Vector X = (Vector) new double[] { 5, 6, 7, 8 };
Vector Y = (Vector) new double[] { 1, 2, 3, 4 };
Vector Z = (Vector) new double[] { 1, 1, 1, 1 };
Vector A1 = X - Y - Z * zScale;
Vector A2 = SubScaled(X, Y, Z, zScale);
Vector A3 = new Vector();
A3.Sub(X, Y, Z * zScale); // Or via a dedicated overload if available.
if (!A2.IsEqual(A1)) Math387.ERaise("Problem");
if (!A3.IsEqual(A1)) Math387.ERaise("Problem");
}
}
Overload 11: Vector SubScaled(TVec X, TMtxVec Y, Double yScale, TMtxVec Z, Double zScale)
Compute X - Y*yScale - Z*zScale
| # | Name | Type | Description |
|---|---|---|---|
| 1 | X | TVec | source TVec |
| 2 | Y | TMtxVec | source TVec or TMtx |
| 3 | yScale | Double | scalar |
| 4 | Z | TMtxVec | source TVec or TMtx |
| 5 | zScale | Double | scalar |
Returns: Vector
Computes the difference between X and Y scaled by yScale, then subtracts Z scaled by zScale, without creating temporary objects.
using Dew.Math;
using Dew.Math.Units;
namespace Dew.Examples
{
void Example()
{
double yScale = 1.5, zScale = 2.0;
Vector X = (Vector) new double[] { 5, 6, 7, 8 };
Vector Y = (Vector) new double[] { 1, 2, 3, 4 };
Vector Z = (Vector) new double[] { 1, 1, 1, 1 };
Vector A1 = X - Y * yScale - Z * zScale;
Vector A2 = SubScaled(X, Y, yScale, Z, zScale);
Vector A3 = new Vector();
A3.SubScaled(X, Y, yScale, Z, zScale);
if (!A2.IsEqual(A1)) Math387.ERaise("Problem");
if (!A3.IsEqual(A1)) Math387.ERaise("Problem");
}
}
Overload 12: Vector SubScaled(TVec X, Double xScale, TMtxVec Y, Double yScale, TMtxVec Z, Double zScale)
Compute X*xScale - Y*yScale - Z*zScale
| # | Name | Type | Description |
|---|---|---|---|
| 1 | X | TVec | source TVec |
| 2 | xScale | Double | scalar |
| 3 | Y | TMtxVec | source TVec or TMtx |
| 4 | yScale | Double | scalar |
| 5 | Z | TMtxVec | source TVec or TMtx |
| 6 | zScale | Double | scalar |
Returns: Vector
Computes the expression X*xScale - Y*yScale - Z*zScale without temporary objects, achieving the same speed as an optimized inplace operation.
using Dew.Math;
using Dew.Math.Units;
namespace Dew.Examples
{
void Example()
{
double xScale = 1.0, yScale = 2.0, zScale = 3.0;
Vector X = (Vector) new double[] { 5, 6, 7, 8 };
Vector Y = (Vector) new double[] { 1, 2, 3, 4 };
Vector Z = (Vector) new double[] { 1, 1, 1, 1 };
Vector A1 = X * xScale - Y * yScale - Z * zScale;
Vector A2 = SubScaled(X, xScale, Y, yScale, Z, zScale);
Vector A3 = new Vector();
A3.SubScaled(X, xScale, Y, yScale, Z, zScale);
if (!A2.IsEqual(A1)) Math387.ERaise("Problem");
if (!A3.IsEqual(A1)) Math387.ERaise("Problem");
}
}