已弃用的类 (文档字符串)

自 1.13 版本弃用: BodyJointsMethod 已被弃用。Body 的功能完全由 RigidBodyParticle 捕获,而 JointsMethod 的功能完全由 System 捕获。

class sympy.physics.mechanics.body.Body(
name,
masscenter=None,
mass=None,
frame=None,
central_inertia=None,
)[源代码][源代码]

Body 是 RigidBody 或 Particle SymPy 对象的常见表示形式,具体取决于初始化时传入的内容。如果传入了质量且 central_inertia 保持为 None,则创建 Particle 对象。否则将创建 RigidBody 对象。

自 1.13 版本弃用: Body 类已被弃用。其功能由 RigidBodyParticle 捕获。

参数:
名称字符串

定义主体的名称。它用于定义与主体相关的特定属性。

质量中心点,可选

表示物体或粒子质心的点。如果没有给出点,则会生成一个点。

质量可符号化的,可选的

一个可符号化的对象,表示物体的质量。如果没有传递质量,则会生成一个。

框架ReferenceFrame, 可选

表示物体参考系的 ReferenceFrame 。如果没有提供框架,则会生成一个框架。

central_inertia二元的,可选的

物体的中心惯性对偶。如果在创建 RigidBody 时没有传递惯性,则会生成默认惯性。

属性:
name字符串

主体的名称。

masscenter

身体的质心。

frame参考框架

固定在物体上的参考系。

massSympifyable

身体的质量。

inertia(二元, 点)

物体关于某点的惯性;存储为 (Dyadic, Point)。

加载可迭代对象

此列表包含作用在物体上的不同载荷信息。力以 (点, 矢量) 元组列出,扭矩以 (参考系, 矢量) 元组列出。

方法

ang_vel_in(body)

返回此物体相对于提供的刚体或参考系的角速度。

angular_momentum(point, frame)

返回刚体在给定坐标系中某点的角动量。

apply_force(force[, point, reaction_body, ...])

对物体施加力。

apply_torque(torque[, reaction_body])

对物体施加扭矩。

clear_loads()

清除Body的载荷列表。

dcm(body)

返回此物体相对于提供的刚体或参考系的姿态余弦矩阵。

kinetic_energy(frame)

物体的动能。

linear_momentum(frame)

刚体的线性动量。

masscenter_vel(body)

返回质量中心相对于提供的刚体或参考系的速率。

parallel_axis(point[, frame])

返回物体相对于另一点的惯性二重态。

remove_load([about])

移除关于点或帧的负载。

设置势能

示例

由于 Body 已被弃用,以下示例仅用于说明目的。Body 的功能完全由 RigidBodyParticle 捕获。要忽略弃用警告,我们可以使用 ignore_warnings 上下文管理器。

>>> from sympy.utilities.exceptions import ignore_warnings

默认行为。这将创建一个刚体对象,其质量、质心、框架和惯性属性被赋予默认值。:

>>> from sympy.physics.mechanics import Body
>>> with ignore_warnings(DeprecationWarning):
...     body = Body('name_of_body')

下一个示例展示了指定 Body 对象所有值所需的代码。请注意,这还将创建 Body 对象的 RigidBody 版本。

>>> from sympy import Symbol
>>> from sympy.physics.mechanics import ReferenceFrame, Point, inertia
>>> from sympy.physics.mechanics import Body
>>> mass = Symbol('mass')
>>> masscenter = Point('masscenter')
>>> frame = ReferenceFrame('frame')
>>> ixx = Symbol('ixx')
>>> body_inertia = inertia(frame, ixx, 0, 0)
>>> with ignore_warnings(DeprecationWarning):
...     body = Body('name_of_body', masscenter, mass, frame, body_inertia)

创建一个Particle版本的Body对象所需的最少代码只需传入一个名称和一个质量。:

>>> from sympy import Symbol
>>> from sympy.physics.mechanics import Body
>>> mass = Symbol('mass')
>>> with ignore_warnings(DeprecationWarning):
...     body = Body('name_of_body', mass=mass)

