示例#1
0
 public override Node ReturnDerivative(double x)
 {
     if (leftNode is NumberNode)
     {
         return(new MultiplicationSign(leftNode.Copy(), rightNode.ReturnDerivative(x)));
     }
     else if (rightNode is NumberNode)
     {
         return(new MultiplicationSign(rightNode.Copy(), leftNode.ReturnDerivative(x)));
     }
     else
     {
         MultiplicationSign multiplicationSignA = new MultiplicationSign(leftNode.ReturnDerivative(x), rightNode.Copy());
         MultiplicationSign multiplicationSignB = new MultiplicationSign(leftNode.Copy(), rightNode.ReturnDerivative(x));
         PlusSign           plusSign            = new PlusSign(multiplicationSignA, multiplicationSignB);
         return(plusSign);
     }
 }
示例#2
0
        private Node ReturnNewtonPolynomial(double x, int order)
        {
            Operator sign = null;

            int[]      coefficients   = ReturnIndeterminateCoefficients(order);
            PlusSign[] indeterminates = ReturnNewtonIndeterminates(order);

            if (order == 0)
            {
                return(new RationalNumberNode(Calculate(indeterminates[0].Calculate(x))));
            }
            if (order == 1)
            {
                return(new MinusSign(new RationalNumberNode(Calculate(indeterminates[0].Calculate(x))), new RationalNumberNode(Calculate(indeterminates[1].Calculate(x)))));
            }

            NaturalNumberNode  naturalNumberNode  = new NaturalNumberNode(coefficients[0]);
            MultiplicationSign multiplicationSign = new MultiplicationSign(naturalNumberNode, new RationalNumberNode(Calculate(indeterminates[0].Calculate(x))));

            sign = multiplicationSign;

            for (int i = 1; i <= order; i++)
            {
                naturalNumberNode  = new NaturalNumberNode(Math.Abs(coefficients[i]));
                multiplicationSign = new MultiplicationSign(naturalNumberNode, new RationalNumberNode(Calculate(indeterminates[i].Calculate(x))));
                if (i % 2 == 0)
                {
                    sign = new PlusSign(sign, multiplicationSign);
                }
                else
                {
                    sign = new MinusSign(sign, multiplicationSign);
                }
            }
            return(sign);
        }