from pyx import symbolsfrom pyx.physics.mechanics import dynamicsymbols, ReferenceFramefrom pyx.physics.mechanics import RigidBody, Particle, Point, outerfrom pyx.physics.mechanics import linear_momentum, angular_momentumfrom pyx.physics.vector import init_vprintinginit_vprinting(pretty_print=False) m, M, l1 =symbols('m M l1') q1d =dynamicsymbols('q1d') N =ReferenceFrame('N') O =Point('O') O.set_vel(N, 0* N.x) Ac = O.locatenew('Ac', l1 * N.x) P = Ac.locatenew('P', l1 * N.x) a =ReferenceFrame('a') a.set_ang_vel(N, q1d * N.z) Ac.v2pt_theory(O, N, a) P.v2pt_theory(O, N, a)
最后,创建组成系统的主体。在这种情况下,系统由粒子 Pa 和刚体 A 组成。
Pa =Particle('Pa', P, m) I =outer(N.z, N.z) A =RigidBody('A', Ac, a, M, (I, Ac))
然后,人们可以选择评估系统各个组件的动量或整个系统本身的动量。
linear_momentum(N,A)angular_momentum(O, N, Pa)linear_momentum(N, A, Pa)angular_momentum(O, N, A, Pa)
粒子 P 的动能定义为
TP=21mv2
其中m是粒子P的质量,v是粒子在惯性系中的速度。
类似地,刚体 B的动能定义为
TB=Tt+Tτ
其中平动动能由下式给出:
Tt=21mv∗⋅v∗
旋转动能由下式给出:
Tr=21ω⋅I∗⋅ω
其中m是刚体的质量,v*是惯性系中质心的速度,ω是刚体的惯性角速度,I*是中心惯性二元。
势能定义为物体或系统因其位置或排列而拥有的能量。
物体或物体系统的拉格朗日定义为:
L=T−V
其中T和V分别是动能和势能。
Python伪代码实现:
from pyx import symbolsfrom pyx.physics.mechanics import dynamicsymbols, ReferenceFrame, outerfrom pyx.physics.mechanics import RigidBody, Particlefrom pyx.physics.mechanics import kinetic_energy, potential_energy, Pointfrom pyx.physics.vector import init_vprintinginit_vprinting(pretty_print=False) m, M, l1, g, h, H =symbols('m M l1 g h H') omega =dynamicsymbols('omega') N =ReferenceFrame('N') O =Point('O') O.set_vel(N, 0* N.x) Ac = O.locatenew('Ac', l1 * N.x) P = Ac.locatenew('P', l1 * N.x) a =ReferenceFrame('a') a.set_ang_vel(N, omega * N.z) Ac.v2pt_theory(O, N, a) P.v2pt_theory(O, N, a) Pa =Particle('Pa', P, m) I =outer(N.z, N.z) A =RigidBody('A', Ac, a, M, (I, Ac))
然后,用户可以确定系统中任意数量实体的动能:
kinetic_energy(N, Pa)kinetic_energy(N, Pa, A)
然后可以确定构成系统的任意数量的实体的势能:
Pa.potential_energy = m * g * h A.potential_energy = M * g * Hpotential_energy(A, Pa)
我们还可以确定该系统的拉格朗日量:
from pyx.physics.mechanics import Lagrangianfrom pyx.physics.vector import init_vprintinginit_vprinting(pretty_print=False)Lagrangian(N, Pa, A)