Пример #1
0
        public static Matrix RightRectanglesFormula(double start, double end,
                                                    double step, IMovementControlCondition condition)
        {
            var result = new Matrix(new []
            {
                new double[] { 0 },
                new double[] { 0 },
                new double[] { 0 },
                new double[] { 0 }
            });
            var tempVector = new Matrix(new[]
            {
                new double[] { 0 },
                new double[] { 0 },
                new double[] { 0 },
                new double[] { 0 }
            });
            var stepsCount = (end - start) / step;

            for (var i = 1; i < stepsCount + 1; i++)
            {
                tempVector.Clear();
                for (var j = 0; j < result.RowsCount; j++)
                {
                    tempVector[j, 0] = condition.Control[j](start + i * step);
                }

                var different         = end - (start + i * step);
                var fundamentalMatrix = new FundamentalMatrix.FundamentalMatrix(condition.ConstantCoefficientsMatrix, different).GetFundamentalMatrix();
                result += step * fundamentalMatrix * tempVector;
            }

            return(result);
        }
Пример #2
0
        private List <Matrix> BuildMovementControl(int time1, int time2, IMovementControlCondition condition)
        {
            var result = new List <Matrix> {
                condition.StartVector
            };

            for (var i = time1; i < time2; i++)
            {
                var fundamentalMatrix = new FundamentalMatrix.FundamentalMatrix(condition.ConstantCoefficientsMatrix, 1).GetFundamentalMatrix();
                var current           = fundamentalMatrix * result.Last()
                                        + CalcIntegral(i, i + 1, condition);
                result.Add(current);
            }

            return(result);
        }