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); } }
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); }