刚体、惯性、载荷及其他功能(文档字符串)

身体

class sympy.physics.mechanics.particle.Particle(name, point=None, mass=None)[源代码][源代码]

一个粒子。

参数:
名称str

粒子名称

一个物理/力学点,表示此粒子的位置、速度和加速度

质量Sympifyable

表示粒子质量的 SymPy 表达式

势能Sympifyable

粒子的势能。

属性:
mass

身体的质量。

masscenter

身体的质心。

name

主体的名称。

point

身体的质心。

potential_energy

物体的势能。

方法

angular_momentum(point, frame)

关于该点的粒子角动量。

kinetic_energy(frame)

粒子的动能。

linear_momentum(frame)

粒子的线性动量。

parallel_axis(point, frame)

返回粒子相对于另一个点和框架的惯性二元组。

设置势能

示例

>>> from sympy.physics.mechanics import Particle, Point
>>> from sympy import Symbol
>>> po = Point('po')
>>> m = Symbol('m')
>>> pa = Particle('pa', po, m)
>>> # Or you could change these later
>>> pa.mass = m
>>> pa.point = po
angular_momentum(point, frame)[源代码][源代码]

关于该点的粒子角动量。

参数:

希望得到粒子角动量的点。

框架参考框架

期望角动量的参考系。

示例

>>> from sympy.physics.mechanics import Particle, Point, ReferenceFrame
>>> from sympy.physics.mechanics import dynamicsymbols
>>> from sympy.physics.vector import init_vprinting
>>> init_vprinting(pretty_print=False)
>>> m, v, r = dynamicsymbols('m v r')
>>> N = ReferenceFrame('N')
>>> O = Point('O')
>>> A = O.locatenew('A', r * N.x)
>>> P = Particle('P', A, m)
>>> P.point.set_vel(N, v * N.y)
>>> P.angular_momentum(O, N)
m*r*v*N.z
kinetic_energy(frame)[源代码][源代码]

粒子的动能。

参数:
框架参考框架

粒子的速度通常是相对于惯性系定义的,但任何已知速度的相关参考系都可以提供。

示例

>>> from sympy.physics.mechanics import Particle, Point, ReferenceFrame
>>> from sympy import symbols
>>> m, v, r = symbols('m v r')
>>> N = ReferenceFrame('N')
>>> O = Point('O')
>>> P = Particle('P', O, m)
>>> P.point.set_vel(N, v * N.y)
>>> P.kinetic_energy(N)
m*v**2/2
linear_momentum(frame)[源代码][源代码]

粒子的线性动量。

参数:
框架参考框架

期望线性动量的框架。

示例

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

身体的质量。

property masscenter

身体的质心。

property name

主体的名称。

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

返回粒子相对于另一个点和框架的惯性二元组。

参数:
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
class sympy.physics.mechanics.rigidbody.RigidBody(
name,
masscenter=None,
frame=None,
mass=None,
inertia=None,
)[源代码][源代码]

一个理想化的刚体。

属性:
name字符串

主体的名称。

masscenter

身体的质心。

frame参考框架

固定在物体上的参考系。

massSympifyable

身体的质量。

inertia(二元, 点)

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

potential_energySympifyable

物体的势能。

方法

angular_momentum(point, frame)

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

kinetic_energy(frame)

刚体的动能。

linear_momentum(frame)

刚体的线性动量。

parallel_axis(point[, frame])

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

设置势能

示例

>>> from sympy import Symbol
>>> from sympy.physics.mechanics import ReferenceFrame, Point, RigidBody
>>> from sympy.physics.mechanics import outer
>>> m = Symbol('m')
>>> A = ReferenceFrame('A')
>>> P = Point('P')
>>> I = outer (A.x, A.x)
>>> inertia_tuple = (I, P)
>>> B = RigidBody('B', P, A, m, inertia_tuple)
>>> # Or you could change them afterwards
>>> m2 = Symbol('m2')
>>> B.mass = m2
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
property central_inertia

身体的中心惯性二重体。

property frame

固定在物体上的参考系。

property inertia

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

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

刚体的动能。