Body 对象的 Particle 版本也可以接收一个质心点和参考系,只是不能接收惯性。

ang_vel_in(body)[源代码][源代码]

返回此物体相对于提供的刚体或参考系的角速度。

参数:
body: Body 或 ReferenceFrame

用于计算角速度的刚体或参考系。

angular_momentum(point, frame)[源代码]

返回刚体在给定坐标系中某点的角动量。

参数:

期望计算角动量的点。

框架参考框架

期望角动量的参考系。

示例

>>> from sympy.physics.mechanics import Point, ReferenceFrame, outer
>>> from sympy.physics.mechanics import RigidBody, dynamicsymbols
>>> from sympy.physics.vector import init_vprinting
>>> init_vprinting(pretty_print=False)
>>> m, v, r, omega = dynamicsymbols('m v r omega')
>>> N = ReferenceFrame('N')
>>> b = ReferenceFrame('b')
>>> b.set_ang_vel(N, omega * b.x)
>>> P = Point('P')
>>> P.set_vel(N, 1 * N.x)
>>> I = outer(b.x, b.x)
>>> B = RigidBody('B', P, b, m, (I, P))
>>> B.angular_momentum(P, N)
omega*b.x
apply_force(
force,
point=None,
reaction_body=None,
reaction_point=None,
)[源代码][源代码]

对物体施加力。

参数:
力: 矢量

要施加的力。

点: 点, 可选

力作用在自身上的点。默认是自身的质心。

reaction_body: 主体, 可选

第二个物体,将施加相等且相反的力。

reaction_point点,可选

在另一个物体上施加相等且相反力的点。默认是另一个物体的质心。

注释

如果在一个已经施加了某些力的点上施加新的力,那么新的力将加到该点上已施加的力上。

apply_torque(torque, reaction_body=None)[源代码][源代码]

对物体施加扭矩。

参数:
扭矩: 矢量

要施加的扭矩。

reaction_body: 主体, 可选

第二个要施加等值反向扭矩的物体。

注释

如果在一个已经施加了某些扭矩的物体上施加新的扭矩,那么这个新扭矩将相对于物体的框架添加到之前的扭矩上。

property central_inertia

身体的中心惯性二重体。

clear_loads()[源代码][源代码]

清除Body的载荷列表。

dcm(body)[源代码][源代码]

返回此物体相对于提供的刚体或参考系的姿态余弦矩阵。

参数:
body: Body 或 ReferenceFrame

用于计算dcm的刚体或参考系。

property frame

固定在物体上的参考系。

property inertia

物体关于某点的惯性;存储为 (Dyadic, Point)。

kinetic_energy(frame)[源代码][源代码]

物体的动能。

参数:
框架参考系或物体

物体的角速度及其质心的速度通常是相对于惯性参考系定义的,但任何已知速度的相关参考系都可以提供。

参见

sympy.physics.mechanics

粒子, 刚体

示例

由于 Body 已被弃用,以下示例仅用于说明目的。Body 的功能完全由 RigidBodyParticle 捕获。要忽略弃用警告,我们可以使用 ignore_warnings 上下文管理器。

>>> from sympy.utilities.exceptions import ignore_warnings
>>> from sympy.physics.mechanics import Body, ReferenceFrame, Point
>>> from sympy import symbols
>>> m, v, r, omega = symbols('m v r omega')
>>> N = ReferenceFrame('N')
>>> O = Point('O')
>>> with ignore_warnings(DeprecationWarning):
...     P = Body('P', masscenter=O, mass=m)
>>> P.masscenter.set_vel(N, v * N.y)
>>> P.kinetic_energy(N)
m*v**2/2
>>> N = ReferenceFrame('N')
>>> b = ReferenceFrame('b')
>>> b.set_ang_vel(N, omega * b.x)
>>> P = Point('P')
>>> P.set_vel(N, v * N.x)
>>> with ignore_warnings(DeprecationWarning):
...     B = Body('B', masscenter=P, frame=b)
>>> B.kinetic_energy(N)
B_ixx*omega**2/2 + B_mass*v**2/2
linear_momentum(frame)[源代码]

