本文整理汇总了C#中Matrix.Multiply方法的典型用法代码示例。如果您正苦于以下问题:C# Matrix.Multiply方法的具体用法?C# Matrix.Multiply怎么用?C# Matrix.Multiply使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Matrix
的用法示例。
在下文中一共展示了Matrix.Multiply方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: MultiplyMatrixMatrixExample
public void MultiplyMatrixMatrixExample()
{
var matrix1 = new Matrix(2, 3);
matrix1[0, 0] = -2;
matrix1[0, 1] = 3;
matrix1[0, 2] = 2;
matrix1[1, 0] = 4;
matrix1[1, 1] = 6;
matrix1[1, 2] = -2;
var matrix2 = new Matrix(3, 4);
matrix2[0, 0] = 4;
matrix2[0, 1] = -1;
matrix2[0, 2] = 2;
matrix2[0, 3] = 5;
matrix2[1, 0] = 3;
matrix2[1, 1] = 0;
matrix2[1, 2] = 1;
matrix2[1, 3] = 1;
matrix2[2, 0] = -2;
matrix2[2, 1] = 3;
matrix2[2, 2] = 5;
matrix2[2, 3] = -3;
var expectedMatrix = new Matrix(2, 4);
expectedMatrix[0, 0] = -3;
expectedMatrix[0, 1] = 8;
expectedMatrix[0, 2] = 9;
expectedMatrix[0, 3] = -13;
expectedMatrix[1, 0] = 38;
expectedMatrix[1, 1] = -10;
expectedMatrix[1, 2] = 4;
expectedMatrix[1, 3] = 32;
var result = matrix1.Multiply(matrix2);
Assert.IsTrue(result.Equals(expectedMatrix));
}
示例2: MultiplyMatrixDoubleExample
public void MultiplyMatrixDoubleExample()
{
var matrix1 = new Matrix(2, 3);
matrix1[0, 0] = 1;
matrix1[0, 1] = 4;
matrix1[0, 2] = 5;
matrix1[1, 0] = -3;
matrix1[1, 1] = 2;
matrix1[1, 2] = 7;
var expectedMatrix = new Matrix(2, 3);
expectedMatrix[0, 0] = 2;
expectedMatrix[0, 1] = 8;
expectedMatrix[0, 2] = 10;
expectedMatrix[1, 0] = -6;
expectedMatrix[1, 1] = 4;
expectedMatrix[1, 2] = 14;
var result = matrix1.Multiply(2);
Assert.IsTrue(result.Equals(expectedMatrix));
}
示例3: ProcessModifyWorldTransform
private void ProcessModifyWorldTransform(byte[] recordData)
{
MemoryStream _ms = null;
BinaryReader _br = null;
try
{
_ms = new MemoryStream(recordData);
_br = new BinaryReader(_ms);
var eM11 = _br.ReadSingle();
var eM12 = _br.ReadSingle();
var eM21 = _br.ReadSingle();
var eM22 = _br.ReadSingle();
var eDx = _br.ReadSingle();
var eDy = _br.ReadSingle();
var iMode = (EmfTransformMode)_br.ReadInt32();
var matrix = new Matrix(eM11, eM12, eM21, eM22, eDx, eDy);
switch (iMode)
{
case EmfTransformMode.MWT_IDENTITY:
Transform = new Matrix();
break;
case EmfTransformMode.MWT_LEFTMULTIPLY:
Transform.Multiply(matrix, MatrixOrder.Append /* TODO: is it the correct order? */);
break;
case EmfTransformMode.MWT_RIGHTMULTIPLY:
Transform.Multiply(matrix, MatrixOrder.Prepend /* TODO: is it the correct order? */);
break;
default:
throw new NotImplementedException();
}
System.Diagnostics.Debug.Assert(_ms.Position == _ms.Length);
}
finally
{
if (_br != null)
_br.Close();
if (_ms != null)
_ms.Dispose();
}
}
示例4: Test
/// <summary>
/// Some test code to check that there are no typing errors in the formulars.
/// </summary>
public static void Test()
{
XMatrix xm1 = new XMatrix(23, -35, 837, 332, -3, 12);
Matrix m1 = new Matrix(23, -35, 837, 332, -3, 12);
DumpMatrix(xm1, m1);
XMatrix xm2 = new XMatrix(12, 235, 245, 42, 33, -56);
Matrix m2 = xm2.ToMatrix();
DumpMatrix(xm2, m2);
// xm1.Multiply(xm2, XMatrixOrder.Prepend);
// m1.Multiply(m2, MatrixOrder.Append);
xm1.Multiply(xm2, XMatrixOrder.Append);
m1.Multiply(m2, MatrixOrder.Append);
DumpMatrix(xm1, m1);
xm1.Translate(-243, 342, XMatrixOrder.Append);
m1.Translate(-243, 342, MatrixOrder.Append);
DumpMatrix(xm1, m1);
xm1.Scale(-5.66, 7.87);
m1.Scale(-5.66f, 7.87f);
// xm1.Scale(-5.66, 7.87, XMatrixOrder.Prepend);
// m1.Scale(-5.66f, 7.87f, MatrixOrder.Prepend);
DumpMatrix(xm1, m1);
xm1.Rotate(135, XMatrixOrder.Append);
m1.Rotate(135, MatrixOrder.Append);
// xm1.Scale(-5.66, 7.87, XMatrixOrder.Prepend);
// m1.Scale(-5.66f, 7.87f, MatrixOrder.Prepend);
DumpMatrix(xm1, m1);
xm1.RotateAt(177, new XPoint(-3456, 654), XMatrixOrder.Append);
m1.RotateAt(177, new PointF(-3456, 654), MatrixOrder.Append);
DumpMatrix(xm1, m1);
xm1.Shear(0.76, -0.87, XMatrixOrder.Prepend);
m1.Shear(0.76f, -0.87f, MatrixOrder.Prepend);
DumpMatrix(xm1, m1);
xm1 = new XMatrix(23, -35, 837, 332, -3, 12);
m1 = new Matrix(23, -35, 837, 332, -3, 12);
XPoint[] xpoints = new XPoint[3]{new XPoint(23, 10), new XPoint(-27, 120), new XPoint(-87, -55)};
PointF[] points = new PointF[3]{new PointF(23, 10), new PointF(-27, 120), new PointF(-87, -55)};
xm1.TransformPoints(xpoints);
m1.TransformPoints(points);
xm1.Invert();
m1.Invert();
DumpMatrix(xm1, m1);
}
示例5: Solve
public static ResultFEM Solve(Matrix<double> K, Matrix<double> f, int[] bc)
{
// Create dof array:
int ndof = f.RowCount;
// Initialize displacement vector
Matrix u = new DenseMatrix(ndof, 1);
int[] dof = new int[ndof];
for (int i = 0; i < ndof; i++)
{
dof[i] = i;
}
// Create the free dofs:
int[] fdof = dof.Except(bc).ToArray();
int nfdof = fdof.Length; // Number of free dofs.
int nbdof = ndof - nfdof; //Constrained dofs
// Create the permutation array which puts the constrained dofs last:
int[] permute = bc.Union(fdof).ToArray();
Permutation perm = new Permutation(permute);
Permutation invPerm = perm.Inverse();
Matrix<double> KPermuted = DenseMatrix.OfMatrix(K);
KPermuted.PermuteRows(invPerm);
KPermuted.PermuteColumns(invPerm);
// Split K:::
Matrix<double> Kff = KPermuted.SubMatrix(nbdof, nfdof, nbdof, nfdof);
System.Console.WriteLine(Kff); //Down right corner of matrix
Matrix<double> Kfp = KPermuted.SubMatrix(nbdof, nfdof, 0, nbdof); //Down left corner of matrix
// Split F:::
Matrix<double> fPermuted = DenseMatrix.OfMatrix(f);
fPermuted.PermuteRows(invPerm);
Matrix<double> ff = fPermuted.SubMatrix(nbdof, nfdof, 0, 1);
Matrix<double> up = u.SubMatrix(0, nbdof, 0, 1); // Must set up to constrained values in bc.
// Solve for the unknown displacements:::
Matrix<double> s = Kff.Solve(ff.Subtract(Kfp.Multiply(up)));
u.SetSubMatrix(nbdof, 0, s); // Set displacements back.
System.Console.WriteLine(u);
// Permute back u
u.PermuteRows(perm);
System.Console.WriteLine("U after permut");
System.Console.WriteLine(K);
System.Console.WriteLine(u);
System.Console.WriteLine(f);
// Get reaction forces:
Matrix<double> Q = K.Multiply(u).Subtract(f);
ResultFEM result = new ResultFEM(u, Q);
return result;
}