运动学(Docstrings)#

class sympy.physics.vector.point.Point(name)[源代码]#

此对象表示动态系统中的一个点。

它存储:点的位置、速度和加速度。位置是一个向量,定义为从父点到该点的向量距离。

参数:

name :字符串

点的显示名称

实例

>>> from sympy.physics.vector import Point, ReferenceFrame, dynamicsymbols
>>> from sympy.physics.vector import init_vprinting
>>> init_vprinting(pretty_print=False)
>>> N = ReferenceFrame('N')
>>> O = Point('O')
>>> P = Point('P')
>>> u1, u2, u3 = dynamicsymbols('u1 u2 u3')
>>> O.set_vel(N, u1 * N.x + u2 * N.y + u3 * N.z)
>>> O.acc(N)
u1'*N.x + u2'*N.y + u3'*N.z

symbols() can be used to create multiple Points in a single step, for example:

>>> from sympy.physics.vector import Point, ReferenceFrame, dynamicsymbols
>>> from sympy.physics.vector import init_vprinting
>>> init_vprinting(pretty_print=False)
>>> from sympy import symbols
>>> N = ReferenceFrame('N')
>>> u1, u2 = dynamicsymbols('u1 u2')
>>> A, B = symbols('A B', cls=Point)
>>> type(A)
<class 'sympy.physics.vector.point.Point'>
>>> A.set_vel(N, u1 * N.x + u2 * N.y)
>>> B.set_vel(N, u2 * N.x + u1 * N.y)
>>> A.acc(N) - B.acc(N)
(u1' - u2')*N.x + (-u1' + u2')*N.y
a1pt_theory(otherpoint, outframe, interframe)[源代码]#

使用1点理论设置该点的加速度。

点加速度的1点理论如下:

^N a^P=^B a^P+^N a^O+^Nα^B x r^OP+^N欧米茄^B x(^N欧米茄^B x r^OP)+2^N欧米茄^B x ^B v^P

其中O是固定在B中的点,P是在B中移动的点,B在N帧中旋转。

参数:

其他点 :点

1点理论的第一点(O)

外框 :参考帧

我们想要这个点的加速度在(N)中定义

固定框架 :参考帧

计算中的中间框架(B)

实例

>>> from sympy.physics.vector import Point, ReferenceFrame
>>> from sympy.physics.vector import dynamicsymbols
>>> from sympy.physics.vector import init_vprinting
>>> init_vprinting(pretty_print=False)
>>> q = dynamicsymbols('q')
>>> q2 = dynamicsymbols('q2')
>>> qd = dynamicsymbols('q', 1)
>>> q2d = dynamicsymbols('q2', 1)
>>> N = ReferenceFrame('N')
>>> B = ReferenceFrame('B')
>>> B.set_ang_vel(N, 5 * B.y)
>>> O = Point('O')
>>> P = O.locatenew('P', q * B.x + q2 * B.y)
>>> P.set_vel(B, qd * B.x + q2d * B.y)
>>> O.set_vel(N, 0)
>>> P.a1pt_theory(O, N, B)
(-25*q + q'')*B.x + q2''*B.y - 10*q'*B.z
a2pt_theory(otherpoint, outframe, fixedframe)[源代码]#

使用两点理论设置该点的加速度。

点加速度的两点理论如下:

^N a^P=^N a^O+^N阿尔法^B x r^OP+^N欧米茄^B x(^N欧米茄^B x r^OP)

其中O和P都是固定在B框中的点,B框在N框中旋转。

参数:

其他点 :点

两点理论的第一点(O)

外框 :参考帧

我们想要这个点的加速度在(N)中定义

固定框架 :参考帧

两点固定的框架(B)

实例

