SymPy-1-13-中文文档-三十七-

80 阅读37分钟

SymPy 1.13 中文文档(三十七)

原文:docs.sympy.org/latest/index.html

激活(文档字符串)

原文链接:docs.sympy.org/latest/modules/physics/biomechanics/api/activation.html

肌腱模型的激活动力学。

当肌腱模型被激活时,它们能够产生主动力,这是由于肌纤维内的化学过程导致其自愿收缩。从生物学角度来看,这种化学过程((\textrm{Ca}^{2+})离子的扩散)不是系统的输入,而是来自神经系统的电信号。这些被称为兴奋。激活动力学将标准化的兴奋水平与标准化的激活水平相关联,可以通过该模块中的模型进行建模。

class sympy.physics.biomechanics.activation.ActivationBase(name)

所有激活动力学类继承的抽象基类。

注意事项

该类的实例不能直接由用户实例化。但是,可以通过子类化来创建自定义激活动力学类型。

abstract property F

M x' = F的右手边的方程的有序列矩阵。

解释

形成线性常微分方程组的右手边列矩阵,用以描述激活动力学的常微分方程。

M(x, r, t, p) x' = F(x, r, t, p)

abstract property M

M x' = F的左手边的有序方阵系数矩阵。

解释

形成线性常微分方程组左手边的方阵。

M(x, r, t, p) x' = F(x, r, t, p)

property a

表示激活的动态符号。

解释

别名activation也可以用来访问相同的属性。

property activation

表示激活的动态符号。

解释

别名a也可以用来访问相同的属性。

abstract property constants

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

仅返回符号常量。如果常数使用数值类型(例如Float)而不是Symbol,则该属性不会包含在此属性返回的矩阵中。这是因为此属性的主要用途是在代码生成期间提供一组仍需数值值的有序符号序列。

解释

别名p也可以用来访问相同的属性。

property e

表示兴奋的动态符号。

解释

别名excitation也可以用来访问相同的属性。

property excitation

表示兴奋的动态符号。

解释

别名e也可以用来访问相同的属性。

abstract property input_vars

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

解释

别名r也可以用来访问相同的属性。

abstract property order

管理激活方程的(微分)方程的顺序。

abstract property p

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

只返回符号常数。如果在常数属性的生成代码过程中使用了数值类型(例如 Float)而不是 Symbol,那么该属性不会包含在此属性返回的矩阵中。这是因为此属性的主要用途是在代码生成期间提供一个仍然自由的符号序列,需要数值化。

解释

别名 constants 也可用于访问相同的属性。

abstract property r

有序列出的时间函数列矩阵,表示输入变量。

解释

别名 input_vars 也可用于访问相同的属性。

abstract rhs()

解释

解决了控制激活动力学的线性常微分方程组:

M(x, r, t, p) x' = F(x, r, t, p)

abstract property state_vars

有序列出的时间函数列矩阵,表示状态变量。

解释

别名 x 也可用于访问相同的属性。

abstract classmethod with_defaults(name)

提供常数的推荐默认值的替代构造函数。

abstract property x

有序列出的时间函数列矩阵,表示状态变量。

解释

别名 state_vars 也可用于访问相同的属性。

class sympy.physics.biomechanics.activation.FirstOrderActivationDeGroote2016(name, activation_time_constant=None, deactivation_time_constant=None, smoothing_rate=None)

基于 De Groote 等人的 2016 年的一阶激活动力学 [R720]

解释

给出了关于激活速率随时间变化的一阶激活动力学方程,作为激励和激活的函数。

该函数由以下方程定义:

[\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)]

其中

[a0 = \frac{\tanh{\left(b \left(e - a\right) \right)}}{2}]

其中常数值为 (tau_a = 0.015),(tau_d = 0.060),(b = 10)。

参考文献

[R720] (1,2)

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

property F

有序列出的M x' = F右手边方程列矩阵。

解释

线性常微分方程组的右手边矩阵的列矩阵:

M(x, r, t, p) x' = F(x, r, t, p)

property M

有序的方阵,M x' = F的左手边系数。

解释

线性常微分方程组的左手边矩阵的一部分的方阵:

M(x, r, t, p) x' = F(x, r, t, p)

property activation_time_constant

激活延迟常数。

解释

