示例#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);
        }