古典力学的结构和解释

题献

怀着崇高的敬意
本书献给
最小作用量原理

前言

近年来对于古典力学的兴趣有着显著的复兴. 现在我们知道古典力学的内容比我们之前所设想的还要多得多. 古典系统的行为令人惊异地丰富; 力学传统呈现的焦点, 即运动方程的推导, 只是开始而已. 古典系统呈现了一系列复杂的现象, 例如非线性共振, 混沌行为, 和混沌演变 (transition to chaos).

对于力学的传统处理集中精力于符号可解的动力学系统, 这类系统实际上相当之少. 我们则专注于建立研究系统行为的一般方法, 不论其是否具有符号解. 典型的系统呈现了定性上不同于可解系统的行为, 并且惊人地复杂. 我们聚焦于运动的现象, 并大量运用计算机模拟以探索这运动.

即便当一个系统并非符号可解时, 现代动力学工具允许我们提取出定性的理解. 我们并不专注于符号描述, 而是专注于可能轨迹之集合的几何特征. 这样的工具提供了系统地分析数值或实验数据的基础.

古典力学是欺诈性地简单. 很容易通过似是而非的推理或者在并不真正理解的情况下得出正确的答案. 传统的数学记号造成了这个问题. 符号的含义是含糊不清的, 依赖于上下文, 甚至经常在给定的上下文中发生变化. 例如, 力学的一个基础结果是Lagrange方程. 以传统记号, Lagrange方程记作ddtLq.iLqi=0.Lagrange量L必须要被解释为一个相对于位置分量qi和速度分量q.i的函数以使得偏导数具有意义, 但是如果这样的话, 为了使得时间导数d/dt具有意义, 解路径必然已经被插入到Lagrange量之中以使其成为时间的函数. 传统上使用的含糊不清的记号在简单的情况下是方便的, 但在复杂情况下它可能会成为清晰理解的严重障碍. 为了使得推理清晰且没有歧义, 我们采用了一种精确的数学记号. 我们的记号是函数式的, 并且遵循现代数学呈现的实践. 对于我们所用函数式记号的介绍可以在附录里找到.

计算也进入到力学之下的数学想法的呈现之中. 我们要求我们的数学记号足够显式且精确以使其可被自动解释, 比如说由计算机解释. 作为这种要求的后果, 出现于文本之中的公式和方程必须意义自足. 它们应该有着清晰的意义, 独立于没有被形式化的上下文. 例如, 我们以函数式记号将Lagrange方程写成以下形式:D((2L)Γ[q])(1L)Γ[q]=0.Lagrange量L是一个时间t, 坐标x, 速度v的实值函数, 其值即L(t,x,v). 偏导数被指示为函数相对于特定参数位置的导数, 2L代表Lagrange函数L相对于速度的参数位置取偏导数得到的函数. 传统的偏导数记号采用的是相对于变量的导数, 其依赖于上下文且可能导致歧义. 然后, Lagrange量的偏导数可以沿着一个路径函数q被显式求出. 取时间导数, 而后Lagrange方程就构造出来了. 每一步都是显式的, 没有隐式替换.

计算性的算法可以用来精确地交流某些用于分析动力学现象的方法. 以计算机语言表达变分力学的方法迫使其变得毫无歧义且在计算上高效. 计算要求我们精确地将力学和几何概念表达为可以计算的对象, 并允许我们显式描述操纵这些对象的算法. 而且, 一旦一个数学上的想法被形式化为一个过程, 那么其就可以作为工具使用以直接地计算结果.

学生方面的积极探索是学习经验的重要部分. 我们聚焦于理解系统的运动. 为了学习关于运动的知识, 学生必须要通过模拟和实验积极地探索系统的运动. 练习和项目是我们对于力学的呈现的不可分割的一部分.

如果数学可以足够精确以使其能被自动解释, 那么积极的探索就可以延伸到数学领域. 计算机可以解释任何表达式的要求提供了关于表达式是否被正确陈述的严格且立即的反馈. 经验表明以这种方式与计算机交互可以探知并修正诸多理解上的不足.

