5.2 拉格朗日方程与哈密顿原理


5.2 拉格朗日方程与哈密顿原理

本节摘要:把系统的动能减势能写成一个标量——拉格朗日量,再套一条偏导模板,每个自由度自动产出一条运动方程。本节用单摆与作用量驻值两台手术演示这条流水线,并用数值演算验证:真实运动确实是作用量取驻值的那一条。

能量当原料,模板出方程

上一节备好了广义坐标,本节把它推上动力学。做法出人意料地省事:不再逐根标力,只写两个标量——动能与势能,相减得拉格朗日量;然后对每个广义坐标套同一张偏导模板,时间求导一项、减去坐标偏导一项,运动方程就自动成形。受力分析里最容易出错的两件事——约束反力的方向与投影的角度——在这里根本不出现,因为标量没有方向。约束越多、几何越拧巴的病例,这套语言的省力越明显。

这张模板不是拼凑出来的。哈密顿原理给它打了地基:真实运动是让作用量(拉格朗日量对时间的积分)取驻值的那条路径。换句话说,力学规律从"牛顿规定的三条定律"变成"大自然在所有可能轨迹里选出的那条驻值曲线"。本节先流水线演示,再用数值把"驻值"这两个字算给你看。

手术一:单摆的拉格朗日流水线

选摆角为广义坐标(定长杆把两个坐标吃剩一个),摆锤速度是摆长乘角速度,动能写成角速度平方的份额;以悬点为零势面,势能是质量乘重力加速度乘摆长乘一减余弦。两项相减套模板:对角速度偏导再对时间求导,减去对角度的偏导,方程一步到位。

# 手术一:单摆方程的数值验证。拉格朗日流水线给出 theta'' = -(g/l)*sin(theta) import math g, l = 9.8, 1.0 def simulate(theta0, dt=0.001, T=10.0): th, w = theta0, 0.0 # 角度与角速度,从静止释放 n = int(T / dt) for _ in range(n): a = -(g / l) * math.sin(th) # 拉格朗日方程的右端 # 四阶龙格-库塔推进 k1a, k1w = a, w k2a, k2w = -(g/l)*math.sin(th+dt/2*k1w), w+dt/2*k1a k3a, k3w = -(g/l)*math.sin(th+dt/2*k2w), w+dt/2*k2a k4a, k4w = -(g/l)*math.sin(th+dt*k3w), w+dt*k3a th += dt/6*(k1w+2*k2w+2*k3w+k4w) w += dt/6*(k1a+2*k2a+2*k3a+k4a) return th, w # 测大摆角周期:T = 4*sqrt(l/g)*K(k),k 为 sin(初始角/2),K 是完全椭圆积分 def period(theta0): k = math.sin(theta0 / 2) n = 20000 s = 0.0 for i in range(n): phi = math.pi / 2 * (i + 0.5) / n s += 1.0 / math.sqrt(1 - k * k * math.sin(phi) ** 2) K = math.pi / 2 * s / n return 4 * math.sqrt(l / g) * K for th0 in (0.1, 1.0472, 1.5708): Tp = period(th0) Tsmall = 2 * math.pi * math.sqrt(l / g) print(f"初始角 {th0:6.4f} rad 精确周期 {Tp:.4f} s 小角公式 {Tsmall:.4f} s") # 初始角 0.1000 rad 精确周期 2.0083 s 小角公式 2.0071 s # 初始角 1.0472 rad 精确周期 2.1540 s 小角公式 2.0071 s # 初始角 1.5708 rad 精确周期 2.3691 s 小角公式 2.0071 s

流水线写出的方程直接进了仿真。数值表顺带给出一个经典结论:摆角到六十度,周期已比小角公式长百分之七;九十度长近两成——小角近似不是"差不多对",它的误差随摆角平方增长,拉格朗日方程给出的才是全角精确版。### 手术二:作用量驻值的数值演示

哈密顿原理说真实轨迹让作用量取驻值。找一台能算的病例:竖直上抛一小球。真实轨迹是抛物线,另造一族"同样从起点到终点"的弯曲轨迹(往抛物线上叠一个正弦鼓包),逐条算作用量。真实的与邻近的差别应远小于弯曲带来的变化——驻值不一定是极小,但一定是"一阶不动"。

# 手术二:上抛小球的作用量对比。L = 0.5*m*v^2 - m*g*y import math m, g, T = 1.0, 9.8, 2.0 y0, y1 = 0.0, 0.0 # 起点、终点同一高度(恰好落回) def action(amp, n=1000): # y(t) = 真实抛物线 + amp*sin(pi*t/T)(端点不动) s, dt = 0.0, T / n for i in range(n): t = (i + 0.5) * dt y = 0.5 * g * t * (T - t) + amp * math.sin(math.pi * t / T) vy = 0.5 * g * (T - 2 * t) + amp * (math.pi / T) * math.cos(math.pi * t / T) L = 0.5 * m * vy * vy - m * g * y s += L * dt return s for amp in (-0.3, -0.1, 0.0, 0.1, 0.3): print(f"鼓包幅度 {amp:+5.2f} m 作用量 = {action(amp):10.4f} J·s") # 鼓包幅度 -0.30 m 作用量 = -31.9024 J·s # 鼓包幅度 -0.10 m 作用量 = -32.0011 J·s # 鼓包幅度 0.00 m 作用量 = -32.0134 J·s # 鼓包幅度 +0.10 m 作用量 = -32.0011 J·s # 鼓包幅度 +0.30 m 作用量 = -31.9024 J·s

看零幅度那一行两侧:鼓包零点一米时作用量只挪动约千分之四,而鼓包本身让轨迹中点抬高近三成——一阶变化为零,这正是"驻值"的含义。数字还透露更细的结构:作用量的挪动与鼓包幅度平方成正比,幅度三倍、挪动九倍;在此例里真实轨迹恰是极小,但哈密顿原理只承诺驻值,别把"最小作用量"当成字面真理。

图5-2 拉格朗日流水线与守恒量出口

图5-2 拉格朗日流水线与守恒量出口

⚠️ 常见坑:动能写漏广义坐标的交叉项。多自由度系统里动能对广义速度是二次型,摆与摆之间耦合一处写漏,方程立刻少一条耦合项——这是拉格朗日方法唯一比受力分析更容易出错的地方。

要点复盘:

  • 两个标量进,一组方程出:动能减势能成拉格朗日量,偏导模板逐自由度产出运动方程;
  • 标量没有方向:约束反力与投影角度在流水线里全程不出现,复杂几何不再消耗错误额度;
  • 小角公式有适用边界:六十度摆角周期已长百分之七,全角方程才是精确版;
  • 驻值是一阶不动:作用量在真实轨迹附近的变化是高阶小量,数值演示里万分之一量级的差别就是证据。

模板会出方程,也会送礼物:某坐标若在拉格朗日量里缺席,对应的广义动量自动守恒。下一节把这份规律升级成诺特定理——对称性与守恒律的一一对应。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U