近年来对于古典力学的兴趣有着显著的复兴. 现在我们知道古典力学的内容比我们之前所设想的还要多得多. 古典系统的行为令人惊异地丰富; 力学传统呈现的焦点, 即运动方程的推导, 只是开始而已. 古典系统呈现了一系列复杂的现象, 例如非线性共振, 混沌行为, 和混沌演变 (transition to chaos).
对于力学的传统处理集中精力于符号可解的动力学系统, 这类系统实际上相当之少. 我们则专注于建立研究系统行为的一般方法, 不论其是否具有符号解. 典型的系统呈现了定性上不同于可解系统的行为, 并且惊人地复杂. 我们聚焦于运动的现象, 并大量运用计算机模拟以探索这运动.
即便当一个系统并非符号可解时, 现代动力学工具允许我们提取出定性的理解. 我们并不专注于符号描述, 而是专注于可能轨迹之集合的几何特征. 这样的工具提供了系统地分析数值或实验数据的基础.
古典力学是欺诈性地简单. 很容易通过似是而非的推理或者在并不真正理解的情况下得出正确的答案. 传统的数学记号造成了这个问题. 符号的含义是含糊不清的, 依赖于上下文, 甚至经常在给定的上下文中发生变化. 例如, 力学的一个基础结果是Lagrange方程. 以传统记号, Lagrange方程记作Lagrange量必须要被解释为一个相对于位置分量和速度分量的函数以使得偏导数具有意义, 但是如果这样的话, 为了使得时间导数具有意义, 解路径必然已经被插入到Lagrange量之中以使其成为时间的函数. 传统上使用的含糊不清的记号在简单的情况下是方便的, 但在复杂情况下它可能会成为清晰理解的严重障碍. 为了使得推理清晰且没有歧义, 我们采用了一种精确的数学记号. 我们的记号是函数式的, 并且遵循现代数学呈现的实践. 对于我们所用函数式记号的介绍可以在附录里找到.
计算也进入到力学之下的数学想法的呈现之中. 我们要求我们的数学记号足够显式且精确以使其可被自动解释, 比如说由计算机解释. 作为这种要求的后果, 出现于文本之中的公式和方程必须意义自足. 它们应该有着清晰的意义, 独立于没有被形式化的上下文. 例如, 我们以函数式记号将Lagrange方程写成以下形式:Lagrange量是一个时间, 坐标, 速度的实值函数, 其值即. 偏导数被指示为函数相对于特定参数位置的导数, 代表Lagrange函数相对于速度的参数位置取偏导数得到的函数. 传统的偏导数记号采用的是相对于变量
的导数, 其依赖于上下文且可能导致歧义. 然后, Lagrange量的偏导数可以沿着一个路径函数被显式求出. 取时间导数, 而后Lagrange方程就构造出来了. 每一步都是显式的, 没有隐式替换.
计算性的算法可以用来精确地交流某些用于分析动力学现象的方法. 以计算机语言表达变分力学的方法迫使其变得毫无歧义且在计算上高效. 计算要求我们精确地将力学和几何概念表达为可以计算的对象, 并允许我们显式描述操纵这些对象的算法. 而且, 一旦一个数学上的想法被形式化为一个过程, 那么其就可以作为工具使用以直接地计算结果.
学生方面的积极探索是学习经验的重要部分. 我们聚焦于理解系统的运动. 为了学习关于运动的知识, 学生必须要通过模拟和实验积极地探索系统的运动. 练习和项目是我们对于力学的呈现的不可分割的一部分.
如果数学可以足够精确以使其能被自动解释, 那么积极的探索就可以延伸到数学领域. 计算机可以解释任何表达式的要求提供了关于表达式是否被正确陈述的严格且立即的反馈. 经验表明以这种方式与计算机交互可以探知并修正诸多理解上的不足.
本书我们以Scheme表达计算方法. Scheme是一种Lisp编程语族的方言, 也在我们在MIT的导引性质的计算机科学课程中使用. Scheme已有诸多优秀的教程了, 我们在附录里提供了一个对于Scheme的简要介绍.
即便在导引性质的计算机科学课上, 我们也从未正式地教过这语言, 因为我们没有必要这样做. 我们只是使用它, 而学生可以在数天之内上手. 这是Lisp-like语言的优势所在: 这些语言只有很少的构造表达式的方式, 而几乎没有句法结构. 所有形式上的性质可在一个小时之内讲完, 就和象棋的规则一样. 很快我们就忘记了语言的句法细节 (因为的确没有), 并开始讨论真正重要的东西——搞明白我们想要计算什么.
本书的主题是运动以及描述运动的数学工具.
千百年来对于行星运动的仔细观察揭示了这种运动的规律, 其允许我们精确预测诸如食 (eclipse) 与合 (conjunction) 这样的现象. 刻画并最终理解这些规律的努力导致了数学的发展, 并使得人们发现数学可以用来有效地描述物质世界的诸多方面. 数学可以用来描述自然现象的确是一个并非平凡的事实.
由杂耍者扔出的杂耍棒以相当可预测的路径移动, 并且以相当可预测的方式旋转. 实际上, 杂耍这种技巧特别依赖于这种可预测性. 同样并非平凡的是, 和用以描述行星运动相同的数学工具也可用来描述杂耍棒的运动.
古典力学描述了质点系统的运动, 而这些质点服从于描述了它们之间交互的力. 复杂的物理对象, 例如杂耍棒, 可以被建模为具有固定空间关系的大量的质点, 而这样的关系是由刚性的交互力维持的.
系统诸多可以想到 (conceivable) 的移动方式实际上都不会发生. 例如, 我们可以想象杂耍棒停在半空中或者在被抓住之前绕着杂耍者的头转十四圈, 但是这些运动都不可能发生. 我们该如何从可以想到的运动中区分出系统实际可能发生的运动呢? 或许我们发明某种数学函数, 其允许我们从所有可以想到的运动中区分出可以实现的运动.
一个系统的运动可以通过给出系统的每个部分在每个时刻的位置描述. 这样一种对于系统的运动的描述被称为配置路径(configuration path), 配置路径将配置刻画为时间的函数. 杂耍棒在空中飞过时可以旋转, 故杂耍棒的配置可由给出棒子的位置和朝向刻画. 于是, 杂耍棒的运动可由给出棒子作为时间的函数的位置和朝向刻画.
我们所寻求的可以区分路径的函数以一个配置路径作为输入, 而产生某种输出. 我们希望这种函数具有某种特征性的行为. 例如, 输出可以是个数字, 并且我们可以尝试将这样的数字安排为只在可实现的路径上为零. Newton的运动方程就具有这种形式, 因为每个时刻Newton的微分方程都必须得到满足.
然而, 存在着另一种策略, 其能提供更多的洞察和力量: