def get_derivative(self):
    if self.is_constant(): return utils.constant_derivative(self)

    if self.left_arg.is_constant(): return self.const_arg_derivative(self.left_arg, self.right_arg)
    if self.right_arg.is_constant(): return self.const_arg_derivative(self.right_arg, self.left_arg)

    multiplication_rule = "d/dx f(x)g(x) = f(x) d/dx g(x) + g(x) d/dx f(x)"

    left_derivative = self.left_arg.get_derivative()
    right_derivative = self.right_arg.get_derivative()

    result = addexpr.AdditionExpression(
      MultiplicationExpression(self.left_arg, right_derivative.result),
      MultiplicationExpression(self.right_arg, left_derivative.result)
    )

    rule_application = addexpr.AdditionExpression(
      MultiplicationExpression(self.left_arg, derivexpr.DerivativeExpression(self.right_arg)),
      MultiplicationExpression(self.right_arg, derivexpr.DerivativeExpression(self.left_arg))
    )

    return Derivative(
      self,
      result,
      rule_application,
      [multiplication_rule],
      [left_derivative, right_derivative],
    )
    def get_derivative(self):
        if self.is_constant(): return utils.constant_derivative(self)

        sin_rule = "d/dx sin(x) = cos(x)"

        derivative = cosexpr.CosExpression(self.arg)

        if self.arg == varexpr.VariableExpression():
            return Derivative(self, derivative, None, [sin_rule], None)

        return utils.apply_chain_rule(self, sin_rule, derivative)
示例#3
0
    def get_derivative(self):
        if self.is_constant(): return utils.constant_derivative(self)

        neg_rule = "d/dx (-f(x)) = - d/dx f(x)"
        child_derivative = self.arg.get_derivative()
        derivative = NegativeExpression(child_derivative.result)

        return Derivative(
            self, derivative,
            NegativeExpression(derivexpr.DerivativeExpression(self.arg)),
            [neg_rule], [child_derivative])
示例#4
0
    def get_derivative(self):
        if self.is_constant(): return utils.constant_derivative(self)

        ln_rule = "d/dx ln(x) = 1/x"

        derivative = divexpr.DivisionExpression(
            constexpr.ConstantExpression("1"), self.arg)

        if self.arg == varexpr.VariableExpression():
            return Derivative(self, derivative, None, [ln_rule], None)

        return utils.apply_chain_rule(self, ln_rule, derivative)
    def get_derivative(self):
        if self.is_constant(): return utils.constant_derivative(self)

        tan_rule = "d/dx tan(x) = sec^2(x)"

        derivative = powexpr.PowerExpression(secexpr.SecExpression(self.arg),
                                             constexpr.ConstantExpression("2"))

        if self.arg == varexpr.VariableExpression():
            return Derivative(self, derivative, None, [tan_rule], None)

        return utils.apply_chain_rule(self, tan_rule, derivative)
示例#6
0
    def get_derivative(self):
        if self.is_constant(): return utils.constant_derivative(self)

        sec_rule = "d/dx sec(x) = sec(x)*tan(x)"

        derivative = multiexpr.MultiplicationExpression(
            SecExpression(self.arg), tanexpr.TanExpression(self.arg))

        if self.arg == varexpr.VariableExpression():
            return Derivative(self, derivative, None, [sec_rule], None)

        return utils.apply_chain_rule(self, sec_rule, derivative)
  def get_derivative(self):
    if self.is_constant(): return utils.constant_derivative(self)

    cos_rule = "d/dx cos(x) = - sin(x)"
    derivative = negexpr.NegativeExpression(sinexpr.SinExpression(self.arg))

    if self.arg == varexpr.VariableExpression():
      return Derivative(
        self,
        derivative,
        None,
        [cos_rule],
        None
      )
    
    return utils.apply_chain_rule(self, cos_rule, derivative)