参数:
框架参考框架

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

示例

>>> from sympy.physics.mechanics import Point, ReferenceFrame, outer
>>> from sympy.physics.mechanics import RigidBody
>>> from sympy import symbols
>>> m, v, r, omega = symbols('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, v * N.x)
>>> I = outer (b.x, b.x)
>>> inertia_tuple = (I, P)
>>> B = RigidBody('B', P, b, m, inertia_tuple)
>>> B.kinetic_energy(N)
m*v**2/2 + omega**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

身体的质心。

property name

主体的名称。

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

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

参数:
sympy.physics.vector.Point

表达惯性二重态的点。

框架sympy.physics.vector.ReferenceFrame

用于构建并矢的参考系。

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

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

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
property x

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

property y

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

property z

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

惯性

class sympy.physics.mechanics.inertia.Inertia(dyadic, point)[源代码][源代码]

由一个Dyadic和一个参考点组成的不变对象。

属性:
二元二元的

惯性的二元性。

惯性参考点。

方法

count(value, /)

返回值出现的次数。

from_inertia_scalars(point, frame, ixx, iyy, izz)

基于张量值创建惯性对象的简单方法。

index(value[, start, stop])

返回值的第一个索引。

示例

>>> from sympy.physics.mechanics import ReferenceFrame, Point, Inertia
>>> N = ReferenceFrame('N')
>>> Po = Point('Po')
>>> Inertia(N.x.outer(N.x) + N.y.outer(N.y) + N.z.outer(N.z), Po)
((N.x|N.x) + (N.y|N.y) + (N.z|N.z), Po)

在上面的例子中,Dyadic 是手动创建的,但也可以使用 inertia 函数或如下面所示的类方法 from_tensor 来创建。

>>> Inertia.from_inertia_scalars(Po, N, 1, 1, 1)
((N.x|N.x) + (N.y|N.y) + (N.z|N.z), Po)
classmethod from_inertia_scalars(
point,
frame,
ixx,
iyy,
izz,
ixy=0,
iyz=0,
izx=0,
)[源代码][源代码]

基于张量值创建惯性对象的简单方法。

参数:

惯性参考点。

框架参考框架

定义惯性所在的框架。

ixxSympifyable

惯量二元组中的 xx 元素。

iyySympifyable

惯性并矢中的 yy 元素。

izzSympifyable

惯性偶极子中的zz元素。

ixySympifyable

惯性二重张量中的 xy 元素。

iyzSympifyable

惯性偶极子中的yz元素。

izxSympifyable

惯量并矢中的 zx 元素。

示例

>>> from sympy import symbols
>>> from sympy.physics.mechanics import ReferenceFrame, Point, Inertia
>>> ixx, iyy, izz, ixy, iyz, izx = symbols('ixx iyy izz ixy iyz izx')
>>> N = ReferenceFrame('N')
>>> P = Point('P')
>>> I = Inertia.from_inertia_scalars(P, N, ixx, iyy, izz, ixy, iyz, izx)

当将并矢转换为矩阵时,张量值可以很容易地被看到。

>>> I.dyadic.to_matrix(N)
Matrix([
[ixx, ixy, izx],
[ixy, iyy, iyz],
[izx, iyz, izz]])
sympy.physics.mechanics.inertia.inertia(frame, ixx, iyy, izz, ixy=0, iyz=0, izx=0)[源代码][源代码]

创建惯性并矢对象的简单方法。

参数:
框架参考框架

定义惯性所在的框架。

ixxSympifyable

惯量二元组中的 xx 元素。

iyySympifyable

惯性并矢中的 yy 元素。

izzSympifyable

惯性偶极子中的zz元素。

ixySympifyable

惯性二重张量中的 xy 元素。

iyzSympifyable

惯性偶极子中的yz元素。

izxSympifyable

惯量并矢中的 zx 元素。

示例

>>> from sympy.physics.mechanics import ReferenceFrame, inertia
>>> N = ReferenceFrame('N')
>>> inertia(N, 1, 2, 3)
(N.x|N.x) + 2*(N.y|N.y) + 3*(N.z|N.z)
sympy.physics.mechanics.inertia.inertia_of_point_mass(mass, pos_vec, frame)[源代码][源代码]

相对于点O的点质量的惯性并矢。

参数:
质量Sympifyable

质点质量

pos_vec向量

从点 O 到质点的位置

框架参考框架

参考框架以表达二元关系

示例

>>> from sympy import symbols
>>> from sympy.physics.mechanics import ReferenceFrame, inertia_of_point_mass
>>> N = ReferenceFrame('N')
>>> r, m = symbols('r m')
>>> px = r * N.x
>>> inertia_of_point_mass(m, px, N)
m*r**2*(N.y|N.y) + m*r**2*(N.z|N.z)

加载

class sympy.physics.mechanics.loads.Force(point, force)[源代码][源代码]

作用于一点的力。

属性:
强制

方法

count(value, /)

返回值出现的次数。

index(value[, start, stop])

返回值的第一个索引。

示例

一个大小为2沿N.x作用的力作用在点Po上,可以如下创建:

>>> from sympy.physics.mechanics import Point, ReferenceFrame, Force
>>> N = ReferenceFrame('N')
>>> Po = Point('Po')
>>> Force(Po, 2 * N.x)
(Po, 2*N.x)

如果提供了物体,则使用该物体的质心。

>>> from sympy.physics.mechanics import Particle
>>> P = Particle('P', point=Po)
>>> Force(P, 2 * N.x)
(Po, 2*N.x)
class sympy.physics.mechanics.loads.Torque(frame, torque)[源代码][源代码]

作用在框架上的扭矩。

属性:
框架
扭矩

方法

count(value, /)

返回值出现的次数。

index(value[, start, stop])

返回值的第一个索引。

示例

关于 N.x 的 2 大小的扭矩可以如下创建:

>>> from sympy.physics.mechanics import ReferenceFrame, Torque
>>> N = ReferenceFrame('N')
>>> Torque(N, 2 * N.x)
(N, 2*N.x)

如果提供了主体,则使用固定在该主体上的框架。

>>> from sympy.physics.mechanics import RigidBody
>>> rb = RigidBody('rb', frame=N)
>>> Torque(rb, 2 * N.x)
(N, 2*N.x)

其他功能

sympy.physics.mechanics.functions.center_of_mass(point, *bodies)[源代码][源代码]

返回从给定点到给定物体(粒子或刚体)质心的位置向量。

sympy.physics.mechanics.functions.linear_momentum(frame, *body)[源代码][源代码]

系统的线性动量。

参数:
框架参考框架

期望线性动量的框架。

body1, body2, body3…粒子和/或刚体

需要计算线性动量的物体(或多个物体)。

示例

>>> from sympy.physics.mechanics import Point, Particle, ReferenceFrame
>>> from sympy.physics.mechanics import RigidBody, outer, linear_momentum
>>> N = ReferenceFrame('N')
>>> P = Point('P')
>>> P.set_vel(N, 10 * N.x)
>>> Pa = Particle('Pa', P, 1)
>>> Ac = Point('Ac')
>>> Ac.set_vel(N, 25 * N.y)
>>> I = outer(N.x, N.x)
>>> A = RigidBody('A', Ac, N, 20, (I, Ac))
>>> linear_momentum(N, A, Pa)
10*N.x + 500*N.y
sympy.physics.mechanics.functions.angular_momentum(point, frame, *body)[源代码][源代码]

系统的角动量。

参数:

系统角动量所需的点。

框架参考框架

期望角动量的参考系。

body1, body2, body3…粒子和/或刚体

需要计算角动量的物体(或多个物体)。

示例

>>> from sympy.physics.mechanics import Point, Particle, ReferenceFrame
>>> from sympy.physics.mechanics import RigidBody, outer, angular_momentum
>>> N = ReferenceFrame('N')
>>> O = Point('O')
>>> O.set_vel(N, 0 * N.x)
>>> P = O.locatenew('P', 1 * N.x)
>>> P.set_vel(N, 10 * N.x)
>>> Pa = Particle('Pa', P, 1)
>>> Ac = O.locatenew('Ac', 2 * N.y)
>>> Ac.set_vel(N, 5 * N.y)
>>> a = ReferenceFrame('a')
>>> a.set_ang_vel(N, 10 * N.z)
>>> I = outer(N.z, N.z)
>>> A = RigidBody('A', Ac, a, 20, (I, Ac))
>>> angular_momentum(O, N, Pa, A)
10*N.z
sympy.physics.mechanics.functions.kinetic_energy(frame, *body)[源代码][源代码]

多体系统的动能。

参数:
框架参考框架

定义物体速度或角速度的框架。

body1, body2, body3…粒子和/或刚体

需要计算动能的物体(或多个物体)。

示例

>>> from sympy.physics.mechanics import Point, Particle, ReferenceFrame
>>> from sympy.physics.mechanics import RigidBody, outer, kinetic_energy
>>> N = ReferenceFrame('N')
>>> O = Point('O')
>>> O.set_vel(N, 0 * N.x)
>>> P = O.locatenew('P', 1 * N.x)
>>> P.set_vel(N, 10 * N.x)
>>> Pa = Particle('Pa', P, 1)
>>> Ac = O.locatenew('Ac', 2 * N.y)
>>> Ac.set_vel(N, 5 * N.y)
>>> a = ReferenceFrame('a')
>>> a.set_ang_vel(N, 10 * N.z)
>>> I = outer(N.z, N.z)
>>> A = RigidBody('A', Ac, a, 20, (I, Ac))
>>> kinetic_energy(N, Pa, A)
350
sympy.physics.mechanics.functions.potential_energy(*body)[源代码][源代码]

多体系统的势能。

参数:
body1, body2, body3…粒子和/或刚体

需要计算其势能的物体(或多个物体)。

示例

>>> from sympy.physics.mechanics import Point, Particle, ReferenceFrame
>>> from sympy.physics.mechanics import RigidBody, outer, potential_energy
>>> from sympy import symbols
>>> M, m, g, h = symbols('M m g h')
>>> N = ReferenceFrame('N')
>>> O = Point('O')
>>> O.set_vel(N, 0 * N.x)
>>> P = O.locatenew('P', 1 * N.x)
>>> Pa = Particle('Pa', P, m)
>>> Ac = O.locatenew('Ac', 2 * N.y)
>>> a = ReferenceFrame('a')
>>> I = outer(N.z, N.z)
>>> A = RigidBody('A', Ac, a, M, (I, Ac))
>>> Pa.potential_energy = m * g * h
>>> A.potential_energy = M * g * h
>>> potential_energy(Pa, A)
M*g*h + g*h*m
sympy.physics.mechanics.functions.Lagrangian(frame, *body)[源代码][源代码]

多体系统的拉格朗日量。

参数:
框架参考框架

定义物体速度或角速度的参考系,以确定动能。

body1, body2, body3…粒子和/或刚体

需要其拉格朗日量的物体(或多个物体)。

示例

>>> from sympy.physics.mechanics import Point, Particle, ReferenceFrame
>>> from sympy.physics.mechanics import RigidBody, outer, Lagrangian
>>> from sympy import symbols
>>> M, m, g, h = symbols('M m g h')
>>> N = ReferenceFrame('N')
>>> O = Point('O')
>>> O.set_vel(N, 0 * N.x)
>>> P = O.locatenew('P', 1 * N.x)
>>> P.set_vel(N, 10 * N.x)
>>> Pa = Particle('Pa', P, 1)
>>> Ac = O.locatenew('Ac', 2 * N.y)
>>> Ac.set_vel(N, 5 * N.y)
>>> a = ReferenceFrame('a')
>>> a.set_ang_vel(N, 10 * N.z)
>>> I = outer(N.z, N.z)
>>> A = RigidBody('A', Ac, a, 20, (I, Ac))
>>> Pa.potential_energy = m * g * h
>>> A.potential_energy = M * g * h
>>> Lagrangian(N, Pa, A)
-M*g*h - g*h*m + 350
sympy.physics.mechanics.functions.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)}