# Expression Manipulation (Docstrings)#

sympy.physics.mechanics.msubs(expr, *sub_dicts, smart=False, **kwargs)[source]#

A custom subs for use on expressions derived in physics.mechanics.

Traverses the expression tree once, performing the subs found in sub_dicts. Terms inside `Derivative` expressions are ignored:

Examples

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

Note that sub_dicts can be a single dictionary, or several dictionaries:

```>>> 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
```

If smart=True (default False), also checks for conditions that may result in `nan`, but if simplified would yield a valid expression. For example:

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

It does this by first replacing all `tan` with `sin/cos`. Then each node is traversed. If the node is a fraction, subs is first evaluated on the denominator. If this results in 0, simplification of the entire fraction is attempted. Using this selective simplification, only subexpressions that result in 1/0 are targeted, resulting in faster performance.

sympy.physics.mechanics.find_dynamicsymbols(expression, exclude=None, reference_frame=None)[source]#

Find all dynamicsymbols in expression.

Parameters:

expression : SymPy expression

exclude : iterable of dynamicsymbols, optional

reference_frame : ReferenceFrame, optional

The frame with respect to which the dynamic symbols of the given vector is to be determined.

Explanation

If the optional `exclude` kwarg is used, only dynamicsymbols not in the iterable `exclude` are returned. If we intend to apply this function on a vector, the optional `reference_frame` is also used to inform about the corresponding frame with respect to which the dynamic symbols of the given vector is to be determined.

Examples

```>>> 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)}
```