广义力¶
general_F.py¶
import sympy as sp
def generalized_force(m, L, F, G1):
# 定义符号变量
a1, r11, r12, x1, da1, dr11, dr12, m1, g = sp.symbols('a1 r11 r12 x1 da1 dr11 dr12 m1 g')
# 定义位置矢量和速度矢量
R1 = sp.Matrix([r11, r12])
dR1 = sp.Matrix([dr11, dr12])
q1 = sp.Matrix([R1, a1])
dq1 = sp.Matrix([dR1, da1])
# 定义旋转矩阵 A1
A1 = sp.Matrix([
[sp.cos(a1), -sp.sin(a1)],
[sp.sin(a1), sp.cos(a1)]
])
# 计算旋转矩阵的导数
dA1 = A1.diff(a1)
# 定义位置偏移
u_p = sp.Matrix([1, 0])
# 计算新的位置矢量
r1p = R1 + A1 * u_p
# 计算新的速度矢量
dr1p = dR1 + dA1 * u_p * da1
# 计算广义力
dr1p_dq = r1p.jacobian(q1)
dr1p_ddq = dr1p.jacobian(dq1)
Q = dr1p_dq.T * sp.Matrix(F) + dr1p_ddq.T * sp.Matrix(G1)
# 打印结果
print("广义力 Q:")
sp.pprint(Q)
# 使用示例
F = [sp.symbols('f1'), sp.symbols('f2')]
G1 = sp.Matrix([0, -sp.symbols('m') * sp.symbols('g')])
generalized_force(m=1, L=1, F=F, G1=G1)