肌腱(文档字符串)

肌肉肌腱模型的实现。

肌腱模型是生物力学模型中的一个关键组成部分,它使生物力学模型区别于纯粹的多体系统。肌腱模型产生的力取决于其激活水平、长度和伸长速度。长度和伸长速度依赖的力产生由力-长度和力-速度特性决定。这些是归一化函数,依赖于肌腱的状态,并且特定于给定的肌腱模型。

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

有序的非时间变化符号列矩阵,存在于 MF 中。

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

有序的非时间变化符号列矩阵,存在于 MF 中。

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

有序的非时间变化符号列矩阵,存在于 MF 中。

abstract curves()[源代码][源代码]

返回与特定模型相关的曲线的 CharacteristicCurveCollection

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

有序的非时间变化符号列矩阵,存在于 MF 中。

property peak_isometric_force

对应于峰值等长力常数的符号或值。

property r

表示输入变量的时间函数的列矩阵。

rhs()[源代码][源代码]

有序列方程矩阵,用于求解 M x' = F

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

有序的非时间变化符号列矩阵,存在于 MF 中。

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

有序的非时间变化符号列矩阵,存在于 MF 中。

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, ...[, ...])

推荐的构造函数,将使用已发布的常量。

参考文献

[1] (1,2)

De Groote, F., Kinney, A. L., Rao, A. V., & Fregly, B. J., 直接配位最优控制问题公式化评估解决肌肉冗余问题, 生物医学工程年鉴, 44(10), (2016) pp. 2922-2936

示例

此类模拟了由 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)]])

要查看肌腱模型中哪些常量是符号化的,我们可以使用 pconstants 属性。这将返回一个由常量填充的 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]])
class sympy.physics.biomechanics.musculotendon.MusculotendonFormulation(value)[源代码][源代码]

肌肉肌腱动力学公式的类型枚举。