>>> from sympy.physics.vector import Point, ReferenceFrame, dynamicsymbols
>>> from sympy.physics.vector import init_vprinting
>>> init_vprinting(pretty_print=False)
>>> q = dynamicsymbols('q')
>>> qd = dynamicsymbols('q', 1)
>>> N = ReferenceFrame('N')
>>> B = N.orientnew('B', 'Axis', [q, N.z])
>>> O = Point('O')
>>> P = O.locatenew('P', 10 * B.x)
>>> O.set_vel(N, 5 * N.x)
>>> P.a2pt_theory(O, N, B)
- 10*q'**2*B.x + 10*q''*B.y
acc(frame)[源代码]#

参考帧中该点的加速度矢量。

参数:

框架 :参考帧

The frame in which the returned acceleration vector will be defined in.

实例

>>> from sympy.physics.vector import Point, ReferenceFrame
>>> N = ReferenceFrame('N')
>>> p1 = Point('p1')
>>> p1.set_acc(N, 10 * N.x)
>>> p1.acc(N)
10*N.x
locatenew(name, value)[源代码]#

使用从此点定义的位置创建新点。

参数:

name :结构

新点的名称

价值 :矢量

新点相对于该点的位置

实例

>>> from sympy.physics.vector import ReferenceFrame, Point
>>> N = ReferenceFrame('N')
>>> P1 = Point('P1')
>>> P2 = P1.locatenew('P2', 10 * N.x)
partial_velocity(frame, *gen_speeds)[源代码]#

返回给定帧中此点的线速度矢量相对于一个或多个提供的广义速度的部分速度。

参数:

框架 :参考帧

在中定义速度的帧。

gen_speeds :时间函数

广义速度。

返回:

partial_velocities :向量元组

与所提供的广义速度相对应的偏速度矢量。

实例

>>> from sympy.physics.vector import ReferenceFrame, Point
>>> from sympy.physics.vector import dynamicsymbols
>>> N = ReferenceFrame('N')
>>> A = ReferenceFrame('A')
>>> p = Point('p')
>>> u1, u2 = dynamicsymbols('u1, u2')
>>> p.set_vel(N, u1 * N.x + u2 * A.y)
>>> p.partial_velocity(N, u1)
N.x
>>> p.partial_velocity(N, u1, u2)
(N.x, A.y)
pos_from(otherpoint)[源代码]#

返回此点与另一点之间的矢量距离。

参数:

其他点 :点

另一个我们要定位的点

实例

>>> from sympy.physics.vector import Point, ReferenceFrame
>>> N = ReferenceFrame('N')
>>> p1 = Point('p1')
>>> p2 = Point('p2')
>>> p1.set_pos(p2, 10 * N.x)
>>> p1.pos_from(p2)
10*N.x
set_acc(frame, value)[源代码]#

用于设置ReferenceFrame中此点的加速度。

参数:

框架 :参考帧

定义此点加速度的帧

价值 :矢量

这一帧的加速度值

实例

>>> from sympy.physics.vector import Point, ReferenceFrame
>>> N = ReferenceFrame('N')
>>> p1 = Point('p1')
>>> p1.set_acc(N, 10 * N.x)
>>> p1.acc(N)
10*N.x
set_pos(otherpoint, value)[源代码]#

用于设置此点与另一个点的位置。

参数:

其他点 :点

定义此点位置的另一个点

价值 :矢量

定义该点位置的向量

实例

>>> from sympy.physics.vector import Point, ReferenceFrame
>>> N = ReferenceFrame('N')
>>> p1 = Point('p1')
>>> p2 = Point('p2')
>>> p1.set_pos(p2, 10 * N.x)
>>> p1.pos_from(p2)
10*N.x
set_vel(frame, value)[源代码]#

设置参考帧中此点的速度矢量。

参数:

框架 :参考帧

定义此点速度的帧

价值 :矢量

帧中该点速度的向量值

实例

>>> from sympy.physics.vector import Point, ReferenceFrame
>>> N = ReferenceFrame('N')
>>> p1 = Point('p1')
>>> p1.set_vel(N, 10 * N.x)
>>> p1.vel(N)
10*N.x
v1pt_theory(otherpoint, outframe, interframe)[源代码]#

使用1点理论设置此点的速度。

点速度的1点理论如下:

^N v^P=^B v^P+^N v^O+^NΩ^B x r^OP