本书我们以Scheme表达计算方法. Scheme是一种Lisp编程语族的方言, 也在我们在MIT的导引性质的计算机科学课程中使用. Scheme已有诸多优秀的教程了, 我们在附录里提供了一个对于Scheme的简要介绍.

即便在导引性质的计算机科学课上, 我们也从未正式地教过这语言, 因为我们没有必要这样做. 我们只是使用它, 而学生可以在数天之内上手. 这是Lisp-like语言的优势所在: 这些语言只有很少的构造表达式的方式, 而几乎没有句法结构. 所有形式上的性质可在一个小时之内讲完, 就和象棋的规则一样. 很快我们就忘记了语言的句法细节 (因为的确没有), 并开始讨论真正重要的东西——搞明白我们想要计算什么.

Scheme相较于其他语言在阐述经典力学方面的优势在于, 在Scheme中对实现数学函数的过程进行操作比在其他计算机语言中更加容易和自然. 事实上, 力学中的许多定理可以直接表示为Scheme程序.

我们在本书中使用的Scheme版本是MIT/GNU Scheme, 并辅以一个名为Scmutils的大型软件库, 该库将Scheme的运算符扩展为可泛化地作用于多种数学对象, 包括符号表达式. Scmutils库还为本书中使用的数值方法提供支持, 例如求积, 微分方程组的积分以及多元最小化.

经Scmutils库增强的Scheme系统是自由软件. 我们以可在GNU/Linux操作系统上使用的形式提供该系统, 包含完整的文档和源代码, 可在互联网上通过https://groups.csail.mit.edu/mac/users/gjs/6946/installation.html获取.

本书从一个不同寻常的视角呈现经典力学. 它侧重于理解运动, 而非推导运动方程. 它将非线性动力学的最新发现贯穿于全书的论述之中, 而非将其作为补充内容附于其后. 它使用函数式数学记号, 使人们能够精确地理解经典力学的基本性质. 它利用计算来约束记号, 捕获和形式化方法, 进行模拟以及进行符号分析.

本书是在MIT教授经典力学课程的成果. 我们课程的内容起源于Wisdom关于非线性动力学和太阳系动力学的课程中的思想, 以及Abelson和Sussman在计算机科学导论课程中发展出的关于如何利用计算来构建方法论的思想. 刚开始时, 我们以为用这种方法来表述力学会很容易. 我们很快发现, 许多我们以为自己理解的东西, 实际上并没有真正理解. 我们要求数学记号足够明确和精确, 使其能够被自动解释——例如被计算机解释——这一要求在揭示推理中的歧义和缺陷方面非常有效. 由此产生的为使数学既精确又清晰且在计算上有效而进行的努力, 持续的时间远超我们的预期. 通过这一过程, 我们在力学和计算两方面都学到了很多. 我们希望其他人, 尤其是我们的竞争者, 能够采用这些方法——它们在增进理解的同时也会拖慢研究进度.

第二版

自第一版出版以来, 我们每年都在MIT使用这本教材教授经典力学. 我们对学生在学习材料时遇到的困难有了深入的了解. 我们发现其中一些解释需要改进. 本版正是我们新理解的成果.

多年来, 我们的软件支持有了大幅改善, 我们利用这一优势提供了比第一版更具一般性的代数证明. 这一优势贯穿了新版的大部分内容.

在第一章中, 我们现在更直接地进入作用量的坐标表示, 同时不削弱作用量坐标无关性的重要性. 我们还增加了一个从稳定作用量原理出发对Euler-Lagrange方程的简明推导, 作为对第一版中更形式化推导的补充.

在刚体运动一章中, 我们现在提供了角速度矢量存在性的代数推导. 我们的新推导与将刚体的广义坐标发展为从参考取向到实际取向的变换参数这一思路相协调. 我们还新增了一节关于四元数的内容, 作为在刚体运动分析中避免奇点的一种方法.