刚体的线性动量。

参数:
框架参考框架

期望线性动量的框架。

示例

>>> from sympy.physics.mechanics import Point, ReferenceFrame, outer
>>> from sympy.physics.mechanics import RigidBody, dynamicsymbols
>>> from sympy.physics.vector import init_vprinting
>>> init_vprinting(pretty_print=False)
>>> m, v = dynamicsymbols('m v')
>>> N = ReferenceFrame('N')
>>> P = Point('P')
>>> P.set_vel(N, v * N.x)
>>> I = outer (N.x, N.x)
>>> Inertia_tuple = (I, P)
>>> B = RigidBody('B', P, N, m, Inertia_tuple)
>>> B.linear_momentum(N)
m*v*N.x
property mass

身体的质量。

property masscenter

身体的质心。

masscenter_vel(body)[源代码][源代码]

返回质量中心相对于提供的刚体或参考系的速率。

参数:
body: Body 或 ReferenceFrame

用于计算速度的刚体或参考系。

property name

主体的名称。

parallel_axis(point, frame=None)[源代码][源代码]

返回物体相对于另一点的惯性二重态。

参数:
sympy.physics.vector.Point

表达惯性二重态的点。

框架sympy.physics.vector.ReferenceFrame

用于构建并矢的参考系。

返回:
惯性sympy.physics.vector.Dyadic

刚体关于给定点表示的惯性二重张量。

property point

身体的质心。

property potential_energy

物体的势能。

示例

>>> from sympy.physics.mechanics import Particle, Point
>>> from sympy import symbols
>>> m, g, h = symbols('m g h')
>>> O = Point('O')
>>> P = Particle('P', O, m)
>>> P.potential_energy = m * g * h
>>> P.potential_energy
g*h*m
remove_load(about=None)[源代码][源代码]

移除关于点或帧的负载。

参数:
关于点或参考系,可选

施加力的点,并且是要移除的点。如果 about 是 None,那么关于自身框架的扭矩将被移除。

property x

物体在x方向上的基向量。

property y

在y方向上的物体基向量。

property z

物体在z方向上的基向量。

class sympy.physics.mechanics.jointsmethod.JointsMethod(newtonion, *joints)[源代码][源代码]

使用一组通过关节连接的相互连接的物体来制定运动方程的方法。

自 1.13 版本弃用: JointsMethod 类已被弃用。其功能已被新的 System 类所取代。

参数:
牛顿Body 或 ReferenceFrame

牛顿(惯性)参考系。

*关节联合

系统中的关节

属性:
q, u可迭代对象

广义坐标和速度的可迭代对象

bodies可迭代对象

系统中的天体列表。

loads可迭代对象

系统负载列表。

mass_matrix矩阵,形状(n, n)

系统的质量矩阵。

forcing矩阵,形状(n, 1)

系统的强制向量。

mass_matrix_full矩阵,形状(2*n, 2*n)

u 和 q 的“质量矩阵”。

forcing_full矩阵,形状(2*n, 1)

u’s 和 q’s 的“强制向量”。

methodKanesMethod 或 Lagrange 方法

用于形成系统方程的方法对象。

kdes可迭代对象

广义坐标的列表。

方法

form_eoms([method])

形成系统运动方程的方法。

rhs([inv_method])

返回可以数值求解的方程。

注释

JointsMethod 目前仅适用于没有任何配置或运动约束的系统。

示例

由于 Body 和 JointsMethod 已被弃用,以下示例仅用于说明目的。Body 的功能完全由 RigidBodyParticle 捕捉,而 JointsMethod 的功能完全由 System 捕捉。要忽略弃用警告,我们可以使用 ignore_warnings 上下文管理器。

>>> from sympy.utilities.exceptions import ignore_warnings