示例#8
0
    def get_derivative(self):
        if self.is_constant(): return utils.constant_derivative(self)

        left_derivative = self.left_arg.get_derivative()
        right_derivative = self.right_arg.get_derivative()

        rule_application = AdditionExpression(
            derivexpr.DerivativeExpression(self.left_arg),
            derivexpr.DerivativeExpression(self.right_arg))

        applied_rules = ["d/dx (f(x) + g(x)) = d/dx f(x) + d/dx g(x)"]

        result = AdditionExpression(left_derivative.result,
                                    right_derivative.result)
        child_derivatives = [left_derivative, right_derivative]

        return Derivative(self, result, rule_application, applied_rules,
                          child_derivatives)
  def get_derivative(self):
    if self.is_constant(): return utils.constant_derivative(self)

    if self.right_arg.is_constant(): return self.const_power_derivative()
    if self.left_arg.is_constant(): return self.const_base_derivative()

    rule = "d/dx u ^ v = u ^ v * (ln (u) * d/dx v + (v * d/dx u)/ u)"
    
    left_derivative = self.left_arg.get_derivative()
    right_derivative = self.right_arg.get_derivative()

    result = multiexpr.MultiplicationExpression( 
      self,
      addexpr.AdditionExpression(
        multiexpr.MultiplicationExpression(lnexpr.LnExpression(self.left_arg), right_derivative.result),
        divexpr.DivisionExpression(
          multiexpr.MultiplicationExpression(self.right_arg, left_derivative.result), self.left_arg
        )
      )
    )

    rule_application = multiexpr.MultiplicationExpression( 
      self,
      addexpr.AdditionExpression(
        multiexpr.MultiplicationExpression(
          lnexpr.LnExpression(self.left_arg), derivexpr.DerivativeExpression(self.right_arg)
        ),
        divexpr.DivisionExpression(
          multiexpr.MultiplicationExpression(
            self.right_arg, derivexpr.DerivativeExpression(self.left_arg)
          ), self.left_arg
        )
      )
    )

    return Derivative(
      self,
      result,
      rule_application,
      [rule],
      [left_derivative, right_derivative],
    )
示例#10
0
  def get_derivative(self):
    if self.is_constant(): return utils.constant_derivative(self)

    sqrt_rule = "d/dx sqrt(x) = 1/(2*sqrt(x))"

    derivative = divexpr.DivisionExpression(
      constexpr.ConstantExpression("1"),
      multiexpr.MultiplicationExpression(constexpr.ConstantExpression("2"), self)
    )

    if self.arg == varexpr.VariableExpression():
      return Derivative(
        self,
        derivative,
        None,
        [sqrt_rule],
        None
      )
    
    return utils.apply_chain_rule(self, sqrt_rule, derivative)
示例#11
0
  def get_derivative(self):
    if self.is_constant(): return utils.constant_derivative(self)

    csc_rule = "d/dx csc(x) = -csc(x)*cot(x)"

    derivative = multiexpr.MultiplicationExpression(
      negexpr.NegativeExpression(
        CscExpression(self.arg)
      ), cotexpr.CotExpression(self.arg)
    )

    if self.arg == varexpr.VariableExpression():
      return Derivative(
        self,
        derivative,
        None,
        [csc_rule],
        None
      )
    
    return utils.apply_chain_rule(self, csc_rule, derivative)
示例#12
0
  def get_derivative(self):
    if self.is_constant(): return utils.constant_derivative(self)

    cot_rule = "d/dx cot(x) = -csc^2(x)"

    derivative = negexpr.NegativeExpression(
      powexpr.PowerExpression(
        cscexpr.CscExpression(self.arg), constexpr.ConstantExpression(2)
      )
    )

    if self.arg == varexpr.VariableExpression():
      return Derivative(
        self,
        derivative,
        None,
        [cot_rule],
        None
      )
    
    return utils.apply_chain_rule(self, cot_rule, derivative)
    def get_derivative(self):
        if self.is_constant(): return utils.constant_derivative(self)

        if self.right_arg.is_constant(): return self.const_divider_derivative()

        rule = "d/dx f(x)/g(x) = (g(x) d/dx f(x) - f(x) d/dx g(x))/(g(x))^2"

        left_derivative = self.left_arg.get_derivative()
        right_derivative = self.right_arg.get_derivative()

        result = DivisionExpression(
            subexpr.SubtractionExpression(
                multiexpr.MultiplicationExpression(self.right_arg,
                                                   left_derivative.result),
                multiexpr.MultiplicationExpression(self.left_arg,
                                                   right_derivative.result)),
            powexpr.PowerExpression(self.right_arg,
                                    constexpr.ConstantExpression("2")))

        rule_application = DivisionExpression(
            subexpr.SubtractionExpression(
                multiexpr.MultiplicationExpression(
                    self.right_arg,
                    derivexpr.DerivativeExpression(self.left_arg)),
                multiexpr.MultiplicationExpression(
                    self.left_arg,
                    derivexpr.DerivativeExpression(self.right_arg))),
            powexpr.PowerExpression(self.right_arg,
                                    constexpr.ConstantExpression("2")))

        return Derivative(
            self,
            result,
            rule_application,
            [rule],
            [left_derivative, right_derivative],
        )
示例#14
0
 def get_derivative(self):
     return utils.constant_derivative(self)