正则变换是相空间坐标的变换以及Hamilton量的相应变换, 它保持轨迹之间的一一对应关系. 我们允许含时系统和含时变换, 这使得正则变换的处理更加复杂. 关于正则变换的章节经过了大幅修订, 以澄清正则变换与辛变换之间的关系. 我们将由演化产生的正则变换 (包括Lie变换) 的讨论分离出来, 单独成章.

我们修正了全书中无数细小的错误. 我们希望没有引入比移除更多的错误.

致谢

我们要感谢许多帮助我们编写本书及其所支撑的课程的人. 我们从与我们一起学习经典力学课程的优秀学生们那里获得了大量帮助. 他们迫使我们把问题讲清楚; 他们发现了我们必须修正的软件, 表述以及思维中的错误.

Harold Abelson在学科内容的发展和呈现方面给予了我们大量的技术帮助. Abelson是Scmutils软件系统的开发者之一. 他在代码的某些部分投入了巨大的努力. 当我们拼命试图理解力学的逻辑时, 我们也向他请教. 他常常能指出一条走出思维迷宫的方向.

Matthew Halfant引领我们开始了Scmutils系统的开发. 他鼓励我们投身科学计算, 使用Scheme和函数式风格作为解释思想的积极方式, 避免C等命令式语言带来的干扰. 在20世纪80年代, 他编写了一些我们至今仍在使用的早期Scheme数值计算过程.

Dan Zuras帮助我们构想了Scmutils系统独特的组织结构. 正是由于他的洞见, 该系统围绕链式法则的泛化扩展来组织求导运算. 他还帮助完成了构建一个真正优秀的多项式最大公因式算法所需的繁重工作, 该算法基于我们从Richard Zippel那里学到的思想.

没有Chris Hanson的杰出工作, 本书以及我们实验室的大量其他工作都不可能完成. Chris开发并维护了支撑这项工作的Scheme系统. 近年来, Taylor Campbell和其他人继续了MIT/GNU Scheme的开发. 此外, Chris带领我们对Scmutils系统进行了一轮重组, 这迫使我们澄清了许多关于类型和通用 (generic) 操作的思想, 正是这些思想使我们的系统达到了如今的水平.

Guillermo Juan Rozas作为Scheme系统的联合开发者, 对Scheme编译器做出了重要贡献, 并实现了一系列其他精巧的机制, 使我们的系统足够高效以支撑我们的工作.

除了为Scmutils系统中线性方程求解的一些方法做出贡献外, Jacob Katzenelson还提供了宝贵的反馈, 改进了材料的呈现.

Julie Sussman, PPA进行了细致的阅读和严肃的批评, 迫使我们对文本的主要部分进行了重组和重写. Julie与第一版合著者Meinhard (Hardy) Mayer合作创建了索引. 她还在这些年里持续发展和维护着Gerald Jay Sussman.

Cecile Wisdom, 圣人一般的存在, 以她的信念和榜样不断提醒着什么才是真正重要的. 没有她给予Jack Wisdom的深情支持和始终如一的鼓励, 这个项目不可能完成. 他们的孩子William, Edward, Thomas, John和Elizabeth Wisdom, 每天都以他们的生命丰富着他的生活.

多年来, 许多人对我们理解动力学做出了贡献. Boris Chirikov, Michel Hénon, Peter Goldreich和Stan Peale产生了特别深远的影响. 我们也感念已故的Res Jost的影响.

还有许多人为这项工作做出了贡献, 无论是在软件开发方面还是在内容发展方面, 包括Bill Siebert, Panayotis Skordos, Kleanthes Koniaris, Kevin Lin, James McBride, Rebecca Frankel, Thomas F. Knight, Pawan Kumar, Elizabeth Bradley, Alice Seckel, Jihad Touma和Kenneth Yip. 我们从Piet Hut, Jon Doyle, David Finkelstein, Peter Fisher, Guy Lewis Steele Jr.和Robert Hermann那里获得了极为有益的反馈和讨论.

