上一章里,我们从现实故事写出变化率方程,再用初值和方向场判断曲线往哪里走。比如,一小群细菌在营养充足的条件下繁殖,数量越多,单位时间内新增的数量通常也越多。方向场能告诉我们曲线会向上,甚至越来越陡;但如果要问“四小时以后有多少”,我们还得把那条曲线真正求出来。
这一次,我们从最容易动手的一类方程开始。它们的特点是:影响变化率的两部分可以拆开,一部分只看时间,另一部分只看当前数量。拆开以后,原来纠缠在一起的未知函数和导数,就能交给积分处理。
不过,“拆开”有一个容易被忽略的代价:除以某个含未知函数的因子时,我们也可能把一整条解曲线除没了。因此,这一章不只练积分,还要学会跟着解走到最后:它满足哪个初值,在哪个区间成立,有没有漏掉水平直线解,公式所预测的增长又能不能一直相信。

先把细菌的故事稍微细化。假设培养环境随时间改变,但在同一时刻,每个个体对净增长的平均贡献相同。把数量记为 ,把每个个体在时刻 的净增长率记为 ,那么总数量的变化率就是
右边的乘法有明确的意思:当前有多少个体,乘上每个个体在这个时刻平均贡献多少增长。 只由时间决定, 则是系统当前的状态。我们暂时不讨论具体的 ,先抓住这种“时间因子乘状态因子”的结构。
把未知函数统一记为 ,这类结构写成
只含自变量 , 只含未知函数的值 。能在所讨论的区域内整理成这种形式的一阶方程,叫作可分离变量方程。这里的“变量”指的是 和 ,不是把一个函数任意拆成两个函数。
例如, 已经把两部分摆好了:,。方程 初看是两项相加,但提取公因子后变成
仍然可以分离。判断的依据是整理后的结构,不能只看原式里有没有加号。
再看 。这里一个时间项和一个状态项直接相加,不能在一个二维开区域内写成 的乘积。若真能如此,固定两个不同的 值,右边关于 的两个表达式之比应该是与 无关的常数;但 显然会随着 改变。它不属于这一章能直接分离的类型,下一章会处理这种方程。
还要分清“可以分离”和“可以随处计算”。对于
我们可以取 、,但原方程在 处没有定义。那条直线不是一个等待我们补回的解,而是方程本来就不允许走到的地方。
如果你见过分离变量的计算,可能会觉得它像一种记号游戏:把 留在左边,把 搬到右边,然后各自积分。算起来确实可以这么写,但我们最好先弄清楚,这样做为什么有道理。
设在当前讨论的一段解曲线上,。从
出发,两边除以 ,得到
现在想一想:左边有没有可能是某个复合函数的导数?如果找一个原函数 ,让它满足
链式法则马上给出
左边那一项已经被认出来了。方程因此变成
两边对时间积分,若 ,就得到
平常所写的
正是这一串链式法则运算的简写。它之所以能用,是因为左边确实对应一个复合函数的导数,并不是因为导数在任何场合都能当普通分数任意拆装。
只有一个积分常数也有原因。假如左边积分写 ,右边写 ,移项以后只会留下 。我们把这个差重新记作 ,并没有减少任何自由度。
如果题目直接给了 ,还可以把初值装进积分的上下限:
这里特意使用 和 作为积分中的临时变量,避免把积分变量和上限混在一起。这个写法不需要另外求 ,也清楚地表示:从初始状态走到当前状态时,两边累计的变化相等。它仍然要求所走过的状态区间避开 和原方程无定义的位置。
分离变量在一段允许除法的区间内给出解的关系式。若要反过来确认答案,沿关系式对时间求导,恢复原方程,再代入初值。推导和检验走的是同一条链式法则,只是方向相反。