别名 `tau_a 也可用于访问相同的属性。

property b

用于双曲正切项的平滑常数。

解释

别名 smoothing_rate 也可用于访问相同的属性。

property constants

有序列出的MF中的非时间变化符号列矩阵。

只返回符号常数。如果在代码生成过程中使用了数值类型(例如Float)而不是Symbol作为常数,则该属性不会包含在返回的矩阵中。因为该属性的主要用途是提供一个仍然需要数值值的自由符号的有序序列。

解释

别名p也可以用来访问相同的属性。

property deactivation_time_constant

反应消退的延迟常数。

解释

别名tau_d也可以用来访问相同的属性。

property input_vars

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

解释

别名r也可以用来访问相同的属性。

property order

控制激活动力学的(微分)方程的阶数。

property p

非时变符号在MF中的有序列矩阵。

解释

只返回符号常数。如果在代码生成过程中使用了数值类型(例如Float)而不是Symbol作为常数,则该属性不会包含在返回的矩阵中。因为该属性的主要用途是提供一个仍然需要数值值的自由符号的有序序列。

别名constants也可以用来访问相同的属性。

property r

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

解释

别名input_vars也可以用来访问相同的属性。

rhs()

解决M x' = F的方程组的有序列矩阵。

解释

控制激活动力学的线性常微分方程组的解:

M(x, r, t, p) x' = F(x, r, t, p)

property smoothing_rate

双曲正切项的平滑常数。

解释

别名b也可以用来访问相同的属性。

property state_vars

表示状态变量的时间函数的有序列矩阵。

解释

别名x也可以用来访问相同的属性。

property tau_a

激活的延迟常数。

解释

别名activation_time_constant也可以用来访问相同的属性。

property tau_d

反应消退的延迟常数。

解释

别名deactivation_time_constant也可以用来访问相同的属性。

classmethod with_defaults(name)

将使用已发布的常数的备用构造器。

解释

使用原始出版物中指定的三个常数值返回FirstOrderActivationDeGroote2016的实例。

这些值为:

(\tau_a = 0.015) (\tau_d = 0.060) (b = 10)

property x

表示状态变量的时间函数的有序列矩阵。

解释

别名state_vars也可以用来访问相同的属性。

class sympy.physics.biomechanics.activation.ZerothOrderActivation(name)

简单的零阶激活动力学,将激发映射到激活。

解释

在你想要减少肌腱动力学复杂性的情况下,零阶激活动力学非常有用,因为它们简单地将兴奋映射到激活。因此,您的系统中不会引入额外的状态方程。它们还消除了在输入和系统动力学之间可能存在的延迟源,因为不涉及(普通)微分方程。

property F

M x' = F右手边的有序列方阵。

Explanation

形成控制激活动力学的普通微分方程组右手边的列矩阵:

M(x, r, t, p) x' = F(x, r, t, p)

零阶激活动力学没有状态变量,因此该线性系统的维数为 0,因此F是一个形状为(0, 1)的空列矩阵。

property M

M x' = F左手边的有序方阵系数。

Explanation

形成控制激活动力学的普通微分方程组的左手边的方阵:

M(x, r, t, p) x' = F(x, r, t, p)

零阶激活动力学没有状态变量,因此该线性系统的维数为 0,因此M是一个形状为(0, 0)的空方矩阵。

property constants

记录在MF中的非时变符号的有序列矩阵。

只返回符号常数。如果一个常数使用了数值类型(例如Float)而不是Symbol,则该属性将不会包含在由此属性返回的矩阵中。这是因为此属性的主要用途是为代码生成提供仍需数值值的有序序列的自由符号。

Explanation

零阶激活动力学简单地将兴奋映射到激活,因此该类别没有相关的常数,因此此属性返回形状为(0, 1)的空列矩阵。

别名p也可用于访问同一属性。

property input_vars

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

Explanation

在零阶激活动力学中,只有兴奋是输入,因此该属性返回一个包含一个条目e和形状为(1, 1)的列矩阵。

别名r也可用于访问同一属性。

property order

控制激活的(微分)方程的顺序。

property p

记录在MF中的非时变符号的有序列矩阵。

只返回符号常数。如果一个常数使用了数值类型(例如Float)而不是Symbol,则该属性将不会包含在由此属性返回的矩阵中。这是因为此属性的主要用途是为代码生成提供仍需数值值的有序序列的自由符号。

Explanation

零阶激活动力学简单地将兴奋映射到激活,因此该类别没有相关的常数,因此此属性返回形状为(0, 1)的空列矩阵。

别名constants也可用于访问同一属性。

property r

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

解释

激发是零阶激活动力学中唯一的输入,因此此属性返回一个形状为(1, 1)的列Matrix,其中包含一个条目e

别名input_vars也可以用来访问相同的属性。

rhs()

解决M x' = F的方程的有序列矩阵。

解释

解线性系统的解决方案,控制激活动力学的常微分方程组:

M(x, r, t, p) x' = F(x, r, t, p)

零阶激活动力学没有状态变量,因此此线性维度为 0,因此此方法返回一个形状为(0, 1)的空列Matrix

property state_vars

表示状态变量的时间函数的有序列矩阵。

解释

零阶激活动力学仅仅将激发映射到激活,因此该类别没有相关联的状态变量,因此此属性返回一个形状为(0, 1)的空列Matrix

别名x也可以用来访问相同的属性。

classmethod with_defaults(name)

提供了常量的推荐默认值的备用构造函数。

解释

由于此具体类别没有实现与其动态相关的任何常量,此classmethod简单地创建ZerothOrderActivation的标准实例。提供了一个实现,以确保所有ActivationBase具体类之间的一致接口。

property x

表示状态变量的时间函数的有序列矩阵。

解释

零阶激活动力学仅仅将激发映射到激活,因此该类别没有相关联的状态变量,因此此属性返回一个形状为(0, 1)的空列Matrix

别名state_vars也可以用来访问相同的属性。

曲线(文档字符串)

原文:docs.sympy.org/latest/modules/physics/biomechanics/api/curve.html

肌腱模型特征曲线的实现。

class sympy.physics.biomechanics.curve.CharacteristicCurveCollection(tendon_force_length: CharacteristicCurveFunction, tendon_force_length_inverse: CharacteristicCurveFunction, fiber_force_length_passive: CharacteristicCurveFunction, fiber_force_length_passive_inverse: CharacteristicCurveFunction, fiber_force_length_active: CharacteristicCurveFunction, fiber_force_velocity: CharacteristicCurveFunction, fiber_force_velocity_inverse: CharacteristicCurveFunction)

简单的数据容器,用于组合相关的特征曲线。

class sympy.physics.biomechanics.curve.CharacteristicCurveFunction

所有肌腱特征曲线函数的基类。

class sympy.physics.biomechanics.curve.FiberForceLengthActiveDeGroote2016(l_M_tilde, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11)

基于 De Groote 等人的 2016 年的活跃肌纤维力长度曲线[R721]

解释

该函数由以下方程定义:

(fl_{\text{act}}^M = c_0 \exp\left(-\frac{1}{2}\left(\frac{\tilde{l}^M - c_1}{c_2 + c_3 \tilde{l}^M}\right)²\right) + c_4 \exp\left(-\frac{1}{2}\left(\frac{\tilde{l}^M - c_5}{c_6 + c_7 \tilde{l}^M}\right)²\right) + c_8 \exp\left(-\frac{1}{2}\left(\frac{\tilde{l}^M - c_9}{c_{10} + c_{11} \tilde{l}^M}\right)²\right))

使用常量值 (c0 = 0.814),(c1 = 1.06),(c2 = 0.162),(c3 = 0.0633),(c4 = 0.433),(c5 = 0.717),(c6 = -0.0299),(c7 = 0.2),(c8 = 0.1),(c9 = 1.0),(c10 = 0.354),(c11 = 0.0)。

虽然可以更改常数值,但这些值是在原始出版物中精心选择的,以赋予特征曲线特定和所需的性质。例如,该函数在标准化肌纤维长度为 1 时产生活跃纤维力为 1,在标准化肌纤维长度为 0 和 2 时产生活跃纤维力为 0。

示例

实例化FiberForceLengthActiveDeGroote2016的首选方式是使用with_defaults()构造函数,因为这将自动使用原始出版物中的浮点值填充特征曲线方程中的常数。此构造函数接受一个与标准化肌纤维长度对应的单个参数。我们将创建一个称为l_M_tildeSymbol来表示这一点。

>>> from sympy import Symbol
>>> from sympy.physics.biomechanics import FiberForceLengthActiveDeGroote2016
>>> l_M_tilde = Symbol('l_M_tilde')
>>> fl_M = FiberForceLengthActiveDeGroote2016.with_defaults(l_M_tilde)
>>> fl_M
FiberForceLengthActiveDeGroote2016(l_M_tilde, 0.814, 1.06, 0.162, 0.0633,
0.433, 0.717, -0.0299, 0.2, 0.1, 1.0, 0.354, 0.0) 

也可以用您自己的值填充这两个常数。

>>> from sympy import symbols
>>> c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11 = symbols('c0:12')
>>> fl_M = FiberForceLengthActiveDeGroote2016(l_M_tilde, c0, c1, c2, c3,
...     c4, c5, c6, c7, c8, c9, c10, c11)
>>> fl_M
FiberForceLengthActiveDeGroote2016(l_M_tilde, c0, c1, c2, c3, c4, c5, c6,
c7, c8, c9, c10, c11) 

您不仅可以使用符号作为参数,还可以使用表达式。让我们创建一个新的符号对,l_Ml_M_opt,分别表示肌纤维长度和最佳肌纤维长度。然后,我们可以表示l_M_tilde作为这些的比率。

>>> l_M, l_M_opt = symbols('l_M l_M_opt')
>>> l_M_tilde = l_M/l_M_opt
>>> fl_M = FiberForceLengthActiveDeGroote2016.with_defaults(l_M_tilde)
>>> fl_M
FiberForceLengthActiveDeGroote2016(l_M/l_M_opt, 0.814, 1.06, 0.162, 0.0633,
0.433, 0.717, -0.0299, 0.2, 0.1, 1.0, 0.354, 0.0) 

要检查此函数表示的实际符号表达式,我们可以对实例调用 doit() 方法。 我们将使用关键字参数 evaluate=False,因为这将保持表达式的规范形式,并且不会简化任何常数。

>>> fl_M.doit(evaluate=False)
0.814*exp(-19.0519737844841*(l_M/l_M_opt
- 1.06)**2/(0.390740740740741*l_M/l_M_opt + 1)**2)
+ 0.433*exp(-12.5*(l_M/l_M_opt - 0.717)**2/(l_M/l_M_opt - 0.1495)**2)
+ 0.1*exp(-3.98991349867535*(l_M/l_M_opt - 1.0)**2) 

该函数也可以进行微分。 我们将使用单个位置参数 l_M 在实例上使用 diff 方法进行微分。

>>> fl_M.diff(l_M)
((-0.79798269973507*l_M/l_M_opt
+ 0.79798269973507)*exp(-3.98991349867535*(l_M/l_M_opt - 1.0)**2)
+ (10.825*(-l_M/l_M_opt + 0.717)/(l_M/l_M_opt - 0.1495)**2
+ 10.825*(l_M/l_M_opt - 0.717)**2/(l_M/l_M_opt
- 0.1495)**3)*exp(-12.5*(l_M/l_M_opt - 0.717)**2/(l_M/l_M_opt - 0.1495)**2)
+ (31.0166133211401*(-l_M/l_M_opt + 1.06)/(0.390740740740741*l_M/l_M_opt
+ 1)**2 + 13.6174190361677*(0.943396226415094*l_M/l_M_opt
- 1)**2/(0.390740740740741*l_M/l_M_opt
+ 1)**3)*exp(-21.4067977442463*(0.943396226415094*l_M/l_M_opt
- 1)**2/(0.390740740740741*l_M/l_M_opt + 1)**2))/l_M_opt 

参考文献

[R721](1,2)

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

doit(deep=True, evaluate=True, **hints)

评估定义函数的表达式。

参数:

deep : 布尔值

是否应递归调用 doit。 默认为 True

evaluate : 布尔值。

是否应在构建时评估 SymPy 表达式。 如果为 False,则不会进行常数折叠,这将使表达式在肌腱的合理操作范围内对应于 l_M_tilde 的值更加稳定。 默认为 True

**kwargs : 字典[str, 任何]

要递归传递给 doit 的额外关键字参数对。

classmethod eval(l_M_tilde, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11)

基本输入的评估。

参数:

l_M_tilde : 任何(可简化)

标准化肌肉纤维长度。

c0 : 任何(可简化)

特征方程中的第一个常数。 发表的值是 0.814

c1 : 任何(可简化)

特征方程中的第二个常数。 发表的值是 1.06

c2 : 任何(可简化)

特征方程中的第三个常数。 发表的值是 0.162

c3 : 任何(可简化)

特征方程中的第四个常数。 发表的值是 0.0633

c4 : 任何(可简化)

特征方程中的第五个常数。 发表的值是 0.433

c5 : 任何(可简化)

特征方程中的第六个常数。 发表的值是 0.717

c6 : 任何(可简化)

特征方程中的第七个常数。 发表的值是 -0.0299

c7 : 任何(可简化)

特征方程中的第八个常数。 发表的值是 0.2

c8 : 任何(可简化)

特征方程中的第九个常数。 发表的值是 0.1

c9 : 任何(可简化)

特征方程中的第十个常数。 发表的值是 1.0

c10 : 任何(可简化)

特征方程中的第十一个常数。 发表的值是 0.354

c11 : 任何(可简化)

特征方程中的第十二个常数。 发表的值是 0.0

fdiff(argindex=1)

对单个参数的函数的导数。

参数:

argindex : 整数

The index of the function’s arguments with respect to which the derivative should be taken. Argument indexes start at 1. Default is 1.

classmethod with_defaults(l_M_tilde)

Recommended constructor that will use the published constants.

Parameters:

  • fl_M_act : Any (sympifiable)

Normalized passive muscle fiber force as a function of muscle fiber length.

Explanation

Returns a new instance of the inverse muscle fiber act force-length function using the four constant values specified in the original publication.

These have the values:

(c0 = 0.814) (c1 = 1.06) (c2 = 0.162) (c3 = 0.0633) (c4 = 0.433) (c5 = 0.717) (c6 = -0.0299) (c7 = 0.2) (c8 = 0.1) (c9 = 1.0) (c10 = 0.354) (c11 = 0.0)

class sympy.physics.biomechanics.curve.FiberForceLengthPassiveDeGroote2016(l_M_tilde, c0, c1)

Passive muscle fiber force-length curve based on De Groote et al., 2016 [R722].

Explanation

The function is defined by the equation:

(fl^M_{pas} = \frac{\frac{\exp{c_1 \left(\tilde{l^M} - 1\right)}}{c_0} - 1}{\exp{c_1} - 1})

with constant values of (c_0 = 0.6) and (c_1 = 4.0).

While it is possible to change the constant values, these were carefully selected in the original publication to give the characteristic curve specific and required properties. For example, the function produces a passive fiber force very close to 0 for all normalized fiber lengths between 0 and 1.

Examples

The preferred way to instantiate FiberForceLengthPassiveDeGroote2016 is using the with_defaults() constructor because this will automatically populate the constants within the characteristic curve equation with the floating point values from the original publication. This constructor takes a single argument corresponding to normalized muscle fiber length. We’ll create a Symbol called l_M_tilde to represent this.

>>> from sympy import Symbol
>>> from sympy.physics.biomechanics import FiberForceLengthPassiveDeGroote2016
>>> l_M_tilde = Symbol('l_M_tilde')
>>> fl_M = FiberForceLengthPassiveDeGroote2016.with_defaults(l_M_tilde)
>>> fl_M
FiberForceLengthPassiveDeGroote2016(l_M_tilde, 0.6, 4.0) 

It’s also possible to populate the two constants with your own values too.

>>> from sympy import symbols
>>> c0, c1 = symbols('c0 c1')
>>> fl_M = FiberForceLengthPassiveDeGroote2016(l_M_tilde, c0, c1)
>>> fl_M
FiberForceLengthPassiveDeGroote2016(l_M_tilde, c0, c1) 

You don’t just have to use symbols as the arguments, it’s also possible to use expressions. Let’s create a new pair of symbols, l_M and l_M_opt, representing muscle fiber length and optimal muscle fiber length respectively. We can then represent l_M_tilde as an expression, the ratio of these.

>>> l_M, l_M_opt = symbols('l_M l_M_opt')
>>> l_M_tilde = l_M/l_M_opt
>>> fl_M = FiberForceLengthPassiveDeGroote2016.with_defaults(l_M_tilde)
>>> fl_M
FiberForceLengthPassiveDeGroote2016(l_M/l_M_opt, 0.6, 4.0) 

To inspect the actual symbolic expression that this function represents, we can call the doit() method on an instance. We’ll use the keyword argument evaluate=False as this will keep the expression in its canonical form and won’t simplify any constants.

>>> fl_M.doit(evaluate=False)
0.0186573603637741*(-1 + exp(6.66666666666667*(l_M/l_M_opt - 1))) 

该函数也可以进行微分。我们将使用单个位置参数l_M对实例进行diff方法微分。

>>> fl_M.diff(l_M)
0.12438240242516*exp(6.66666666666667*(l_M/l_M_opt - 1))/l_M_opt 

参考文献

[R722](1,2)

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

doit(deep=True, evaluate=True, **hints)

评估定义函数的表达式。

参数:

deep:bool

是否应递归调用doit。默认值为True

evaluate:bool。

是否应在构造时评估 SymPy 表达式。如果为False,则不会进行任何常数折叠,这将使得在对应于肌腱的合理操作范围内的l_T_tilde值更加稳定。默认值为True

**kwargs:dict[str, Any]

要递归传递给doit的附加关键字参数对。

classmethod eval(l_M_tilde, c0, c1)

评估基本输入。

参数:

l_M_tilde:Any(可符号化)

标准化肌肉纤维长度。

c0:Any(可符号化)

特征方程中的第一个常数。发布值为0.6

c1:Any(可符号化)

特征方程中的第二个常数。发布值为4.0

fdiff(argindex=1)

相对于单个参数的函数导数。

参数:

argindex:int

函数参数的索引,相对于其应该进行导数计算的参数。参数索引从1开始。默认值为1

inverse(argindex=1)

反函数。

参数:

argindex:int

开始索引参数的值。默认值为1

classmethod with_defaults(l_M_tilde)

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

参数:

l_M_tilde:Any(可符号化)

标准化肌肉纤维长度。

说明

返回使用原始出版物指定的四个常量值的肌肉纤维被动力长度函数的新实例。

这些值为:

(c_0 = 0.6) (c_1 = 4.0)

class sympy.physics.biomechanics.curve.FiberForceLengthPassiveInverseDeGroote2016(fl_M_pas, c0, c1)

基于 De Groote 等人的逆被动肌肉纤维力长度曲线,2016 年[R723]

说明

给出产生特定标准化被动肌肉纤维力的标准化肌肉纤维长度。

该函数由以下方程定义:

({fl^M_{pas}}^{-1} = \frac{c_0 \log{\left(\exp{c_1} - 1\right)fl^M_pas + 1}}{c_1} + 1)

具有常量值(c_0 = 0.6)和(c_1 = 4.0)。该函数是相关腱力长度曲线FiberForceLengthPassiveDeGroote2016的精确解析反函数。

虽然可以更改常量值,但在原始出版物中仔细选择这些值,以赋予特征曲线特定和必需的属性。例如,该函数在标准化纤维长度在 0 和 1 之间时产生非常接近 0 的被动纤维力。

示例

实例化FiberForceLengthPassiveInverseDeGroote2016 的首选方法是使用with_defaults() 构造函数,因为这会自动使用原始出版物中的浮点值填充特征曲线方程中的常量。该构造函数接受一个参数,对应于肌肉纤维长度-力量组件的归一化被动肌肉纤维力。我们将创建一个称为fl_M_pasSymbol 来表示这一点。

>>> from sympy import Symbol
>>> from sympy.physics.biomechanics import FiberForceLengthPassiveInverseDeGroote2016
>>> fl_M_pas = Symbol('fl_M_pas')
>>> l_M_tilde = FiberForceLengthPassiveInverseDeGroote2016.with_defaults(fl_M_pas)
>>> l_M_tilde
FiberForceLengthPassiveInverseDeGroote2016(fl_M_pas, 0.6, 4.0) 

也可以使用您自己的值填充这两个常数。

>>> from sympy import symbols
>>> c0, c1 = symbols('c0 c1')
>>> l_M_tilde = FiberForceLengthPassiveInverseDeGroote2016(fl_M_pas, c0, c1)
>>> l_M_tilde
FiberForceLengthPassiveInverseDeGroote2016(fl_M_pas, c0, c1) 

要检查此函数表示的实际符号表达式,我们可以在实例上调用doit() 方法。我们将使用关键字参数evaluate=False,因为这将保持表达式在其规范形式中,并且不会简化任何常数。

>>> l_M_tilde.doit(evaluate=False)
c0*log(1 + fl_M_pas*(exp(c1) - 1))/c1 + 1 

函数也可以进行微分。我们将使用diff方法对具有单个位置参数fl_M_pas的实例进行微分。

>>> l_M_tilde.diff(fl_M_pas)
c0*(exp(c1) - 1)/(c1*(fl_M_pas*(exp(c1) - 1) + 1)) 

参考文献

[R723] (1,2)

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

doit(deep=True, evaluate=True, **hints)

评估定义函数的表达式。

参数:

deep : bool

是否应递归调用doit。默认为True

evaluate : bool.

是否应该在构造时评估 SymPy 表达式。如果为False,则不会进行任何常数折叠,这将使表达式保持在对肌腱肌肉的合理操作范围对应的l_T_tilde值更为数值稳定。默认为True

kwargs : dict[str, Any]

传递给doit的递归关键字参数对。

classmethod eval(fl_M_pas, c0, c1)

基本输入的评估。

参数:

fl_M_pas : Any (sympifiable)

归一化被动肌肉纤维力。

c0 : Any (sympifiable)

特征方程中的第一个常数。发布值为0.6

c1 : Any (sympifiable)

特征方程中的第二个常数。发布值为4.0

fdiff(argindex=1)

函数对单个参数的导数。

参数:

argindex : int

应该进行导数的函数参数的索引。参数索引从1开始。默认为1

inverse(argindex=1)

反函数。

参数:

argindex : 整数

开始索引参数的值。默认为1

classmethod with_defaults(fl_M_pas)

建议使用已发布的常数来构造。

参数:

fl_M_pas : 任意(可以符号化)

作为肌肉纤维长度函数的归一化被动肌肉纤维力。

解释

返回使用原始出版物中指定的四个常数值的逆肌肉纤维被动力长函数的新实例。

这些值为:

(c_0 = 0.6) (c_1 = 4.0)

class sympy.physics.biomechanics.curve.FiberForceVelocityDeGroote2016(v_M_tilde, c0, c1, c2, c3)

基于 De Groote 等人的 2016 年研究的肌肉纤维力-速度曲线[R724]

解释

给出作为归一化肌腱速度函数的函数产生的归一化肌肉纤维力。

函数由以下方程定义:

(fv^M = c_0 \log{\left(c_1 \tilde{v}_m + c_2\right) + \sqrt{\left(c_1 \tilde{v}_m + c_2\right)² + 1}} + c_3)

其中常数值为 (c_0 = -0.318), (c_1 = -8.149), (c_2 = -0.374), 和 (c_3 = 0.886)。

虽然可以更改常数值,但这些值在原始出版物中经过精心选择,以使特征曲线具有特定和所需的属性。例如,当肌肉纤维等长收缩时(伸展速率为 0),该函数产生归一化的肌肉纤维力为 1。

示例

实例化FiberForceVelocityDeGroote2016的首选方式是使用with_defaults()构造函数,因为这将自动使用原始出版物中的浮点值填充特征曲线方程中的常数。此构造函数接受一个参数,对应归一化肌肉纤维伸展速度。我们将创建一个称为v_M_tildeSymbol来表示这一点。

>>> from sympy import Symbol
>>> from sympy.physics.biomechanics import FiberForceVelocityDeGroote2016
>>> v_M_tilde = Symbol('v_M_tilde')
>>> fv_M = FiberForceVelocityDeGroote2016.with_defaults(v_M_tilde)
>>> fv_M
FiberForceVelocityDeGroote2016(v_M_tilde, -0.318, -8.149, -0.374, 0.886) 

也可以用自己的值填充这四个常数。

>>> from sympy import symbols
>>> c0, c1, c2, c3 = symbols('c0 c1 c2 c3')
>>> fv_M = FiberForceVelocityDeGroote2016(v_M_tilde, c0, c1, c2, c3)
>>> fv_M
FiberForceVelocityDeGroote2016(v_M_tilde, c0, c1, c2, c3) 

不仅可以使用符号作为参数,还可以使用表达式。让我们创建一个新的符号对,v_Mv_M_max,分别表示肌肉纤维伸展速度和最大肌肉纤维伸展速度。然后,我们可以表示v_M_tilde作为一个表达式,即这些的比率。

>>> v_M, v_M_max = symbols('v_M v_M_max')
>>> v_M_tilde = v_M/v_M_max
>>> fv_M = FiberForceVelocityDeGroote2016.with_defaults(v_M_tilde)
>>> fv_M
FiberForceVelocityDeGroote2016(v_M/v_M_max, -0.318, -8.149, -0.374, 0.886) 

要检查该函数代表的实际符号表达式,我们可以在一个实例上调用doit()方法。我们将使用关键字参数evaluate=False,因为这将保持表达式在其规范形式中,并不会简化任何常数。

>>> fv_M.doit(evaluate=False)
0.886 - 0.318*log(-8.149*v_M/v_M_max - 0.374 + sqrt(1 + (-8.149*v_M/v_M_max
- 0.374)**2)) 

函数也可以被微分。我们将使用单个位置参数v_M上的diff方法进行微分。

>>> fv_M.diff(v_M)
2.591382*(1 + (-8.149*v_M/v_M_max - 0.374)**2)**(-1/2)/v_M_max 

参考文献

[R724] (1,2)

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

doit(deep=True, evaluate=True, **hints)

评估定义函数的表达式。

参数:

deep : 布尔值

doit是否应递归调用。默认为True

evaluate : 布尔值。

SymPy 表达式是否应在构造时进行评估。如果为False,则不进行任何常数折叠,这将使表达式在v_M_tilde的值对应于肌腱合理操作范围时更加数值稳定。默认为True

**kwargs : 字典[str, 任意类型]

递归传递给doit的额外关键字参数对。

classmethod eval(v_M_tilde, c0, c1, c2, c3)

评估基本输入。

参数:

v_M_tilde : 任意类型(可 SymPy 化)

标准化肌肉纤维伸展速度。

c0 : 任意类型(可 SymPy 化)

特征方程中的第一个常数。发布值为-0.318

c1 : 任意类型(可 SymPy 化)

特征方程中的第二个常数。发布值为-8.149

c2 : 任意类型(可 SymPy 化)

特征方程中的第三个常数。发布值为-0.374

c3 : 任意类型(可 SymPy 化)

特征方程中的第四个常数。发布值为0.886

fdiff(argindex=1)

函数关于单个参数的导数。

参数:

argindex : 整数

应对哪个参数的导数应该被取的函数的索引。参数索引从1开始。默认为1

inverse(argindex=1)

反函数。

参数:

argindex : 整数

开始索引参数的值。默认为1

classmethod with_defaults(v_M_tilde)

推荐使用原始出版物中指定的四个常数值的构造函数。

参数:

v_M_tilde : 任意类型(可 SymPy 化)

标准化肌肉纤维伸展速度。

说明

返回使用原始出版物中指定的四个常数值的新肌肉纤维力-速度函数的新实例。

这些具有以下数值:

(c_0 = -0.318) (c_1 = -8.149) (c_2 = -0.374) (c_3 = 0.886)

class sympy.physics.biomechanics.curve.FiberForceVelocityInverseDeGroote2016(fv_M, c0, c1, c2, c3)

基于 De Groote 等人,2016 年[R725]的逆肌肉纤维力-速度曲线。

说明

给出产生特定标准化肌肉纤维力的标准化肌肉纤维速度。

函数由以下方程定义:

({fv^M}^{-1} = \frac{\sinh{\frac{fv^M - c_3}{c_0}} - c_2}{c_1})

具有常数值(c_0 = -0.318),(c_1 = -8.149),(c_2 = -0.374)和(c_3 = 0.886)。这个函数是相关肌肉纤维力-速度曲线FiberForceVelocityDeGroote2016的精确解析逆函数。

尽管可以更改常数值,但这些值在原始出版物中被精心选择,以赋予特征曲线特定和必需的属性。例如,当肌肉纤维等长收缩时(其扩展速率为 0),函数产生归一化肌肉纤维力为 1。

示例

实例化 FiberForceVelocityInverseDeGroote2016 的首选方式是使用 with_defaults() 构造函数,因为这将自动将特征曲线方程中的常量使用原始出版物中的浮点值填充。这个构造函数接受一个参数,对应于肌肉纤维力-速度组分的归一化肌肉纤维力。我们将创建一个叫做 fv_MSymbol 来表示这个值。

>>> from sympy import Symbol
>>> from sympy.physics.biomechanics import FiberForceVelocityInverseDeGroote2016
>>> fv_M = Symbol('fv_M')
>>> v_M_tilde = FiberForceVelocityInverseDeGroote2016.with_defaults(fv_M)
>>> v_M_tilde
FiberForceVelocityInverseDeGroote2016(fv_M, -0.318, -8.149, -0.374, 0.886) 

也可以使用自己的值填充这四个常数。

>>> from sympy import symbols
>>> c0, c1, c2, c3 = symbols('c0 c1 c2 c3')
>>> v_M_tilde = FiberForceVelocityInverseDeGroote2016(fv_M, c0, c1, c2, c3)
>>> v_M_tilde
FiberForceVelocityInverseDeGroote2016(fv_M, c0, c1, c2, c3) 

要检查此函数表示的实际符号表达式,我们可以在实例上调用 doit() 方法。我们将使用关键字参数 evaluate=False,因为这将保持表达式在其规范形式中,并且不会简化任何常数。

>>> v_M_tilde.doit(evaluate=False)
(-c2 + sinh((-c3 + fv_M)/c0))/c1 

函数也可以进行微分。我们将使用实例的 diff 方法相对于 fv_M 进行微分,使用单个位置参数 fv_M

>>> v_M_tilde.diff(fv_M)
cosh((-c3 + fv_M)/c0)/(c0*c1) 

参考文献

[R725] (1,2)

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

doit(deep=True, evaluate=True, **hints)

评估定义函数的表达式。

参数:

deep : 布尔值

是否应该递归调用 doit。默认为 True

evaluate : 布尔值。

是否应该按照构造时的 SymPy 表达式进行评估。如果为 False,则不会进行任何常数折叠,这将使表达式在肌腱肌肉的合理操作范围内的 fv_M 值更加数值稳定。默认为 True

**kwargs : 字典[str, 任意]

递归传递给 doit 的额外关键字参数对。

classmethod eval(fv_M, c0, c1, c2, c3)

基本输入的评估。

参数:

fv_M : 任意(可用 sympify 转换)

归一化肌肉纤维力作为肌肉纤维伸展速度的函数。

c0 : 任意(可用 sympify 转换)

特征方程中的第一个常数。出版值为 -0.318

c1 : 任意(可用 sympify 转换)

特征方程中的第二个常数。已发布值为-8.149

c2 : 任何(可简化的)

特征方程中的第三个常数。已发布值为-0.374

c3 : 任何(可简化的)

特征方程中的第四个常数。已发布值为0.886

fdiff(argindex=1)

函数对单个参数的导数。

参数:

argindex : 整数

函数参数的索引,应对这些导数进行处理。参数索引从1开始。默认为1

inverse(argindex=1)

反函数。

参数:

argindex : 整数

起始索引的值。默认为1

classmethod with_defaults(fv_M)

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

参数:

fv_M : 任何(可简化的)

规范化肌肉纤维伸长速度。

解释

返回一个新的反肌肉纤维力-速度函数实例,使用原始发布中指定的四个常数值。

这些值为:

(c_0 = -0.318), (c_1 = -8.149), (c_2 = -0.374), (c_3 = 0.886)

class sympy.physics.biomechanics.curve.TendonForceLengthDeGroote2016(l_T_tilde, c0, c1, c2, c3)

基于 De Groote 等人 2016 年的肌腱力长度曲线 [R726]

解释

以规范化的肌腱长度为函数,产生的规范化肌腱力。

函数由以下方程定义:

(fl^T = c_0 \exp{c_3 \left( \tilde{l}^T - c_1 \right)} - c_2)

其常数值为 (c_0 = 0.2), (c_1 = 0.995), (c_2 = 0.25), 和 (c_3 = 33.93669377311689)。

虽然可以更改常数值,但这些值是在原始发布中精心选择的,以赋予特征曲线特定和所需的属性。例如,当肌腱处于无应变状态时,函数不产生力。当肌腱处于 5%应变状态时,它还会产生 1 单位的规范化力量。

示例

首选实例化TendonForceLengthDeGroote2016的方式是使用with_defaults()构造函数,因为这将自动填充特征曲线方程中的常数,使用原始发布中的浮点值。此构造函数接受一个参数,对应规范化肌腱长度。我们将创建一个称为l_T_tildeSymbol来表示这一点。

>>> from sympy import Symbol
>>> from sympy.physics.biomechanics import TendonForceLengthDeGroote2016
>>> l_T_tilde = Symbol('l_T_tilde')
>>> fl_T = TendonForceLengthDeGroote2016.with_defaults(l_T_tilde)
>>> fl_T
TendonForceLengthDeGroote2016(l_T_tilde, 0.2, 0.995, 0.25,
33.93669377311689) 

你也可以使用自己的值填充这四个常数。

>>> from sympy import symbols
>>> c0, c1, c2, c3 = symbols('c0 c1 c2 c3')
>>> fl_T = TendonForceLengthDeGroote2016(l_T_tilde, c0, c1, c2, c3)
>>> fl_T
TendonForceLengthDeGroote2016(l_T_tilde, c0, c1, c2, c3) 

您不仅可以将符号用作参数,还可以使用表达式。让我们创建一个新的符号对,l_Tl_T_slack,分别表示肌腱长度和肌腱松弛长度。然后我们可以表示l_T_tilde为这些的比率。

>>> l_T, l_T_slack = symbols('l_T l_T_slack')
>>> l_T_tilde = l_T/l_T_slack
>>> fl_T = TendonForceLengthDeGroote2016.with_defaults(l_T_tilde)
>>> fl_T
TendonForceLengthDeGroote2016(l_T/l_T_slack, 0.2, 0.995, 0.25,
33.93669377311689) 

要检查此函数表示的实际符号表达式,我们可以在实例上调用doit()方法。我们将使用关键字参数evaluate=False,因为这将保持表达式在其规范形式中,并且不会简化任何常数。

>>> fl_T.doit(evaluate=False)
-0.25 + 0.2*exp(33.93669377311689*(l_T/l_T_slack - 0.995)) 

函数还可以进行微分。我们将使用单个位置参数l_T在实例上使用diff方法来对l_T进行微分。

>>> fl_T.diff(l_T)
6.787338754623378*exp(33.93669377311689*(l_T/l_T_slack - 0.995))/l_T_slack 

参考文献

[R726] (1,2)

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

doit(deep=True, evaluate=True, **hints)

评估定义函数的表达式。

参数:

deep:bool

是否应递归调用doit。默认为True

evaluate:bool。

是否应该在构造时评估 SymPy 表达式。如果为False,则不会进行任何常数折叠,这将使表达式在对应于肌腱合理操作范围的l_T_tilde值更加稳定。默认为True

**kwargs:dict[str, Any]

递归传递给doit的额外关键字参数对。

classmethod eval(l_T_tilde, c0, c1, c2, c3)

基本输入的评估。

参数:

l_T_tilde:Any(可符号化)

标准化腱长度。

c0:Any(可符号化)

特征方程中的第一个常数。发布值为0.2

c1:Any(可符号化)

特征方程中的第二个常数。发布值为0.995

c2:Any(可符号化)

特征方程中的第三个常数。发布值为0.25

c3:Any(可符号化)

特征方程中的第四个常数。发布值为33.93669377311689

fdiff(argindex=1)

函数关于单个参数的导数。

参数:

argindex:int

函数参数的索引,其导数应该被取得。参数索引从1开始。默认为1

inverse(argindex=1)

逆函数。

参数:

argindex:int

开始索引参数的值。默认为1

classmethod with_defaults(l_T_tilde)

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

参数:

l_T_tilde:Any(可符号化)

标准化腱长度。

解释

返回使用原始出版物中指定的四个常数值的腱力长度函数的新实例。

这些具有以下值:

(c_0 = 0.2) (c_1 = 0.995) (c_2 = 0.25) (c_3 = 33.93669377311689)

class sympy.physics.biomechanics.curve.TendonForceLengthInverseDeGroote2016(fl_T, c0, c1, c2, c3)

基于 De Groote 等人的逆腱力长度曲线,2016 年[R727]

解释

给出产生特定标准化腱力的标准化腱长度。

函数由以下方程定义:

({fl^T}^{-1} = frac{\log{\frac{fl^T + c_2}{c_0}}}{c_3} + c_1)

带有常量值 (c_0 = 0.2), (c_1 = 0.995), (c_2 = 0.25), 和 (c_3 = 33.93669377311689) 的函数是相关肌腱力长度曲线 TendonForceLengthDeGroote2016 的精确解析反函数。

虽然可以更改常量值,但原始出版物中精心选择这些值,以赋予特征曲线具体和所需的属性。例如,当肌腱处于无应变状态时,该函数不会产生力。当肌腱处于 5%应变状态下时,它还会产生 1 个标准单位的力。

示例

首选实例化 TendonForceLengthInverseDeGroote2016 的方法是使用 with_defaults() 构造函数,因为这会自动使用原始出版物中的浮点值填充特征曲线方程中的常数。该构造函数接受一个参数,对应于标准化的肌腱力长度,等于肌腱力。我们将创建一个称为 Symbolfl_T 来表示这个值。

>>> from sympy import Symbol
>>> from sympy.physics.biomechanics import TendonForceLengthInverseDeGroote2016
>>> fl_T = Symbol('fl_T')
>>> l_T_tilde = TendonForceLengthInverseDeGroote2016.with_defaults(fl_T)
>>> l_T_tilde
TendonForceLengthInverseDeGroote2016(fl_T, 0.2, 0.995, 0.25,
33.93669377311689) 

您也可以使用自己的值填充这四个常数。

>>> from sympy import symbols
>>> c0, c1, c2, c3 = symbols('c0 c1 c2 c3')
>>> l_T_tilde = TendonForceLengthInverseDeGroote2016(fl_T, c0, c1, c2, c3)
>>> l_T_tilde
TendonForceLengthInverseDeGroote2016(fl_T, c0, c1, c2, c3) 

要检查该函数所代表的实际符号表达式,我们可以在实例上调用 doit() 方法。我们将使用关键字参数 evaluate=False,因为这将保持表达式在其规范形式中,并且不会简化任何常数。

>>> l_T_tilde.doit(evaluate=False)
c1 + log((c2 + fl_T)/c0)/c3 

该函数也可以进行微分。我们将使用单个位置参数 l_T 上的 diff 方法来进行微分。

>>> l_T_tilde.diff(fl_T)
1/(c3*(c2 + fl_T)) 

参考文献

[R727] (1,2)

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

doit(deep=True, evaluate=True, **hints)

评估定义函数的表达式。

参数:

deep : 布尔值

是否应递归调用 doit。默认为 True

evaluate : 布尔值。

是否应在构建 SymPy 表达式时对其进行评估。如果为 False,则不会进行任何常数折叠,这将使表达式在肌腱的合理操作范围内的 l_T_tilde 值更加稳定。默认为 True

**kwargs : dict[str, Any]

要递归传递给 doit 的附加关键字参数对。

classmethod eval(fl_T, c0, c1, c2, c3)

基本输入的评估。

参数:

fl_T : 任意值 (可以符号化)

标准化的肌腱力作为肌腱长度的函数。

c0:任意(可简化)

特征方程中的第一个常数。已发布的值为0.2

c1:任意(可简化)

特征方程中的第二个常数。已发布的值为0.995

c2:任意(可简化)

特征方程中的第三个常数。已发布的值为0.25

c3:任意(可简化)

特征方程中的第四个常数。已发布的值为33.93669377311689

fdiff(argindex=1)

函数关于单个参数的导数。

参数:

argindex:整数

函数参数的索引,对其进行导数计算。参数索引从1开始。默认为1

inverse(argindex=1)

反函数。

参数:

argindex:整数

起始索引值,默认为1

classmethod with_defaults(fl_T)

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

参数:

fl_T:任意(可简化)

标准化的肌腱力作为肌腱长度的函数。

解释

返回使用原始出版物中指定的四个常量值的反肌腱力长度函数的新实例。

这些值为:

(c_0 = 0.2) (c_1 = 0.995) (c_2 = 0.25) (c_3 = 33.93669377311689)

量子力学

原文:docs.sympy.org/latest/modules/physics/quantum/index.html

量子函数

  • 反对易子

  • 克莱布斯-戈登系数

  • 对易子

  • 常数

  • 内积

  • 张量积

态和算子

  • 笛卡尔算子和态

  • 希尔伯特空间

  • 算子

  • 算子/态辅助函数

  • Qapply

  • 代表

  • 自旋

量子计算

  • 电路图

  • 格罗弗算法

  • QFT

  • 量子比特

  • Shor 算法

解析解

  • 盒中的粒子

反对易子

原文:docs.sympy.org/latest/modules/physics/quantum/anticommutator.html

反对易子:{A,B} = A*B + B*A

class sympy.physics.quantum.anticommutator.AntiCommutator(A, B)

标准的反对易子,以未评估状态。

参数:

A : 表达式

反对易子的第一个参数 {A, B}。

B : 表达式

反对易子的第二个参数 {A, B}。

解释

评估反对易子定义为 [R749]{A, B} = A*B + B*A。此类以未评估形式返回反对易子。要评估反对易子,请使用 .doit() 方法。

反对易子的规范顺序是 {A, B},其中 A < B。使用 __cmp__ 将反对易子的参数放入规范顺序。如果 B < A,则返回 {A, B} 作为 {B, A}

示例

>>> from sympy import symbols
>>> from sympy.physics.quantum import AntiCommutator
>>> from sympy.physics.quantum import Operator, Dagger
>>> x, y = symbols('x,y')
>>> A = Operator('A')
>>> B = Operator('B') 

创建一个反对易子并使用 doit() 将它们相乘。

>>> ac = AntiCommutator(A,B); ac
{A,B}
>>> ac.doit()
A*B + B*A 

交换子按照规范顺序排列其参数:

>>> ac = AntiCommutator(B,A); ac
{A,B} 

可交换的常数被因式分解出来:

>>> AntiCommutator(3*x*A,x*y*B)
3*x**2*y*{A,B} 

共轭操作应用于反对易子时应正确应用到参数上:

>>> Dagger(AntiCommutator(A,B))
{Dagger(A),Dagger(B)} 

参考文献

[R749] (1,2)

en.wikipedia.org/wiki/Commutator

doit(**hints)

评估反对易子

Clebsch-Gordan 系数

原文:docs.sympy.org/latest/modules/physics/quantum/cg.html

Clebsch-Gordan 系数。

class sympy.physics.quantum.cg.CG(j1, m1, j2, m2, j3, m3)

Clebsch-Gordan 系数类。

参数:

j1, m1, j2, m2 : 数字,符号

状态 1 和 2 的角动量。

j3, m3: 数字,符号

耦合系统的总角动量。

解释

Clebsch-Gordan 系数描述了两个系统之间的角动量耦合。这些系数给出了耦合总角动量态和未耦合张量积态的展开。Clebsch-Gordan 系数的定义如下 [R750]

[C^{j_3,m_3}_{j_1,m_1,j_2,m_2} = \left\langle j_1,m_1;j_2,m_2 | j_3,m_3\right\rangle]

示例

定义 Clebsch-Gordan 系数并计算其值

>>> from sympy.physics.quantum.cg import CG
>>> from sympy import S
>>> cg = CG(S(3)/2, S(3)/2, S(1)/2, -S(1)/2, 1, 1)
>>> cg
CG(3/2, 3/2, 1/2, -1/2, 1, 1)
>>> cg.doit()
sqrt(3)/2
>>> CG(j1=S(1)/2, m1=-S(1)/2, j2=S(1)/2, m2=+S(1)/2, j3=1, m3=0).doit()
sqrt(2)/2 

比较 [R751]

另请参阅

Wigner3j

Wigner-3j 符号

参考文献

[R750] (1,2)

Varshalovich, D A, 量子角动量理论。1988。

[R751] (1,2)

Clebsch-Gordan 系数,球谐函数和 d 函数,P.A. Zyla 等人(粒子数据组),Prog. Theor. Exp. Phys. 2020, 083C01 (2020)。

class sympy.physics.quantum.cg.Wigner3j(j1, m1, j2, m2, j3, m3)

Wigner-3j 符号类。

参数:

j1, m1, j2, m2, j3, m3 : 数字,符号

决定耦合角动量系统角动量的术语。

解释

Wigner 3j 符号是由两个角动量耦合确定的系数。当创建时,它们被表示为符号量,对于数值参数,可以使用.doit()方法进行评估 [R752]

示例

声明 Wigner-3j 系数并计算其值

>>> from sympy.physics.quantum.cg import Wigner3j
>>> w3j = Wigner3j(6,0,4,0,2,0)
>>> w3j
Wigner3j(6, 0, 4, 0, 2, 0)
>>> w3j.doit()
sqrt(715)/143 

另请参阅

CG

Clebsch-Gordan 系数

参考文献

[R752] (1,2)

Varshalovich, D A, 量子角动量理论。1988。

class sympy.physics.quantum.cg.Wigner6j(j1, j2, j12, j3, j, j23)

Wigner-6j 符号类

另请参阅

Wigner3j

Wigner-3j 符号

class sympy.physics.quantum.cg.Wigner9j(j1, j2, j12, j3, j4, j34, j13, j24, j)

Wigner-9j 符号类

另请参阅

Wigner3j

Wigner-3j 符号

sympy.physics.quantum.cg.cg_simp(e)

简化和组合 CG 系数。

解释

此函数利用 Clebsch-Gordan 系数的对称性和性质来简化涉及这些术语的语句 [R753]

示例

简化对所有 alpha 的 CG(a,alpha,0,0,a,alpha)求和

>>> from sympy.physics.quantum.cg import CG, cg_simp
>>> a = CG(1,1,0,0,1,1)
>>> b = CG(1,0,0,0,1,0)
>>> c = CG(1,-1,0,0,1,-1)
>>> cg_simp(a+b+c)
3 

另请参阅

CG

Clebsh-Gordan 系数

参考文献

[R753] (1,2)

Varshalovich, D A, 量子角动量理论。1988。

交换子

原文链接:docs.sympy.org/latest/modules/physics/quantum/commutator.html

交换子:[A,B] = AB - BA。

class sympy.physics.quantum.commutator.Commutator(A, B)

标准的交换子,处于未评估状态。

参数:

A : 表达式

交换子 [A,B] 的第一个参数。

B : 表达式

交换子 [A,B] 的第二个参数。

解释

评估一个交换子被定义为:[A, B] = A*B - B*A [R754]。这个类以未评估的形式返回交换子。要评估交换子,使用 .doit() 方法。

交换子的规范排序为 [A, B],其中 A < B。交换子的参数使用 __cmp__ 放入规范顺序。如果 B < A,则返回 [B, A] 作为 - [A, B]

示例

>>> from sympy.physics.quantum import Commutator, Dagger, Operator
>>> from sympy.abc import x, y
>>> A = Operator('A')
>>> B = Operator('B')
>>> C = Operator('C') 

创建一个交换子并使用 .doit() 方法来评估它:

>>> comm = Commutator(A, B)
>>> comm
[A,B]
>>> comm.doit()
A*B - B*A 

交换子按照规范顺序排序其参数:

>>> comm = Commutator(B, A); comm
-[A,B] 

交换常数被分解出来:

>>> Commutator(3*x*A, x*y*B)
3*x**2*y*[A,B] 

使用 .expand(commutator=True),可以应用标准的交换子展开规则:

>>> Commutator(A+B, C).expand(commutator=True)
[A,C] + [B,C]
>>> Commutator(A, B+C).expand(commutator=True)
[A,B] + [A,C]
>>> Commutator(A*B, C).expand(commutator=True)
[A,C]*B + A*[B,C]
>>> Commutator(A, B*C).expand(commutator=True)
[A,B]*C + B*[A,C] 

对交换子应用伴随操作时,将正确应用于参数:

>>> Dagger(Commutator(A, B))
-[Dagger(A),Dagger(B)] 

参考

[R754] (1,2)

en.wikipedia.org/wiki/Commutator

doit(**hints)

评估交换子