刚体、惯性、载荷及其他功能(文档字符串)¶
身体¶
- 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
参考框架固定在物体上的参考系。
mass
Sympifyable身体的质量。
inertia
(二元, 点)物体关于某点的惯性;存储为 (Dyadic, Point)。
potential_energy
Sympifyable物体的势能。
方法
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)}