肌腱(文档字符串)¶
肌肉肌腱模型的实现。
肌腱模型是生物力学模型中的一个关键组成部分,它使生物力学模型区别于纯粹的多体系统。肌腱模型产生的力取决于其激活水平、长度和伸长速度。长度和伸长速度依赖的力产生由力-长度和力-速度特性决定。这些是归一化函数,依赖于肌腱的状态,并且特定于给定的肌腱模型。
- class sympy.physics.biomechanics.musculotendon.MusculotendonBase(
- name,
- pathway,
- activation_dynamics,
- *,
- musculotendon_dynamics=MusculotendonFormulation.RIGID_TENDON,
- tendon_slack_length=None,
- peak_isometric_force=None,
- optimal_fiber_length=None,
- maximal_fiber_velocity=None,
- optimal_pennation_angle=None,
- fiber_damping_coefficient=None,
- with_defaults=False,
所有肌腱类别的抽象基类,供其继承。
- 参数:
- 名称str
与肌肉肌腱相关联的名称标识符。当自动生成的符号被实例化时,此名称用作后缀。它必须是一个非零长度的字符串。
- 路径PathwayBase
执行器遵循的路径。这必须是一个
PathwayBase
的具体子类的实例,例如LinearPathway
。- activation_dynamicsActivationBase
将在肌腱中建模的激活动力学。这必须是
ActivationBase
的具体子类的实例,例如FirstOrderActivationDeGroote2016
。- 肌肉肌腱动力学肌肉肌腱公式化 | int
应内部使用的肌肉肌腱动力学公式,即刚性或弹性肌腱模型,肌肉肌腱状态的选择等。这必须是整数枚举
MusculotendonFormulation
的成员或可以转换为成员的整数。要使用刚性肌腱公式,请将其设置为MusculotendonFormulation.RIGID_TENDON``(或整数值 ``0
,它将被转换为枚举成员)。对于弹性肌腱模型,有四种可能的公式。要使用纤维长度作为状态的显式公式,请将其设置为MusculotendonFormulation.FIBER_LENGTH_EXPLICIT``(或整数值 ``1
)。要使用肌腱力作为状态的显式公式,请将其设置为MusculotendonFormulation.TENDON_FORCE_EXPLICIT``(或整数值 ``2
)。要使用纤维长度作为状态的隐式公式,请将其设置为MusculotendonFormulation.FIBER_LENGTH_IMPLICIT``(或整数值 ``3
)。要使用肌腱力作为状态的隐式公式,请将其设置为MusculotendonFormulation.TENDON_FORCE_IMPLICIT``(或整数值 ``4
)。默认值为MusculotendonFormulation.RIGID_TENDON
,对应于刚性肌腱公式。- tendon_slack_lengthExpr | None
肌肉肌腱在其无负载状态下的肌腱长度。在刚性肌腱模型中,肌腱长度即为肌腱松弛长度。在所有肌肉肌腱模型中,肌腱松弛长度用于标准化肌腱长度,以给出 \(\tilde{l}^T = \frac{l^T}{l^T_{slack}}\)。
- peak_isometric_forceExpr | None
肌肉纤维在进行等长收缩(无伸长速度)时所能产生的最大力。在所有肌腱模型中,峰值等长力用于标准化肌腱和肌肉纤维力,以给出 \(\tilde{F}^T = \frac{F^T}{F^M_{max}}\)。
- 最佳纤维长度Expr | None
肌肉纤维在产生无被动力和最大主动力时的长度。在所有肌腱模型中,最佳纤维长度用于将肌肉纤维长度归一化,以得到 \(\tilde{l}^M = \frac{l^M}{l^M_{opt}}\)。
- 最大纤维速度Expr | None
肌肉纤维在缩短过程中无法产生任何主动力的纤维速度。在所有肌腱模型中,最大纤维速度用于归一化肌肉纤维延伸速度,以给出 \(\tilde{v}^M = \frac{v^M}{v^M_{max}}\)。
- 最佳羽状角Expr | None
当肌纤维长度等于最佳肌纤维长度时的羽状角。
- fiber_damping_coefficientExpr | None
肌肉纤维模型中阻尼元件使用的阻尼系数。
- with_defaults布尔
在自动构建子类时是否应使用
with_defaults
替代构造函数。默认值是False
。
- 属性:
F
有序的列矩阵,表示方程在
M x' = F
右侧的F
。F_M_max
对应于峰值等长力常数的符号或值。
M
有序系数方阵在
M x' = F
的左侧。a
表示激活的动态符号。
activation
表示激活的动态符号。
activation_dynamics
控制此肌腱激活的动力学模型。
alpha_opt
对应于最佳羽状角常数的符号或值。
beta
对应于光纤阻尼系数常数的符号或值。
constants
有序的非时间变化符号列矩阵,存在于
M
和F
中。e
表示激发的动态符号。
excitation
表示激发的动态符号。
fiber_damping_coefficient
对应于光纤阻尼系数常数的符号或值。
force
执行器产生的力的大小。
input_vars
表示输入变量的时间函数的列矩阵。
l_M_opt
对应于最佳纤维长度常数的符号或值。
l_T_slack
对应于肌腱松弛长度常数的符号或值。
maximal_fiber_velocity
对应于最大纤维速度常数的符号或值。
musculotendon_dynamics
选择刚性或弹性肌腱类型的肌腱肌肉动力学。
name
与类实例关联的名称。
optimal_fiber_length
对应于最佳纤维长度常数的符号或值。
optimal_pennation_angle
对应于最佳羽状角常数的符号或值。
p
有序的非时间变化符号列矩阵,存在于
M
和F
中。pathway
定义执行器作用线的
Pathway
。peak_isometric_force
对应于峰值等长力常数的符号或值。
r
表示输入变量的时间函数的列矩阵。
state_vars
表示状态变量的时间函数的列矩阵。
tendon_slack_length
对应于肌腱松弛长度常数的符号或值。
v_M_max
对应于最大纤维速度常数的符号或值。
x
表示状态变量的时间函数的列矩阵。
方法
curves
()返回与特定模型相关的曲线的
CharacteristicCurveCollection
。rhs
()有序列方程矩阵,用于求解
M x' = F
。to_loads
()加载由运动方程方法类所需的。
with_defaults
(name, pathway, ...[, ...])推荐的构造函数,将使用已发布的常量。
- property F¶
有序的列矩阵,表示方程在
M x' = F
右侧的F
。
- property F_M_max¶
对应于峰值等长力常数的符号或值。
- property M¶
有序系数方阵在
M x' = F
的左侧。
- property a¶
表示激活的动态符号。
- property activation¶
表示激活的动态符号。
- property activation_dynamics¶
控制此肌腱激活的动力学模型。
- property alpha_opt¶
对应于最佳羽状角常数的符号或值。
- property beta¶
对应于光纤阻尼系数常数的符号或值。
- property constants¶
有序的非时间变化符号列矩阵,存在于
M
和F
中。
- property e¶
表示激发的动态符号。
- property excitation¶
表示激发的动态符号。
- property fiber_damping_coefficient¶
对应于光纤阻尼系数常数的符号或值。
- property input_vars¶
表示输入变量的时间函数的列矩阵。
- property l_M_opt¶
对应于最佳纤维长度常数的符号或值。
- property l_T_slack¶
对应于肌腱松弛长度常数的符号或值。
- property maximal_fiber_velocity¶
对应于最大纤维速度常数的符号或值。
- property musculotendon_dynamics¶
选择刚性或弹性肌腱类型的肌腱肌肉动力学。
- property optimal_fiber_length¶
对应于最佳纤维长度常数的符号或值。
- property optimal_pennation_angle¶
对应于最佳羽状角常数的符号或值。
- property p¶
有序的非时间变化符号列矩阵,存在于
M
和F
中。
- property peak_isometric_force¶
对应于峰值等长力常数的符号或值。
- property r¶
表示输入变量的时间函数的列矩阵。
- property state_vars¶
表示状态变量的时间函数的列矩阵。
- property tendon_slack_length¶
对应于肌腱松弛长度常数的符号或值。
- property v_M_max¶
对应于最大纤维速度常数的符号或值。
- classmethod with_defaults(
- name,
- pathway,
- activation_dynamics,
- *,
- musculotendon_dynamics=MusculotendonFormulation.RIGID_TENDON,
- tendon_slack_length=None,
- peak_isometric_force=None,
- optimal_fiber_length=None,
- maximal_fiber_velocity=10.0000000000000,
- optimal_pennation_angle=0.0,
- fiber_damping_coefficient=0.100000000000000,
推荐的构造函数,将使用已发布的常量。
- 参数:
- 名称str
与肌肉肌腱相关联的名称标识符。当自动生成的符号被实例化时,此名称用作后缀。它必须是一个非零长度的字符串。
- 路径PathwayBase
执行器遵循的路径。这必须是一个
PathwayBase
的具体子类的实例,例如LinearPathway
。- activation_dynamicsActivationBase
将在肌腱中建模的激活动力学。这必须是
ActivationBase
的具体子类的实例,例如FirstOrderActivationDeGroote2016
。- 肌肉肌腱动力学肌肉肌腱公式化 | int
应内部使用的肌肉肌腱动力学公式,即刚性或弹性肌腱模型,肌肉肌腱状态的选择等。这必须是整数枚举
MusculotendonFormulation
的成员或可以转换为成员的整数。要使用刚性肌腱公式,请将其设置为MusculotendonFormulation.RIGID_TENDON``(或整数值 ``0
,它将被转换为枚举成员)。对于弹性肌腱模型,有四种可能的公式。要使用纤维长度作为状态的显式公式,请将其设置为MusculotendonFormulation.FIBER_LENGTH_EXPLICIT``(或整数值 ``1
)。要使用肌腱力作为状态的显式公式,请将其设置为MusculotendonFormulation.TENDON_FORCE_EXPLICIT``(或整数值 ``2
)。要使用纤维长度作为状态的隐式公式,请将其设置为MusculotendonFormulation.FIBER_LENGTH_IMPLICIT``(或整数值 ``3
)。要使用肌腱力作为状态的隐式公式,请将其设置为MusculotendonFormulation.TENDON_FORCE_IMPLICIT``(或整数值 ``4
)。默认值为MusculotendonFormulation.RIGID_TENDON
,对应于刚性肌腱公式。- tendon_slack_lengthExpr | None
肌肉肌腱在其无负载状态下的肌腱长度。在刚性肌腱模型中,肌腱长度即为肌腱松弛长度。在所有肌肉肌腱模型中,肌腱松弛长度用于标准化肌腱长度,以给出 \(\tilde{l}^T = \frac{l^T}{l^T_{slack}}\)。
- peak_isometric_forceExpr | None
肌肉纤维在进行等长收缩(无伸长速度)时所能产生的最大力。在所有肌腱模型中,峰值等长力用于标准化肌腱和肌肉纤维力,以给出 \(\tilde{F}^T = \frac{F^T}{F^M_{max}}\)。
- 最佳纤维长度Expr | None
肌肉纤维在产生无被动力和最大主动力时的长度。在所有肌腱模型中,最佳纤维长度用于将肌肉纤维长度归一化,以得到 \(\tilde{l}^M = \frac{l^M}{l^M_{opt}}\)。
- 最大纤维速度Expr | None
肌肉纤维在缩短过程中无法产生任何主动力的纤维速度。在所有肌腱模型中,最大纤维速度用于归一化肌肉纤维延伸速度,以给出 \(\tilde{v}^M = \frac{v^M}{v^M_{max}}\)。
- 最佳羽状角Expr | None
当肌纤维长度等于最佳肌纤维长度时的羽状角。
- fiber_damping_coefficientExpr | None
肌肉纤维模型中阻尼元件使用的阻尼系数。
- property x¶
表示状态变量的时间函数的列矩阵。
- class sympy.physics.biomechanics.musculotendon.MusculotendonDeGroote2016(
- name,
- pathway,
- activation_dynamics,
- *,
- musculotendon_dynamics=MusculotendonFormulation.RIGID_TENDON,
- tendon_slack_length=None,
- peak_isometric_force=None,
- optimal_fiber_length=None,
- maximal_fiber_velocity=None,
- optimal_pennation_angle=None,
- fiber_damping_coefficient=None,
- with_defaults=False,
使用 De Groote 等人 2016 年曲线的肌肉肌腱模型 [1]。
- 参数:
- 名称str
与肌肉肌腱相关联的名称标识符。当自动生成的符号被实例化时,此名称用作后缀。它必须是一个非零长度的字符串。
- 路径PathwayBase
执行器遵循的路径。这必须是一个
PathwayBase
的具体子类的实例,例如LinearPathway
。- activation_dynamicsActivationBase
将在肌腱中建模的激活动力学。这必须是
ActivationBase
的具体子类的实例,例如FirstOrderActivationDeGroote2016
。- 肌肉肌腱动力学肌肉肌腱公式化 | int
应内部使用的肌肉肌腱动力学公式,即刚性或弹性肌腱模型,肌肉肌腱状态的选择等。这必须是整数枚举
MusculotendonFormulation
的成员或可以转换为成员的整数。要使用刚性肌腱公式,请将其设置为MusculotendonFormulation.RIGID_TENDON``(或整数值 ``0
,它将被转换为枚举成员)。对于弹性肌腱模型,有四种可能的公式。要使用纤维长度作为状态的显式公式,请将其设置为MusculotendonFormulation.FIBER_LENGTH_EXPLICIT``(或整数值 ``1
)。要使用肌腱力作为状态的显式公式,请将其设置为MusculotendonFormulation.TENDON_FORCE_EXPLICIT``(或整数值 ``2
)。要使用纤维长度作为状态的隐式公式,请将其设置为MusculotendonFormulation.FIBER_LENGTH_IMPLICIT``(或整数值 ``3
)。要使用肌腱力作为状态的隐式公式,请将其设置为MusculotendonFormulation.TENDON_FORCE_IMPLICIT``(或整数值 ``4
)。默认值为MusculotendonFormulation.RIGID_TENDON
,对应于刚性肌腱公式。- tendon_slack_lengthExpr | None
肌肉肌腱在其无负载状态下的肌腱长度。在刚性肌腱模型中,肌腱长度即为肌腱松弛长度。在所有肌肉肌腱模型中,肌腱松弛长度用于标准化肌腱长度,以给出 \(\tilde{l}^T = \frac{l^T}{l^T_{slack}}\)。
- peak_isometric_forceExpr | None
肌肉纤维在进行等长收缩(无伸长速度)时所能产生的最大力。在所有肌腱模型中,峰值等长力用于标准化肌腱和肌肉纤维力,以给出 \(\tilde{F}^T = \frac{F^T}{F^M_{max}}\)。
- 最佳纤维长度Expr | None
肌肉纤维在产生无被动力和最大主动力时的长度。在所有肌腱模型中,最佳纤维长度用于将肌肉纤维长度归一化,以得到 \(\tilde{l}^M = \frac{l^M}{l^M_{opt}}\)。
- 最大纤维速度Expr | None
肌肉纤维在缩短过程中无法产生任何主动力的纤维速度。在所有肌腱模型中,最大纤维速度用于归一化肌肉纤维延伸速度,以给出 \(\tilde{v}^M = \frac{v^M}{v^M_{max}}\)。
- 最佳羽状角Expr | None
当肌纤维长度等于最佳肌纤维长度时的羽状角。
- fiber_damping_coefficientExpr | None
肌肉纤维模型中阻尼元件使用的阻尼系数。
- with_defaults布尔
在自动构建子类时是否应使用
with_defaults
替代构造函数。默认值是False
。
- 属性:
F
有序的列矩阵,表示方程在
M x' = F
右侧的F
。F_M_max
对应于峰值等长力常数的符号或值。
M
有序系数方阵在
M x' = F
的左侧。a
表示激活的动态符号。
activation
表示激活的动态符号。
activation_dynamics
控制此肌腱激活的动力学模型。
alpha_opt
对应于最佳羽状角常数的符号或值。
beta
对应于光纤阻尼系数常数的符号或值。
constants
有序的非时间变化符号列矩阵,存在于
M
和F
中。e
表示激发的动态符号。
excitation
表示激发的动态符号。
fiber_damping_coefficient
对应于光纤阻尼系数常数的符号或值。
force
执行器产生的力的大小。
input_vars
表示输入变量的时间函数的列矩阵。
l_M_opt
对应于最佳纤维长度常数的符号或值。
l_T_slack
对应于肌腱松弛长度常数的符号或值。
maximal_fiber_velocity
对应于最大纤维速度常数的符号或值。
musculotendon_dynamics
选择刚性或弹性肌腱类型的肌腱肌肉动力学。
name
与类实例关联的名称。
optimal_fiber_length
对应于最佳纤维长度常数的符号或值。
optimal_pennation_angle
对应于最佳羽状角常数的符号或值。
p
有序的非时间变化符号列矩阵,存在于
M
和F
中。pathway
定义执行器作用线的
Pathway
。peak_isometric_force
对应于峰值等长力常数的符号或值。
r
表示输入变量的时间函数的列矩阵。
state_vars
表示状态变量的时间函数的列矩阵。
tendon_slack_length
对应于肌腱松弛长度常数的符号或值。
v_M_max
对应于最大纤维速度常数的符号或值。
x
表示状态变量的时间函数的列矩阵。
方法
rhs
()有序列方程矩阵,用于求解
M x' = F
。to_loads
()加载由运动方程方法类所需的。
with_defaults
(name, pathway, ...[, ...])推荐的构造函数,将使用已发布的常量。
参考文献
示例
此类模拟了由 De Groote 等人,2016 年 [1] 描述的特征曲线参数化的肌腱肌腱执行器。与 SymPy 生物力学模块中的所有肌腱模型一样,它需要一条路径来定义其作用线。我们将首先创建一个简单的
LinearPathway
,连接两个点,我们的肌腱将沿着这条路径。我们将创建一个点O
来表示肌腱的起始点,另一个点I
来表示其插入点。>>> from sympy import symbols >>> from sympy.physics.mechanics import (LinearPathway, Point, ... ReferenceFrame, dynamicsymbols)
>>> N = ReferenceFrame('N') >>> O, I = O, P = symbols('O, I', cls=Point) >>> q, u = dynamicsymbols('q, u', real=True) >>> I.set_pos(O, q*N.x) >>> O.set_vel(N, 0) >>> I.set_vel(N, u*N.x) >>> pathway = LinearPathway(O, I) >>> pathway.attachments (O, I) >>> pathway.length Abs(q(t)) >>> pathway.extension_velocity sign(q(t))*Derivative(q(t), t)
肌肉肌腱模型也需要一个激活动力学模型的实例,因为这将用于在肌肉肌腱动力学公式中提供激活符号。我们将使用
FirstOrderActivationDeGroote2016
的实例来表示一阶激活动力学。请注意,需要提供一个名称参数,SymPy 将使用它作为后缀。>>> from sympy.physics.biomechanics import FirstOrderActivationDeGroote2016
>>> activation = FirstOrderActivationDeGroote2016('muscle') >>> activation.x Matrix([[a_muscle(t)]]) >>> activation.r Matrix([[e_muscle(t)]]) >>> activation.p Matrix([ [tau_a_muscle], [tau_d_muscle], [ b_muscle]]) >>> activation.rhs() Matrix([[((1/2 - tanh(b_muscle*(-a_muscle(t) + e_muscle(t)))/2)*(3*...]])
肌腱类需要传递符号或值来表示肌腱动力学中的常数。我们将使用 SymPy 的
symbols
函数来创建最大等长力F_M_max
、最佳纤维长度l_M_opt
、肌腱松弛长度l_T_slack
、最大纤维速度v_M_max
、最佳羽状角alpha_opt
和纤维阻尼系数beta
的符号。>>> F_M_max = symbols('F_M_max', real=True) >>> l_M_opt = symbols('l_M_opt', real=True) >>> l_T_slack = symbols('l_T_slack', real=True) >>> v_M_max = symbols('v_M_max', real=True) >>> alpha_opt = symbols('alpha_opt', real=True) >>> beta = symbols('beta', real=True)
然后我们可以从生物力学模块中导入类
MusculotendonDeGroote2016
,并通过传入我们之前实例化的各种对象来创建一个实例。默认情况下,将创建一个具有刚性肌腱肌肉肌腱动力学的肌肉肌腱模型。>>> from sympy.physics.biomechanics import MusculotendonDeGroote2016
>>> rigid_tendon_muscle = MusculotendonDeGroote2016( ... 'muscle', ... pathway, ... activation, ... tendon_slack_length=l_T_slack, ... peak_isometric_force=F_M_max, ... optimal_fiber_length=l_M_opt, ... maximal_fiber_velocity=v_M_max, ... optimal_pennation_angle=alpha_opt, ... fiber_damping_coefficient=beta, ... )
我们可以检查肌腱的各种属性,包括使用其
force
属性获取描述其产生的力的符号表达式。>>> rigid_tendon_muscle.force -F_M_max*(beta*(-l_T_slack + Abs(q(t)))*sign(q(t))*Derivative(q(t), t)...
当我们创建肌腱对象时,我们传入了一个激活动力学对象的实例,该对象控制肌腱内的激活。SymPy在这里的设计选择是,激活动力学实例将被视为肌腱动力学的子对象。因此,如果我们想要检查与肌腱模型相关的状态和输入变量,我们也将返回与子对象相关的状态和输入变量,或者在这种情况下是激活动力学。由于我们在这里创建的肌腱模型使用刚性肌腱动力学,因此不会引入与肌腱相关的额外状态或输入。因此,该模型有一个与之相关的状态,即激活,以及一个与之相关的输入,即兴奋。可以使用``x``和``r``属性分别检查状态和输入。请注意,``x``和``r``分别具有``state_vars``和``input_vars``的别名属性。
>>> rigid_tendon_muscle.x Matrix([[a_muscle(t)]]) >>> rigid_tendon_muscle.r Matrix([[e_muscle(t)]])
要查看肌腱模型中哪些常量是符号化的,我们可以使用
p
或constants
属性。这将返回一个由常量填充的Matrix
,这些常量由Symbol
表示,而不是数值。>>> rigid_tendon_muscle.p Matrix([ [ l_T_slack], [ F_M_max], [ l_M_opt], [ v_M_max], [ alpha_opt], [ beta], [ tau_a_muscle], [ tau_d_muscle], [ b_muscle], [ c_0_fl_T_muscle], [ c_1_fl_T_muscle], [ c_2_fl_T_muscle], [ c_3_fl_T_muscle], [ c_0_fl_M_pas_muscle], [ c_1_fl_M_pas_muscle], [ c_0_fl_M_act_muscle], [ c_1_fl_M_act_muscle], [ c_2_fl_M_act_muscle], [ c_3_fl_M_act_muscle], [ c_4_fl_M_act_muscle], [ c_5_fl_M_act_muscle], [ c_6_fl_M_act_muscle], [ c_7_fl_M_act_muscle], [ c_8_fl_M_act_muscle], [ c_9_fl_M_act_muscle], [c_10_fl_M_act_muscle], [c_11_fl_M_act_muscle], [ c_0_fv_M_muscle], [ c_1_fv_M_muscle], [ c_2_fv_M_muscle], [ c_3_fv_M_muscle]])
最后,我们可以调用
rhs
方法来返回一个Matrix
,该矩阵的元素包含对应于每个肌腱状态的常微分方程的右侧。与 SymPy 力学模块中Method
类上同名的方法类似,这返回一个列向量,其中行数对应于状态的数量。对于我们这里的示例,我们有一个状态,即动态符号a_muscle(t)
,因此返回值是一个 1×1 的Matrix
。>>> rigid_tendon_muscle.rhs() Matrix([[((1/2 - tanh(b_muscle*(-a_muscle(t) + e_muscle(t)))/2)*(3*...]])
肌肉肌腱类除了支持刚性肌腱模型外,还支持弹性肌腱肌肉肌腱模型。您可以选择使用纤维长度或肌腱力作为额外的状态。您还可以指定是使用显式还是隐式公式。要选择一个公式,请在调用构造函数时将
MusculotendonFormulation
枚举的一个成员传递给musculotendon_dynamics
参数。这个枚举是一个IntEnum
,所以您也可以传递一个整数,但建议使用枚举,因为它更清楚您实际选择了哪个公式。下面,我们将使用FIBER_LENGTH_EXPLICIT
成员来创建一个具有弹性肌腱的肌肉肌腱,该肌腱将使用(归一化的)肌肉纤维长度作为额外的状态,并将生成显式形式的控制常微分方程。>>> from sympy.physics.biomechanics import MusculotendonFormulation
>>> elastic_tendon_muscle = MusculotendonDeGroote2016( ... 'muscle', ... pathway, ... activation, ... musculotendon_dynamics=MusculotendonFormulation.FIBER_LENGTH_EXPLICIT, ... tendon_slack_length=l_T_slack, ... peak_isometric_force=F_M_max, ... optimal_fiber_length=l_M_opt, ... maximal_fiber_velocity=v_M_max, ... optimal_pennation_angle=alpha_opt, ... fiber_damping_coefficient=beta, ... )
>>> elastic_tendon_muscle.force -F_M_max*TendonForceLengthDeGroote2016((-sqrt(l_M_opt**2*... >>> elastic_tendon_muscle.x Matrix([ [l_M_tilde_muscle(t)], [ a_muscle(t)]]) >>> elastic_tendon_muscle.r Matrix([[e_muscle(t)]]) >>> elastic_tendon_muscle.p Matrix([ [ l_T_slack], [ F_M_max], [ l_M_opt], [ v_M_max], [ alpha_opt], [ beta], [ tau_a_muscle], [ tau_d_muscle], [ b_muscle], [ c_0_fl_T_muscle], [ c_1_fl_T_muscle], [ c_2_fl_T_muscle], [ c_3_fl_T_muscle], [ c_0_fl_M_pas_muscle], [ c_1_fl_M_pas_muscle], [ c_0_fl_M_act_muscle], [ c_1_fl_M_act_muscle], [ c_2_fl_M_act_muscle], [ c_3_fl_M_act_muscle], [ c_4_fl_M_act_muscle], [ c_5_fl_M_act_muscle], [ c_6_fl_M_act_muscle], [ c_7_fl_M_act_muscle], [ c_8_fl_M_act_muscle], [ c_9_fl_M_act_muscle], [c_10_fl_M_act_muscle], [c_11_fl_M_act_muscle], [ c_0_fv_M_muscle], [ c_1_fv_M_muscle], [ c_2_fv_M_muscle], [ c_3_fv_M_muscle]]) >>> elastic_tendon_muscle.rhs() Matrix([ [v_M_max*FiberForceVelocityInverseDeGroote2016((l_M_opt*...], [ ((1/2 - tanh(b_muscle*(-a_muscle(t) + e_muscle(t)))/2)*(3*...]])
强烈建议在创建实例时使用替代的
with_defaults
构造函数,因为这将确保在肌肉肌腱特性曲线中使用已发布的常数。>>> elastic_tendon_muscle = MusculotendonDeGroote2016.with_defaults( ... 'muscle', ... pathway, ... activation, ... musculotendon_dynamics=MusculotendonFormulation.FIBER_LENGTH_EXPLICIT, ... tendon_slack_length=l_T_slack, ... peak_isometric_force=F_M_max, ... optimal_fiber_length=l_M_opt, ... )
>>> elastic_tendon_muscle.x Matrix([ [l_M_tilde_muscle(t)], [ a_muscle(t)]]) >>> elastic_tendon_muscle.r Matrix([[e_muscle(t)]]) >>> elastic_tendon_muscle.p Matrix([ [ l_T_slack], [ F_M_max], [ l_M_opt], [tau_a_muscle], [tau_d_muscle], [ b_muscle]])