我们先做一道每一步都能看清的题:某个无量纲状态的变化率,等于“时间的一半”乘“当前状态”,并且起始状态为 。写成初值问题是
这里 也取无量纲变量,让我们先专注计算结构。若用它描述真实数量,系数必须带上相应的单位,后面的人口模型会专门处理这一点。
准备除以 以前,先检查 。把 代入,左右两边都为零,所以这是一条常数解。它不满足本题初值,却属于原方程的解,不能因为当前只求另一条曲线就忘记它的存在。
满足初值的解在 附近为正:这是连续性带来的局部结论。我们先在这段小区间内合法地除以 :
积分得到
将 、 代入,得到 。由于当前选择的是正值分支,
先不要把答案框起来。对它求导,有
而 也成立。这个函数在所有实数 上都存在、可导且保持正值,因此刚才在初始点附近推导出来的表达式,确实可以延伸到整个实轴。
这也解释了一个解题顺序:我们不是先凭直觉宣布“解永远不会到零”,然后据此除法;而是先在初值附近做合法计算,再用得到的表达式确认它的正值性质和延伸范围。后面讨论唯一性时,还会得到另一种判断解能否相遇的方法。
如果把初值改成任意数 ,同样的计算在 时给出
对应上半平面的曲线, 对应下半平面的曲线。分离时排除的零解,可以经过单独核实后并入 这个取值,于是同一个公式覆盖了全部初值。
这里还有一个常数处理细节。由 指数化,只能先得到 。 始终大于零;负值解要靠选择负号得到,零解要靠代回原方程补入。直接说“ 是任意实数”是不正确的。
上一题求完积分就能把 单独解出来,这种形式叫显式解。但积分有时会把我们带到一个不容易反解的关系式面前。此时不必把整道题当作“还没做完”,先看这个关系式是否已经足够确定所要的函数。
设某个状态受到输入 的推动,而状态的绝对值越大,变化越迟缓;我们用 表示这种对变化速度的抑制,得到一个用于练习的无量纲模型:
因为 始终为正,不会发生除以零。把它乘到左边,积分得
代入初值,,所以
这就是初值解的隐式表达。它描述了 和 必须共同满足的关系,但没有直接写成 。
为什么这个关系在每个 处只会选出一个 ?令 ,则
所以 严格递增: 越大,左边一定越大,不会有两个不同的 给出同一个数。又因为 向左右分别趋向正无穷和负无穷,它能取到任何实数值。无论右边 是多少,都恰好对应一个 ;并且 不为零,这个反解函数在每个有限时刻都可导。
不必写出很长的三次方程求根公式,我们已经知道解在整个实轴上成立。对隐式关系求导,
恢复原方程。把 代入,唯一对应的 是 。甚至趋势也能直接读出来: 时右边随时间增加, 随之增加; 时导数为负; 是这条曲线的最低点。
不过,“一个关系式”不一定在整体上就是“一个函数”。例如 同时包含上半圆和下半圆,对多数 有两个 值。若初值为 ,必须选正号分支;若初值为 ,必须选负号分支。初值有时不仅决定积分常数,还决定开方后的符号和所取的曲线部分。
因此,隐式解的合格标准是:在所说明的区间里,关系式能确定一条满足初值的可导函数,而且它确实满足原方程。并不是随便写出 ,就自动解决了分支和定义域的问题。
下面的工作台可以把同一个方程下的不同初值放在一起比较。先预测初值升高后曲线会怎样变化,再移动初值;观察时始终把“方程规定斜率”和“初值选出曲线”分开理解。
还记得方向场的读法吗?它在每个点给出一个斜率,但并不承诺从某个点出发的解能一直走到任意远的时间。下面这个模型把区别表现得很直接。
假设一个正的无量纲数量具有很强的自我放大效应:当前量翻倍时,增长速度变成四倍。最简单的方程是
这只是用来研究反馈行为的理想模型。对非零解分离并积分:
初值给出 ,因此
导数是 ,恰好等于 ;初值也满足。可当 从左边靠近 时,分母趋于零而保持正值,解趋向正无穷:
这种现象叫有限时间爆破。它和指数增长有本质上的时间差别:指数函数虽然越来越大,但每个有限时刻的值都仍然有限;这里却在有限的 前就失去了有限值。
从初始时刻 出发,这条初值解的最大定义区间是
所谓最大,是指在这个区间里解一直存在并满足方程,而不能再向右跨过 延伸成同一条有限值可导函数。向左没有障碍,所以区间一直延伸到负无穷。
你可能会问, 时公式不是也能算出 吗?确实可以, 在 上也满足微分方程,但那一段不包含初始点,中间还隔着爆破点。它是一条单独的解曲线,不能说正的数量穿过无穷以后“变成了负数”。对于从 开始的正量模型,向前预测的范围只有 。
把初值写成 ,非零初值的解可以统一写为
时,最大区间为 ;初值越大,向前爆破越早。 时,包含零的最大区间为 ,解可以一直向前延伸,并从负值逐渐靠近零。 则给出定义在整个实轴上的常数解。
这个例子也提醒我们,方程右端 到处有意义,并不能保证解在所有时间都存在。障碍可能来自解本身跑向无穷,而不一定是原方程中预先就有一个分母。
另看一个不同的障碍:
这里原方程要求 。乘以 后积分,得到
初值使 ,选择经过 的上半圆分支:
当 靠近 时, 趋于零,函数值并没有爆破;但原方程在 处无定义,导数 也无法保持有限,所以端点不能包含在解的区间里。
尤其不要因为乘完以后得到 ,就忘记最初的分母。变形后的表达式要受原方程定义域约束。这条半圆和前面的爆破解展示了两种不同的边界:一种是状态变得无界,一种是状态走到了方程不允许的位置。
初值解的最大定义区间,必须是包含初始时刻的一个连续区间。检查时既看最终公式,也看原方程:分母、对数、根号、分支选择以及有限时间发散,都可能限制这个区间。数学上的最大区间与现实模型采用的时间范围还要分开说明。
前面的题里,我们已经几次先检查零解。现在把这一点讲完整。若
中的某个数 满足 ,并且原方程在相关时间和状态处有定义,那么 就满足 。它叫常数解,也常叫平衡解。
“平衡”的意思是系统停在这个状态时,变化率始终为零;它不等于“只在某一瞬间斜率为零”。比如 在 时所有解的斜率都是零,可 显然不满足整个方程。一个时刻导数为零,远远不够成为一条常数解。
用一个能看清丢解位置的方程来练习:
先检查得到 。在 的区间上,再做分离积分:
因此非零解具有形式
并且只在分母不为零的连续区间上考虑。无论 取哪个有限实数,这个公式都不可能恒等于零。零解并没有失效,只是它从“除以 ”那一步起就不在计算范围内,必须另外列出。
若配上初值 ,则 ,得到
对它求导,有 ;而 也等于这个值。分母始终为正,所以该初值解在整个实轴上成立。若配上 ,则得到 ,最大区间改为 。找回常数解和检查定义域,是两件都必须做的事。
我们在这里统一称这些水平直线为“常数解”或“平衡解”,不把它们一概叫作“奇异解”。尤其是“能否由一个含常数的公式表示”,还与公式的写法有关: 的零解能并入 的 ,而刚才的倒数形式不能直接表示零解。名称不能代替逐条代回原方程的检查。
对这一章主要使用的光滑方程,常数解与非平衡解不会在有限时刻相遇后分岔。但这件事需要方程的条件支持,不能仅凭“已经分离过变量”就断言。
来看一个提醒边界的例子:
零解当然成立。在正值区间分离,可以得到 。这里右边必须非负,因此正值分支为 、,不能不管符号就把这条抛物线扩展到 。
对任意 ,我们可以构造
在接点两侧,函数值都趋于零,导数也都趋于零,所以它在 处可导,并且导数等于方程右边的 。其他位置也可以直接验算,因此它确实是初值问题的解:先保持为零,等到 时刻再离开。
这个例子不要求你现在学会一套新的理论,只需要记住分离方法的适用范围:它负责求出 区域内的解段;至于这些解段能否接到平衡解上,需要再检查。后面讨论存在唯一性时,我们会解释为什么平方根在零点附近会允许这种现象,而前面的多项式例子不会。
下面的检查器用于提醒除法之前要先寻找水平解。它展示的非平衡曲线仍然需要结合具体方程的定义域理解,不能把一个图中的不相交现象推广到所有方程。

