原文出处——小学二年级联合会
我们从小学起,应该就陆续做过一些找规律题。在大多数学生眼中,这或许是最简单又最烧脑的题目了吧——没有任何技巧,凭的是尖锐的洞察力与逻辑分析能力。
但,事实果真如此吗?
> 题目导入:1, 2, 3, 4, 5, 7, ___1,\,2,\,3,\,4,\,5,\,7,\,\_\_\_1,2,3,4,5,7,___
这是一道本人原创的找规律题。看到这串数时,我相信你们都会产生一个问题——“5”和“7”的中间是不是少了一个“6”?事实上,题目是没有问题的,本题的答案是 13,规律为:
满足第x项为P(x)=1120x5−18x4+1724x3−158x2+19760x−1满足第x项为P(x)=\frac{1}{120}x^5-\frac{1}{8}x^4+\frac{17}{24}x^3-\frac{15}{8}x^2+\frac{197}{60}x-1 满足第x项为P(x)=1201 x5−81 x4+2417 x3−815 x2+60197 x−1
一、找规律被破解了?
公布答案与解析后,有人骂我出无聊的题,也有人惊叹数字是怎么凑出来的……不过,这其实并非无聊之举,因为这能直接引入今天的正题。
没错,这就是我们小学二年级就学过的拉格朗日插值法,即拉格朗日插值函数(Lagrange interpolation function)。其标准形式是一个次数不超过 nnn 的多项式,通过给定的 n+1n+1n+1 个数据点 (xi,yi)(x_i,y_i)(xi ,yi )(nnn 为自然数)。核心思想为构造一组插值基函数 li(x)l_i(x)li (x),然后将它们与对应的函数值 yiy_iyi 进行线性组合。
对于 n+1n+1n+1 个互异节点 x0,x1,…,xnx_0,x_1,\dots,x_nx0 ,x1 ,…,xn 及其函数值 y0,y1,…,yny_0,y_1,\dots,y_ny0 ,y1 ,…,yn ,拉格朗日插值多项式为:
Pn(x)=∑i=0nyi⋅li(x)P_n(x) = \sum_{i=0}^{n} y_i \cdot l_i(x) Pn (x)=i=0∑n yi ⋅li (x)
其中,插值基函数 li(x)l_i(x)li (x) 定义为:
li(x)=∏j=0j≠inx−xjxi−xjl_i(x) = \prod_{\substack{j=0 \\ j \neq i}}^{n} \frac{x-x_j}{x_i-x_j} li (x)=j=0j=i ∏n xi −xj x−xj
这个基函数 li(x)l_i(x)li (x) 有一个关键特性:在节点 xix_ixi 上值为 1,在其他所有节点 xj (j≠i)x_j\ (j\neq i)xj (j=i) 上值为 0。即 li(xj)=δijl_i(x_j)=\delta_{ij}li (xj )=δij 。
基函数构造好后,最终插值多项式 Pn(x)P_n(x)Pn (x) 就是它们的线性组合:
Pn(x)=∑i=0nyi⋅li(x)=y0l0(x)+y1l1(x)+⋯+ynln(x)P_n(x) = \sum_{i=0}^{n} y_i \cdot l_i(x) = y_0 l_0(x) + y_1 l_1(x) + \dots + y_n l_n(x) Pn (x)=i=0∑n yi ⋅li (x)=y0 l0 (x)+y1 l1 (x)+⋯+yn ln (x)
所以,我们不难发现,给出了 n+1n+1n+1(自然数)个横坐标不同的点在平面直角坐标系上的坐标后,就必然能用此方法求出一个完美经过这些点的函数。由于函数次数不超过 nnn,满足条件的插值多项式是唯一的,而拉格朗日插值法只是其中的一种方法。
其实很好理解,若已知 (x0,y0),(x1,y1)(x_0,y_0),(x_1,y_1)(x0 ,y0 ),(x1 ,y1 ) 这两个点(其中 x0≠x1x_0\neq x_1x0 =x1 ),则:
P1(x)=y0x−x1x0−x1+y1x−x0x1−x0P_1(x)= y_0\frac{x-x_1}{x_0-x_1}+y_1\frac{x-x_0}{x_1-x_0} P1 (x)=y0 x0 −x1 x−x1 +y1 x1 −x0 x−x0
本质上看,找规律不就是已知点的坐标求出一个函数吗?如此看来,世界上的找规律题似乎都被破解了呢!
二、拉格朗日插值法的缺陷
从定义中我们不难发现,拉格朗日插值函数求得的是次数不超过 nnn 的多项式,所以一些公认的规律找不出来,比如:
> 1, 2, 4, 8, 16, 32, 64, ___1,\,2,\,4,\,8,\,16,\,32,\,64,\,\_\_\_1,2,4,8,16,32,64,___
很显然这道题目的公认规律为第 xxx 项满足 f(x)=2x−1f(x)=2^{x-1}f(x)=2x−1,下一项就应该是 128。而拉格朗日插值函数求出了一个六次函数,以这个规律下一位应该为 127,很显然与公认答案不符。
这个误差或许不大,于是你可能会问——如此一个几乎完美的方法,能用于数据预测吗?一开始我也天真地认为给出的数据越多,预测就越准,可事实正好相反!
正如其名,使用有着极其严格的前提:这种方法主要适用于插值而非外推。在已知数据点之间估算未知值,如果数据点精准、无噪声且数量少,这种方法是有效的。例如其优化模型就比常规方法效果更好。
那为什么说“外推”——或者说预测——是非常危险的呢?这主要是因为它的一个核心问题——过拟合。过拟合指模型过度学习训练数据(包括噪声),导致在新数据上表现极差,而拉格朗日插值正是过拟合的“重灾区”。这主要表现在以下两点:一是追求“完美”的代价,二是模型过于复杂。拉格朗日插值法的目标是构造一个精确穿过所有已知点的多项式,数据的噪声会使曲线为迎合误差而剧烈扭曲,严重偏离真实趋势;且随着数据点增多,多项式次数会变得极高,高次多项式的大量极值点使其波动能力极强。所以,过拟合的典型表现就是产生龙格现象。
为了进行改进,我们也提出了一种可行方案——最小二乘拟合。即不要求曲线穿过所有点,而是找到一条“最佳”曲线,允许一定误差,但是这能有效抵抗噪声。
三、找规律的意义
> 找规律,是人类在混沌世界中锚定自身存在的方式,是理性赋予生活以秩序的自觉。
> ——我与尼采、卡尔·波普尔的共鸣
理论上讲,在没有限定的条件下,对于一串数列有着无穷多个规律。但由于拉格朗日插值函数的次数限定与唯一性,我也曾认为拉格朗日插值法才是数列找规律的最严谨的唯一解。我认为这没错,但不妨去思考找规律的真正意义。
哲学家卡尔·波普尔指出,我们并非被动地等待规律印在头脑里,而是主动企图把规律性强加给世界,用我们发明的规律来解释世界。人类天生就有寻找规律的倾向,祖先们通过观察生物规律与自然现象来保护自己,维系生存——月亮的盈亏、四季的轮转,这些看似不起眼的规律,也正是它推动了人类社会的进步,是它提供了生存的依据!没有对规律的信任,人类文明的智慧又从何谈起?
同时,找规律绝非抽象的理论空谈,那是实实在在的生活智慧。掌握事物的规律,能够加速奋斗的进程、提高成功的几率。开普勒在杂乱数据中发现行星运动三大定律,门捷列夫从一张表格中预见未知元素,芒德布罗借统计规律来创立分形几何……这一件件成功之事的背后,都言说着共同的铁律:找规律的本质,是在看似无序的世界中,捕捉到那个起作用的深层的秩序。
有人可能认为,世界充满偶然,找规律不过是徒劳。但这种观点在逻辑上犯了一个致命的错误:“规律不完美”不代表“规律无意义”。事实上,找规律的过程本身就是一个不断逼近真理的阶梯,即便最初的规律不完美,也真正为后续的修正和深化提供了起点。同样的,规律也并非枷锁,而是可以被认识和运用的客观法则;它不是命运的判决书,而是自由的通行证——认识规律,恰恰让人获得了改变处境的能力。
拉格朗日插值法是为找规律而生,但同时也是在找规律中被创造出来。更深一层看,找规律的意义不止于“发现”,更在于“创造”。马克思说“人也按照美的规律来构造”——人类不只是被动地遵循规律,还在认识规律的基础上创造新的可能性。
回到问题本身,找规律从来没有失去它的意义,也并非模仿与依赖。恰恰是它的存在,铸就了我们每个人的生活。
所以,别再反感和指责找规律了。是这种找规律的能力,造就了爱探索的我们!