其中O是固定在B中的点,P是在B中移动的点,B在N帧中旋转。

参数:

其他点 :点

1点理论的第一点(O)

外框 :参考帧

我们想要这个点的速度定义在(N)中

帧间 :参考帧

计算中的中间框架(B)

实例

>>> from sympy.physics.vector import Point, ReferenceFrame
>>> from sympy.physics.vector import dynamicsymbols
>>> from sympy.physics.vector import init_vprinting
>>> init_vprinting(pretty_print=False)
>>> q = dynamicsymbols('q')
>>> q2 = dynamicsymbols('q2')
>>> qd = dynamicsymbols('q', 1)
>>> q2d = dynamicsymbols('q2', 1)
>>> N = ReferenceFrame('N')
>>> B = ReferenceFrame('B')
>>> B.set_ang_vel(N, 5 * B.y)
>>> O = Point('O')
>>> P = O.locatenew('P', q * B.x + q2 * B.y)
>>> P.set_vel(B, qd * B.x + q2d * B.y)
>>> O.set_vel(N, 0)
>>> P.v1pt_theory(O, N, B)
q'*B.x + q2'*B.y - 5*q*B.z
v2pt_theory(otherpoint, outframe, fixedframe)[源代码]#

使用两点理论设置该点的速度。

点速度的两点理论如下:

^N v^P=^N v^O+^NΩ^B x r^OP

其中O和P都是固定在B框中的点,B框在N框中旋转。

参数:

其他点 :点

两点理论的第一点(O)

外框 :参考帧

我们想要这个点的速度定义在(N)中

固定框架 :参考帧

两点固定的框架(B)

实例

>>> from sympy.physics.vector import Point, ReferenceFrame, dynamicsymbols
>>> from sympy.physics.vector import init_vprinting
>>> init_vprinting(pretty_print=False)
>>> q = dynamicsymbols('q')
>>> qd = dynamicsymbols('q', 1)
>>> N = ReferenceFrame('N')
>>> B = N.orientnew('B', 'Axis', [q, N.z])
>>> O = Point('O')
>>> P = O.locatenew('P', 10 * B.x)
>>> O.set_vel(N, 5 * N.x)
>>> P.v2pt_theory(O, N, B)
5*N.x + 10*q'*B.y
vel(frame)[源代码]#

参考帧中该点的速度矢量。

参数:

框架 :参考帧

返回的速度矢量将在其中定义的帧

实例

>>> from sympy.physics.vector import Point, ReferenceFrame, dynamicsymbols
>>> N = ReferenceFrame('N')
>>> p1 = Point('p1')
>>> p1.set_vel(N, 10 * N.x)
>>> p1.vel(N)
10*N.x

如果可能,将自动计算速度,否则 ValueError 将被退回。如果可以从相对点计算多个不同的速度,则将使用与该点最直接相关的定义点。如果点的相对位置不一致,可能会返回错误的速度。它是由用户来定义预先的相对位置和速度点在一个自洽的方式。

>>> p = Point('p')
>>> q = dynamicsymbols('q')
>>> p.set_vel(N, 10 * N.x)
>>> p2 = Point('p2')
>>> p2.set_pos(p, q*N.x)
>>> p2.vel(N)
(Derivative(q(t), t) + 10)*N.x

kinematic_equations#

sympy.physics.vector.functions.get_motion_params(frame, **kwargs)[源代码]#

返回三个运动参数-(加速度、速度和位置)作为给定帧中时间的矢量函数。

如果提供高阶微分函数,则以低阶函数作为边界条件。例如,在给定加速度的情况下,以速度和位置参数作为边界条件。

指定边界条件的时间值取自时间值1(位置边界条件)和时间值2(速度边界条件)。

如果没有提供任何边界条件,则默认情况下它们被视为零(对于向量输入,为零向量)。如果边界条件也是时间函数,则通过替换动态符号中的时间值将它们转换为常数。

此函数也可用于计算旋转运动参数。为了更清楚地了解这些参数和示例。

参数:

框架 :参考帧

表示运动参数的帧

加快 :矢量

物体/帧作为时间函数的加速度

速度 :矢量

速度作为时间的函数或作为速度边界条件的时间=时间值1

位置 :矢量

速度作为时间的函数或作为速度边界条件的时间=时间值1

时间值1 :可接受

位置边界条件的时间值

时间值2 :可接受

速度边界条件的时间值

实例

>>> from sympy.physics.vector import ReferenceFrame, get_motion_params, dynamicsymbols
>>> from sympy.physics.vector import init_vprinting
>>> init_vprinting(pretty_print=False)
>>> from sympy import symbols
>>> R = ReferenceFrame('R')
>>> v1, v2, v3 = dynamicsymbols('v1 v2 v3')
>>> v = v1*R.x + v2*R.y + v3*R.z
>>> get_motion_params(R, position = v)
(v1''*R.x + v2''*R.y + v3''*R.z, v1'*R.x + v2'*R.y + v3'*R.z, v1*R.x + v2*R.y + v3*R.z)
>>> a, b, c = symbols('a b c')
>>> v = a*R.x + b*R.y + c*R.z
>>> get_motion_params(R, velocity = v)
(0, a*R.x + b*R.y + c*R.z, a*t*R.x + b*t*R.y + c*t*R.z)
>>> parameters = get_motion_params(R, acceleration = v)
>>> parameters[1]
a*t*R.x + b*t*R.y + c*t*R.z
>>> parameters[2]
a*t**2/2*R.x + b*t**2/2*R.y + c*t**2/2*R.z
sympy.physics.vector.functions.kinematic_equations(speeds, coords, rot_type, rot_order='')[源代码]#

给出了旋转型量子点与u的关系式。

按方向提供旋转类型和顺序。假设速度是物体固定的;如果我们用rot_类型定义A中B的方向,则A中B的角速度假定为:速度 [0] [B、 x+速度[1]] B、 y+速度 [2] *B.z

参数:

速度 :长度列表3

物体的角速度是固定的。

坐标 :长度3或4的列表

用于定义两个帧的方向的坐标。

rot_type :结构

用于创建表达式的旋转类型。仅实体、空间或四元数

rot_order :str或int

如果适用,一系列旋转的顺序。

实例

>>> from sympy.physics.vector import dynamicsymbols
>>> from sympy.physics.vector import kinematic_equations, vprint
>>> u1, u2, u3 = dynamicsymbols('u1 u2 u3')
>>> q1, q2, q3 = dynamicsymbols('q1 q2 q3')
>>> vprint(kinematic_equations([u1,u2,u3], [q1,q2,q3], 'body', '313'),
...     order=None)
[-(u1*sin(q3) + u2*cos(q3))/sin(q2) + q1', -u1*cos(q3) + u2*sin(q3) + q2', (u1*sin(q3) + u2*cos(q3))*cos(q2)/sin(q2) - u3 + q3']
sympy.physics.vector.functions.partial_velocity(vel_vecs, gen_speeds, frame)[源代码]#

对于每个提供的速度矢量,返回与给定参考坐标系中提供的广义速度有关的部分速度列表。

输出是一个列表列表。外部列表的元素数与提供的速度矢量数相等。对于每个速度矢量,内部列表是该速度矢量相对于所提供的广义速度的偏导数。

参数:

vel_vecs :i可读取

速度向量的一个集合(角的或线性的)。

gen_speeds :i可读取

广义速度的iterable。

框架 :参考帧

偏导数的坐标系。

实例

>>> from sympy.physics.vector import Point, ReferenceFrame
>>> from sympy.physics.vector import dynamicsymbols
>>> from sympy.physics.vector import partial_velocity
>>> u = dynamicsymbols('u')
>>> N = ReferenceFrame('N')
>>> P = Point('P')
>>> P.set_vel(N, u * N.x)
>>> vel_vecs = [P.vel(N)]
>>> gen_speeds = [u]
>>> partial_velocity(vel_vecs, gen_speeds, N)
[[N.x]]