public void DerivativeTest3() { // x ^ 3 Variable x = new Variable("x"); Number num1 = new Number(3); IExpression exp = new Pow(x, num1); IExpression deriv = exp.Differentiate(); Assert.AreEqual("1 * (3 * (x ^ (3 - 1)))", deriv.ToString()); num1.Value = 4; Assert.AreEqual("x ^ 4", exp.ToString()); Assert.AreEqual("1 * (3 * (x ^ (3 - 1)))", deriv.ToString()); // 2 ^ (3x) Number num2 = new Number(2); num1 = new Number(3); Mul mul = new Mul(num1, x.Clone()); exp = new Pow(num2, mul); deriv = exp.Differentiate(); Assert.AreEqual("(ln(2) * (2 ^ (3 * x))) * (3 * 1)", deriv.ToString()); num1.Value = 4; Assert.AreEqual("2 ^ (4 * x)", exp.ToString()); Assert.AreEqual("(ln(2) * (2 ^ (3 * x))) * (3 * 1)", deriv.ToString()); }
public void DerivativeTest2() { Number num1 = new Number(2); Variable x = new Variable("x"); Mul mul1 = new Mul(num1, x); Number num2 = new Number(3); Mul mul2 = new Mul(num2, x.Clone()); IExpression exp = new Sub(mul1, mul2); IExpression deriv = exp.Differentiate(); Assert.AreEqual("(2 * 1) - (3 * 1)", deriv.ToString()); num1.Value = 5; num2.Value = 4; Assert.AreEqual("(5 * x) - (4 * x)", exp.ToString()); Assert.AreEqual("(2 * 1) - (3 * 1)", deriv.ToString()); }
public void DerivativeTest3() { // (2x) / (3x) Number num1 = new Number(2); Variable x = new Variable("x"); Mul mul1 = new Mul(num1, x); Number num2 = new Number(3); Mul mul2 = new Mul(num2, x.Clone()); IExpression exp = new Div(mul1, mul2); IExpression deriv = exp.Differentiate(); Assert.AreEqual("(((2 * 1) * (3 * x)) - ((2 * x) * (3 * 1))) / ((3 * x) ^ 2)", deriv.ToString()); num1.Value = 4; num2.Value = 5; Assert.AreEqual("(4 * x) / (5 * x)", exp.ToString()); Assert.AreEqual("(((2 * 1) * (3 * x)) - ((2 * x) * (3 * 1))) / ((3 * x) ^ 2)", deriv.ToString()); }
public void DivDerivativeTest3() { // (2x) / (3x) var num1 = new Number(2); var x = new Variable("x"); var mul1 = new Mul(num1, x); var num2 = new Number(3); var mul2 = new Mul(num2, x.Clone()); var exp = new Div(mul1, mul2); var deriv = Differentiate(exp); Assert.Equal("((2 * 1 * 3 * x) - (2 * x * 3 * 1)) / ((3 * x) ^ 2)", deriv.ToString()); num1.Value = 4; num2.Value = 5; Assert.Equal("(4 * x) / (5 * x)", exp.ToString()); Assert.Equal("((2 * 1 * 3 * x) - (2 * x * 3 * 1)) / ((3 * x) ^ 2)", deriv.ToString()); }
public void SubDerivativeTest2() { var num1 = new Number(2); var x = new Variable("x"); var mul1 = new Mul(num1, x); var num2 = new Number(3); var mul2 = new Mul(num2, x.Clone()); var exp = new Sub(mul1, mul2); var deriv = Differentiate(exp); Assert.Equal("(2 * 1) - (3 * 1)", deriv.ToString()); num1.Value = 5; num2.Value = 4; Assert.Equal("(5 * x) - (4 * x)", exp.ToString()); Assert.Equal("(2 * 1) - (3 * 1)", deriv.ToString()); }
public void PowDerivativeTest3() { // x ^ 3 var x = new Variable("x"); var num1 = new Number(3); var exp = new Pow(x, num1); var deriv = Differentiate(exp); Assert.Equal("1 * 3 * (x ^ (3 - 1))", deriv.ToString()); num1.Value = 4; Assert.Equal("x ^ 4", exp.ToString()); Assert.Equal("1 * 3 * (x ^ (3 - 1))", deriv.ToString()); // 2 ^ (3x) var num2 = new Number(2); num1 = new Number(3); var mul = new Mul(num1, x.Clone()); exp = new Pow(num2, mul); deriv = Differentiate(exp); Assert.Equal("ln(2) * (2 ^ (3 * x)) * 3 * 1", deriv.ToString()); num1.Value = 4; Assert.Equal("2 ^ (4 * x)", exp.ToString()); Assert.Equal("ln(2) * (2 ^ (3 * x)) * 3 * 1", deriv.ToString()); }
/// <summary> /// Differentiates the specified expression. /// </summary> /// <param name="expression">The expression.</param> /// <param name="variable">The variable.</param> /// <returns>Returns the derivative.</returns> protected virtual IExpression Variable(Variable expression, Variable variable) { if (expression.Equals(variable)) return new Number(1); return expression.Clone(); }