的粒子的动能为 (1/2) m v2,其中 v 是
的大小。在这种情况下,我们可以选择广义坐标为通常的直角坐标。
遵循欧拉和拉格朗日,自由粒子的拉格朗日量为26



接受一个坐标路径,并返回一个时间的函数,该函数给出局部元组( t, q(t), Dq(t), ... )。我们通过过程 Gamma 来实现这个
。以下是 Gamma 的功能:
(print-expression ((Gamma q) 't))
是一个时间的函数,它返回该路径上该点的拉格朗日量的值:32
(print-expression 
根据方程 (1.11),我们可以计算从时间 t1 到时间 t2 的拉格朗日作用量: (define (Lagrangian-action L q t1 t2)
( 4t + 7, 3t + 5, 2t + 1 ) 匀速运动。36 我们将路径表示为一个过程
(define (test-path t)练习 1.4 拉格朗日作用量 对于自由粒子,一个合适的拉格朗日量为38


是一条邻近路径,由 q 加上一个路径变分
乘以实参数
得到。39 变分路径上的作用量为 S[q +
](t1, t2)。欧拉和拉格朗日发现,对于任何在端点处为零的
和任何非零小量
,有 S[q +
](t1, t2) > S[q](t1, t2)。
让我们通过数值计算来验证这一点:对测试路径进行变分,添加一定量的在端点 t = t1 和 t = t2 处为零的测试函数。为了构造一个在端点处为零的函数
,给定一个足够良态的函数
,我们可以使用
(t) = (t - t1)(t - t2)
(t)。这可以实现为:
(define ((make-eta nu t1 t2) t)
的函数:40
(define ((varied-free-particle-action mass q nu t1 t2) epsilon)
(t) = ( sin t, cos t, t2 ) 且
= 0.001,正如预期的那样,大于测试路径上的作用量:
((varied-free-particle-action 3.0 test-path
的值。我们在例如 -2 到 1 之间搜索:41
(minimize
的最佳值为零,42 并且作用量的最小值就是沿直线路径的作用量。

/2) = 0 的近似路径,如下所示:47
(define q (find-path (L-harmonic 1.0 1.0) 0. 1. :pi/2 0. 3))
由初始条件决定。对于所选的端点条件,解为 q(t) = cos(t)。近似路径应在 0 到
/2 范围内逼近余弦函数。图 1.1 显示了该过程中多项式逼近的误差。使用三个中间点时的最大误差小于 1.7 x 10^-4。正如预期,随着中间点数量的增加,逼近误差减小。对于四个中间点,误差大约改善了 15 倍。

练习 1.5 求解过程 我们可以通过修改过程 parametric-path-action,使其在每次计算作用量时绘制路径,来观察最小化过程的进展。请尝试如下操作: (define win2 (frame 0. :pi/2 0. 1.2))
练习 1.6 最小化作用量 假设我们试图通过为一个不可能的问题最小化作用量来获得一条路径。例如,假设我们有一个自由粒子,我们对其施加与粒子自由运动不一致的端点速度条件和位置条件。形式体系是否能抵御这种不恰当的攻击?你可能会发现通过编写程序并观察结果会很有启发。

27 拉格朗日量形式上是局部元组的函数,但任何特定的拉格朗日量只依赖于局部元组的一个有限初始段。我们通过显式声明函数所依赖的局部元组初始段中的元素名称来定义局部元组的函数。 28 我们将局部元组表示为一个复合数据结构,其分量包括时间、广义坐标、广义速度以及可能的高阶导数。我们不想被这些结构中分量的打包和解包细节所困扰,因此我们提供了相关的实用工具。构造函数 ->local 接受时间、坐标和速度,并返回表示局部元组的数据结构。选择器 time、coordinate 和 velocity 从局部结构中提取相应的部分。过程 time 与过程 (component 0) 相同,类似地,coordinate 相当于 (component 1),velocity 相当于 (component 2)。 29 注意。q 定义中的 x 与上面自由粒子拉格朗日量定义中用作形式参数的 x 不同。字母表中只有那么多字母,因此我们不得不重复使用它们。我们将注意在何处赋予符号新的含义。 30 坐标或速度分量的元组通过过程 up 构造。元组 q 的分量 i 为 (ref q i)。所有索引从零开始。单词 up 是为了提醒我们,在数学记法中这些分量由上标索引。还有通过下标索引的 down 分量元组。参见关于记法的附录。 31 函数的导数产生函数。例如,((D cube) 2) => 12 和 ((D cube) 'a) => (* 3 (expt a 2))。 32 在我们的系统中,算术运算符对符号表达式和数值都是通用的;算术过程可以统一地处理数字或表达式。例如,给定过程 (define (cube x) (* x x x)),我们可以得到它对数值 (cube 2) => 8 或文字符号 (cube 'a) => (* a a a) 的值。 33 该显示结果由 TEX 生成。 34 对于非常复杂的表达式,Scheme 的前缀记法通常更好,但化简几乎总是有用的。我们可以将化简和中缀显示的功能分开。我们将在后面看到这样的例子。 35 Scmutils 包含多种数值积分过程。本节中的示例是通过有理函数外推欧拉-麦克劳林公式计算的,相对误差容限为 10^-10。 36 对于实际的物理情况,我们需要为这些量指定单位,但在此示例中我们不做指定。 37 这里我们使用带小数点的数字来指定参数。这迫使表示形式为浮点数,这对于数值计算是高效的。如果要进行符号代数计算,数字必须为精确整数或有理分数,以便表达式能够可靠地化简为最简形式。这种数字的指定不带小数点。 38 速度的平方大小是
·
,即速度与自身的矢量点积。分量结构的平方定义为各分量平方之和,因此我们直接写为 v2 = v · v。
39 注意,我们是在对函数进行算术运算。我们扩展了算术运算,使得两个相同类型(相同定义域和值域)的函数的组合成为相同定义域上的函数,该函数将自变量函数的值域中的值组合起来。例如,如果 f 和 g 是 t 的函数,那么 fg 就是函数 t
f(t)g(t)。函数的常数倍是这样一个函数,其值为常数乘以函数对每个自变量的值:cf 是函数 t
c f(t)。
40 注意,我们正在对过程进行加法运算。与我们将算术运算扩展到函数类似,算术运算也被扩展到兼容的过程。
41 minimize 的参数包括:一个实现所讨论的单变量函数的过程,以及待搜索区域的下界和上界。Scmutils 包含多种数值最小化方法;这里使用的是 Brent 算法,误差容限为 10^-5。minimize 返回一个包含三个数字的列表:第一个是取得最小值时的自变量,第二个是得到的最小值,第三个是获得该最小值所需的最小化算法迭代次数。
42 是的,-1.5987211554602254e-14 在最小化器要求的容限下即为零。而 435.0000000000237 也可以认为就是之前得到的 435。
43 有很多好的方法可以构造这样一组参数化的逼近轨迹。可以使用样条或高阶插值多项式;可以使用切比雪夫多项式;也可以使用傅里叶分量。选择取决于想要逼近的轨迹类型。
44 以下是实现 make-path 的一种方法:
(define (make-path t0 q0 t1 q1 qs)