try ai
科普
编辑
分享
反馈
  • 试位法

试位法

SciencePedia玻尔百科
要点总结
  • 试位法是一种求根算法,它通过使用割线对根的位置进行有根据的加权猜测,从而改进了二分法。
  • 其主要弱点是,当应用于高度凸或凹的函数时,收敛速度会急剧减慢,这可能导致区间的一个端点停滞不前。
  • 该方法是一种强大的优化工具,因为它可以通过定位系统导函数的根来高效地找到其最大值或最小值。
  • 它在“打靶法”等高级数值技术中充当关键组成部分,用于求解流体动力学等领域的复杂边值微分方程。

引言

在广阔的科学与工程领域,最基本的挑战之一就是解方程。虽然有些方程可以通过简单的代数求解,但许多现实世界的问题——从计算卫星轨道到模拟经济均衡——都是由复杂的函数描述的,其解并非显而易见。找到一个函数等于零的位置,即 f(x)=0f(x) = 0f(x)=0,是一个普遍存在的问题,需要巧妙而高效的数值方法来解决。

本文探讨​​试位法​​(Method of False Position),也称为 Regula Falsi,这是一种为解决此类问题而设计的优雅且具有重要历史意义的算法。它填补了一个关键的知识空白:虽然像二分法这样更简单的方法可靠,但通常效率低下。试位法提供了一种“更智能”的途径,利用更多信息来更快地收敛到解。本文将引导您了解这项技术背后的巧思,以及它的实际局限性。

首先,我们将深入探讨其​​原理与机制​​,揭示该方法如何利用割线进行智能猜测。我们会将其与它的“近亲”——二分法和割线法——进行比较,并揭示其“阿喀琉斯之踵”——一个与函数曲率相关的惊人弱点。随后,我们将探索其多样化的​​应用与跨学科联系​​,揭示这个简单的求根工具如何成为解决优化、工程设计和计算科学领域复杂问题的万能钥匙。

原理与机制

假设你正走在浓雾中,知道前方某处有一条河。你有一个能告诉你海拔高度的特殊设备。此刻,你身处高地。你向前走一百步,现在你到了低地,低于河流水位。于是你确信,在这百步之内,你必定经过了与河流水位相当的海拔高度。这就是介值定理的精髓,一个简单但深刻的思想,是许多求根方法的基石。“根”就是我们的函数——我们的海拔剖面——穿过零线,即河流水位的那一点。

找到过河点的最简单策略是回到中点,检查你的海拔,然后重复这个过程,始终将河流“框定”在越来越小的迷雾区域中。这就是​​二分法​​。它可靠,保证能成功,但也有点……缺乏想象力。它完全忽略了你在端点处的海拔有多高或多低。无论你是在河上一英尺还是上千英尺,该方法的下一次猜测总是一样的:正中间。我们能做得更好吗?我们能做出更有根据的猜测吗?

更智能的猜测:割线的智慧

这时,​​试位法​​,以其优美的拉丁语名称 ​​Regula Falsi​​ 著称,登上了舞台。我们不再盲目地将区间减半,而是更智能地利用我们拥有的信息。假设我们当前的区间是从点 aaa 到点 bbb。我们知道一端的海拔 f(a)f(a)f(a) 和另一端的海拔 f(b)f(b)f(b),并且它们的符号相反。Regula Falsi 的核心思想是,暂时假设 aaa 和 bbb 之间的地面是一个完美的直线斜坡。

如果我们画一条直线——一条​​割线​​——连接我们的两个位置 (a,f(a))(a, f(a))(a,f(a)) 和 (b,f(b))(b, f(b))(b,f(b)),我们对过河点的最佳猜测就是这条假想线与零海拔水平线的交点。

经过两点 (x1,y1)(x_1, y_1)(x1​,y1​) 和 (x2,y2)(x_2, y_2)(x2​,y2​) 的直线方程是一个我们熟悉的概念。如果我们设两点为 (a,f(a))(a, f(a))(a,f(a)) 和 (b,f(b))(b, f(b))(b,f(b)),我们割线的斜率 mmm 是 m=f(b)−f(a)b−am = \frac{f(b) - f(a)}{b-a}m=b−af(b)−f(a)​。那么这条直线的方程是 y−f(a)=m(x−a)y - f(a) = m(x-a)y−f(a)=m(x−a)。为了找到它与 x 轴的交点,我们令 y=0y=0y=0 并求解 x 值,我们称之为 ccc,即我们对根的新近似值。经过一些代数整理,我们得到了著名的试位法公式:

