class_docstr: First-order activation dynamics based on De Groote et al., 2016 [1]_.
  
  Explanation
  ===========
  
  Gives the first-order activation dynamics equation for the rate of change
  of activation with respect to time as a function of excitation and
  activation.
  
  The function is defined by the equation:
  
  .. math::
  
      \frac{da}{dt} = \left(\frac{\frac{1}{2} + a0}{\tau_a \left(\frac{1}{2}
          + \frac{3a}{2}\right)} + \frac{\left(\frac{1}{2}
          + \frac{3a}{2}\right) \left(\frac{1}{2} - a0\right)}{\tau_d}\right)
          \left(e - a\right)
  
  where
  
  .. math::
  
      a0 = \frac{\tanh{\left(b \left(e - a\right) \right)}}{2}
  
  with constant values of :math:`tau_a = 0.015`, :math:`tau_d = 0.060`, and
  :math:`b = 10`.
  
  References
  ==========
  
  .. [1] De Groote, F., Kinney, A. L., Rao, A. V., & Fregly, B. J., Evaluation
         of direct collocation optimal control problem formulations for
         solving the muscle redundancy problem, Annals of biomedical
         engineering, 44(10), (2016) pp. 2922-2936
class_docstr_tok: ["First-order","activation","dynamics","based","on","De","Groote","et","al.",",","2016","[","1","]","_",".","Explanation","===========","Gives","the","first-order","activation","dynamics","equation","for","the","rate","of","change","of","activation","with","respect","to","time","as","a","function","of","excitation","and","activation",".","The","function","is","defined","by","the","equation",":","..","math",":",":","\\frac","{","da","}","{","dt","}","=","\\left","(","\\frac","{","\\frac","{","1","}","{","2","}","+","a0","}","{","\\tau_a","\\left","(","\\frac","{","1","}","{","2","}","+","\\frac","{","3a","}","{","2","}","\\right",")","}","+","\\frac","{","\\left","(","\\frac","{","1","}","{","2","}","+","\\frac","{","3a","}","{","2","}","\\right",")","\\left","(","\\frac","{","1","}","{","2","}","-","a0\\right",")","}","{","\\tau_d","}","\\right",")","\\left","(","e","-","a\\right",")","where","..","math",":",":","a0","=","\\frac","{","\\tanh","{","\\left","(","b","\\left","(","e","-","a\\right",")","\\right",")","}","}","{","2","}","with","constant","values","of",":","math",":","`","tau_a","=","0.015","`",",",":","math",":","`","tau_d","=","0.060","`",",","and",":","math",":","`","b","=","10","`",".","References","==========","..","[","1","]","De","Groote",",","F.",",","Kinney",",","A.","L.",",","Rao",",","A.","V.",",","&","Fregly",",","B.","J.",",","Evaluation","of","direct","collocation","optimal","control","problem","formulations","for","solving","the","muscle","redundancy","problem",",","Annals","of","biomedical","engineering",",","44","(","10",")",",","(","2016",")","pp",".","2922-2936"]
docstr: Initializer for ``FirstOrderActivationDeGroote2016``.
  
  Parameters
  ==========
  activation time constant : Symbol | Number | None
      The value of the activation time constant governing the delay
      between excitation and activation when excitation exceeds
      activation.
  deactivation time constant : Symbol | Number | None
      The value of the deactivation time constant governing the delay
      between excitation and activation when activation exceeds
      excitation.
  smoothing_rate : Symbol | Number | None
      The slope of the hyperbolic tangent function used to smooth between
      the switching of the equations where excitation exceed activation
      and where activation exceeds excitation. The recommended value to
      use is ``10``, but values between ``0.1`` and ``100`` can be used.
docstr_tok: ["Initializer","for","``","FirstOrderActivationDeGroote2016","``",".","Parameters","==========","activation","time","constant",":","Symbol","|","Number","|","None","The","value","of","the","activation","time","constant","governing","the","delay","between","excitation","and","activation","when","excitation","exceeds","activation",".","deactivation","time","constant",":","Symbol","|","Number","|","None","The","value","of","the","deactivation","time","constant","governing","the","delay","between","excitation","and","activation","when","activation","exceeds","excitation",".","smoothing_rate",":","Symbol","|","Number","|","None","The","slope","of","the","hyperbolic","tangent","function","used","to","smooth","between","the","switching","of","the","equations","where","excitation","exceed","activation","and","where","activation","exceeds","excitation",".","The","recommended","value","to","use","is","``","10","``",",","but","values","between","``","0.1","``","and","``","100","``","can","be","used","."]
code: def __init__(
      self,
      name,
      activation_time_constant=None,
      deactivation_time_constant=None,
      smoothing_rate=None,
  ):
      """Initializer for ``FirstOrderActivationDeGroote2016``.
  
      Parameters
      ==========
      activation time constant : Symbol | Number | None
          The value of the activation time constant governing the delay
          between excitation and activation when excitation exceeds
          activation.
      deactivation time constant : Symbol | Number | None
          The value of the deactivation time constant governing the delay
          between excitation and activation when activation exceeds
          excitation.
      smoothing_rate : Symbol | Number | None
          The slope of the hyperbolic tangent function used to smooth between
          the switching of the equations where excitation exceed activation
          and where activation exceeds excitation. The recommended value to
          use is ``10``, but values between ``0.1`` and ``100`` can be used.
  
      """
      super().__init__(name)
  
      # Symbols
      self.activation_time_constant = activation_time_constant
      self.deactivation_time_constant = deactivation_time_constant
      self.smoothing_rate = smoothing_rate
  
imports: from abc import ABC, abstractmethod
  from functools import cached_property
  from sympy.core.symbol import Symbol
  from sympy.core.numbers import Float, Integer, Rational
  from sympy.functions.elementary.hyperbolic import tanh
  from sympy.matrices.dense import MutableDenseMatrix, zeros
  from sympy.physics.biomechanics._mixin import _NamedMixin
  from sympy.physics.mechanics import dynamicsymbols
label_desc: Use image node_id 1 to create a new FirstOrderActivationDeGroote2016 object from inherited base classes: ActivationBase with example: obj = FirstOrderActivationDeGroote2016(name, activation_time_constant, deactivation_time_constant, smoothing_rate)