public void TestMultiplicationByConstant() { Symbol y = new Symbol("y"); Symbol x = new Symbol("x"); var expr = y <= 4 * x; var ddx = new DerivativeSymbol(y) <= 4; Assert.AreEqual(ddx, expr.Differentiate(x).Simplify()); }
public void TestChainRule() { Symbol y = new Symbol("y"); Symbol x = new Symbol("x"); var expr = y <= Trig.Sin(x); var dx = new DerivativeSymbol(y) <= Trig.Cos(x) * 1; Assert.AreEqual(dx, expr.Differentiate(x).Simplify()); }
public void TestDifferenceRule() { Symbol y = new Symbol("y"); Symbol x = new Symbol("x"); var expr = y <= x - 5; var ddx = new DerivativeSymbol(y) <= 1; Assert.AreEqual(ddx, expr.Differentiate(x).Simplify()); }
public void TestPowerRule() { Symbol y = new Symbol("y"); Symbol x = new Symbol("x"); var expr = y <= (x ^ 2); var ddx = new DerivativeSymbol(y) <= 2 * (x ^ 1); Assert.AreEqual(ddx, expr.Differentiate(x).Simplify()); }
public void TestQuotientRule() { Symbol z = new Symbol("z"); Symbol y = new Symbol("y"); Symbol x = new Symbol("x"); var expr = y <= x / z; var ddx = new DerivativeSymbol(y) <= (1 * z - new DerivativeSymbol(z) * x) / (z * z); Assert.AreEqual(ddx, expr.Differentiate(x).Simplify()); }
public void TestProductRule() { Symbol z = new Symbol("z"); Symbol y = new Symbol("y"); Symbol x = new Symbol("x"); var expr = y <= x * z; var ddx = new DerivativeSymbol(y) <= 1 * z + x * new DerivativeSymbol(z); Assert.AreEqual(ddx, expr.Differentiate(x).Simplify()); }
public override bool Equals(object obj) { return(obj switch { DerivativeSymbol expr => expr.baseSymbol.Equals(this.baseSymbol), _ => base.Equals(obj) });