已弃用的类 (文档字符串)¶
自 1.13 版本弃用: Body
和 JointsMethod
已被弃用。Body
的功能完全由 RigidBody
和 Particle
捕获,而 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 对象。
- 参数:
- 名称字符串
定义主体的名称。它用于定义与主体相关的特定属性。
- 质量中心点,可选
表示物体或粒子质心的点。如果没有给出点,则会生成一个点。
- 质量可符号化的,可选的
一个可符号化的对象,表示物体的质量。如果没有传递质量,则会生成一个。
- 框架ReferenceFrame, 可选
表示物体参考系的
ReferenceFrame
。如果没有提供框架,则会生成一个框架。- central_inertia二元的,可选的
物体的中心惯性对偶。如果在创建 RigidBody 时没有传递惯性,则会生成默认惯性。
- 属性:
name
字符串主体的名称。
masscenter
点身体的质心。
frame
参考框架固定在物体上的参考系。
mass
Sympifyable身体的质量。
inertia
(二元, 点)物体关于某点的惯性;存储为 (Dyadic, Point)。
- 加载可迭代对象
此列表包含作用在物体上的不同载荷信息。力以 (点, 矢量) 元组列出,扭矩以 (参考系, 矢量) 元组列出。
方法
ang_vel_in
(body)返回此物体相对于提供的刚体或参考系的角速度。
angular_momentum
(point, frame)返回刚体在给定坐标系中某点的角动量。
apply_force
(force[, point, reaction_body, ...])对物体施加力。
apply_torque
(torque[, reaction_body])对物体施加扭矩。
清除Body的载荷列表。
dcm
(body)返回此物体相对于提供的刚体或参考系的姿态余弦矩阵。
kinetic_energy
(frame)物体的动能。
linear_momentum
(frame)刚体的线性动量。
masscenter_vel
(body)返回质量中心相对于提供的刚体或参考系的速率。
parallel_axis
(point[, frame])返回物体相对于另一点的惯性二重态。
remove_load
([about])移除关于点或帧的负载。
设置势能
示例
由于 Body 已被弃用,以下示例仅用于说明目的。Body 的功能完全由
RigidBody
和Particle
捕获。要忽略弃用警告,我们可以使用 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 版本也可以接收一个质心点和参考系,只是不能接收惯性。
- 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¶
身体的中心惯性二重体。
- property frame¶
固定在物体上的参考系。
- property inertia¶
物体关于某点的惯性;存储为 (Dyadic, Point)。
- kinetic_energy(frame)[源代码][源代码]¶
物体的动能。
- 参数:
- 框架参考系或物体
物体的角速度及其质心的速度通常是相对于惯性参考系定义的,但任何已知速度的相关参考系都可以提供。
参见
sympy.physics.mechanics
粒子, 刚体
示例
由于 Body 已被弃用,以下示例仅用于说明目的。Body 的功能完全由
RigidBody
和Particle
捕获。要忽略弃用警告,我们可以使用 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 的“强制向量”。
method
KanesMethod 或 Lagrange 方法用于形成系统方程的方法对象。
kdes
可迭代对象广义坐标的列表。
方法
注释
JointsMethod
目前仅适用于没有任何配置或运动约束的系统。示例
由于 Body 和 JointsMethod 已被弃用,以下示例仅用于说明目的。Body 的功能完全由
RigidBody
和Particle
捕捉,而 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 的功能完全由
RigidBody
和Particle
捕捉,而 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¶
广义速度列表。