c=af(b)−bf(a)f(b)−f(a)c = \frac{a f(b) - b f(a)}{f(b) - f(a)}c=f(b)−f(a)af(b)−bf(a)​

这个公式是该方法的核心。请注意它不仅使用了端点 aaa 和 bbb,还使用了函数值 f(a)f(a)f(a) 和 f(b)f(b)f(b)。这是 aaa 和 bbb 的一个加权平均值。如果 f(a)f(a)f(a) 的绝对值远小于 f(b)f(b)f(b),这意味着点 aaa 更接近“河流水位”。公式会自然地给予 aaa 更大的权重,新的猜测值 ccc 会比 bbb 更接近 aaa。这就是二分法所缺乏的“更智能”的猜测部分。

在最佳情况下,如果我们的函数确实是一条直线呢?例如,我们正在模拟金属棒的热膨胀,其电阻是温度的线性函数,f(T)=mT+kf(T) = mT + kf(T)=mT+k。在这种情况下,我们的割线根本不是近似;它就是函数本身。该方法的第一次猜测 ccc 将精确地落在真根上。一步到位!。这个小小的思想实验揭示了该方法的灵魂:它基于一个乐观的假设,即函数在我们的区间内近似线性。

谨慎与雄心的混合体

将试位法看作一个优美的混合体是很有帮助的,它借鉴了另外两种著名算法的最佳特质:二分法和割线法。

  • 它从​​二分法​​那里继承了​​谨慎​​感。在计算出我们的新猜测值 ccc 后,我们检查 f(c)f(c)f(c) 的符号。然后我们选择下一个区间——[a,c][a, c][a,c] 或 [c,b][c, b][c,b]——以确保根始终安全地被端点包围。这种保证根总是被​​框定​​的特性,确保了该方法不会偏离轨道,并最终找到根。

  • 它从​​割线法​​那里继承了其​​雄心​​。计算 ccc 的公式与割线法使用的公式完全相同。它利用割线向根的方向做出大胆、有根据的跳跃,以期获得更快的收敛速度。

所以,Regula Falsi 试图兼得一切:割线法的速度和二分法的安全。对于许多函数,这种组合效果非常好。让我们看一个实际例子。假设我们想在区间 [1,2][1, 2][1,2] 内找到 f(x)=x3+x−3f(x) = x^3 + x - 3f(x)=x3+x−3 的根。我们发现 f(1)=−1f(1) = -1f(1)=−1 且 f(2)=7f(2) = 7f(2)=7。二分法的第一次猜测会是 1.51.51.5。但试位法看到 f(1)f(1)f(1) 比 f(2)f(2)f(2) 更接近零,会做出一个更接近 111 的猜测。将这些值代入我们的公式,得到 x1=1.125x_1 = 1.125x1​=1.125。这确实比 1.51.51.5 是一个更好的猜测,因为真根约等于 1.21341.21341.2134。在下一步中,我们会发现 f(1.125)f(1.125)f(1.125) 是负数,所以我们新的、更紧凑的区间变成 [1.125,2][1.125, 2][1.125,2],然后重复这个过程。

阿喀琉斯之踵:曲率的诅咒

尽管 Regula Falsi 非常巧妙,但它有一个令人惊讶且有时令人沮丧的缺陷。它的性能在很大程度上取决于函数的形状。当函数在区间内具有强烈且一致的曲率时——即完全是​​凸​​的(向上弯曲,像一个碗)或完全是​​凹​​的(向下弯曲,像一把伞)——该方法就可能失效。

想象一个凸函数,如下图所示。我们从区间 [a0,b0][a_0, b_0][a0​,b0​] 开始。割线给了我们新的点 c0c_0c0​。因为函数是凸的,割线总是位于函数图形的上方。这意味着它的 x 轴截距 c0c_0c0​ 将总是落在真根 rrr 的左侧。因此,f(c0)f(c_0)f(c0​) 将总是负数。

根据规则,我们必须替换与 f(c0)f(c_0)f(c0​) 符号相同的端点。这意味着我们用 c0c_0c0​ 替换 a0a_0a0​。我们的新区间是 [a1,b1]=[c0,b0][a_1, b_1] = [c_0, b_0][a1​,b1​]=[c0​,b0​]。注意发生了什么:右端点 b0b_0b0​ 没有移动。现在,我们从 (a1,f(a1))(a_1, f(a_1))(a1​,f(a1​)) 到 (b1,f(b1))(b_1, f(b_1))(b1​,f(b1​)) 画一条新的割线。同样,由于凸性,新的点 c1c_1c1​ 将有 f(c1)0f(c_1) 0f(c1​)0。所以我们将用 c1c_1c1​ 替换 a1a_1a1​,而右端点 b1b_1b1​ 仍然不会移动。

