コード例 #1
0
        // 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);
        }
コード例 #2
0
        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());
        }
コード例 #3
0
        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());
        }
コード例 #4
0
        // 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);
        }
コード例 #5
0
 public override Vector <float> SolveInto(TransposeOperation operation, Vector <float> rightHandSide, Vector <float> result)
 {
     throw new NotSupportedException();
 }