我们要感谢一代又一代选修我们课程, 完成我们习题的学生们. 他们提供了卓越的反馈和鼓励. 我们的学生Will Farr, Mark Tobenkin, Keith Winstein, Alexey Radul, Micah Brodsky, Damon Vander Lind, Peter Iannucci, William Throwe和Leo Stein尤其给予了很大帮助.

我们感谢MIT计算机科学与人工智能实验室的接纳和后勤支持. 我们感谢Panasonic公司通过冠名教席对Gerald Jay Sussman的支持. 我们感谢Breene M. Kerr通过冠名教席对Jack Wisdom的支持. 我们感谢MIT数学系和电气工程与计算机科学系为Meinhard Mayer提供的学术休假支持, 他与我们合作完成了第一版. 我们沉痛地告知, Hardy已经离开了我们. 我们深切地怀念他.

第1章 Lagrange力学

本书的主题是运动以及描述运动的数学工具.

千百年来对于行星运动的仔细观察揭示了这种运动的规律, 其允许我们精确预测诸如食 (eclipse) 与合 (conjunction) 这样的现象. 刻画并最终理解这些规律的努力导致了数学的发展, 并使得人们发现数学可以用来有效地描述物质世界的诸多方面. 数学可以用来描述自然现象的确是一个并非平凡的事实.

由杂耍者扔出的杂耍棒以相当可预测的路径移动, 并且以相当可预测的方式旋转. 实际上, 杂耍这种技巧特别依赖于这种可预测性. 同样并非平凡的是, 和用以描述行星运动相同的数学工具也可用来描述杂耍棒的运动.

古典力学描述了质点系统的运动, 而这些质点服从于描述了它们之间交互的力. 复杂的物理对象, 例如杂耍棒, 可以被建模为具有固定空间关系的大量的质点, 而这样的关系是由刚性的交互力维持的.

系统诸多可以想到 (conceivable) 的移动方式实际上都不会发生. 例如, 我们可以想象杂耍棒停在半空中或者在被抓住之前绕着杂耍者的头转十四圈, 但是这些运动都不可能发生. 我们该如何从可以想到的运动中区分出系统实际可能发生的运动呢? 或许我们发明某种数学函数, 其允许我们从所有可以想到的运动中区分出可以实现的运动.

一个系统的运动可以通过给出系统的每个部分在每个时刻的位置描述. 这样一种对于系统的运动的描述被称为配置路径(configuration path), 配置路径将配置刻画为时间的函数. 杂耍棒在空中飞过时可以旋转, 故杂耍棒的配置可由给出棒子的位置和朝向刻画. 于是, 杂耍棒的运动可由给出棒子作为时间的函数的位置和朝向刻画.

我们所寻求的可以区分路径的函数以一个配置路径作为输入, 而产生某种输出. 我们希望这种函数具有某种特征性的行为. 例如, 输出可以是个数字, 并且我们可以尝试将这样的数字安排为只在可实现的路径上为零. Newton的运动方程就具有这种形式, 因为每个时刻Newton的微分方程都必须得到满足.

然而, 存在着另一种策略, 其能提供更多的洞察和力量: 我们可以寻找一种路径区分函数, 其在可实现路径上具有最小值——在其附近的不可实现路径上该函数的值要高于可实现路径上的值. 此即变分策略: 对于每个物理系统我们都可以发明一种路径区分函数, 其区分系统的可实现运动的方式在于每个可实现路径都是函数的稳定点. 对于大量的系统, 系统的可实现运动可以用变分原理来表述.

由Newton及其同时代人所创立的力学, 通过系统中每个粒子的位置, 速度和加速度来描述系统的运动. 与力学的Newton表述不同, 力学的变分表述通过与系统整体运动相关联的总体量来描述系统的运动.

在Newton表述中, 力通常可以写成系统势能的导数. 系统的运动通过考察各个组成粒子如何响应这些力来确定. 运动方程的Newton表述本质上是一种逐粒子的描述.