这就是标准 Regula Falsi 方法的阿喀琉斯之踵:其中一个端点可能会变得​​停滞不前​​,或者说“卡住”了,。虽然包含根的区间确实在缩小,但只是从一侧缩小。当移动的端点越来越接近根时,固定的端点却阻止了割线变得足够陡峭,从而极大地减慢了收敛速度。我们所期望的快速、超线性收敛退化为缓慢、可预测的​​线性收敛​​。

这有一个非常实际的后果。对于二分法,我们可以预先精确计算需要多少次迭代才能将区间缩小到期望的容差,比如 0.00010.00010.0001。这是因为它在每一步都可靠地将区间宽度减半。而对于 Regula Falsi,我们失去了这种可预测性。收缩率取决于函数的曲率,我们无法预知它会比二分法更快还是(在端点卡住的情况下)可能慢得多。这种在潜在速度和保证进度之间的权衡是数值分析中的一个核心主题。为了解决这个问题,已经发展出了各种改进方法,如“伊利诺伊算法”,专门用于“推动”那个卡住的端点,打破这种停滞模式。

一个基本边界:你无法找到无法框定的东西

最后,有一个非常根本的局限性,它不仅适用于 Regula Falsi,也适用于所有区间法。第一步,即初始条件,是我们必须找到两个点 aaa 和 bbb,使得函数在这两点的符号相反。这是我们保证它们之间存在根的依据。

但是,如果函数实际上并不穿过 x 轴呢?考虑像 f(x)=(x−2)2f(x) = (x-2)^2f(x)=(x−2)2 这样的函数。它在 x=2x=2x=2 处有一个根,但图形只是在那里接触 x 轴然后向上反弹。函数值在其他任何地方都是正的。我们不可能找到一个区间 [a,b][a,b][a,b] 使得 f(a)f(a)f(a) 为正而 f(b)f(b)f(b) 为负。该方法甚至无法开始。对于​​偶数重数​​的根,即图形与坐标轴相切但不穿过的情况,这个基本前提条件永远无法满足。对于这些问题,我们必须转向其他不依赖于区间的方​​法,比如牛顿法。

试位法的故事是数值问题解决艺术的一个完美寓言。它始于一个绝妙而直观的想法——一个“更智能”的猜测。它在理想化的直线世界中完美运作,在现实世界中也常常表现出色。然而,它却隐藏着一个微妙的弱点,在某些常见条件下会削弱其性能,这告诉我们,在方法与问题的共舞中,舞蹈的具体舞步与最初想法的天才同样重要。

应用与跨学科联系

现在我们已经熟悉了试位法的机制,我们可能会认为它只是一个精巧但或许小众的数学技巧。事实远非如此。这种方法真正的魔力,就像科学中许多基本思想一样,不在于其自身的复杂性,而在于其应用的惊人广度和力量。它是一把万能钥匙,可以打开工程、物理和计算科学等不同领域的门。让我们踏上旅程,看看这把钥匙能用在何处。

世界如方程:发现事件发生之时

在最基本的层面上,世界是事件上演的舞台。在一条长路上行驶的两辆汽车可能会相撞。一艘宇宙飞船可能到达其最接近行星的位置。一个化学反应可能达到平衡。所有这些情景都有一个共同点:它们发生在特定的时间点或特定的状态,此时两个量变得相等。

假设我们正在追踪两颗轨道复杂、非线性的卫星。它们在任何时间 ttt 的位置由函数 x1(t)x_1(t)x1​(t) 和 x2(t)x_2(t)x2​(t) 给出。如果我们想知道它们是否以及何时可能近距离接触(或发生灾难性碰撞!),我们实际上是在寻找一个时间 ttt,使得它们的位置相同:x1(t)=x2(t)x_1(t) = x_2(t)x1​(t)=x2​(t)。一个简单的变换就得到了我们需要解的方程:f(t)=x1(t)−x2(t)=0f(t) = x_1(t) - x_2(t) = 0f(t)=x1​(t)−x2​(t)=0。找到这个差函数的根,正是寻找碰撞时间的问题。试位法为我们提供了一种智能的方式来寻找这个时刻。通过框定一个时间区间,我们知道在这个区间的开始,一颗卫星在另一颗前面,而在区间的结束时则在后面,我们可以利用它们在区间端点处的距离值来进行越来越智能的猜测,从而快速收敛到它们交汇的精确瞬间。

追求最佳:求根即优化

找到函数为零的点固然强大,但通常更有用的是找到函数达到其峰值或谷底——即最大值或最小值的地方。我们如何用最少的材料设计出具有给定强度的桥梁?太阳能电池板的最佳角度是多少,才能从太阳捕获最大能量?这些都是优化问题。

这里,微积分的美妙联系就显现出来了。我们知道,在平滑山丘的顶峰或山谷的底部,地面是暂时平坦的。斜率,或者说导数,为零。因此,找到太阳能电池板的输出功率 PPP 作为其倾斜角 θ\thetaθ 的函数最大值的问题,就转化为一个新问题:找到使功率变化率为零的角度 θ⋆\theta^{\star}θ⋆。也就是说,我们必须找到导函数的根,P′(θ)=0P'(\theta) = 0P′(θ)=0。

突然之间,我们的求根工具变成了优化工具。我们可以框定一个角度区间,并使用试位法来寻找导数为零的角度,从而定位产生最大功率的最佳倾斜角。这一原理是工程设计、经济学和科学建模的基石,使我们能够通过寻找系统导数的根来找到其“最佳”配置。

处理不完美与不可知

现实世界很少像教科书中的函数那样干净利落。如果我们的函数是一个“黑箱”呢?想象一个庞大、复杂的地球气候计算机模拟。我们可以输入一个参数,比如说某种温室气体的浓度,经过数小时的计算,模拟会输出一个代表全球温度异常的单一数字。我们想找到导致特定目标异常的精确浓度,这意味着我们想找到一个“残差”函数的根。我们没有这个函数的数学公式,当然也无法计算它的导数。我们唯一能做的就是针对不同的输入运行模拟。试位法非常适合这种情况。它只需要函数求值,而不需要导数,这使其成为引导复杂模拟和模型达到期望结果的不可或缺的工具。

此外,自然界有时会有“扭结”。考虑一种在特定应力下会发生相变的材料,比如水变成冰。其性质可能会突然改变。描述这种材料内部作用力的函数可能是连续的,但其导数可能会有突变。依赖于平滑导数的方法,如著名的牛顿法,在这样的点上会遇到困难甚至失效。然而,试位法只需要连续性就能发挥其魔力。它可以毫无困难地跨过这些扭结,稳健地找到具有复杂、非理想行为的系统中的平衡点。

伟大的链条:解决更难的问题

一个简单工具最深远的应用,莫过于当它成为解决一个更难问题的关键组成部分时。这正是试位法在“打靶法”中扮演的角色,这是一种用于求解微分方程的巧妙技术。

让我们考虑一个流体动力学中的经典问题:描述空气流过平板的情形,该过程由 Blasius 方程控制。这是一个三阶微分方程,带有边界条件——我们知道紧贴板表面的流体状态,也知道我们希望在远离板的地方达到的状态。这是一个边值问题,众所周知很难直接求解。

打靶法将其转化为一个打靶游戏。我们将其视为一个*初值问题*。我们知道表面的一些初始条件,但缺少一个——初始切应力,我们称之为 sss。于是我们猜测一个 sss 的值。有了这个猜测,我们就可以使用像龙格-库塔法这样的标准积分器,一步步地求解远离板的微分方程。当我们到达一个“足够远”的点时,我们检查我们的解是否与要求的边界条件匹配。当然,我们对 sss 的第一次猜测几乎肯定是错的,我们会“脱靶”。我们脱靶的程度是我们初始猜测的函数,即 R(s)R(s)R(s)。

我们想要什么呢?我们想找到那个特殊的 sss 值,使得误差等于零。我们想找到函数 R(s)=0R(s) = 0R(s)=0 的根。我们该怎么做呢?用一个求根器!我们可以对切应力做出两个初始猜测,sas_asa​ 和 sbs_bsb​,使它们将正确的值框在中间(一个射低了,一个射高了)。然后,我们可以使用试位法来智能地调整我们的瞄准,一次次迭代,直到命中靶心。在这个宏伟的构造中,我们这个不起眼的求根算法已经成为求解描述物理世界的复杂微分方程的制导系统。

从预测碰撞到优化设计,从探究黑箱模拟到求解流体流动方程,试位法展示了一个简单而智能的想法所具有的非凡力量,它连接了不同的领域,并为理解和发现提供了道路。