这是一个简单的单自由度平移弹簧-质量-阻尼器的示例。

>>> from sympy import symbols
>>> from sympy.physics.mechanics import Body, JointsMethod, PrismaticJoint
>>> from sympy.physics.vector import dynamicsymbols
>>> c, k = symbols('c k')
>>> x, v = dynamicsymbols('x v')
>>> with ignore_warnings(DeprecationWarning):
...     wall = Body('W')
...     body = Body('B')
>>> J = PrismaticJoint('J', wall, body, coordinates=x, speeds=v)
>>> wall.apply_force(c*v*wall.x, reaction_body=body)
>>> wall.apply_force(k*x*wall.x, reaction_body=body)
>>> with ignore_warnings(DeprecationWarning):
...     method = JointsMethod(wall, J)
>>> method.form_eoms()
Matrix([[-B_mass*Derivative(v(t), t) - c*v(t) - k*x(t)]])
>>> M = method.mass_matrix_full
>>> F = method.forcing_full
>>> rhs = M.LUsolve(F)
>>> rhs
Matrix([
[                     v(t)],
[(-c*v(t) - k*x(t))/B_mass]])
property bodies

系统中的天体列表。

property forcing

系统的强制向量。

property forcing_full

u’s 和 q’s 的“强制向量”。

form_eoms(
method=<class 'sympy.physics.mechanics.kane.KanesMethod'>,
)[源代码][源代码]

形成系统运动方程的方法。

参数:
方法

方法的类名。

返回:
矩阵

运动方程的向量。

示例

由于 Body 和 JointsMethod 已被弃用,以下示例仅用于说明目的。Body 的功能完全由 RigidBodyParticle 捕捉,而 JointsMethod 的功能完全由 System 捕捉。要忽略弃用警告,我们可以使用 ignore_warnings 上下文管理器。

>>> from sympy.utilities.exceptions import ignore_warnings

这是一个简单的单自由度平移弹簧-质量-阻尼器的示例。

>>> from sympy import S, symbols
>>> from sympy.physics.mechanics import LagrangesMethod, dynamicsymbols, Body
>>> from sympy.physics.mechanics import PrismaticJoint, JointsMethod
>>> q = dynamicsymbols('q')
>>> qd = dynamicsymbols('q', 1)
>>> m, k, b = symbols('m k b')
>>> with ignore_warnings(DeprecationWarning):
...     wall = Body('W')
...     part = Body('P', mass=m)
>>> part.potential_energy = k * q**2 / S(2)
>>> J = PrismaticJoint('J', wall, part, coordinates=q, speeds=qd)
>>> wall.apply_force(b * qd * wall.x, reaction_body=part)
>>> with ignore_warnings(DeprecationWarning):
...     method = JointsMethod(wall, J)
>>> method.form_eoms(LagrangesMethod)
Matrix([[b*Derivative(q(t), t) + k*q(t) + m*Derivative(q(t), (t, 2))]])

我们也可以使用 ‘rhs’ 方法来求解状态。

>>> method.rhs()
Matrix([
[                Derivative(q(t), t)],
[(-b*Derivative(q(t), t) - k*q(t))/m]])
property kdes

广义坐标的列表。

property loads

系统负载列表。

property mass_matrix

系统的质量矩阵。

property mass_matrix_full

u 和 q 的“质量矩阵”。

property method

用于形成系统方程的方法对象。

property q

广义坐标的列表。

rhs(inv_method=None)[源代码][源代码]

返回可以数值求解的方程。

参数:
inv_methodstr

要使用的特定 sympy 逆矩阵计算方法。有关有效方法的列表,请参见 inv()

返回:
矩阵

数值可解方程。

参见

sympy.physics.mechanics.kane.KanesMethod.rhs

KanesMethod 的 rhs 函数。

sympy.physics.mechanics.lagrange.LagrangesMethod.rhs

LagrangesMethod 的 rhs 函数。

property u

广义速度列表。