1.9 路径函数的抽象化

从坐标变换 F 推导局部元组变换函数 C 的关键步骤是推导两个坐标系中速度之间的关系。我们通过将坐标路径代入坐标变换函数 F,求导,然后将路径上的结果推广到某一时刻的任意速度来完成这一步骤。最后一步是将路径函数抽象为局部元组函数这一更一般问题的一个例子。给定一个局部元组的函数 f,对应的路径依赖函数 [q] 定义为 [q] = f o [q]。给定 ,我们如何重构 f?局部元组函数 f 仅依赖于局部元组的有限个分量,而 仅依赖于路径的相应局部分量。因此, 对于所有具有相同数目局部元组分量的路径取相同的值。给定 ,我们可以通过取 f 的参数(即局部元组的有限初始段),构造一条具有该局部描述的路径,并求出 对该路径的值,从而重构 f

具有相同的直到 nth 阶导数的局部描述的两条路径称为具有 n 阶密切接触。例如,一条路径与该路径的截断至 n 阶的幂级数表示具有 n 阶接触;如果局部元组函数所需的导数少于 n 个,则该路径与截断幂级数表示是等价的。令 O 为生成具有给定局部元组分量的密切路径的函数。因此 O(t, q, v, ...)(t) = qD(O(t, q, v, ...))(t) = v,并且一般地,

局部元组所需的分量数目是有限的但未指定。构造 O 的一种方法是通过截断幂级数

其中项数与所指定的局部元组分量数目相同。

给定路径函数 ,我们如下重构 f 函数。我们取 f 的参数并构造一条具有该局部描述的密切路径。那么 f 的值就是 对该密切路径的值:

为将路径函数转换为相应局部元组函数的函数:

从方程(1.165)我们看到

过程 Gamma-bar 实现了将路径依赖函数重构为局部元组函数的函数

(define ((Gamma-bar f-bar) local)
  ((f-bar (osculating-path local)) (time local)))

过程 osculating-path 接收若干局部分量并返回一条具有这些分量的路径;它通过幂级数实现。

我们可以使用 Gamma-bar 来构造过程 F->C,该过程接收坐标变换 F 并生成变换局部元组的过程。过程 F->C 构造一个路径依赖过程 f-bar,它接收带撇坐标系中的坐标路径并返回无撇坐标系中对应路径的局部元组。然后使用 Gamma-barf-bar 抽象为带撇坐标系中的任意局部元组。

(define (F->C F)
  (define (f-bar q-prime)
    (define q
      (compose F (Gamma q-prime)))
    (Gamma q))
  (Gamma-bar f-bar))
(show-expression 
  ((F->C p->r)
   (->local 't (up 'r 'theta) (up 'rdot 'thetadot))))



注意在 F->C 的这个定义中,我们没有显式计算任何导数。之前导致状态变换(1.74)的计算不再需要。

我们还可以使用 来为计算函数 F 的全时间导数 Dt F 提供一个优雅的公式:

全时间导数可以表示为一个程序:

(define (Dt F)
  (define (G-bar q)
    (D (compose F (Gamma q))))
  (Gamma-bar G-bar))

给定一个实现局部元组函数的过程 F 和一条路径 q,我们构造一个新的过程 (compose F (Gamma q))。过程 G-bar 实现这个时间函数的导数。然后我们通过 Gamma-bar 将其从路径上抽象出来,得到全时间导数。

练习1.31. 速度变换 使用过程 Gamma-bar 构造一个在给定坐标变换下变换速度的过程。将此过程应用于过程 p->r 以(再次)推导方程(1.65)。

练习1.32. 路径函数与状态函数 局部元组函数 f 与局部元组函数 () 相同,其中 [q] = f o [q]。另一方面,路径函数 [q] 与路径函数 () o [q] 不一定相同。请解释。给出它们相同和不同的例子。编写程序说明其行为。

某一时刻的拉格朗日方程

给定一个拉格朗日量,拉格朗日方程检验路径以确定它们是否为该系统的可实现路径。拉格朗日方程联系了路径及其导数。拉格朗日方程必须在每一时刻都得到满足这一事实表明,我们可以将拉格朗日方程从路径上抽象出来,将其写为可实现路径的局部元组分量之间的关系。

[L] 为产生拉格朗日量 L 的拉格朗日方程(1.18)的残差的路径依赖函数:

可实现路径 q 满足拉格朗日方程

路径依赖的拉格朗日方程可以使用 转换为局部拉格朗日方程:

算符 E 称为欧拉-拉格朗日算符。用这个算符表示,拉格朗日方程为

应用 的定义(1.167)得到

因此欧拉-拉格朗日算符显式为

过程 Euler-Lagrange-operator 实现 E

(define (Euler-Lagrange-operator L)
  (- (Dt ((partial 2) L)) ((partial 1) L))) .

例如,应用于谐振子的拉格朗日量,我们得到

(print-expression
 ((Euler-Lagrange-operator 
   (L-harmonic 'm 'k))
  (->local 't 'x 'v 'a)))
(+ (* a m) (* k x))

注意局部元组的分量是分别指定的。使用方程(1.172),谐振子的拉格朗日方程为87

(print-expression
 ((compose 
   (Euler-Lagrange-operator (L-harmonic 'm 'k))
   (Gamma (literal-function 'x) 4))
  't))
(+ (* k (x t)) (* m (((expt D 2) x) t)))

练习1.33. E 的性质 令 FG 为两个类拉格朗日量的局部元组函数,C 为局部元组变换函数,c 为常数。证明以下性质:

a. E[F + G] = E[F] + E[G]

b. E[c F] = c E[F]

c. E[F G] = E[F] G + F E[G] + (Dt F) 2 G + 2 F (Dt G)

d. E[F o C] = Dt (DF o C) 2 C + DF o C E[C]


87 注意 Gamma 通常比平时多一个参数。这个参数给出了所需的局部元组初始段的长度。默认长度为3,给出包含速度在内的局部元组分量。