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