예제 #1
0
 public override Node ReturnDerivative(double x)
 {
     if (leftNode is NumberNode && rightNode is NumberNode)
     {
         return(new NaturalNumberNode(0));
     }
     else if (leftNode is VariableNode && (rightNode is NaturalNumberNode || rightNode is RationalNumberNode))
     {
         RationalNumberNode rationalNumberNodeA = new RationalNumberNode(rightNode.Calculate(x));
         RationalNumberNode rationalNumberNodeB = new RationalNumberNode(rightNode.Calculate(x) - 1);
         CaretSign          caretSign           = new CaretSign(leftNode.Copy(), rationalNumberNodeB);
         MultiplicationSign multiplicationSign  = new MultiplicationSign(rationalNumberNodeA, caretSign);
         return(multiplicationSign);
     }
     else if (leftNode is NumberNode)
     {
         LogarithmFunction  logarithmFunction   = new LogarithmFunction(leftNode.Copy());
         CaretSign          caretSign           = new CaretSign(leftNode.Copy(), rightNode.Copy());
         MultiplicationSign multiplicationSignA = new MultiplicationSign(logarithmFunction, caretSign);
         MultiplicationSign multiplicationSignB = new MultiplicationSign(multiplicationSignA, caretSign.rightNode.ReturnDerivative(x));
         return(multiplicationSignB);
     }
     else
     {
         MinusSign          minusSign           = new MinusSign(rightNode.Copy(), new NaturalNumberNode(1));
         CaretSign          caretSign           = new CaretSign(leftNode.Copy(), minusSign);
         MultiplicationSign multiplicationSignA = new MultiplicationSign(rightNode.Copy(), caretSign);
         MultiplicationSign multiplicationSignB = new MultiplicationSign(multiplicationSignA, leftNode.ReturnDerivative(x));
         return(multiplicationSignB);
     }
 }
예제 #2
0
        public override Node ReturnDerivative(double x)
        {
            NaturalNumberNode zero                = new NaturalNumberNode(0);
            SineFunction      sineNode            = new SineFunction(child.Copy());
            MinusSign         minusNode           = new MinusSign(zero, sineNode);
            Node childDerivative                  = child.ReturnDerivative(x);
            MultiplicationSign multiplicationSign = new MultiplicationSign(minusNode, childDerivative);

            return(multiplicationSign);
        }
예제 #3
0
        public override Node ReturnDerivative(double x)
        {
            MultiplicationSign multiplicationSignA = new MultiplicationSign(leftNode.ReturnDerivative(x), rightNode.Copy());
            MultiplicationSign multiplicationSignB = new MultiplicationSign(leftNode.Copy(), rightNode.ReturnDerivative(x));
            MinusSign          minusSign           = new MinusSign(multiplicationSignA, multiplicationSignB);
            NaturalNumberNode  naturalNumberNode   = new NaturalNumberNode(2);
            CaretSign          caretSign           = new CaretSign(rightNode.Copy(), naturalNumberNode);
            DivisionSign       division            = new DivisionSign(minusSign, caretSign);

            return(division);
        }
예제 #4
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);
        }