在变分表述中, 运动方程用动能与势能之差来表述. 势能是表征系统中粒子排列状态的一个数; 动能是由系统中粒子的速度所决定的一个数. 势能和动能都不依赖于这些位置和速度是如何指定的. 它们的差是系统整体的特征量, 不依赖于系统描述方式的细节. 因此我们可以自由选择便于处理的方式来描述系统; 我们从Newton表述中固有的逐粒子描述中解放了出来.

变分表述相较于Newton表述有诸多优势. 描述系统状态的那些参数的运动方程, 无论如何选择这些参数, 都以相同的方式推导: 表述方法不依赖于坐标系的选择. 如果系统的粒子之间存在位置约束, Newton表述要求我们考虑维持这些约束的力, 而在变分表述中, 约束可以内置于坐标之中. 变分表述揭示了守恒定律与对称性之间的关联. 变分表述提供了一个框架, 将系统的任何特定运动置于系统所有可能运动的背景之中加以考察. 正是由于这些优势, 我们采用变分表述.

第1.1节 配置空间

让我们考虑可以被看作由组成点粒子构成的力学系统, 这些点粒子具有质量和位置, 但没有内部结构. 延展体可以被看作由大量具有特定空间关系的组成粒子构成. 延展体之所以能保持其形状, 是因为组成粒子之间存在空间约束. 指定系统中所有组成粒子的位置就指定了系统的配置. 系统各部分之间存在约束 (例如决定延展体形状的那些约束), 意味着组成粒子不能占据所有可能的位置. 系统能够取到的所有配置的集合称为系统的配置空间. 配置空间的维数是完全指定一个配置所需给出的最少参数个数. 配置空间的维数也称为系统的自由度.

对于单个无约束粒子, 需要三个参数来指定其配置; 一个点粒子具有三维的配置空间. 如果我们处理的是包含多个点粒子的系统, 配置空间就更为复杂. 如果有k个独立粒子, 我们需要3k个参数来描述可能的配置. 如果系统各部分之间存在约束, 配置就被限制在一个更低维的空间中. 例如, 一个由两个点粒子组成的系统, 约束为在三维空间中运动且两粒子间距离保持固定, 其配置空间是五维的: 用三个数可以固定一个粒子的位置, 再用另外两个数可以给出另一个粒子相对于第一个粒子的位置.

考虑一个杂耍棒. 如果我们给出组成该棒的所有原子的位置, 就指定了棒的配置. 然而, 存在更经济的配置描述方式. 在杂耍棒是真正刚性的理想化下, 棒的所有原子之间的距离保持不变. 因此我们可以通过给出单个原子的位置和棒的取向来指定棒的配置. 利用约束条件, 棒的所有其他组成部分的位置都可以由这些信息确定. 杂耍棒的配置空间维数是六: 指定空间位置所需的最少参数个数是三, 指定取向所需的最少参数个数也是三.

随着系统随时间演化, 组成粒子在约束下运动. 每个组成粒子的运动通过描述不断变化的配置来指定. 因此, 系统的运动可以描述为沿配置空间中的一条路径演化. 配置路径可以由一个函数来指定, 即配置路径函数, 它给出系统在任意时刻的配置.

第1.2节 广义坐标

为了能够讨论具体的配置, 我们需要有一组标记配置的参数. 用来指定系统配置的参数称为广义坐标. 考虑一个无约束的自由粒子. 粒子的配置通过给出其位置来指定. 这需要三个参数. 无约束粒子具有三个自由度. 指定粒子位置的一种方式是指定它相对于某组选定坐标轴的直角坐标. 位置的直角坐标分量就是无约束粒子的广义坐标. 或者考虑一个理想的平面双摆: 一个点质量通过一根刚性杆被约束在距某固定点给定距离处, 第二个质量通过另一根刚性杆被约束在距第一个质量给定距离处, 全部限制在一个竖直平面内. 如果给出两根杆的取向, 配置就被指定了. 这至少需要两个参数; 平面双摆具有两个自由度. 指定每根杆取向的一种方式是指定它与竖直铅垂线所成的角度. 这两个角度就是平面双摆的广义坐标.