现在回到开头的培养皿。我们作一个清楚的近似:在所研究的时间段内,营养条件基本不变,不考虑容量限制,没有外部迁入迁出,并把数量足够大的群体视为连续量。再假设每个个体的平均净增长贡献保持不变,记为 。
这句话转成数学,就是
的单位是“个体数每小时”,若 用小时, 的单位就必须是“每小时”。 描述每单位数量的瞬时增长强度,而不是每小时固定多出多少个体。
使用带初值的积分写法,
所以
对数里写成 很自然:这个比值没有单位,可以放进对数;指数中的 也没有单位。模型、计算和单位检查在这里正好对得上。
为什么这条曲线越来越陡?因为数量增加以后,产生增长的个体更多,下一小段时间内新增数量也随之增加。更精确地说,在任意起点 ,经过同样长的时间 ,都有
指数模型保持的是同样时间内的倍数,不是同样时间内增加的绝对数量。若每两小时翻倍,从 增到 用两小时,从 增到 也用两小时,后一次增加的数量却是前一次的两倍。
假设一组用于建模练习的数据给出:开始时有 个单位的细菌数量, 小时后变为 。这些数值是设定条件,并不代表某次实际实验。按指数模型,
于是 ,数量函数是
到第 小时,
出现小数不意味着真实世界存在半个细菌。它说明这个模型把大群体数量连续化了,输出的是近似数量尺度;若要逐个计数,就需要另一种描述方式。
再求翻倍时间 。由 得到
翻倍时间不依赖从 开始还是从 开始,因为它由固定倍数条件确定。也别把 读成“每小时恰好增加 ”;一小时的实际增长比例为 。瞬时相对增长率与一个完整时间段里的增长比例有关,但不是同一个数。
如果观测从 才开始,公式也不用重做。积分上下限改成 和 ,得到
指数里出现的是“已经经过多长时间”,而不是日历上任意选定的时刻编号。比如把早上八点标成 ,初始量又是在八点测得,代入时就必须使用 ;把八点重新设为时间零点后,才恢复熟悉的 。
我们还可以通过一列等时间间隔的数据检查这个模型。如果相邻两次测量的比值大致相同,那么固定比例增长是一个可以考虑的近似;如果比值持续下降,说明每单位数量的增长强度可能也在下降。等价地,把观测量取对数后, 应当大致沿直线变化。这个判断只是在检查假设是否与数据相容,并不意味着一条看起来接近直线的图像就证明了所有建模假设。
数学上, 对所有有限 都有定义。现实里,我们只在建模假设仍然合理的时间段使用它。资源消耗到一定程度后,“每个个体一直贡献同样增长”的假设就会失效。后面的种群模型会把这种限制写进方程,让增长速度随着资源压力改变。
把培养皿换成一种持续分解的物质。假设没有补充,每单位剩余量在单位时间内的平均损失比例保持相同,那么剩得越多,单位时间损失的绝对数量越多;剩得越少,损失也越慢。
若 表示剩余质量,用 表示衰减常数,模型是
负号表示质量减少。分离后,
从而
解始终为正,随着时间增加逐渐接近零,但在任何有限时刻都没有真正等于零。这同样是连续模型的结论;它不负责描述只剩最后几个粒子时逐个发生的随机事件。
我们通常不靠衰减常数的小数来建立直觉,而是问“多久剩一半”。设这个时间为 ,那么
由于 ,约去初始量并取对数,得到
初始量被约掉,正是半衰期与“开始有多少”无关的原因。更一般地,:每经过一个半衰期,都把当时剩下的量再减半。它不是“每过这么久都减掉初始量的一半”,否则两个半衰期后就会变成零,那对应的是另一种变化规则。
设某种理想化衰减物质的半衰期为 天,开始有 克。时间用天计,则
天后经过了 个半衰期,所以
半衰期的公式可以用于非整数倍的时间,不必把 天舍入成 天或 天。
反过来,如果问“什么时候剩下 克”,就把目标量代回:
取对数后,
做一个量级检查: 天后剩 克, 天后剩 克, 克应当出现在二者之间,计算结果符合这个范围。
如果一开始给的不是半衰期,而是两个时刻的观测量 、,其中 且 ,先消去未知初始量:
再由 得到半衰期。这样既能从“规律参数”预测数量,也能从“数量变化”估计参数。但只靠两个点总能拟合出一个指数率,是否适合整个过程,还要看更多时刻的变化能否支持恒定比例的假设。
下面的实验里,可以把初始量和比例参数分开调整。初始量改变时,整条曲线的高度改变;衰减常数改变时,减半所需的时间改变。先试着解释这两个操作的差别,再观察图像。
判断 、、 是否可以直接分离。对可分离的方程写出两个因子,并说明有没有常数解、哪些状态不允许取。
求解 、,写出最大定义区间,并检查你的表达式是否漏掉了原方程的常数解。
求初值问题 、 的隐式解,并解释它为何在每个实数 处都确定唯一的 。
求 、 的解及最大定义区间。解释为什么不能把分母不为零的所有 一起写成这条初值解的定义域。
方程 有哪些常数解?求满足 的解,并说明它在 时是否会达到 。
一个无补充的理想衰减过程满足 。某次观测为 克, 小时后为 克。以第一次观测为 ,求 、半衰期以及何时降到 克。
做完这些题,再回头看分离变量,会发现核心操作始终只有一件事:认出一个关于未知函数的复合导数,让两边都能积分。我们之所以花时间检查常数解、初值和区间,是为了让积分给出的表达式确实代表要找的那条曲线。
接下来,把衰减故事再改一点:容器里的物质一边按当前量的比例减少,一边由外界以随时间变化的速率补入。如果输入速率是 ,方程就成为 。右边的输入和损失一般无法分成时间因子与状态因子的乘积。下一章我们要寻找另一条通往积分的路:给方程乘上一个合适的函数,把左边凑成两个函数乘积的导数。
第二式不能在二维开区域内直接写成两个独立因子的乘积,按本章方法无法直接分离。它也没有常数解:若 ,就要求 在整个时间区间恒等于零,不可能成立。
第三式有 、,可分离,但必须要求 。 使原方程无定义,不能当成常数解补回;而 在定义域内没有零点,因此没有常数解。
由初值知 。因为所选分支为负,
求导得 ,初值也成立。指数函数在每个有限实数处都有定义,因此最大区间为 。零解应在列原方程全部解时补入,可并入解族 的 。
左边作为 的函数,导数是 ,严格递增且值域为整个实轴,因此每一个右边值都对应唯一的 ,而且对应函数可导。对关系式求导得 ,恢复原方程。这条初值解在整个实轴上成立。
代入初值得 ,因此
分母的零点满足 ,即 。初始时刻零在这两个根之间,所以最大定义区间为
直接求导得到 。区间两端分母趋于零,不能作为有限值解跨过去。两个根外侧的公式片段不包含初始时刻,不属于这条初值解的延伸。
所以
由初值得 ,在当前区间内比值为正,解出
分母始终为正,公式对所有实数成立,并且 。它在 时上升,只在 的极限中趋于 ,任何有限时刻都达不到 。若记 ,则 ,而 也等于这个表达式,完成代回检查。
因此
半衰期为
克是初始量的四分之一,需要两个半衰期,故
也可以直接令 ,取对数得到同一个结果。模型用于观测以后的预测时取 ;指数公式作为微分方程的数学解,则可定义在整个实轴上。