// Evaluate result=leftFactor*left + productFactor*this^transpose*rightFactor protected override Vector <float> MultiplyAndAddAsLeftFactorCore( float leftFactor, Vector <float> left, float productFactor, TransposeOperation transpose, Vector <float> rightFactor, Vector <float> result) { // The matrix has 1+4*alpha on the main diagonal, // and -alpha on the 1st and nth sub and superdiagonal. // result may be null. Using MultiplyInto will create // a vector if necessary and will return it. result = Vector.MultiplyInto(leftFactor, left, result); // Diagonal result.AddScaledInPlace(1.0f + 4.0f * alpha, rightFactor); // Superdiagonal 1 result.GetSlice(0, N - 2, 1, Intent.WritableView) .AddScaledInPlace(-alpha, rightFactor.GetSlice(1, N - 1)); // Superdiagonal size result.GetSlice(0, N - n - 1, 1, Intent.WritableView) .AddScaledInPlace(-alpha, rightFactor.GetSlice(n, N - 1)); // Subdiagonal 1 result.GetSlice(1, N - 1, 1, Intent.WritableView) .AddScaledInPlace(-alpha, rightFactor.GetSlice(0, N - 2)); // Subdiagonal size result.GetSlice(n, N - 1, 1, Intent.WritableView) .AddScaledInPlace(-alpha, rightFactor.GetSlice(0, N - n - 1)); return(result); }
public void TransposeOperation_TwoMatrices_ReturnedTwoMatrices() { var matrix1 = new Matrix(new int[2, 2] { { 1, 2 }, { 3, 4 } }); var matrix2 = new Matrix(new int[2, 2] { { 5, 6 }, { 7, 8 } }); var inputArray = new Matrix[] { matrix1, matrix2 }; var opratrion = new TransposeOperation(); var output = opratrion.Apply(inputArray); Assert.Equal(2, output.Count()); }
public void TransposeOperation_One2x2Matrix_MatrixTransposed() { var inputMatrix = new Matrix(new int[2, 2] { { 1, 2 }, { 3, 4 } }); var expectedMatrix = new Matrix(new int[2, 2] { { 1, 3 }, { 2, 4 } }); var inputArray = new Matrix[] { inputMatrix }; var expectedArray = new Matrix[] { expectedMatrix }; var opratrion = new TransposeOperation(); var output = opratrion.Apply(inputArray); Assert.Equal(expectedArray, output, new MatrixComparer()); }
// Evaluate result=this^transpose*right protected override Vector <float> MultiplyAsLeftCore(TransposeOperation transpose, Vector <float> right, Vector <float> result) { // Diagonal result = Vector.MultiplyInto(1.0f + 4.0f * alpha, right, result); // Superdiagonal 1 result.GetSlice(0, N - 2, 1, Intent.WritableView) .AddScaledInPlace(-alpha, right.GetSlice(1, N - 1)); // Superdiagonal size result.GetSlice(0, N - n - 1, 1, Intent.WritableView) .AddScaledInPlace(-alpha, right.GetSlice(n, N - 1)); // Subdiagonal 1 result.GetSlice(1, N - 1, 1, Intent.WritableView) .AddScaledInPlace(-alpha, right.GetSlice(0, N - 2)); // Subdiagonal size result.GetSlice(n, N - 1, 1, Intent.WritableView) .AddScaledInPlace(-alpha, right.GetSlice(0, N - n - 1)); return(result); }
public override Vector <float> SolveInto(TransposeOperation operation, Vector <float> rightHandSide, Vector <float> result) { throw new NotSupportedException(); }