坐标的数目不必与配置空间的维数相同, 但至少不能少于配置空间的维数. 我们可以选择使用比必要数目更多的参数, 但这些参数将受到约束的限制, 使系统只能取可能的配置, 即配置空间中的元素.

对于上面描述的平面双摆, 两个角坐标足以指定配置. 我们也可以取平面内每个质量相对于某组选定坐标轴的直角坐标作为广义坐标. 这些也是合适的坐标, 但我们必须明确地记住那些将可能配置限制为系统实际几何形状的约束. 与配置空间具有相同维数的坐标组更容易使用, 因为我们不必处理坐标之间的显式约束. 所以目前我们将只考虑配置坐标数目等于自由度数的表述; 以后我们将学习如何处理具有冗余坐标和显式约束的系统.

第1.3节 稳定作用量原理

第1.3.1小节 对于运动的经验

我们的日常经验表明, 物理运动可以用连续且光滑的构型路径来描述. 我们不会看到抛接的球棒从一个地方跳到另一个地方. 我们也不会看到球棒突然改变它的运动方式.

我们的日常经验表明, 物理系统的运动并不依赖于系统的全部历史. 如果我们在球棒被抛向空中之后才走进房间, 我们无法判断它何时离开了杂技师的手. 杂技师可以在不同的位置, 不同的时刻抛出球棒, 而当我们走进门时看到的结果却是一样的. 因此, 球棒的运动并不依赖于历史的细节.

我们的日常经验表明, 物理系统的运动是确定性的. 事实上, 少量参数就足以概括系统历史中的重要方面, 并决定其未来的演化. 例如, 在任意时刻, 球棒的位置, 速度, 朝向以及朝向的变化率就足以完全确定球棒未来的运动.

第1.3.2小节 可实现路径

根据我们对于运动的经验, 我们可以建立对于可实现配置路径的期望. 如果一个路径是可实现的, 那么这个可实现路径的任意分段也应该是可实现的路径分段. 反过来, 一个路径是可实现的, 如果这个路径的每个分段都是可实现的路径分段. 一个路径分段的可实现性依赖于所有路径上在这个分段之中的点. 一个路径分段的可实现性以相同的方式依赖于该路径分段的每个点; 没有路径的哪个部分是特殊的. 一个路径分段的可实现性仅依赖于分段之中的路径点; 一个路径分段的可实现性是一种局部性质.

因此, 路径区分函数汇集了沿路径片段在每一时刻测量的系统的某种局域性质. 路径上的每一时刻必须被同等对待. 来自路径片段各时刻的贡献必须以一种保持不相交子片段之间贡献独立性的方式组合起来. 满足这些要求的一种组合方法是将各贡献加在一起, 使得路径区分函数成为沿路径片段对路径的某种局域性质的积分.

因此, 我们将尝试这样来安排: 这个作为沿路径的局域性质的积分而构造的路径区分函数, 对于任何可实现的路径取驻值. 这样的路径区分函数传统上被称为系统的作用量. 我们使用作用量一词是为了与通用术语保持一致. 也许继续称其为路径区分函数会更清楚, 但那样的话别人就更难知道我们在谈论什么了.

为了推进变分力学的研究计划, 我们必须为所研究的系统发明在可实现轨迹上取驻值的作用量函数. 我们将考虑这样的作用量: 它们是构型路径在每一时刻的某种局域性质的积分.

第1.4节 计算作用量

第1.5节 Euler-Lagrange方程

第1.6节 如何寻找Lagrange量

第1.7节 动力学状态的演化

第1.8节 保守量

第1.9节 路径函数的抽象

第1.10节 受限运动

第1.11节 总结

第1.12节 项目

第2章 刚体