表达式操作 (文档字符串)

sympy.physics.mechanics.msubs(expr, *sub_dicts, smart=False, **kwargs)[源代码][源代码]

用于物理力学中导出的表达式的自定义替代。

遍历表达式树一次,执行在 sub_dicts 中找到的替换。Derivative 表达式中的项将被忽略:

示例

>>> from sympy.physics.mechanics import dynamicsymbols, msubs
>>> x = dynamicsymbols('x')
>>> msubs(x.diff() + x, {x: 1})
Derivative(x(t), t) + 1

注意,sub_dicts 可以是一个字典,也可以是多个字典:

>>> x, y, z = dynamicsymbols('x, y, z')
>>> sub1 = {x: 1, y: 2}
>>> sub2 = {z: 3, x.diff(): 4}
>>> msubs(x.diff() + x + y + z, sub1, sub2)
10

如果 smart=True(默认 False),还会检查可能导致 nan 的条件,但如果简化则会得到一个有效的表达式。例如:

>>> from sympy import sin, tan
>>> (sin(x)/tan(x)).subs(x, 0)
nan
>>> msubs(sin(x)/tan(x), {x: 0}, smart=True)
1

它首先将所有 tan 替换为 sin/cos。然后遍历每个节点。如果节点是分数,则首先对分母进行 subs 求值。如果结果为 0,则尝试简化整个分数。通过这种选择性简化,只有导致 1/0 的子表达式被针对,从而提高了性能。

sympy.physics.mechanics.find_dynamicsymbols(
expression,
exclude=None,
reference_frame=None,
)[源代码][源代码]

在表达式中找到所有动态符号。

参数:
表达式SymPy 表达式
排除dynamicsymbols 的可迭代对象,可选
参考框架ReferenceFrame, 可选

用于确定给定向量的动态符号的参考框架。

示例

>>> from sympy.physics.mechanics import dynamicsymbols, find_dynamicsymbols
>>> from sympy.physics.mechanics import ReferenceFrame
>>> x, y = dynamicsymbols('x, y')
>>> expr = x + x.diff()*y
>>> find_dynamicsymbols(expr)
{x(t), y(t), Derivative(x(t), t)}
>>> find_dynamicsymbols(expr, exclude=[x, y])
{Derivative(x(t), t)}
>>> a, b, c = dynamicsymbols('a, b, c')
>>> A = ReferenceFrame('A')
>>> v = a * A.x + b * A.y + c * A.z
>>> find_dynamicsymbols(v, reference_frame=A)
{a(t), b(t), c(t)}